summaryrefslogtreecommitdiff
path: root/tests/examplefiles/hexdump_hexcat
blob: 522074cff3b28abbca6cadeb781846d4d2d828f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
00000000  2F 2F 20 43 72  65 61 74 65 64  20 62 79 20 4C  69 6F 6E 65 6C  //.Created.by.Lionel
00000014  6C 6F 20 4C 75  6E 65 73 75 20  61 6E 64 20 70  6C 61 63 65 64  lo.Lunesu.and.placed
00000028  20 69 6E 20 74  68 65 20 70 75  62 6C 69 63 20  64 6F 6D 61 69  .in.the.public.domai
0000003C  6E 2E 0A 2F 2F  20 54 68 69 73  20 66 69 6C 65  20 68 61 73 20  n..//.This.file.has.
00000050  62 65 65 6E 20  6D 6F 64 69 66  69 65 64 20 66  72 6F 6D 20 69  been.modified.from.i
00000064  74 73 20 6F 72  69 67 69 6E 61  6C 20 76 65 72  73 69 6F 6E 2E  ts.original.version.
00000078  0A 2F 2F 20 49  74 20 68 61 73  20 62 65 65 6E  20 66 6F 72 6D  .//.It.has.been.form
0000008C  61 74 74 65 64  20 74 6F 20 66  69 74 20 79 6F  75 72 20 73 63  atted.to.fit.your.sc
000000A0  72 65 65 6E 2E  0A 6D 6F 64 75  6C 65 20 70 68  6F 6E 65 6E 6F  reen..module.phoneno
000000B4  3B 20 20 20 20  20 2F 2F 20 6F  70 74 69 6F 6E  61 6C 0A 69 6D  ;.....//.optional.im
000000C8  70 6F 72 74 20  73 74 64 2E 73  74 64 69 6F 3B  20 20 20 2F 2F  port.std.stdio;...//
000000DC  20 77 72 69 74  65 66 6C 6E 20  20 20 20 20 0A  69 6D 70 6F 72  .writefln......impor
000000F0  74 20 73 74 64  2E 63 74 79 70  65 3B 20 20 20  2F 2F 20 69 73  t.std.ctype;...//.is
00000104  64 69 67 69 74  20 20 20 20 20  0A 69 6D 70 6F  72 74 20 73 74  digit......import.st
00000118  64 2E 73 74 72  65 61 6D 3B 20  20 2F 2F 20 42  75 66 66 65 72  d.stream;..//.Buffer
0000012C  65 64 46 69 6C  65 0A 0A 2F 2F  20 4A 75 73 74  20 66 6F 72 20  edFile..//.Just.for.
00000140  72 65 61 64 61  62 69 6C 69 74  79 20 28 69 6D  61 67 69 6E 65  readability.(imagine
00000154  20 63 68 61 72  5B 5D 5B 5D 5B  63 68 61 72 5B  5D 5D 29 20 20  .char[][][char[]])..
00000168  20 20 0A 61 6C  69 61 73 20 63  68 61 72 5B 5D  20 73 74 72 69  ...alias.char[].stri
0000017C  6E 67 3B 0A 61  6C 69 61 73 20  73 74 72 69 6E  67 5B 5D 20 73  ng;.alias.string[].s
00000190  74 72 69 6E 67  61 72 72 61 79  3B 0A 0A 2F 2F  2F 20 53 74 72  tringarray;..///.Str
000001A4  69 70 73 20 6E  6F 6E 2D 64 69  67 69 74 20 63  68 61 72 61 63  ips.non-digit.charac
000001B8  74 65 72 73 20  66 72 6F 6D 20  74 68 65 20 73  74 72 69 6E 67  ters.from.the.string
000001CC  20 28 43 4F 57  29 0A 73 74 72  69 6E 67 20 73  74 72 69 70 4E  .(COW).string.stripN
000001E0  6F 6E 44 69 67  69 74 28 20 69  6E 20 73 74 72  69 6E 67 20 6C  onDigit(.in.string.l
000001F4  69 6E 65 20 29  20 0A 7B 0A 20  20 20 20 73 74  72 69 6E 67 20  ine.)..{.....string.
00000208  72 65 74 3B 0A  20 20 20 20 66  6F 72 65 61 63  68 28 75 69 6E  ret;.....foreach(uin
0000021C  74 20 69 2C 20  63 3B 20 6C 69  6E 65 29 20 7B  0A 20 20 20 20  t.i,.c;.line).{.....
00000230  20 20 20 20 2F  2F 20 45 72 72  6F 72 3A 20 73  74 64 2E 63 74  ....//.Error:.std.ct
00000244  79 70 65 2E 69  73 64 69 67 69  74 20 61 74 20  43 3A 5C 64 6D  ype.isdigit.at.C:\dm
00000258  64 5C 73 72 63  5C 70 68 6F 62  6F 73 5C 73 74  64 5C 63 74 79  d\src\phobos\std\cty
0000026C  70 65 2E 64 28  33 37 29 20 0A  20 20 20 20 20  20 20 20 2F 2F  pe.d(37)..........//
00000280  20 63 6F 6E 66  6C 69 63 74 73  20 77 69 74 68  20 73 74 64 2E  .conflicts.with.std.
00000294  73 74 72 65 61  6D 2E 69 73 64  69 67 69 74 20  61 74 20 43 3A  stream.isdigit.at.C:
000002A8  5C 64 6D 64 5C  73 72 63 5C 70  68 6F 62 6F 73  5C 73 74 64 5C  \dmd\src\phobos\std\
000002BC  73 74 72 65 61  6D 2E 64 28 32  39 32 34 29 0A  20 20 20 20 20  stream.d(2924)......
000002D0  20 20 20 69 66  20 28 21 73 74  64 2E 63 74 79  70 65 2E 69 73  ...if.(!std.ctype.is
000002E4  64 69 67 69 74  28 63 29 29 20  7B 0A 20 20 20  20 20 20 20 20  digit(c)).{.........
000002F8  20 20 20 20 69  66 20 28 21 72  65 74 29 0A 20  20 20 20 20 20  ....if.(!ret).......
0000030C  20 20 20 20 20  20 20 20 20 20  72 65 74 20 3D  20 6C 69 6E 65  ..........ret.=.line
00000320  5B 30 2E 2E 69  5D 3B 20 20 20  20 0A 20 20 20  20 20 20 20 20  [0..i];.............
00000334  7D 20 20 20 20  0A 20 20 20 20  20 20 20 20 65  6C 73 65 20 69  }.............else.i
00000348  66 20 28 72 65  74 29 0A 20 20  20 20 20 20 20  20 20 20 20 20  f.(ret).............
0000035C  72 65 74 20 7E  3D 20 63 3B 20  20 20 20 0A 20  20 20 20 7D 20  ret.~=.c;.........}.
00000370  20 20 20 0A 20  20 20 20 72 65  74 75 72 6E 20  72 65 74 3F 72  ........return.ret?r
00000384  65 74 3A 6C 69  6E 65 3B 0A 7D  0A 0A 75 6E 69  74 74 65 73 74  et:line;.}..unittest
00000398  20 7B 0A 20 20  20 20 61 73 73  65 72 74 28 20  73 74 72 69 70  .{.....assert(.strip
000003AC  4E 6F 6E 44 69  67 69 74 28 22  61 73 64 66 22  29 20 3D 3D 20  NonDigit("asdf").==.
000003C0  22 22 20 20 29  3B 0A 20 20 20  20 61 73 73 65  72 74 28 20 73  ""..);.....assert(.s
000003D4  74 72 69 70 4E  6F 6E 44 69 67  69 74 28 22 5C  27 31 33 2D 3D  tripNonDigit("\'13-=
000003E8  32 20 34 6B 6F  70 22 29 20 3D  3D 20 20 22 31  33 32 34 22 20  2.4kop").==.."1324".
000003FC  20 29 3B 0A 7D  0A 0A 2F 2F 2F  20 43 6F 6E 76  65 72 74 73 20  .);.}..///.Converts.
00000410  61 20 77 6F 72  64 20 69 6E 74  6F 20 61 20 6E  75 6D 62 65 72  a.word.into.a.number
00000424  2C 20 69 67 6E  6F 72 69 6E 67  20 61 6C 6C 20  6E 6F 6E 20 61  ,.ignoring.all.non.a
00000438  6C 70 68 61 20  63 68 61 72 61  63 74 65 72 73  20 20 0A 73 74  lpha.characters...st
0000044C  72 69 6E 67 20  77 6F 72 64 54  6F 4E 75 6D 28  20 69 6E 20 73  ring.wordToNum(.in.s
00000460  74 72 69 6E 67  20 77 6F 72 64  20 29 0A 7B 0A  2F 2F 20 74 72  tring.word.).{.//.tr
00000474  61 6E 73 6C 61  74 69 6F 6E 20  74 61 62 6C 65  20 66 6F 72 20  anslation.table.for.
00000488  74 68 65 20 74  61 73 6B 20 61  74 20 68 61 6E  64 0A 63 6F 6E  the.task.at.hand.con
0000049C  73 74 20 63 68  61 72 5B 32 35  36 5D 20 54 52  41 4E 53 4C 41  st.char[256].TRANSLA
000004B0  54 45 20 3D 20  20 20 20 0A 20  20 20 20 22 20  20 20 20 20 20  TE.=........."......
000004C4  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  ....................
000004D8  20 20 20 20 20  20 22 20 20 2F  2F 20 30 20 20  20 0A 20 20 20  ......"..//.0.......
000004EC  20 22 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 30 31  ."................01
00000500  32 33 34 35 36  37 38 39 20 20  20 20 20 20 22  20 20 2F 2F 20  23456789......"..//.
00000514  33 32 20 20 20  20 20 0A 20 20  20 20 22 20 35  37 36 33 30 34  32..........".576304
00000528  39 39 36 31 37  38 35 31 38 38  31 32 33 34 37  36 32 32 33 39  99617851881234762239
0000053C  20 20 20 20 20  22 20 20 2F 2F  20 36 34 20 20  20 0A 20 20 20  ....."..//.64.......
00000550  20 22 20 35 37  36 33 30 34 39  39 36 31 37 38  35 31 38 38 31  .".57630499617851881
00000564  32 33 34 37 36  32 32 33 39 20  20 20 20 20 22  0A 20 20 20 20  234762239.....".....
00000578  22 20 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  "...................
0000058C  20 20 20 20 20  20 20 20 20 20  20 20 20 22 0A  20 20 20 20 22  ............."....."
000005A0  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  ....................
000005B4  20 20 20 20 20  20 20 20 20 20  20 20 22 0A 20  20 20 20 22 20  ............".....".
000005C8  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  ....................
000005DC  20 20 20 20 20  20 20 20 20 20  20 22 20 20 20  20 0A 20 20 20  ..........."........
000005F0  20 22 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  ."..................
00000604  20 20 20 20 20  20 20 20 20 20  20 20 20 20 22  3B 0A 20 20 20  ..............";....
00000618  20 73 74 72 69  6E 67 20 72 65  74 3B 0A 20 20  20 20 66 6F 72  .string.ret;.....for
0000062C  65 61 63 68 28  63 3B 20 63 61  73 74 28 75 62  79 74 65 5B 5D  each(c;.cast(ubyte[]
00000640  29 77 6F 72 64  29 0A 20 20 20  20 20 20 20 20  69 66 20 28 54  )word).........if.(T
00000654  52 41 4E 53 4C  41 54 45 5B 63  5D 20 21 3D 20  27 20 27 29 0A  RANSLATE[c].!=.'.').
00000668  20 20 20 20 20  20 20 20 20 20  20 20 72 65 74  20 7E 3D 20 54  ............ret.~=.T
0000067C  52 41 4E 53 4C  41 54 45 5B 63  5D 3B 0A 20 20  20 20 72 65 74  RANSLATE[c];.....ret
00000690  75 72 6E 20 72  65 74 3B 0A 7D  0A 0A 75 6E 69  74 74 65 73 74  urn.ret;.}..unittest
000006A4  20 7B 0A 20 2F  2F 20 54 65 73  74 20 77 6F 72  64 54 6F 4E 75  .{..//.Test.wordToNu
000006B8  6D 20 75 73 69  6E 67 20 74 68  65 20 74 61 62  6C 65 20 66 72  m.using.the.table.fr
000006CC  6F 6D 20 74 68  65 20 74 61 73  6B 20 64 65 73  63 72 69 70 74  om.the.task.descript
000006E0  69 6F 6E 2E 0A  20 61 73 73 65  72 74 28 20 22  30 31 31 31 32  ion...assert(."01112
000006F4  32 32 33 33 33  34 34 35 35 36  36 36 37 37 37  38 38 38 39 39  22333445566677788899
00000708  39 22 20 3D 3D  0A 20 20 20 77  6F 72 64 54 6F  4E 75 6D 28 22  9".==....wordToNum("
0000071C  45 20 7C 20 4A  20 4E 20 51 20  7C 20 52 20 57  20 58 20 7C 20  E.|.J.N.Q.|.R.W.X.|.
00000730  44 20 53 20 59  20 7C 20 46 20  54 20 7C 20 41  20 4D 20 7C 20  D.S.Y.|.F.T.|.A.M.|.
00000744  43 20 49 20 56  20 7C 20 42 20  4B 20 55 20 7C  20 4C 20 4F 20  C.I.V.|.B.K.U.|.L.O.
00000758  50 20 7C 20 47  20 48 20 5A 22  29 29 3B 0A 20  61 73 73 65 72  P.|.G.H.Z"));..asser
0000076C  74 28 20 22 30  31 31 31 32 32  32 33 33 33 34  34 35 35 36 36  t(."0111222333445566
00000780  36 37 37 37 38  38 38 39 39 39  22 20 3D 3D 20  0A 20 20 20 77  6777888999".==.....w
00000794  6F 72 64 54 6F  4E 75 6D 28 22  65 20 7C 20 6A  20 6E 20 71 20  ordToNum("e.|.j.n.q.
000007A8  7C 20 72 20 77  20 78 20 7C 20  64 20 73 20 79  20 7C 20 66 20  |.r.w.x.|.d.s.y.|.f.
000007BC  74 20 7C 20 61  20 6D 20 7C 20  63 20 69 20 76  20 7C 20 62 20  t.|.a.m.|.c.i.v.|.b.
000007D0  6B 20 75 20 7C  20 6C 20 6F 20  70 20 7C 20 67  20 68 20 7A 22  k.u.|.l.o.p.|.g.h.z"
000007E4  29 29 3B 0A 20  61 73 73 65 72  74 28 20 22 30  31 32 33 34 35  ));..assert(."012345
000007F8  36 37 38 39 22  20 3D 3D 20 0A  20 20 20 77 6F  72 64 54 6F 4E  6789".==.....wordToN
0000080C  75 6D 28 22 30  20 7C 20 20 20  31 20 20 20 7C  20 20 20 32 20  um("0.|...1...|...2.
00000820  20 20 7C 20 20  20 33 20 20 20  7C 20 20 34 20  20 7C 20 20 35  ..|...3...|..4..|..5
00000834  20 20 7C 20 20  20 36 20 20 20  7C 20 20 20 37  20 20 20 7C 20  ..|...6...|...7...|.
00000848  20 20 38 20 20  20 7C 20 20 20  39 22 29 29 3B  0A 7D 0A 0A 76  ..8...|...9"));.}..v
0000085C  6F 69 64 20 6D  61 69 6E 28 20  73 74 72 69 6E  67 5B 5D 20 61  oid.main(.string[].a
00000870  72 67 73 20 29  0A 7B 0A 20 20  20 20 2F 2F 20  54 68 69 73 20  rgs.).{.....//.This.
00000884  61 73 73 6F 63  69 61 74 69 76  65 20 61 72 72  61 79 20 6D 61  associative.array.ma
00000898  70 73 20 61 20  6E 75 6D 62 65  72 20 74 6F 20  61 6E 20 61 72  ps.a.number.to.an.ar
000008AC  72 61 79 20 6F  66 20 77 6F 72  64 73 2E 20 20  20 20 0A 20 20  ray.of.words........
000008C0  20 20 73 74 72  69 6E 67 61 72  72 61 79 5B 73  74 72 69 6E 67  ..stringarray[string
000008D4  5D 20 20 20 20  6E 75 6D 32 77  6F 72 64 73 3B  0A 0A 20 20 20  ]....num2words;.....
000008E8  20 66 6F 72 65  61 63 68 28 73  74 72 69 6E 67  20 77 6F 72 64  .foreach(string.word
000008FC  3B 20 6E 65 77  20 42 75 66 66  65 72 65 64 46  69 6C 65 28 22  ;.new.BufferedFile("
00000910  64 69 63 74 69  6F 6E 61 72 79  2E 74 78 74 22  20 29 20 29 0A  dictionary.txt".).).
00000924  20 20 20 20 20  20 20 20 6E 75  6D 32 77 6F 72  64 73 5B 20 77  ........num2words[.w
00000938  6F 72 64 54 6F  4E 75 6D 28 77  6F 72 64 29 20  5D 20 7E 3D 20  ordToNum(word).].~=.
0000094C  77 6F 72 64 2E  64 75 70 3B 20  20 20 20 20 20  20 20 2F 2F 20  word.dup;........//.
00000960  6D 75 73 74 20  64 75 70 0A 0A  20 20 20 20 2F  2F 2F 20 46 69  must.dup......///.Fi
00000974  6E 64 73 20 61  6C 6C 20 61 6C  74 65 72 6E 61  74 69 76 65 73  nds.all.alternatives
00000988  20 66 6F 72 20  74 68 65 20 67  69 76 65 6E 20  6E 75 6D 62 65  .for.the.given.numbe
0000099C  72 0A 20 20 20  20 2F 2F 2F 20  28 73 68 6F 75  6C 64 20 68 61  r.....///.(should.ha
000009B0  76 65 20 62 65  65 6E 20 73 74  72 69 70 70 65  64 20 66 72 6F  ve.been.stripped.fro
000009C4  6D 20 6E 6F 6E  2D 64 69 67 69  74 20 63 68 61  72 61 63 74 65  m.non-digit.characte
000009D8  72 73 29 0A 20  20 20 20 73 74  72 69 6E 67 61  72 72 61 79 20  rs).....stringarray.
000009EC  5F 46 69 6E 64  57 6F 72 64 73  28 20 73 74 72  69 6E 67 20 6E  _FindWords(.string.n
00000A00  75 6D 62 65 72  73 2C 20 62 6F  6F 6C 20 64 69  67 69 74 6F 6B  umbers,.bool.digitok
00000A14  20 29 0A 20 20  20 20 69 6E 20  7B 0A 20 20 20  20 20 20 20 20  .).....in.{.........
00000A28  61 73 73 65 72  74 28 6E 75 6D  62 65 72 73 2E  6C 65 6E 67 74  assert(numbers.lengt
00000A3C  68 20 3E 20 20  30 29 3B 20 20  20 20 0A 20 20  20 20 7D 20 20  h.>..0);.........}..
00000A50  20 20 0A 20 20  20 20 6F 75 74  28 72 65 73 75  6C 74 29 20 7B  .......out(result).{
00000A64  0A 20 20 20 20  20 20 20 20 66  6F 72 65 61 63  68 20 28 61 3B  .........foreach.(a;
00000A78  20 72 65 73 75  6C 74 29 0A 20  20 20 20 20 20  20 20 20 20 20  .result)............
00000A8C  20 61 73 73 65  72 74 28 20 77  6F 72 64 54 6F  4E 75 6D 28 61  .assert(.wordToNum(a
00000AA0  29 20 3D 3D 20  6E 75 6D 62 65  72 73 20 29 3B  0A 20 20 20 20  ).==.numbers.);.....
00000AB4  7D 20 20 20 20  0A 20 20 20 20  62 6F 64 79 20  7B 0A 20 20 20  }.........body.{....
00000AC8  20 20 20 20 20  73 74 72 69 6E  67 61 72 72 61  79 20 72 65 74  .....stringarray.ret
00000ADC  3B 0A 20 20 20  20 20 20 20 20  62 6F 6F 6C 20  66 6F 75 6E 64  ;.........bool.found
00000AF0  77 6F 72 64 20  3D 20 66 61 6C  73 65 3B 0A 20  20 20 20 20 20  word.=.false;.......
00000B04  20 20 66 6F 72  20 28 75 69 6E  74 20 74 3D 31  3B 20 74 3C 3D  ..for.(uint.t=1;.t<=
00000B18  6E 75 6D 62 65  72 73 2E 6C 65  6E 67 74 68 3B  20 2B 2B 74 29  numbers.length;.++t)
00000B2C  20 7B 0A 20 20  20 20 20 20 20  20 20 20 20 20  61 75 74 6F 20  .{.............auto.
00000B40  61 6C 74 65 72  6E 61 74 69 76  65 73 20 3D 20  6E 75 6D 62 65  alternatives.=.numbe
00000B54  72 73 5B 30 2E  2E 74 5D 20 69  6E 20 6E 75 6D  32 77 6F 72 64  rs[0..t].in.num2word
00000B68  73 3B 0A 20 20  20 20 20 20 20  20 20 20 20 20  69 66 20 28 21  s;.............if.(!
00000B7C  61 6C 74 65 72  6E 61 74 69 76  65 73 29 0A 20  20 20 20 20 20  alternatives).......
00000B90  20 20 20 20 20  20 20 20 20 20  63 6F 6E 74 69  6E 75 65 3B 0A  ..........continue;.
00000BA4  20 20 20 20 20  20 20 20 20 20  20 20 66 6F 75  6E 64 77 6F 72  ............foundwor
00000BB8  64 20 3D 20 74  72 75 65 3B 0A  20 20 20 20 20  20 20 20 20 20  d.=.true;...........
00000BCC  20 20 69 66 20  28 6E 75 6D 62  65 72 73 2E 6C  65 6E 67 74 68  ..if.(numbers.length
00000BE0  20 3E 20 20 74  29 20 7B 0A 20  20 20 20 20 20  20 20 20 20 20  .>..t).{............
00000BF4  20 20 20 20 20  2F 2F 20 43 6F  6D 62 69 6E 65  20 61 6C 6C 20  .....//.Combine.all.
00000C08  63 75 72 72 65  6E 74 20 61 6C  74 65 72 6E 61  74 69 76 65 73  current.alternatives
00000C1C  20 77 69 74 68  20 61 6C 6C 20  61 6C 74 65 72  6E 61 74 69 76  .with.all.alternativ
00000C30  65 73 20 20 20  20 20 0A 20 20  20 20 20 20 20  20 20 20 20 20  es..................
00000C44  20 20 20 20 2F  2F 20 6F 66 20  74 68 65 20 72  65 73 74 20 28  ....//.of.the.rest.(
00000C58  6E 65 78 74 20  70 69 65 63 65  20 63 61 6E 20  73 74 61 72 74  next.piece.can.start
00000C6C  20 77 69 74 68  20 61 20 64 69  67 69 74 29 20  20 20 20 20 20  .with.a.digit)......
00000C80  20 20 20 20 20  20 20 20 0A 20  20 20 20 20 20  20 20 20 20 20  ....................
00000C94  20 20 20 20 20  66 6F 72 65 61  63 68 20 28 61  32 3B 20 5F 46  .....foreach.(a2;._F
00000CA8  69 6E 64 57 6F  72 64 73 28 20  6E 75 6D 62 65  72 73 5B 74 2E  indWords(.numbers[t.
00000CBC  2E 24 5D 2C 20  74 72 75 65 20  20 20 20 20 29  20 29 0A 20 20  .$],.true.....).)...
00000CD0  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 66 6F  ..................fo
00000CE4  72 65 61 63 68  28 61 31 3B 20  2A 61 6C 74 65  72 6E 61 74 69  reach(a1;.*alternati
00000CF8  76 65 73 29 0A  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  ves)................
00000D0C  20 20 20 20 20  20 20 20 72 65  74 20 7E 3D 20  61 31 20 7E 20  ........ret.~=.a1.~.
00000D20  22 20 22 20 7E  20 61 32 3B 0A  20 20 20 20 20  20 20 20 20 20  ".".~.a2;...........
00000D34  20 20 7D 0A 20  20 20 20 20 20  20 20 20 20 20  20 65 6C 73 65  ..}.............else
00000D48  20 20 20 20 0A  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  ....................
00000D5C  20 72 65 74 20  7E 3D 20 2A 61  6C 74 65 72 6E  61 74 69 76 65  .ret.~=.*alternative
00000D70  73 3B 20 20 20  20 2F 2F 20 61  70 70 65 6E 64  20 74 68 65 73  s;....//.append.thes
00000D84  65 20 61 6C 74  65 72 6E 61 74  69 76 65 73 0A  20 20 20 20 20  e.alternatives......
00000D98  20 20 20 7D 0A  20 20 20 20 20  20 20 20 2F 2F  20 54 72 79 20  ...}.........//.Try.
00000DAC  74 6F 20 6B 65  65 70 20 31 20  64 69 67 69 74  2C 20 6F 6E 6C  to.keep.1.digit,.onl
00000DC0  79 20 69 66 20  77 65 27 72 65  20 61 6C 6C 6F  77 65 64 20 61  y.if.we're.allowed.a
00000DD4  6E 64 20 6E 6F  20 6F 74 68 65  72 0A 20 20 20  20 20 20 20 20  nd.no.other.........
00000DE8  2F 2F 20 61 6C  74 65 72 6E 61  74 69 76 65 73  20 77 65 72 65  //.alternatives.were
00000DFC  20 66 6F 75 6E  64 0A 20 20 20  20 20 20 20 20  2F 2F 20 54 65  .found.........//.Te
00000E10  73 74 69 6E 67  20 22 72 65 74  2E 6C 65 6E 67  74 68 22 20 6D  sting."ret.length".m
00000E24  61 6B 65 73 20  6D 6F 72 65 20  73 65 6E 73 65  20 74 68 61 6E  akes.more.sense.than
00000E38  20 74 65 73 74  69 6E 67 20 22  66 6F 75 6E 64  77 6F 72 64 22  .testing."foundword"
00000E4C  2C 0A 20 20 20  20 20 20 20 20  2F 2F 20 62 75  74 20 74 68 65  ,.........//.but.the
00000E60  20 6F 74 68 65  72 20 69 6D 70  6C 65 6D 65 6E  74 61 74 69 6F  .other.implementatio
00000E74  6E 73 20 73 65  65 6D 20 74 6F  20 64 6F 20 6A  75 73 74 20 74  ns.seem.to.do.just.t
00000E88  68 69 73 2E 0A  20 20 20 20 20  20 20 20 69 66  20 28 64 69 67  his..........if.(dig
00000E9C  69 74 6F 6B 20  26 26 20 21 66  6F 75 6E 64 77  6F 72 64 29 20  itok.&&.!foundword).
00000EB0  7B 20 2F 2F 72  65 74 2E 6C 65  6E 67 74 68 20  3D 3D 20 30 20  {.//ret.length.==.0.
00000EC4  20 0A 20 20 20  20 20 20 20 20  20 20 20 20 69  66 28 6E 75 6D  ..............if(num
00000ED8  62 65 72 73 2E  6C 65 6E 67 74  68 20 3E 20 20  31 29 20 7B 0A  bers.length.>..1).{.
00000EEC  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  20 2F 2F 20 43  ................//.C
00000F00  6F 6D 62 69 6E  65 20 31 20 64  69 67 69 74 20  77 69 74 68 20  ombine.1.digit.with.
00000F14  61 6C 6C 20 61  6C 74 65 6E 61  74 69 76 65 73  20 66 72 6F 6D  all.altenatives.from
00000F28  20 74 68 65 20  72 65 73 74 20  20 20 20 0A 20  20 20 20 20 20  .the.rest...........
00000F3C  20 20 20 20 20  20 20 20 20 20  2F 2F 20 28 6E  65 78 74 20 70  ..........//.(next.p
00000F50  69 65 63 65 20  63 61 6E 20 6E  6F 74 20 73 74  61 72 74 20 77  iece.can.not.start.w
00000F64  69 74 68 20 61  20 64 69 67 69  74 29 20 20 20  20 20 20 20 20  ith.a.digit)........
00000F78  20 20 0A 20 20  20 20 20 20 20  20 20 20 20 20  20 20 20 20 66  ...................f
00000F8C  6F 72 65 61 63  68 20 28 61 3B  20 5F 46 69 6E  64 57 6F 72 64  oreach.(a;._FindWord
00000FA0  73 28 20 6E 75  6D 62 65 72 73  5B 31 2E 2E 24  5D 2C 20 66 61  s(.numbers[1..$],.fa
00000FB4  6C 73 65 20 29  20 29 0A 20 20  20 20 20 20 20  20 20 20 20 20  lse.).).............
00000FC8  20 20 20 20 20  20 20 20 72 65  74 20 7E 3D 20  6E 75 6D 62 65  ........ret.~=.numbe
00000FDC  72 73 5B 30 2E  2E 31 5D 20 7E  20 22 20 22 20  7E 20 61 3B 0A  rs[0..1].~.".".~.a;.
00000FF0  20 20 20 20 20  20 20 20 20 20  20 20 7D 20 20  20 20 0A 20 20  ............}.......
00001004  20 20 20 20 20  20 20 20 20 20  65 6C 73 65 20  20 20 20 0A 20  ..........else......
00001018  20 20 20 20 20  20 20 20 20 20  20 20 20 20 20  72 65 74 20 7E  ...............ret.~
0000102C  3D 20 6E 75 6D  62 65 72 73 5B  30 2E 2E 31 5D  3B 20 20 20 20  =.numbers[0..1];....
00001040  2F 2F 20 6A 75  73 74 20 61 70  70 65 6E 64 20  74 68 69 73 20  //.just.append.this.
00001054  64 69 67 69 74  20 20 20 20 20  20 20 20 20 20  20 20 20 0A 20  digit...............
00001068  20 20 20 20 20  20 20 7D 20 20  20 20 0A 20 20  20 20 20 20 20  .......}............
0000107C  20 72 65 74 75  72 6E 20 72 65  74 3B 0A 20 20  20 20 7D 0A 0A  .return.ret;.....}..
00001090  20 20 20 20 2F  2F 2F 20 28 54  68 69 73 20 66  75 6E 63 74 69  ....///.(This.functi
000010A4  6F 6E 20 77 61  73 20 69 6E 6C  69 6E 65 64 20  69 6E 20 74 68  on.was.inlined.in.th
000010B8  65 20 6F 72 69  67 69 6E 61 6C  20 70 72 6F 67  72 61 6D 29 20  e.original.program).
000010CC  0A 20 20 20 20  2F 2F 2F 20 46  69 6E 64 73 20  61 6C 6C 20 61  .....///.Finds.all.a
000010E0  6C 74 65 72 6E  61 74 69 76 65  73 20 66 6F 72  20 74 68 65 20  lternatives.for.the.
000010F4  67 69 76 65 6E  20 70 68 6F 6E  65 20 6E 75 6D  62 65 72 20 0A  given.phone.number..
00001108  20 20 20 20 2F  2F 2F 20 52 65  74 75 72 6E 73  3A 20 61 72 72  ....///.Returns:.arr
0000111C  61 79 20 6F 66  20 73 74 72 69  6E 67 73 20 0A  20 20 20 20 73  ay.of.strings......s
00001130  74 72 69 6E 67  61 72 72 61 79  20 46 69 6E 64  57 6F 72 64 73  tringarray.FindWords
00001144  28 20 73 74 72  69 6E 67 20 70  68 6F 6E 65 5F  6E 75 6D 62 65  (.string.phone_numbe
00001158  72 20 29 0A 20  20 20 20 7B 0A  20 20 20 20 20  20 20 20 69 66  r.).....{.........if
0000116C  20 28 21 70 68  6F 6E 65 5F 6E  75 6D 62 65 72  2E 6C 65 6E 67  .(!phone_number.leng
00001180  74 68 29 0A 20  20 20 20 20 20  20 20 20 20 20  20 72 65 74 75  th).............retu
00001194  72 6E 20 6E 75  6C 6C 3B 0A 20  20 20 20 20 20  20 20 2F 2F 20  rn.null;.........//.
000011A8  53 74 72 69 70  20 74 68 65 20  6E 6F 6E 2D 64  69 67 69 74 20  Strip.the.non-digit.
000011BC  63 68 61 72 61  63 74 65 72 73  20 66 72 6F 6D  20 74 68 65 20  characters.from.the.
000011D0  70 68 6F 6E 65  20 6E 75 6D 62  65 72 2C 20 61  6E 64 0A 20 20  phone.number,.and...
000011E4  20 20 20 20 20  20 2F 2F 20 70  61 73 73 20 69  74 20 74 6F 20  ......//.pass.it.to.
000011F8  74 68 65 20 72  65 63 75 72 73  69 76 65 20 66  75 6E 63 74 69  the.recursive.functi
0000120C  6F 6E 20 28 6C  65 61 64 69 6E  67 20 64 69 67  69 74 20 69 73  on.(leading.digit.is
00001220  20 61 6C 6C 6F  77 65 64 29 0A  20 20 20 20 20  20 20 20 72 65  .allowed).........re
00001234  74 75 72 6E 20  5F 46 69 6E 64  57 6F 72 64 73  28 20 73 74 72  turn._FindWords(.str
00001248  69 70 4E 6F 6E  44 69 67 69 74  28 70 68 6F 6E  65 5F 6E 75 6D  ipNonDigit(phone_num
0000125C  62 65 72 29 2C  20 74 72 75 65  20 29 3B 20 20  20 20 0A 20 20  ber),.true.);.......
00001270  20 20 7D 20 20  20 20 0A 20 20  20 20 0A 20 20  20 20 2F 2F 20  ..}..............//.
00001284  52 65 61 64 20  74 68 65 20 70  68 6F 6E 65 20  6E 75 6D 62 65  Read.the.phone.numbe
00001298  72 73 20 20 20  20 20 0A 20 20  20 20 66 6F 72  65 61 63 68 28  rs..........foreach(
000012AC  73 74 72 69 6E  67 20 70 68 6F  6E 65 3B 20 6E  65 77 20 42 75  string.phone;.new.Bu
000012C0  66 66 65 72 65  64 46 69 6C 65  28 22 69 6E 70  75 74 2E 74 78  fferedFile("input.tx
000012D4  74 22 20 20 20  29 20 29 0A 20  20 20 20 20 20  20 20 66 6F 72  t"...).).........for
000012E8  65 61 63 68 28  61 6C 74 65 72  6E 61 74 69 76  65 3B 20 46 69  each(alternative;.Fi
000012FC  6E 64 57 6F 72  64 73 28 20 70  68 6F 6E 65 20  29 20 29 0A 20  ndWords(.phone.).)..
00001310  20 20 20 20 20  20 20 20 20 20  20 77 72 69 74  65 66 6C 6E 28  ...........writefln(
00001324  70 68 6F 6E 65  2C 20 22 3A 20  22 2C 20 61 6C  74 65 72 6E 61  phone,.":.",.alterna
00001338  74 69 76 65 20  29 3B 0A 7D 0A  0A                              tive.);.}..