fork download
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define LEN 128
  6.  
  7. struct marble {
  8. long count;
  9. struct marble *next;
  10. struct marble *prev;
  11. } *anchor, *current, *t1, *t2, *t3;
  12.  
  13. int main(void) {
  14. current=malloc(sizeof(struct marble));
  15. current->next = current->prev = current;
  16. current->count=0L;
  17. anchor = current;
  18. char line[LEN];
  19. long maxplayers = 9;
  20. long maxpoints = 30;
  21. // fgets(line,LEN,stdin);
  22. // sscanf(line,"%ld players; last marble is worth %ld points", &maxplayers, &maxpoints);
  23.  
  24. long player[maxplayers];
  25. memset(player,0L,sizeof(player));
  26.  
  27. long currentmarble=1L;
  28. long toppoint=0L;
  29. long currentplayer=0L;
  30.  
  31. while(toppoint<maxpoints)
  32. {
  33. /* t1=anchor;
  34. printf("[%ld] ",currentplayer+1);
  35.  
  36. while(t1->next != anchor)
  37. {
  38. printf("%ld ", t1->count);
  39. t1 = t1->next;
  40. }
  41. printf("%ld ", t1->count);
  42. printf("\n");
  43. */
  44.  
  45. if(currentmarble && currentmarble%23==0)
  46. {
  47. player[currentplayer] += currentmarble++;
  48. t2=current;
  49. for(int i=0;i<7;i++)
  50. t2 = t2->prev;
  51.  
  52. player[currentplayer] += t2->count;
  53. printf("%ld\n",currentmarble);
  54.  
  55. t1 = t2->prev;
  56. t3 = t2->next;
  57.  
  58. t1->next = t3;
  59. t3->prev = t1;
  60.  
  61. current = t3;
  62.  
  63. free(t2);
  64.  
  65. } else {
  66. t2 = malloc(sizeof(struct marble));
  67. t1 = current->next;
  68. t3 = t1->next;
  69.  
  70. t2->next = t3;
  71. t2->prev = t1;
  72.  
  73. t1->next = t2;
  74. t3->prev = t2;
  75.  
  76. current = t2;
  77. current->count = currentmarble++;
  78. }
  79.  
  80. if(toppoint<player[currentplayer])
  81. toppoint=player[currentplayer];
  82.  
  83. currentplayer++;
  84. currentplayer%=maxplayers;
  85.  
  86.  
  87. }
  88.  
  89. printf("%ld\n",toppoint);
  90.  
  91. return 0;
  92. }
  93.  
Success #stdin #stdout 0s 5272KB
stdin
405 players; last marble is worth 70953 points
stdout
24
32