Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- part1 = false;
- part2 = true;
- fid = fopen('input.txt','r');
- % Note: #ip 2 stripped from input before loading
- s = {};
- while 1
- str = fgetl(fid);
- if str==-1; break;end
- s(end+1,:) = {str};
- end
- fclose(fid);
- %extract program
- instr = cell(size(s,1),1);
- for i=1:size(s,1)
- tmp = str2num(s{i}(5:end));
- instr{i,1} = s{i}(1:4);
- instr{i,2} = tmp(1);
- instr{i,3} = tmp(2);
- instr{i,4} = tmp(3);
- end
- R = [0,0,0,0,0,0];
- if part2
- R(1) = 1;
- end
- if part1
- IP = 0;
- IPR = 2;
- cnt = 1;
- while IP > -1 && IP < size(instr,1)
- cnt =cnt+1;
- R = applyOpCode(R,instr(IP+1,:));
- IP = R(IPR+1);
- IP = IP+1;
- R(IPR+1) = IP;
- end
- disp(R(1))% Part 1
- end
- if part2
- IP = 0;
- IPR = 2;
- cnt = 1;
- for i=1:20
- cnt = cnt+1;
- R = applyOpCode(R,instr(IP+1,:));
- IP = R(IPR+1);
- IP = IP+1;
- R(IPR+1) = IP;
- end
- disp(sum(divisors(R(2)))) % Part 2
- end
- toc
- disp('Finished')
- function y = applyOpCode(x,opCode)
- y = x;
- switch opCode{1}
- case 'addr'
- y(opCode{4}+1) = x(opCode{2}+1) + x(opCode{3}+1);
- case 'addi'
- y(opCode{4}+1) = x(opCode{2}+1) + opCode{3};
- case 'mulr'
- y(opCode{4}+1) = x(opCode{2}+1) * x(opCode{3}+1);
- case 'muli'
- y(opCode{4}+1) = x(opCode{2}+1) * opCode{3};
- case 'banr'
- y(opCode{4}+1) = bitand(x(opCode{2}+1),x(opCode{3}+1));
- case 'bani'
- y(opCode{4}+1) = bitand(x(opCode{2}+1),opCode{3});
- case 'borr'
- y(opCode{4}+1) = bitor(x(opCode{2}+1),x(opCode{3}+1));
- case 'bori'
- y(opCode{4}+1) = bitor(x(opCode{2}+1),opCode{3});
- case 'setr'
- y(opCode{4}+1) = x(opCode{2}+1);
- case 'seti'
- y(opCode{4}+1) = opCode{2};
- case 'gtir'
- y(opCode{4}+1) = opCode{2} > x(opCode{3}+1);
- case 'gtri'
- y(opCode{4}+1) = x(opCode{2}+1) > opCode{3};
- case 'gtrr'
- y(opCode{4}+1) = x(opCode{2}+1) > x(opCode{3}+1);
- case 'eqir'
- y(opCode{4}+1) = opCode{2} == x(opCode{3}+1);
- case 'eqri'
- y(opCode{4}+1) = x(opCode{2}+1) == opCode{3};
- case 'eqrr'
- y(opCode{4}+1) = x(opCode{2}+1) == x(opCode{3}+1);
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment