(defun read-same-characters (&optional (stream *standard-input*)
(eof-error-p t)
eof-value)
(loop for len upfrom 1
for c = (read-char stream eof-error-p nil)
while c
collect c into chars
while (eql c (peek-char nil stream nil nil))
finally (return (if c
(cons c len)
eof-value))))
(defun hash-table-to-alist (hash-table)
(loop for key being the hash-keys in hash-table using (hash-value val)
collect (cons key val)))
(let* ((stats
(with-open-stream (s (open "/dev/stdin" :direction :input))
(loop with stats = (make-hash-table)
for (char . len) = (read-same-characters s nil nil)
while char
for char-maxlen = (gethash char stats 0)
when (> len char-maxlen)
do (setf (gethash char stats) len)
finally (return (hash-table-to-alist stats)))))
(maxlen (apply #'max (mapcar (lambda (x) (cdr x)) stats)))
(longest-repeated-characters
(remove-if (complement (lambda (x) (eql (cdr x) maxlen)))
stats)))
(format t "~S~%" longest-repeated-characters))
KGRlZnVuIHJlYWQtc2FtZS1jaGFyYWN0ZXJzICgmb3B0aW9uYWwgKHN0cmVhbSAqc3RhbmRhcmQtaW5wdXQqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW9mLWVycm9yLXAgdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9mLXZhbHVlKQogIChsb29wIGZvciBsZW4gdXBmcm9tIDEKICAgICAgICBmb3IgYyA9IChyZWFkLWNoYXIgc3RyZWFtIGVvZi1lcnJvci1wIG5pbCkKICAgICAgICB3aGlsZSBjCiAgICAgICAgY29sbGVjdCBjIGludG8gY2hhcnMKICAgICAgICB3aGlsZSAoZXFsIGMgKHBlZWstY2hhciBuaWwgc3RyZWFtIG5pbCBuaWwpKQogICAgICAgIGZpbmFsbHkgKHJldHVybiAoaWYgYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgYyBsZW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2YtdmFsdWUpKSkpCgooZGVmdW4gaGFzaC10YWJsZS10by1hbGlzdCAoaGFzaC10YWJsZSkKICAobG9vcCBmb3Iga2V5IGJlaW5nIHRoZSBoYXNoLWtleXMgaW4gaGFzaC10YWJsZSB1c2luZyAoaGFzaC12YWx1ZSB2YWwpCiAgICAgICAgY29sbGVjdCAoY29ucyBrZXkgdmFsKSkpCgoobGV0KiAoKHN0YXRzCiAgICAgICAgICh3aXRoLW9wZW4tc3RyZWFtIChzIChvcGVuICIvZGV2L3N0ZGluIiA6ZGlyZWN0aW9uIDppbnB1dCkpCiAgICAgICAgICAgKGxvb3Agd2l0aCBzdGF0cyA9IChtYWtlLWhhc2gtdGFibGUpCiAgICAgICAgICAgICAgICAgZm9yIChjaGFyIC4gbGVuKSA9IChyZWFkLXNhbWUtY2hhcmFjdGVycyBzIG5pbCBuaWwpCiAgICAgICAgICAgICAgICAgd2hpbGUgY2hhcgogICAgICAgICAgICAgICAgIGZvciBjaGFyLW1heGxlbiA9IChnZXRoYXNoIGNoYXIgc3RhdHMgMCkKICAgICAgICAgICAgICAgICB3aGVuICg+IGxlbiBjaGFyLW1heGxlbikKICAgICAgICAgICAgICAgICAgIGRvIChzZXRmIChnZXRoYXNoIGNoYXIgc3RhdHMpIGxlbikKICAgICAgICAgICAgICAgICBmaW5hbGx5IChyZXR1cm4gKGhhc2gtdGFibGUtdG8tYWxpc3Qgc3RhdHMpKSkpKQogICAgICAgKG1heGxlbiAoYXBwbHkgIydtYXggKG1hcGNhciAobGFtYmRhICh4KSAoY2RyIHgpKSBzdGF0cykpKQogICAgICAgKGxvbmdlc3QtcmVwZWF0ZWQtY2hhcmFjdGVycwogICAgICAgICAocmVtb3ZlLWlmIChjb21wbGVtZW50IChsYW1iZGEgKHgpIChlcWwgKGNkciB4KSBtYXhsZW4pKSkKICAgICAgICAgICAgICAgICAgICBzdGF0cykpKQogIChmb3JtYXQgdCAiflN+JSIgbG9uZ2VzdC1yZXBlYXRlZC1jaGFyYWN0ZXJzKSkK
My4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1MDI4ODQxOTcxNjkzOTkzNzUxMDU4MjA5NzQ5NDQ1OTIzMDc4MTY0MDYyODYyMDg5OTg2MjgwMzQ4MjUzNDIxMTcwNjc5ODIxNDgwODY1MTMyODIzMDY2NDcwOTM4NDQ2MDk1NTA1ODIyMzE3MjUzNTk0MDgxMjg0ODExMTc0NTAyODQxMDI3MDE5Mzg1MjExMDU1NTk2NDQ2MjI5NDg5NTQ5MzAzODE5NjQ0Mjg4MTA5NzU2NjU5MzM0NDYxMjg0NzU2NDgyMzM3ODY3ODMxNjUyNzEyMDE5MDkxNDU2NDg1NjY5MjM0NjAzNDg2MTA0NTQzMjY2NDgyMTMzOTM2MDcyNjAyNDkxNDEyNzM3MjQ1ODcwMDY2MDYzMTU1ODgxNzQ4ODE1MjA5MjA5NjI4MjkyNTQwOTE3MTUzNjQzNjc4OTI1OTAzNjAwMTEzMzA1MzA1NDg4MjA0NjY1MjEzODQxNDY5NTE5NDE1MTE2MDk0MzMwNTcyNzAzNjU3NTk1OTE5NTMwOTIxODYxMTczODE5MzI2MTE3OTMxMDUxMTg1NDgwNzQ0NjIzNzk5NjI3NDk1NjczNTE4ODU3NTI3MjQ4OTEyMjc5MzgxODMwMTE5NDkxMg==
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912