つるかめ算
https://gyazo.com/898411472fd1577b005349a3c1b06ff0.png
方程式を立てて解くのが最もマトモなやり方だと思うが、プログラミング時代には「ツルとカメの数をゼロから増やしていって条件を満たすものがあれば終了する」という方法もアリな気がしてきた
現実の問題を解くにはこの方が有効かも
条件が線型でなくても解くことができるし。
ツルが100万匹とかなら大変だけど
code: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変数以上でも同様でイケる
code:ruby
(0..1000).each { |i|
(0..i).each { |j|
}
}
あ、これだとマズい
j < i な答しか出ない! 上のアルゴリズムは間違い!
これならたぶん大丈夫
code: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
end
}
}
nil
end
テスト
code: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
}
end
end
意外とテストに時間がかかる... 何故かな?