3-a
# Adbent Calendar Day
input = [];
File.foreach("3_input.dat").with_index do |line, line_num|
input.push(line)
end
array = [0,0,0,0,0,0,0,0,0,0,0,0];
input.each_with_index do |line, index|
if line[0].to_i == 1 then
array[0] = array[0] + 1
end
if line[1].to_i == 1 then
array[1] = array[1] + 1
end
if line[2].to_i == 1 then
array[2] = array[2] + 1
end
if line[3].to_i == 1 then
array[3] = array[3] + 1
end
if line[4].to_i == 1 then
array[4] = array[4] + 1
end
if line[5].to_i == 1 then
array[5] = array[5] + 1
end
if line[6].to_i == 1 then
array[6] = array[6] + 1
end
if line[7].to_i == 1 then
array[7] = array[7] + 1
end
if line[8].to_i == 1 then
array[8] = array[8] + 1
end
if line[9].to_i == 1 then
array[9] = array[9] + 1
end
if line[10].to_i == 1 then
array[10] = array[10] + 1
end
if line[11].to_i == 1 then
array[11] = array[11] + 1
end
end
p array3-b
# Adbent Calendar Day2-b
array = [];
File.foreach("2_input.dat").with_index do |line, line_num|
array.push(line)
end
h = 0;
d = 0;
aim = 0;
array.each_with_index do |line, index|
if line[0] == "f" then
h = h + line[8].to_i
d = d + (line[8].to_i * aim)
elsif line[0] == "u" then
aim = aim - line[3].to_i
else
aim = aim + line[5].to_i
end
end
puts "horizontal: #{h}"
puts "depth: #{d}"
puts h * dメモ
今回の問題は色々学びが多かった。
- 配列をeachで回してる時にその配列内の要素を消去してはいけない。配列要素を参照しているポインターがずれてしまうので、ループが上手くいかなくなる。delete_ifメソッドを代わりに使う。
array = [0,0,0,0,1,1,0,1,0,1]
#これはダメ
array.each do |n|
if n == 1
array.delete(n)
end
end
#代わりにこっちを使う
arry.delete_if do |n|
n == 1
end後はLoopのExit条件は問題通り正確に実装しよう。こうしたら試行回数減らせるんじゃない?っていう安易な考えで実装してはいけない。特に問題なければ読んだ通りにコードに落とし込もう。自戒。