defmodule Main do
input_program = [1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,6,19,23,2,23,6,27,1,5,27,31,1,10,31,35,2,6,35,39,1,39,13,43,1,43,9,47,2,47,10,51,1,5,51,55,1,55,10,59,2,59,6,63,2,6,63,67,1,5,67,71,2,9,71,75,1,75,6,79,1,6,79,83,2,83,9,87,2,87,13,91,1,10,91,95,1,95,13,99,2,13,99,103,1,103,10,107,2,107,10,111,1,111,9,115,1,115,2,119,1,9,119,0,99,2,0,14,0]
defmodule LoopThroughArray do
def runcommand(list, n) when n >= length(list)-1 do
end
def runcommand(list, n) do
command = Enum.at(list,n)
p1 = Enum.at(list,n+1)
p2 = Enum.at(list,n+2)
p3 = Enum.at(list,n+3)
v1 = Enum.at(list,p1)
v2 = Enum.at(list,p2)
cond do
command == 99 ->
Enum.at(list,0)
command == 1 ->
vsum = v1+v2
IO.
puts "Add #{v1} #{v2} = #{vsum}" List.delete_at(list, Enum.at(list,p3))
List.insert_at(list, Enum.at(list,p3), vsum)
runcommand(list, n + 4)
command == 2 ->
vprod = v1*v2
IO.
puts "Multiply #{v1} #{v2} = #{vprod}" List.delete_at(list, Enum.at(list,p3))
List.insert_at(list, Enum.at(list,p3), vprod)
runcommand(list, n + 4)
true ->
end
end
end
pos0= LoopThroughArray.runcommand(input_program, 0)
end
ZGVmbW9kdWxlIE1haW4gZG8KCiAgSU8ucHV0cygiU3RhcnRpbmciKQoKICBpbnB1dF9wcm9ncmFtID0gWzEsMCwwLDMsMSwxLDIsMywxLDMsNCwzLDEsNSwwLDMsMiwxMywxLDE5LDEsNiwxOSwyMywyLDIzLDYsMjcsMSw1LDI3LDMxLDEsMTAsMzEsMzUsMiw2LDM1LDM5LDEsMzksMTMsNDMsMSw0Myw5LDQ3LDIsNDcsMTAsNTEsMSw1LDUxLDU1LDEsNTUsMTAsNTksMiw1OSw2LDYzLDIsNiw2Myw2NywxLDUsNjcsNzEsMiw5LDcxLDc1LDEsNzUsNiw3OSwxLDYsNzksODMsMiw4Myw5LDg3LDIsODcsMTMsOTEsMSwxMCw5MSw5NSwxLDk1LDEzLDk5LDIsMTMsOTksMTAzLDEsMTAzLDEwLDEwNywyLDEwNywxMCwxMTEsMSwxMTEsOSwxMTUsMSwxMTUsMiwxMTksMSw5LDExOSwwLDk5LDIsMCwxNCwwXQogICAgCiAgZGVmbW9kdWxlIExvb3BUaHJvdWdoQXJyYXkgZG8KICAgZGVmIHJ1bmNvbW1hbmQobGlzdCwgbikgd2hlbiBuID49IGxlbmd0aChsaXN0KS0xIGRvCiAgICAgIElPLnB1dHMgRW51bS5hdChsaXN0LDApCiAgIGVuZAoKICAgZGVmIHJ1bmNvbW1hbmQobGlzdCwgbikgZG8KICAgICAgY29tbWFuZCA9IEVudW0uYXQobGlzdCxuKQogICAgICBwMSA9IEVudW0uYXQobGlzdCxuKzEpCiAgICAgIHAyID0gRW51bS5hdChsaXN0LG4rMikKICAgICAgcDMgPSBFbnVtLmF0KGxpc3QsbiszKQogICAgICB2MSA9IEVudW0uYXQobGlzdCxwMSkKICAgICAgdjIgPSBFbnVtLmF0KGxpc3QscDIpCgogICAgICBjb25kIGRvCiAgICAgICAgY29tbWFuZCA9PSA5OSAtPgogICAgICAgICAgSU8ucHV0cyBFbnVtLmF0KGxpc3QsMCkKCSAgICAgIEVudW0uYXQobGlzdCwwKQogICAgICAgIGNvbW1hbmQgPT0gMSAtPgogICAgICAgICAgdnN1bSA9IHYxK3YyCiAgICAgICAgICBJTy5wdXRzICJBZGQgI3t2MX0gI3t2Mn0gPSAje3ZzdW19IgogICAgICAgICAgTGlzdC5kZWxldGVfYXQobGlzdCwgRW51bS5hdChsaXN0LHAzKSkKICAgICAgICAgIExpc3QuaW5zZXJ0X2F0KGxpc3QsIEVudW0uYXQobGlzdCxwMyksIHZzdW0pCiAgICAgICAgICBydW5jb21tYW5kKGxpc3QsIG4gKyA0KQogICAgICAgIGNvbW1hbmQgPT0gMiAtPgogICAgICAgICAgdnByb2QgPSB2MSp2MgogICAgICAgICAgSU8ucHV0cyAiTXVsdGlwbHkgI3t2MX0gI3t2Mn0gPSAje3Zwcm9kfSIKICAgICAgICAgIExpc3QuZGVsZXRlX2F0KGxpc3QsIEVudW0uYXQobGlzdCxwMykpCiAgICAgICAgICBMaXN0Lmluc2VydF9hdChsaXN0LCBFbnVtLmF0KGxpc3QscDMpLCB2cHJvZCkKICAgICAgICAgIHJ1bmNvbW1hbmQobGlzdCwgbiArIDQpCiAgICAgICAgdHJ1ZSAgLT4KICAgICAgICAgIElPLnB1dHMgImVycm9yIgogICAgICAgIGVuZAogICBlbmQKICBlbmQKICBwb3MwPSBMb29wVGhyb3VnaEFycmF5LnJ1bmNvbW1hbmQoaW5wdXRfcHJvZ3JhbSwgMCkKICAKICBJTy5wdXRzIHBvczAKICBJTy5wdXRzKCJGaW5pc2hlZCIpCmVuZAoK