Strange numbers: Difference between revisions

m (added a ";Definition:, ";Task:" (section headers) to the draft task, added whitespace, added clarification that the number should be expressed in base ten.)
Line 1,045:
474 475 479 492 494 496 497 </pre>
 
=={{header|jq}}==
{{works with|jq}}
'''Works with gojq, the Go implementation of jq'''
 
===Filter method===
<lang jq>
def is_strange:
def digits: tostring | explode | map([.] | implode | tonumber);
digits
| . as $d
| [2, 3, 5, 7] as $primes
| all( range(1; length);
($d[.] - $d[. - 1]) | length | IN( $primes[]));
 
# Pretty-printing
def nwise($n):
def n: if length <= $n then . else .[0:$n] , (.[$n:] | n) end;
n;
 
def lpad($len): tostring | ($len - length) as $l | (" " * $l)[:$l] + .;
 
def task($start; $stop; filter):
"Finding numbers matching $f for open interval \($start), \($stop):\n",
( [range($start; $stop) | select(filter) ]
| nwise(10) | map(lpad(3)) | join(" ") );
 
task(100; 500; is_strange)
</lang>
{{out}}
<pre>
Finding numbers matching $f for open interval 100, 500:
 
130 131 135 136 138 141 142 146 147 149
161 163 164 168 169 181 183 185 186 202
203 205 207 241 242 246 247 249 250 252
253 257 258 270 272 274 275 279 292 294
296 297 302 303 305 307 313 314 316 318
350 352 353 357 358 361 363 364 368 369
381 383 385 386 413 414 416 418 420 424
425 427 429 461 463 464 468 469 470 472
474 475 479 492 494 496 497
</pre>
 
 
===Generator method===
`lpad` and and `nwise` are as above and so their definitions are not repeated.
<lang jq>
# input: width
# $start: maximum first digit allowed e.g. 9 for unrestricted
# output: the specified stream of strange numbers
def generator($start):
# Emit the next permissible digit after `.`
# (`length` as used here is the builtin equivalent of `abs`)
def nxt: . as $i | range(0;10) | select($i - . | length | IN(2, 3, 5, 7));
# input: number of digits
# output: an array of digits
def gen:
if . == 0 then empty
elif . == 1 then range(1;10) | [.]
else (. - 1) | gen | . + ((.[-1]|nxt) | [.])
end;
range(1; $start+1) as $i | [$i] + (.-1|gen);
[3 | generator(4) | map(tostring) | join("") | tonumber]
| nwise(10) | map(lpad(3)) | join(" ")
</lang>
{{out}}
As above, except for the header.
=={{header|Julia}}==
===Filter method===
2,467

edits