# Create an integer arithmetic unit for your spaceship computer and help the sailors! !

## Problem

For the following inputs, implement and show the value of the output array [0].

#### Input

``````[1,1,28,3,1,1,2,3,1,3,4,3,1,5,0,3,2,9,1,19,1,9,19,23,1 ,23,5,27,2,27,10,31,1,6,31,35,1,6,35,39,2,9,39,43,1,6,43,47,1,47 ,5,51,1,51,13,55,1,55,13,59,1,59,5,63,2,63,6,67,1,5,67,71,1,71,13 ,75,1,10,75,79,2,79,6,83,2,9,83,87,1,5,87,91,1,91,5,95,2,9,95,99 ,1,6,99,103,1,9,103,107,2,9,107,111,1,111,6,115,2,9,115,119,1,119,6,123,1,123,9,127,2,127,13,131,1,131,9,135,1,10,135,139,2,139,10,143,1,143,5,147 ,2,147,6,151,1,151,5,155,1,2,155,159,1,6,159,0,99,2,0,14,0];
``````

#### output

Arrays whose input arrays are the same size

##### Example
``````Input: [1,0,0,0,99]. Output: [2,0,0,0,99] Cause (1 + 1 = 2).
Input: [2,3,0,3,99]. Output: [2,3,0,6,99] Cause (3 * 2 = 6).
Input: [2,4,4,5,99,0]. Output: [2,4,4,5,99,9801] Cause (99 * 99 = 9801).
Input: [1,1,1,4,99,5,6,0,99]. Output: [30,1,1,4,2,5,6,0,99]
``````
##### constraints

None. Language is not limited.

##### Bonus

What is the value of the input arrays [1] and [2] when the output array [0] is 19690720? The possible range is 0 to 99.

``````const intCodeComputer = (intCode=[99]) => {
for(let i=0; i<intCode.length; i+=4){
if(intCode[i] === 99) return intCode;
switch(intCode[i]) {
case 1:
intCode[intCode[i+3]] = intCode[intCode[i+1]] + intCode[intCode[i+2]];
break;
case 2:
intCode[intCode[i+3]] = intCode[intCode[i+1]] * intCode[intCode[i+2]];
break;
default: break;
}
}
};

``````
``````static void Main(string[] args)
{
Console.WriteLine(string.Join(',', OperationRecursive(args, 0)));
}

private static int[] OperationRecursive(int[] sources, int step)
{
int calc(Func<int, int, int> f, int x, int y) => f(x, y);

var targets = sources.Skip(step * 4).Take(4).ToArray();

if (targets[0] == 99)
return sources;
if (targets[0] == 1)
sources.SetValue(calc((x, y) => x + y, sources[targets[1]], sources[targets[2]]), targets[3]);
if (targets[0] == 2)
sources.SetValue(calc((x, y) => x * y, sources[targets[1]], sources[targets[2]]), targets[3]);

return OperationRecursive(sources, step + 1);
}
``````
``````func main() {
numlist := []int{}
for i := 0; i <len(numlist); i += 4 {
var a = numlist[i+1]
var b = numlist[i+2]
var c = numlist[i+3]

if numlist[i] == 1 {
var d = numlist[a] + numlist[b]
numlist[c] = d
}

if numlist[i] == 2 {
var d = numlist[a] * numlist[b]
numlist[c] = d
}

if numlist[i] == 99 {
break
}
}
fmt.Println(numlist[0])
}
``````
``````public class Main {
public static void main(String[] args) {
int [] arrayCode = {};
for(int i=0;i<arrayCode.length; i+=4)
{
if(arrayCode[i]==99){
break;
}

if(arrayCode[i]==1)
{
arrayCode[arrayCode[i+3]] = arrayCode[arrayCode[i+1]] + arrayCode[arrayCode[i+2]];
}
else if(arrayCode[i]==2)
{
arrayCode[arrayCode[i+3]] = arrayCode[arrayCode[i+1]] * arrayCode[arrayCode[i+2]];
}
}
System.out.print(arrayCode[0]);
}
}
``````
``````my @array = (1,0,0,0,99);

sub calc {
my @array = @_;
my \$length = @array;

for (my \$i = 0; \$i <\$length; \$i+=4) {
(\$array[\$i] == 99) && (last);

if (\$array[\$i] == 1) {
\$array[\$array[\$i+3]] = \$array[\$array[\$i+1]] + \$array[\$array[\$i+2]]
} elsif (\$array[\$i] == 2) {
\$array[\$array[\$i+3]] = \$array[\$array[\$i+1]] * \$array[\$array[\$i+2]]
}
}
return \$array[0];
}

\$result = &calc(@array);

print "\$result";
``````

Tags:

Updated: