Semordnilap: Difference between revisions

Content added Content deleted
(Added 11l)
(Updated to work with Nim 1.4. Replaced "sort" with the easier "sortByIt".)
Line 2,214: Line 2,214:
<lang nim>import strutils, sequtils, sets, algorithm
<lang nim>import strutils, sequtils, sets, algorithm


proc reverse(s): string =
proc reversed(s: string): string =
result = newString(s.len)
result = newString(s.len)
for i,c in s:
for i, c in s:
result[s.high - i] = c
result[s.high - i] = c


let
let
words = readFile("unixdict.txt").strip.splitLines
words = readFile("unixdict.txt").strip().splitLines()
wordset = words.toSet
wordset = words.toHashSet
revs = words.map(reverse)
revs = words.map(reversed)
var pairs = zip(words, revs).filterIt(it[0] < it[1] and it[1] in wordset)
var pairs = zip(words, revs).filterIt(it[0] < it[1] and it[1] in wordset)


echo "Total number of semordnilaps: ", pairs.len
echo "Total number of semordnilaps: ", pairs.len
pairs.sort(proc (x,y): auto = cmp(x[0].len,y[0].len))
pairs = pairs.sortedByIt(it[0].len)
echo pairs[pairs.high-4..pairs.high]</lang>
echo pairs[^5..^1]</lang>

{{out}}
{{out}}
<pre>Total number of semordnilaps: 158
<pre>Total number of semordnilaps: 158