Guest User

Untitled

a guest
Dec 5th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. function intcode(a)
  2. %TODO - SPLIT INTO MORE FUNCTIONS
  3.  
  4. nparam = [3 3 1 1 2 2 3 3]; %number of parameters for opcode number "index"
  5. param = zeros(1,max(nparam)); %THIS STORES THE ADDRESS OF THE PARAMATER, NOT THE VALUE
  6. i=1; %pointer to start of a instruction
  7.  
  8. while(a(i) ~=99)
  9. %fprintf('index : %d\n',i);
  10. inst = str2double(regexp(num2str(a(i)),'\d','match'));
  11. if size(inst,2) > 1
  12. opcode = inst(end-1)*10 + inst(end);
  13. else
  14. opcode = inst(end);
  15. inst = [0, inst(end)];
  16. end
  17. inst = [ zeros(1,max(nparam) - size(inst,2) + 2 ) inst]; %pad extra zeros. find better solution
  18. inst(end-1:end) = [];
  19. inst = fliplr(inst);
  20.  
  21.  
  22. for j = 1:nparam(opcode)
  23. if inst(j) == 0
  24. param(j) = a(i+j) + 1;
  25. else
  26. param(j) = i+j;
  27. end
  28. end
  29.  
  30.  
  31. switch (opcode)
  32. case 1
  33. a(param(3)) = a(param(1)) + a(param(2));
  34. i = i+4;
  35. case 2
  36. a(param(3)) = a(param(1)) * a(param(2));
  37. i=i+4;
  38. case 3
  39. a(param(1)) = input("enter input");
  40. i=i+2;
  41. case 4
  42. fprintf('%d \n',a(param(1)));
  43. i=i+2;
  44. case 5
  45. if a(param(1)) ~= 0
  46. i = a(param(2)) + 1;
  47. else
  48. i = i+3;
  49. end
  50. case 6
  51. if a(param(1)) == 0
  52. i = a(param(2)) + 1;
  53. else
  54. i = i+3;
  55. end
  56. case 7
  57. if a(param(1)) < a(param(2))
  58. a(param(3)) = 1;
  59. else
  60. a(param(3)) = 0;
  61. end
  62. i = i+4; %simplify this using nmarap
  63. case 8
  64. if a(param(1)) == a(param(2))
  65. a(param(3)) =1;
  66. else
  67. a(param(3)) = 0;
  68. end
  69. i=i+4;
  70. otherwise
  71. error("unknown opcode");
  72. end
  73. end
  74.  
  75. end
Add Comment
Please, Sign In to add comment