fork download
  1. <?php
  2. $input=<<<INPUT
  3. many amaze 99 time
  4.  
  5. such scare bottles-of-beer
  6. such scream on-the-wall
  7. many despair 13 time
  8.  
  9. such fail take-one-down-pass-it-around
  10.  
  11. wow
  12.  
  13. so amaze
  14. so scare
  15. so scream
  16. so despair!
  17.  
  18. so amaze
  19. so scare
  20. so despair!
  21.  
  22. much amaze
  23.  
  24. so fail
  25. so despair!
  26.  
  27. so amaze
  28. so scare
  29. so scream
  30.  
  31. so despair!
  32. so despair!
  33.  
  34. very amaze
  35.  
  36. wow
  37. INPUT;
  38.  
  39. //pre-process input
  40. $input=preg_replace("/ +/", " ", $input); //replace any multiple spaces by a single space
  41.  
  42. //split into instructions by newlines
  43. $instructions=explode("\n", $input);
  44.  
  45. $loopstartpoint= -1;
  46. $variables=array();
  47. $activevariable="";
  48. for($instrpointer=0; $instrpointer<count($instructions); $instrpointer++)
  49. {
  50. $tokens=explode(" ", $instructions[$instrpointer]);
  51. switch($tokens[0])
  52. {
  53. case "wow":
  54. if($loopstartpoint<0)
  55. {
  56. $loopstartpoint=$instrpointer+1;
  57. }
  58. else
  59. {
  60. if($variables[ $activevariable ])
  61. {
  62. $instrpointer=$loopstartpoint;
  63. }
  64. else
  65. {
  66. $loopstartpoint= -1;
  67. }
  68. }
  69. break;
  70. case "so":
  71. if(substr($tokens[1], -1)=="!")
  72. {
  73. echo chr($variables[ substr($tokens[1], 0, -1) ]);
  74. }
  75. else
  76. {
  77. echo $variables[ $tokens[1] ];
  78. echo " ";
  79. }
  80. break;
  81. case "very":
  82. $activevariable=$tokens[1];
  83. break;
  84. case "much":
  85. if(!isset($variables[ $tokens[1] ]))
  86. $variables[ $tokens[1] ]=0;
  87. if(count($tokens)==2)
  88. {
  89. $variables[ $tokens[1] ]--;
  90. }
  91. else
  92. {
  93. for($loop=0;$loop<$tokens[2];$loop++)
  94. {
  95. $variables[ $tokens[1] ]--;
  96. }
  97. }
  98. $activevariable=$tokens[1];
  99. break;
  100. case "many":
  101. if(!isset($variables[ $tokens[1] ]))
  102. $variables[ $tokens[1] ]=0;
  103. if(count($tokens)==2)
  104. {
  105. $variables[ $tokens[1] ]++;
  106. }
  107. else
  108. {
  109. for($loop=0;$loop<$tokens[2];$loop++)
  110. {
  111. $variables[ $tokens[1] ]++;
  112. }
  113. }
  114. $activevariable=$tokens[1];
  115. break;
  116. case "such":
  117. $variables[ $tokens[1] ]=$tokens[2];
  118. $activevariable=$tokens[1];
  119. break;
  120. }
  121. }
  122. ?>
Success #stdin #stdout 0.03s 20520KB
stdin
Standard input is empty
stdout
99 bottles-of-beer on-the-wall 
99 bottles-of-beer 
take-one-down-pass-it-around 
98 bottles-of-beer on-the-wall 

98 bottles-of-beer on-the-wall 
98 bottles-of-beer 
take-one-down-pass-it-around 
97 bottles-of-beer on-the-wall 

97 bottles-of-beer on-the-wall 
97 bottles-of-beer 
take-one-down-pass-it-around 
96 bottles-of-beer on-the-wall 

96 bottles-of-beer on-the-wall 
96 bottles-of-beer 
take-one-down-pass-it-around 
95 bottles-of-beer on-the-wall 

95 bottles-of-beer on-the-wall 
95 bottles-of-beer 
take-one-down-pass-it-around 
94 bottles-of-beer on-the-wall 

94 bottles-of-beer on-the-wall 
94 bottles-of-beer 
take-one-down-pass-it-around 
93 bottles-of-beer on-the-wall 

93 bottles-of-beer on-the-wall 
93 bottles-of-beer 
take-one-down-pass-it-around 
92 bottles-of-beer on-the-wall 

92 bottles-of-beer on-the-wall 
92 bottles-of-beer 
take-one-down-pass-it-around 
91 bottles-of-beer on-the-wall 

91 bottles-of-beer on-the-wall 
91 bottles-of-beer 
take-one-down-pass-it-around 
90 bottles-of-beer on-the-wall 

90 bottles-of-beer on-the-wall 
90 bottles-of-beer 
take-one-down-pass-it-around 
89 bottles-of-beer on-the-wall 

89 bottles-of-beer on-the-wall 
89 bottles-of-beer 
take-one-down-pass-it-around 
88 bottles-of-beer on-the-wall 

88 bottles-of-beer on-the-wall 
88 bottles-of-beer 
take-one-down-pass-it-around 
87 bottles-of-beer on-the-wall 

87 bottles-of-beer on-the-wall 
87 bottles-of-beer 
take-one-down-pass-it-around 
86 bottles-of-beer on-the-wall 

86 bottles-of-beer on-the-wall 
86 bottles-of-beer 
take-one-down-pass-it-around 
85 bottles-of-beer on-the-wall 

85 bottles-of-beer on-the-wall 
85 bottles-of-beer 
take-one-down-pass-it-around 
84 bottles-of-beer on-the-wall 

84 bottles-of-beer on-the-wall 
84 bottles-of-beer 
take-one-down-pass-it-around 
83 bottles-of-beer on-the-wall 

83 bottles-of-beer on-the-wall 
83 bottles-of-beer 
take-one-down-pass-it-around 
82 bottles-of-beer on-the-wall 

82 bottles-of-beer on-the-wall 
82 bottles-of-beer 
take-one-down-pass-it-around 
81 bottles-of-beer on-the-wall 

81 bottles-of-beer on-the-wall 
81 bottles-of-beer 
take-one-down-pass-it-around 
80 bottles-of-beer on-the-wall 

80 bottles-of-beer on-the-wall 
80 bottles-of-beer 
take-one-down-pass-it-around 
79 bottles-of-beer on-the-wall 

79 bottles-of-beer on-the-wall 
79 bottles-of-beer 
take-one-down-pass-it-around 
78 bottles-of-beer on-the-wall 

78 bottles-of-beer on-the-wall 
78 bottles-of-beer 
take-one-down-pass-it-around 
77 bottles-of-beer on-the-wall 

77 bottles-of-beer on-the-wall 
77 bottles-of-beer 
take-one-down-pass-it-around 
76 bottles-of-beer on-the-wall 

76 bottles-of-beer on-the-wall 
76 bottles-of-beer 
take-one-down-pass-it-around 
75 bottles-of-beer on-the-wall 

75 bottles-of-beer on-the-wall 
75 bottles-of-beer 
take-one-down-pass-it-around 
74 bottles-of-beer on-the-wall 

74 bottles-of-beer on-the-wall 
74 bottles-of-beer 
take-one-down-pass-it-around 
73 bottles-of-beer on-the-wall 

73 bottles-of-beer on-the-wall 
73 bottles-of-beer 
take-one-down-pass-it-around 
72 bottles-of-beer on-the-wall 

72 bottles-of-beer on-the-wall 
72 bottles-of-beer 
take-one-down-pass-it-around 
71 bottles-of-beer on-the-wall 

71 bottles-of-beer on-the-wall 
71 bottles-of-beer 
take-one-down-pass-it-around 
70 bottles-of-beer on-the-wall 

70 bottles-of-beer on-the-wall 
70 bottles-of-beer 
take-one-down-pass-it-around 
69 bottles-of-beer on-the-wall 

69 bottles-of-beer on-the-wall 
69 bottles-of-beer 
take-one-down-pass-it-around 
68 bottles-of-beer on-the-wall 

68 bottles-of-beer on-the-wall 
68 bottles-of-beer 
take-one-down-pass-it-around 
67 bottles-of-beer on-the-wall 

67 bottles-of-beer on-the-wall 
67 bottles-of-beer 
take-one-down-pass-it-around 
66 bottles-of-beer on-the-wall 

66 bottles-of-beer on-the-wall 
66 bottles-of-beer 
take-one-down-pass-it-around 
65 bottles-of-beer on-the-wall 

65 bottles-of-beer on-the-wall 
65 bottles-of-beer 
take-one-down-pass-it-around 
64 bottles-of-beer on-the-wall 

64 bottles-of-beer on-the-wall 
64 bottles-of-beer 
take-one-down-pass-it-around 
63 bottles-of-beer on-the-wall 

63 bottles-of-beer on-the-wall 
63 bottles-of-beer 
take-one-down-pass-it-around 
62 bottles-of-beer on-the-wall 

62 bottles-of-beer on-the-wall 
62 bottles-of-beer 
take-one-down-pass-it-around 
61 bottles-of-beer on-the-wall 

61 bottles-of-beer on-the-wall 
61 bottles-of-beer 
take-one-down-pass-it-around 
60 bottles-of-beer on-the-wall 

60 bottles-of-beer on-the-wall 
60 bottles-of-beer 
take-one-down-pass-it-around 
59 bottles-of-beer on-the-wall 

59 bottles-of-beer on-the-wall 
59 bottles-of-beer 
take-one-down-pass-it-around 
58 bottles-of-beer on-the-wall 

58 bottles-of-beer on-the-wall 
58 bottles-of-beer 
take-one-down-pass-it-around 
57 bottles-of-beer on-the-wall 

57 bottles-of-beer on-the-wall 
57 bottles-of-beer 
take-one-down-pass-it-around 
56 bottles-of-beer on-the-wall 

56 bottles-of-beer on-the-wall 
56 bottles-of-beer 
take-one-down-pass-it-around 
55 bottles-of-beer on-the-wall 

55 bottles-of-beer on-the-wall 
55 bottles-of-beer 
take-one-down-pass-it-around 
54 bottles-of-beer on-the-wall 

54 bottles-of-beer on-the-wall 
54 bottles-of-beer 
take-one-down-pass-it-around 
53 bottles-of-beer on-the-wall 

53 bottles-of-beer on-the-wall 
53 bottles-of-beer 
take-one-down-pass-it-around 
52 bottles-of-beer on-the-wall 

52 bottles-of-beer on-the-wall 
52 bottles-of-beer 
take-one-down-pass-it-around 
51 bottles-of-beer on-the-wall 

51 bottles-of-beer on-the-wall 
51 bottles-of-beer 
take-one-down-pass-it-around 
50 bottles-of-beer on-the-wall 

50 bottles-of-beer on-the-wall 
50 bottles-of-beer 
take-one-down-pass-it-around 
49 bottles-of-beer on-the-wall 

49 bottles-of-beer on-the-wall 
49 bottles-of-beer 
take-one-down-pass-it-around 
48 bottles-of-beer on-the-wall 

48 bottles-of-beer on-the-wall 
48 bottles-of-beer 
take-one-down-pass-it-around 
47 bottles-of-beer on-the-wall 

47 bottles-of-beer on-the-wall 
47 bottles-of-beer 
take-one-down-pass-it-around 
46 bottles-of-beer on-the-wall 

46 bottles-of-beer on-the-wall 
46 bottles-of-beer 
take-one-down-pass-it-around 
45 bottles-of-beer on-the-wall 

45 bottles-of-beer on-the-wall 
45 bottles-of-beer 
take-one-down-pass-it-around 
44 bottles-of-beer on-the-wall 

44 bottles-of-beer on-the-wall 
44 bottles-of-beer 
take-one-down-pass-it-around 
43 bottles-of-beer on-the-wall 

43 bottles-of-beer on-the-wall 
43 bottles-of-beer 
take-one-down-pass-it-around 
42 bottles-of-beer on-the-wall 

42 bottles-of-beer on-the-wall 
42 bottles-of-beer 
take-one-down-pass-it-around 
41 bottles-of-beer on-the-wall 

41 bottles-of-beer on-the-wall 
41 bottles-of-beer 
take-one-down-pass-it-around 
40 bottles-of-beer on-the-wall 

40 bottles-of-beer on-the-wall 
40 bottles-of-beer 
take-one-down-pass-it-around 
39 bottles-of-beer on-the-wall 

39 bottles-of-beer on-the-wall 
39 bottles-of-beer 
take-one-down-pass-it-around 
38 bottles-of-beer on-the-wall 

38 bottles-of-beer on-the-wall 
38 bottles-of-beer 
take-one-down-pass-it-around 
37 bottles-of-beer on-the-wall 

37 bottles-of-beer on-the-wall 
37 bottles-of-beer 
take-one-down-pass-it-around 
36 bottles-of-beer on-the-wall 

36 bottles-of-beer on-the-wall 
36 bottles-of-beer 
take-one-down-pass-it-around 
35 bottles-of-beer on-the-wall 

35 bottles-of-beer on-the-wall 
35 bottles-of-beer 
take-one-down-pass-it-around 
34 bottles-of-beer on-the-wall 

34 bottles-of-beer on-the-wall 
34 bottles-of-beer 
take-one-down-pass-it-around 
33 bottles-of-beer on-the-wall 

33 bottles-of-beer on-the-wall 
33 bottles-of-beer 
take-one-down-pass-it-around 
32 bottles-of-beer on-the-wall 

32 bottles-of-beer on-the-wall 
32 bottles-of-beer 
take-one-down-pass-it-around 
31 bottles-of-beer on-the-wall 

31 bottles-of-beer on-the-wall 
31 bottles-of-beer 
take-one-down-pass-it-around 
30 bottles-of-beer on-the-wall 

30 bottles-of-beer on-the-wall 
30 bottles-of-beer 
take-one-down-pass-it-around 
29 bottles-of-beer on-the-wall 

29 bottles-of-beer on-the-wall 
29 bottles-of-beer 
take-one-down-pass-it-around 
28 bottles-of-beer on-the-wall 

28 bottles-of-beer on-the-wall 
28 bottles-of-beer 
take-one-down-pass-it-around 
27 bottles-of-beer on-the-wall 

27 bottles-of-beer on-the-wall 
27 bottles-of-beer 
take-one-down-pass-it-around 
26 bottles-of-beer on-the-wall 

26 bottles-of-beer on-the-wall 
26 bottles-of-beer 
take-one-down-pass-it-around 
25 bottles-of-beer on-the-wall 

25 bottles-of-beer on-the-wall 
25 bottles-of-beer 
take-one-down-pass-it-around 
24 bottles-of-beer on-the-wall 

24 bottles-of-beer on-the-wall 
24 bottles-of-beer 
take-one-down-pass-it-around 
23 bottles-of-beer on-the-wall 

23 bottles-of-beer on-the-wall 
23 bottles-of-beer 
take-one-down-pass-it-around 
22 bottles-of-beer on-the-wall 

22 bottles-of-beer on-the-wall 
22 bottles-of-beer 
take-one-down-pass-it-around 
21 bottles-of-beer on-the-wall 

21 bottles-of-beer on-the-wall 
21 bottles-of-beer 
take-one-down-pass-it-around 
20 bottles-of-beer on-the-wall 

20 bottles-of-beer on-the-wall 
20 bottles-of-beer 
take-one-down-pass-it-around 
19 bottles-of-beer on-the-wall 

19 bottles-of-beer on-the-wall 
19 bottles-of-beer 
take-one-down-pass-it-around 
18 bottles-of-beer on-the-wall 

18 bottles-of-beer on-the-wall 
18 bottles-of-beer 
take-one-down-pass-it-around 
17 bottles-of-beer on-the-wall 

17 bottles-of-beer on-the-wall 
17 bottles-of-beer 
take-one-down-pass-it-around 
16 bottles-of-beer on-the-wall 

16 bottles-of-beer on-the-wall 
16 bottles-of-beer 
take-one-down-pass-it-around 
15 bottles-of-beer on-the-wall 

15 bottles-of-beer on-the-wall 
15 bottles-of-beer 
take-one-down-pass-it-around 
14 bottles-of-beer on-the-wall 

14 bottles-of-beer on-the-wall 
14 bottles-of-beer 
take-one-down-pass-it-around 
13 bottles-of-beer on-the-wall 

13 bottles-of-beer on-the-wall 
13 bottles-of-beer 
take-one-down-pass-it-around 
12 bottles-of-beer on-the-wall 

12 bottles-of-beer on-the-wall 
12 bottles-of-beer 
take-one-down-pass-it-around 
11 bottles-of-beer on-the-wall 

11 bottles-of-beer on-the-wall 
11 bottles-of-beer 
take-one-down-pass-it-around 
10 bottles-of-beer on-the-wall 

10 bottles-of-beer on-the-wall 
10 bottles-of-beer 
take-one-down-pass-it-around 
9 bottles-of-beer on-the-wall 

9 bottles-of-beer on-the-wall 
9 bottles-of-beer 
take-one-down-pass-it-around 
8 bottles-of-beer on-the-wall 

8 bottles-of-beer on-the-wall 
8 bottles-of-beer 
take-one-down-pass-it-around 
7 bottles-of-beer on-the-wall 

7 bottles-of-beer on-the-wall 
7 bottles-of-beer 
take-one-down-pass-it-around 
6 bottles-of-beer on-the-wall 

6 bottles-of-beer on-the-wall 
6 bottles-of-beer 
take-one-down-pass-it-around 
5 bottles-of-beer on-the-wall 

5 bottles-of-beer on-the-wall 
5 bottles-of-beer 
take-one-down-pass-it-around 
4 bottles-of-beer on-the-wall 

4 bottles-of-beer on-the-wall 
4 bottles-of-beer 
take-one-down-pass-it-around 
3 bottles-of-beer on-the-wall 

3 bottles-of-beer on-the-wall 
3 bottles-of-beer 
take-one-down-pass-it-around 
2 bottles-of-beer on-the-wall 

2 bottles-of-beer on-the-wall 
2 bottles-of-beer 
take-one-down-pass-it-around 
1 bottles-of-beer on-the-wall 

1 bottles-of-beer on-the-wall 
1 bottles-of-beer 
take-one-down-pass-it-around 
0 bottles-of-beer on-the-wall