99の一覧
30分プログラム、その441。99の一覧を出力してみる。
どう書く.orgで、これと同じ出力をするプログラムを0-9の数字をソースコードに入力せずに作れ、という問題が出たといううわさを聞いた気がする。どうやるんだろう?チャーチ数的なことかな?
それを30分でやるのは無理なので、普通に0-9の数字を使って99の表を出力するプログラムを書いてみた。
使い方
$ gosh 9x9.scm 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
ソースコード
#! /opt/local/bin/gosh ;; -*- mode:scheme; coding:utf-8 -*- ;; ;; 9x9.scm - ;; (use srfi-1) (define (map-map f xs ys) (map (lambda (x) (map (cut f x <>) ys)) xs)) (define (products xs ys) (map-map * xs ys)) (let1 digits (iota 9 1) (map (lambda (row) (print (string-join (map (cut format "~2d" <>) row) " "))) (products digits digits)))