2011/10/31

gaucheで「プログラマに半角全角の入り乱れた英数字を見せ続けると死ぬ。」コマンド


流行っている様なのでコマンド版作った。
実行すると以下のように全半角が入り乱れた英数字がコンソールにゆっくり延々と表示され続ける。
$ mortal
C4KQyoHRsNzlgrR8wShmLU1BbSgjkOrpxzz0r0bue5HW0GHF7xnAHzn1hvpKQED5QJii5zXckg1yuTzCUEF4HV4UmYyy1q4HSYNff7uSpqgIrKcUKu1giKve8XqHiGVefGAGJFAKRCcQ7UeCpJzZOtGwP0AT9Poah4OUj6crL95vxHtaTKsaf3GoWzXaXp6BpiaMYUIEFGpjJ4MEcjYKxVBuIn2OXvsQKuzGvjIVKwug8xXR66aY0M8GTLqC4berPn27Fs1DFs4eOBsPoo2nNjrfeuFZT2pR1N65XfB4qkk znIpmtxXbopZ7f18Wgz1KQta8EyT0ZulfB3eKZGs5WcIMLwsnYMYO9UpyDCpaxBRjc7j80Tg0beoaMl63fkoc0GLs5Y9BtzBSYaCGhzD8owBIWh5XIqogWzGCPeSaEO6E5VLty1DLo1DMFcsqVN5Y5AcykHyNmy6l9nKfxADUdZbTFM2TsZX1pKbJ54mSeZf2TqeSFbMtp2LmcJtFmpjxdtOzhvL9fxUbbgXNKHVb3RnE9QfcR6RPOP6aM7pngofoGFv2aRjq3M4p0FWKDah7ZBqxYc3SaAdkoVs5qdAdw5ZR3NqqzYaQO3gBB4AP1ln6PHl7Jp8OSzUiztnFpOFMmBa6cm7ICI9hD4uhk6vBDSSKO97RH4rX3458LgPcdEMSxPyJngbiUwEx6kl9GB7zeFVvNSyOLhTRPXQ8BWjOrmRMSechf560b5wKEEfLJw9hpfrT9oHtuSRho59uszbU0KTxcaH6CG33t0Td1SpaZ0wIsaPlP4EhReFXo0d8NKlOBjy9IRbH2KbBq0vvTTT8svlTMt7qGslamH8Obe1efK8xtroch3eRrV4RqxCSwAL6aQ1E2C0t7dOulVC1Awyidt79A40mua3NeosCPoSqEHHbVj6g3qiuxyxyjo3VQCYFPcIKthQQOyo9XSohh02rSzvisEy6rBNCq6NFsqAXzlWr8jtT7Y ztf7bebTBdayGaCpx52mnsoEdUC1eBw0HZipJh1ozNpCOndVPOuESm4u9vd6QWPliolKv7COzYUz1TmMd15Q3ueIMMiPyA8l2QYq0ItOSfFj2gBkFAiNDEbM7YIa0P6yp6jEpP8AwRaaCi3m1cYsft4HTCaQOuUk782N6O1E61obRl99WEaUZEf9cYjYVhiS1AxaMzkqu28baeom2iCru0y2RAGOwZ5PO8Wlj333VrLwYW


ソースはこちら
#!/usr/local/bin/gosh
(use srfi-1) ; list-index
(use srfi-14) ; char-set
(use math.mt-random)
(use gauche.parseopt)
(define (usage)
(print "Usage: mortal [options ...]")
(print " - s|sleep : milli second sleep")
(print " - l|length")
(print " - h|help")
(exit 0))
(define (make-lookupper keys values :optional (comp eq?))
(^ (key)
(let1 idx (list-index (pa$ comp key) keys)
(and idx (list-ref values idx)))))
(define rand
(let1 m (make <mersenne-twister> :seed (sys-time))
(^ (:optional (len 2))
(mt-random-integer m len))))
(define (main args)
(let-args (cdr args)
((n "s|sleep=i" 1000)
(len "l|length=i")
(help "h|help" => usage))
(let* ((src1 (char-set->list #[a-zA-Z0-9]))
(src2 (char-set->list #[a-zA-Z0-9]))
(lookup (make-lookupper src1 src2)))
(let1 body (^ _ (sys-nanosleep (* n 100000))
(let1 char (list-ref src1 (rand (length src1)))
(display (if (zero? (rand 2))
char
(lookup char)))
(flush)))
(if len
(for-each body (iota len))
(while #t (body)))))))
view raw mortal.scm hosted with ❤ by GitHub


0 件のコメント:

コメントを投稿