数独つづき
Uchからの有り難いコメント
yu 『これからあの時間は『数独システム開発実践』ってことで,
9*9の2次元配列より, 3*3の2次元配列が9個あるってしたらどうなんやろ?
そのほうが, なんとなくキレイにできそうやけど・・・?』 (2006/05/23 03:13)
より,数独を改良.
ってか昨日書いてたコードは,寝ぼけた頭で書かれたせいか,糞みたいな挙動しか出来ない事に気づきました.
class Field def initialize @f = Array.new(9){|e| e = Array.new(9)} end attr_reader :f def inputnums puts "\t123456789" a = 0 # fの一次の添字 (1 .. 9).each do |i| l = [] while l.size != 9 print "line #{i}:\t" l = gets.chomp.split(//) l.map!{|e| e.to_i} end if i % 3 == 1 @f[a][0..2] = l[0..2] @f[a + 1][0..2] = l[3..5] @f[a + 2][0..2] = l[6..8] elsif i % 3 == 2 @f[a][3..5] = l[0..2] @f[a + 1][3..5] = l[3..5] @f[a + 2][3..5] = l[6..8] else @f[a][6..8] = l[0..2] @f[a + 1][6..8] = l[3..5] @f[a + 2][6..8] = l[6..8] a += 3 end end end end
昨日のコードから更新された部分です.もうArrayクラスからの継承とか止めました.この方が簡単だし.ただ,fに入力の値を格納するとこが何とも見にくいなぁ.
実際にirbで試してみました.
> f = Field.new =>(略) > f.inputnums 123456789 line 1: 123456789 (略) line 9: 123456789 => 1..9 > f.put_result 123123123 456456456 789789789 123123123 456456456 789789789 123123123 456456456 789789789 =>(略)
put_resultは昨日のままです.分かり易いように.これで,3*3が9個になったかしら.
それじゃput_resultを書き直します.
def put_result a = 0 (1 .. 9).each do |i| if i % 3 == 1 print @f[a][0..2],@f[a + 1][0..2],@f[a + 2][0..2] puts elsif i % 3 == 2 print @f[a][3..5],@f[a + 1][3..5],@f[a + 2][3..5] puts else print @f[a][6..8],@f[a + 1][6..8],@f[a + 2][6..8] puts a += 3 end end end
気持ち悪い.
実行.
> f.inputnums 123456789 line 1: 123456789 line 2: 234567891 (略) line 8: 891234567 line 9: 912345678 > f.put_result 123456789 234567891 (略) 891234567 912345678
ちゃんとできてる.そりゃこんなごり押しだもの.