九九表のすべてのマスの和

前回から時間が開いてしまった。本当は Text.Parsec の話題を書こうと思ってるんだけど、今日も時間がないので小ネタ、しかも他人のネタ。

 cf. 九九表のすべてのマスの和 – 無駄と文化

詳しくはリンク先を見て。いくつかの言語でやってるんだけど、Ruby と Scheme がなかったのでやってみた。

まずは Ruby。

# encoding: utf-8

def sum_of_kuku
  a = (1..9).to_a
  a.product(a).map{|x,y| x * y}.inject(:+)
end

puts sum_of_kuku
takatoh@apostrophe $ ruby sum_of_kuku.rb
2025

1〜9までの配列の直積をとって、それぞれを掛けあわせて、最後に全部足してるだけ。

Scheme でも同じ考え方。でもリストの直積を取る手続きが見当たらなかったので direct-product を自作した。

(use srfi-1)

(define direct-product
  (lambda (lis1 lis2)
    (append-map
      (lambda (x) (map (lambda (y) (list x y)) lis2))
      lis1)))

(define sum-of-kuku
  (lambda ()
    (let ((l1 '(1 2 3 4 5 6 7 8 9))
          (l2 '(1 2 3 4 5 6 7 8 9)))
      (apply + (map (lambda (x) (apply * x)) (direct-product l1 l2))))))

(print (sum-of-kuku))
takatoh@apostrophe $ gosh sum-of-kuku.scm
2025

「九九表のすべてのマスの和」への3件のフィードバック

  1. 元小ネタの記事を書いた三井です。取り組んでいただいてありがとうございます。
    自分でもRubyで書いてみようかなと思ったんですが、いかんせんRuby挫折組なので他のRubistさんのコードを見ることができて嬉しいです。

    もし良ければtakatohさまの名前とこの記事のリンクを添えてRubyとSchemeのコードを元の記事に転記させていただきたいのですが、許可をいただけませんでしょうか。
    コードの転記が無理でしたらリンクを張るだけでもさせていただければと思います。

  2. 三井さん、コメントありがとうございます。
    リンクでも転載でもご自由にどうぞ。ほそぼそとやってますが、お互いにつながってこそのWebだと思ってますので、大歓迎です。

    1. お返事が遅くなりました。記事を更新して takatoh 様のコードを転記 & リンクさせていただきました。
      本当にありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください