Anadromes: Difference between revisions

no edit summary
imported>Celtic-Coder
m (Correct the syntax highlighting for the Rust entry)
imported>Rowsety Moid
No edit summary
Line 380:
revotes <-> setover
sallets <-> stellas
</pre>
 
=={{header|Common Lisp}}==
 
The hash-table's <code>equalp</code> test is case-insensitive, and so we find 32 pairs rather than 17. However, the table maps each word to itself, and so looking up a reversed word gets it in its original case, as can be seen in the output.
 
<syntaxhighlight lang="lisp">
(defun read-words (filename)
(let ((words '()))
(with-open-file (s filename :direction :input)
(loop
(let ((word (read-line s nil nil)))
(if word
(when (> (length word) 6)
(setq words (cons word words)))
(return (reverse words))))))))
 
(defun anadromes ()
(let ((words (read-words "notes/words.txt"))
(dict (make-hash-table :test #'equalp)))
(dolist (word words)
(setf (gethash word dict) word))
(mapcar
(lambda (word)
(list word (gethash (reverse word) dict)))
(remove-if-not
(lambda (word)
(let ((rev (reverse word)))
(and (string-lessp word rev)
(gethash rev dict)
(not (string-equal word rev)))))
words))))
 
(format t "~%~:{~10A ~10A~%~}~%"
(anadromes))
</syntaxhighlight>
 
{{Out}}
 
<pre>
amaroid diorama
anacara Aracana
Annabal Labanna
Artamus Sumatra
Colbert Trebloc
degener reneged
deifier reified
Delbert trebled
Delevan naveled
deliver reviled
dessert tressed
desserts stressed
deviler relived
dioramas samaroid
Eimmart trammie
Emmeram maremme
gateman nametag
Latimer remital
Lattimer remittal
lessees Seessel
leveler relevel
Nicolaus Sualocin
pat-pat tap-tap
redrawer rewarder
reknits stinker
relever reveler
reliver reviler
revotes setover
ROYGBIV vibgyor
Rotanev Venator
sallets stellas
sennits Stinnes
</pre>
 
Anonymous user