Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function intcode(a)
- %TODO - SPLIT INTO MORE FUNCTIONS
- nparam = [3 3 1 1 2 2 3 3]; %number of parameters for opcode number "index"
- param = zeros(1,max(nparam)); %THIS STORES THE ADDRESS OF THE PARAMATER, NOT THE VALUE
- i=1; %pointer to start of a instruction
- while(a(i) ~=99)
- %fprintf('index : %d\n',i);
- inst = str2double(regexp(num2str(a(i)),'\d','match'));
- if size(inst,2) > 1
- opcode = inst(end-1)*10 + inst(end);
- else
- opcode = inst(end);
- inst = [0, inst(end)];
- end
- inst = [ zeros(1,max(nparam) - size(inst,2) + 2 ) inst]; %pad extra zeros. find better solution
- inst(end-1:end) = [];
- inst = fliplr(inst);
- for j = 1:nparam(opcode)
- if inst(j) == 0
- param(j) = a(i+j) + 1;
- else
- param(j) = i+j;
- end
- end
- switch (opcode)
- case 1
- a(param(3)) = a(param(1)) + a(param(2));
- i = i+4;
- case 2
- a(param(3)) = a(param(1)) * a(param(2));
- i=i+4;
- case 3
- a(param(1)) = input("enter input");
- i=i+2;
- case 4
- fprintf('%d \n',a(param(1)));
- i=i+2;
- case 5
- if a(param(1)) ~= 0
- i = a(param(2)) + 1;
- else
- i = i+3;
- end
- case 6
- if a(param(1)) == 0
- i = a(param(2)) + 1;
- else
- i = i+3;
- end
- case 7
- if a(param(1)) < a(param(2))
- a(param(3)) = 1;
- else
- a(param(3)) = 0;
- end
- i = i+4; %simplify this using nmarap
- case 8
- if a(param(1)) == a(param(2))
- a(param(3)) =1;
- else
- a(param(3)) = 0;
- end
- i=i+4;
- otherwise
- error("unknown opcode");
- end
- end
- end
Add Comment
Please, Sign In to add comment