generated at
つるかめ算

数え上げで解けるハズ
方程式を立てて解くのが最もマトモなやり方だと思うが、プログラミング時代には「ツルとカメの数をゼロから増やしていって条件を満たすものがあれば終了する」という方法もアリな気がしてきた
現実の問題を解くにはこの方が有効かも
条件が線型でなくても解くことができるし。
ツルが100万匹とかなら大変だけど

tsurukame.js
for(t=0;t<=30;t++){ for(k=0;k<=30;k++){ if(t+k==30&&t*2+k*4==100){ alert(`鶴${t}匹, 亀${k}匹`) } } }

(0, 0) (0, 1) (1, 0) (0, 2) (1, 1) (2, 0) (0, 3) (1, 2) ... と数え上げるのはちょっと工夫がいりそう
そうでもなかった
3変数以上でも同様でイケる
ruby
(0..1000).each { |i| (0..i).each { |j| puts "(#{i}, #{j})" } }
あ、これだとマズい
j < i な答しか出ない! 上のアルゴリズムは間違い!

これならたぶん大丈夫
tsurukame.rb
# # 匹数と足の数から鶴と亀の数を計算(?)する # def tsurukame(number, foots) (0..number).each { |total| (0..total).each { |tsuru| kame = total - tsuru if tsuru + kame == number && tsuru * 2 + kame * 4 == foots return [tsuru, kame] end } } nil end

テスト
tsurukame_test.rb
require 'test/unit' require './tsurukame' class TestTsurukame < Test::Unit::TestCase def test_tsurukame 100.times { tsuru = rand(1000) kame = rand(1000) foots = tsuru * 2 + kame * 4 number = tsuru + kame assert tsurukame(number,foots) == [tsuru, kame] } end end
意外とテストに時間がかかる... 何故かな?