Teacup rim text: Difference between revisions
Content deleted Content added
Line 1,063: | Line 1,063: | ||
asp -> spa -> pas |
asp -> spa -> pas |
||
ips -> psi -> sip</pre> |
ips -> psi -> sip</pre> |
||
=={{header|jq}}== |
|||
{{works with|jq}} |
|||
'''Works with gojq, the Go implementation of jq''' (*) |
|||
(*) To run the program below using gojq, change `keys_unsorted` to |
|||
`keys`; this slows it down a lot. |
|||
<lang jq># Output: an array of the words when read around the rim |
|||
def read_teacup: |
|||
. as $in |
|||
| [range(0; length) | $in[.:] + $in[:.] ]; |
|||
# Boolean |
|||
def is_teacup_word($dict): |
|||
. as $in |
|||
| all( range(1; length); . as $i | $dict[ $in[$i:] + $in[:$i] ]) ; |
|||
# Output: a stream of the eligible teacup words |
|||
def teacup_words: |
|||
def same_letters: |
|||
explode |
|||
| .[0] as $first |
|||
| all( .[1:][]; . == $first); |
|||
# Only consider one word in a teacup cycle |
|||
def consider: explode | .[0] == min; |
|||
# Create the dictionary |
|||
reduce (inputs |
|||
| select(length>2 and (same_letters|not))) as $w ( {}; |
|||
.[$w]=true ) |
|||
| . as $dict |
|||
| keys[] |
|||
| select(consider and is_teacup_word($dict)) ; |
|||
# The task: |
|||
teacup_words |
|||
| read_teacup</lang> |
|||
{{out}} |
|||
Invocation example: jq -nRc -f teacup-rim.jq unixdict.txt |
|||
<pre> |
|||
["apt","pta","tap"] |
|||
["arc","rca","car"] |
|||
["ate","tea","eat"] |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |