fork download
  1. ; freq
  2.  
  3. (define (uniq-c eql? xs)
  4. (if (null? xs) xs
  5. (let loop ((xs (cdr xs)) (prev (car xs)) (k 1) (result '()))
  6. (cond ((null? xs) (reverse (cons (cons prev k) result)))
  7. ((eql? (car xs) prev) (loop (cdr xs) prev (+ k 1) result))
  8. (else (loop (cdr xs) (car xs) 1 (cons (cons prev k) result)))))))
  9.  
  10. (define (freq str . block)
  11. (let ((block (if (pair? block) (car block) 1))
  12. (len (string-length str)))
  13. (if (< len block) (list)
  14. (let loop ((k 0) (txt (list)))
  15. (if (<= k (- len block))
  16. (loop (+ k 1) (cons (substring str k (+ k block)) txt))
  17. (let ((txt (sort txt string<?)))
  18. (uniq-c string=? txt)))))))
  19.  
  20. (define cryptogram (string-append
  21. "V MVXEGC NK V RGIIZH HYZ IGXDK PZQ "
  22. "YNK QLMCGIIV HYGX AYG KQX NK KYNXNXO "
  23. "VXD HZXAK NA MVUE AYG LNXQAG NA "
  24. "MGONXK AZ CVNX LVCE AHVNX"))
  25.  
  26. (display (sort (freq cryptogram 1) (lambda (a b) (< (cdr b) (cdr a))))) (newline)
  27. (display (sort (freq cryptogram 2) (lambda (a b) (< (cdr b) (cdr a))))) (newline)
  28. (display (sort (freq cryptogram 3) (lambda (a b) (< (cdr b) (cdr a))))) (newline)
Success #stdin #stdout 0.07s 8808KB
stdin
Standard input is empty
stdout
((  . 26) (X . 12) (N . 11) (G . 9) (V . 9) (A . 8) (K . 8) (Y . 6) (H . 5) (I . 5) (Z . 5) (C . 4) (M . 4) (Q . 4) (E . 3) (L . 3) (D . 2) (O . 2) (P . 1) (R . 1) (U . 1))
((K  . 6) (NX . 6) ( A . 4) ( N . 4) ( H . 3) ( M . 3) (G  . 3) (NK . 3) (V  . 3) (X  . 3) (YG . 3) ( K . 2) ( L . 2) ( V . 2) (A  . 2) (AY . 2) (E  . 2) (GI . 2) (GX . 2) (HY . 2) (II . 2) (MV . 2) (NA . 2) (VN . 2) (VX . 2) (XD . 2) (YN . 2) (Z  . 2) ( C . 1) ( I . 1) ( P . 1) ( Q . 1) ( R . 1) ( Y . 1) (AG . 1) (AH . 1) (AK . 1) (AZ . 1) (C  . 1) (CE . 1) (CG . 1) (CV . 1) (D  . 1) (DK . 1) (EG . 1) (GC . 1) (GO . 1) (H  . 1) (HV . 1) (HZ . 1) (IG . 1) (IV . 1) (IZ . 1) (KQ . 1) (KY . 1) (LM . 1) (LN . 1) (LV . 1) (MC . 1) (MG . 1) (O  . 1) (ON . 1) (PZ . 1) (Q  . 1) (QA . 1) (QL . 1) (QX . 1) (RG . 1) (UE . 1) (VC . 1) (VU . 1) (XA . 1) (XE . 1) (XK . 1) (XN . 1) (XO . 1) (XQ . 1) (YZ . 1) (ZH . 1) (ZQ . 1) (ZX . 1))
((NK  . 3) ( AY . 2) ( HY . 2) ( MV . 2) ( NA . 2) ( NK . 2) (A M . 2) (AYG . 2) (E A . 2) (GII . 2) (NA  . 2) (VNX . 2) (YG  . 2) ( AH . 1) ( AZ . 1) ( CV . 1) ( HZ . 1) ( IG . 1) ( KQ . 1) ( KY . 1) ( LN . 1) ( LV . 1) ( MG . 1) ( PZ . 1) ( QL . 1) ( RG . 1) ( V  . 1) ( VX . 1) ( YN . 1) (AG  . 1) (AHV . 1) (AK  . 1) (AZ  . 1) (C N . 1) (CE  . 1) (CGI . 1) (CVN . 1) (D H . 1) (DK  . 1) (EGC . 1) (G K . 1) (G L . 1) (G N . 1) (GC  . 1) (GON . 1) (GX  . 1) (GXD . 1) (H H . 1) (HVN . 1) (HYG . 1) (HYZ . 1) (HZX . 1) (IGX . 1) (IIV . 1) (IIZ . 1) (IV  . 1) (IZH . 1) (K A . 1) (K K . 1) (K N . 1) (K P . 1) (K Q . 1) (K V . 1) (KQX . 1) (KYN . 1) (LMC . 1) (LNX . 1) (LVC . 1) (MCG . 1) (MGO . 1) (MVU . 1) (MVX . 1) (NX  . 1) (NXK . 1) (NXN . 1) (NXO . 1) (NXQ . 1) (O V . 1) (ONX . 1) (PZQ . 1) (Q Y . 1) (QAG . 1) (QLM . 1) (QX  . 1) (RGI . 1) (UE  . 1) (V H . 1) (V M . 1) (V R . 1) (VCE . 1) (VUE . 1) (VXD . 1) (VXE . 1) (X A . 1) (X L . 1) (X N . 1) (XAK . 1) (XD  . 1) (XDK . 1) (XEG . 1) (XK  . 1) (XNX . 1) (XO  . 1) (XQA . 1) (YGX . 1) (YNK . 1) (YNX . 1) (YZ  . 1) (Z C . 1) (Z I . 1) (ZH  . 1) (ZQ  . 1) (ZXA . 1))