Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

72 Zeilen
1.6KB

  1. //
  2. // Created by red on 02/12/19.
  3. //
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <stdint.h>
  8. void print_elems(long* arr, size_t n);
  9. long run(const long* input, size_t n, long noun, long verb);
  10. int main() {
  11. char input_str[350];
  12. memset(input_str, 0, 350*sizeof(char));
  13. long input[140];
  14. char* ptr = input_str;
  15. size_t i = 0;
  16. scanf("%s", input_str);
  17. while (*ptr != 0 && input_str - ptr < 350) {
  18. input[i] = strtol(ptr, &ptr, 10);
  19. i++;
  20. ptr++;
  21. }
  22. size_t size = i;
  23. long out = run(input, size, 12, 2);
  24. printf("Value of mem[0] with noun=12, verb=2: %ld\n", out);
  25. for (i = 0; i < 100; i++) {
  26. for (long j = 0; j < 100; j++) {
  27. long out = run(input, size, i, j);
  28. if (out == 19690720) {
  29. printf("Noun+verb found! n: %ld, v: %ld\n", i, j);
  30. return EXIT_SUCCESS;
  31. }
  32. }
  33. }
  34. }
  35. long run(const long* input, size_t n, long noun, long verb) {
  36. long mem[n];
  37. memcpy((void*) mem, (const void*) input, n*sizeof(long));
  38. size_t ptr = 0;
  39. mem[1] = noun;
  40. mem[2] = verb;
  41. while (ptr < n) {
  42. long opcode = mem[ptr];
  43. if (opcode == 1) {
  44. long a = mem[ptr+1];
  45. long b = mem[ptr+2];
  46. long c = mem[ptr+3];
  47. mem[c] = mem[a] + mem[b];
  48. ptr += 4;
  49. } else if (opcode == 2) {
  50. long a = mem[ptr+1];
  51. long b = mem[ptr+2];
  52. long c = mem[ptr+3];
  53. mem[c] = mem[a] * mem[b];
  54. ptr += 4;
  55. } else if (opcode == 99) {
  56. return mem[0];
  57. } else break;
  58. }
  59. return -1;
  60. }
  61. void print_elems(long* arr, size_t n) {
  62. puts("Printing elements of array");
  63. for (size_t i = 0; i < n; i++) {
  64. printf("%ld ", arr[i]);
  65. }
  66. puts("");
  67. }