Hex words: Difference between revisions

(added AWK)
Line 358:
13 such words found which contain 4 or more different digits.
</pre>
 
=={{header|jq}}==
{{works with|jq}}
'''Works with gojq, the Go implementation of jq'''
 
'''Preliminaries'''
<lang jq>def lpad($len): tostring | ($len - length) as $l | (" " * $l)[:$l] + .;
 
# . may be a decimal number or a string representing a decimal number
def digital_root:
# string-only version
def dr:
# state: [mdr, persist]
until( .[0] | length == 1;
[ (.[0] | explode | map(.-48) | add | tostring), .[1] + 1 ]
);
[tostring, 0] | dr | .[0] | tonumber;
 
# lowercase a-f
def isHexWord:
all(explode[]; 97 <= . and . <= 102);
 
# Input: a valid hex number (all lowercase)
def hex2i:
def toi: if . >= 87 then .-87 else . - 48 end;
reduce (explode | map(toi) | reverse[]) as $i ([1, 0]; # [power, sum]
.[1] += $i * .[0]
| .[0] *= 16 )
| .[1]; </lang>
'''The Task'''
<lang jq>def task:
 
def format: "\(.[0]|lpad(8)) -> \(.[1]|lpad(9)) -> \(.[2])";
INDEX(inputs | select(length>=4 and isHexWord); .)
| reduce keys_unsorted[] as $word ([];
($word | hex2i) as $num
| ($num | digital_root) as $dr
| . + [[ $word, $num, $dr]])
| sort_by( .[-1] )
| . as $details
 
| (reduce .[] as $line ([];
if $line[0] | explode | unique | length >= 4
then . + [$line] else . end)) as $digits4
 
| "\($details|length) hex words with 4 or more letters were found:",
($details[] | format),
"",
"\($digits4|length) such words contain 4 or more different digits:",
(($digits4|sort_by(.[1])|reverse[] ) | format) ;
 
task</lang>
{{out}}
'''Invocation'''
<pre>
< unixdict.txt jq -Rrn -f rc-hex-words.jq
</pre>
<pre>
26 hex words with 4 or more letters were found:
ababa -> 703162 -> 1
abbe -> 43966 -> 1
dada -> 56026 -> 1
deaf -> 57007 -> 1
decade -> 14600926 -> 1
cede -> 52958 -> 2
feed -> 65261 -> 2
abed -> 44013 -> 3
added -> 712173 -> 3
bade -> 47838 -> 3
beebe -> 782014 -> 4
decca -> 912586 -> 4
dade -> 56030 -> 5
bead -> 48813 -> 6
deface -> 14613198 -> 6
babe -> 47806 -> 7
fade -> 64222 -> 7
dead -> 57005 -> 8
efface -> 15727310 -> 8
facade -> 16435934 -> 8
accede -> 11325150 -> 9
beef -> 48879 -> 9
cafe -> 51966 -> 9
dacca -> 896202 -> 9
deed -> 57069 -> 9
face -> 64206 -> 9
 
13 such words contain 4 or more different digits:
facade -> 16435934 -> 8
efface -> 15727310 -> 8
deface -> 14613198 -> 6
decade -> 14600926 -> 1
accede -> 11325150 -> 9
decca -> 912586 -> 4
fade -> 64222 -> 7
face -> 64206 -> 9
deaf -> 57007 -> 1
cafe -> 51966 -> 9
bead -> 48813 -> 6
bade -> 47838 -> 3
abed -> 44013 -> 3
</pre>
 
 
=={{header|Julia}}==
2,484

edits