// This is beer.txt. Strip out all comments to have a valid INTERCAL // program beer.i that prints out the complete lyrics to 99 Bottles of Beer // on the Wall. The string arrays were computed by a 115 line perl // program. // It cops out and relies on the standard library routines for // addition and subtraction to do the x++ operation. // -Matt DiMeo // -mdimeo@brooktree.com // ,10 is a bare newline from scratch. PLEASE DO ,10 <- #1 PLEASE DO ,10SUB#1 <- #176 // ,11 is bottles of beer on the wall, PLEASE DO ,11 <- #30 PLEASE DO ,11SUB#1 <- #76 DO ,11SUB#2 <- #190 DO ,11SUB#3 <- #80 DO ,11SUB#4 <- #200 PLEASE DO ,11SUB#5 <- #256 DO ,11SUB#6 <- #248 DO ,11SUB#7 <- #144 DO ,11SUB#8 <- #216 PLEASE DO ,11SUB#9 <- #202 DO ,11SUB#10 <- #14 DO ,11SUB#11 <- #144 DO ,11SUB#12 <- #98 PLEASE DO ,11SUB#13 <- #190 DO ,11SUB#14 <- #160 DO ,11SUB#15 <- #256 DO ,11SUB#16 <- #88 PLEASE DO ,11SUB#17 <- #74 DO ,11SUB#18 <- #14 DO ,11SUB#19 <- #128 DO ,11SUB#20 <- #114 PLEASE DO ,11SUB#21 <- #214 DO ,11SUB#22 <- #24 DO ,11SUB#23 <- #112 DO ,11SUB#24 <- #162 PLEASE DO ,11SUB#25 <- #22 DO ,11SUB#26 <- #104 DO ,11SUB#27 <- #80 DO ,11SUB#28 <- #256 PLEASE DO ,11SUB#29 <- #2 DO ,11SUB#30 <- #228 // ,12 is bottles of beer.\nTake one down, pass it around, PLEASE DO ,12 <- #49 PLEASE DO ,12SUB#1 <- #76 DO ,12SUB#2 <- #190 DO ,12SUB#3 <- #80 DO ,12SUB#4 <- #200 PLEASE DO ,12SUB#5 <- #256 DO ,12SUB#6 <- #248 DO ,12SUB#7 <- #144 DO ,12SUB#8 <- #216 PLEASE DO ,12SUB#9 <- #202 DO ,12SUB#10 <- #14 DO ,12SUB#11 <- #144 DO ,12SUB#12 <- #98 PLEASE DO ,12SUB#13 <- #190 DO ,12SUB#14 <- #160 DO ,12SUB#15 <- #256 DO ,12SUB#16 <- #88 PLEASE DO ,12SUB#17 <- #218 DO ,12SUB#18 <- #36 DO ,12SUB#19 <- #38 DO ,12SUB#20 <- #164 PLEASE DO ,12SUB#21 <- #176 DO ,12SUB#22 <- #48 DO ,12SUB#23 <- #162 DO ,12SUB#24 <- #14 PLEASE DO ,12SUB#25 <- #128 DO ,12SUB#26 <- #208 DO ,12SUB#27 <- #162 DO ,12SUB#28 <- #222 PLEASE DO ,12SUB#29 <- #48 DO ,12SUB#30 <- #8 DO ,12SUB#31 <- #120 DO ,12SUB#32 <- #66 PLEASE DO ,12SUB#33 <- #48 DO ,12SUB#34 <- #246 DO ,12SUB#35 <- #136 DO ,12SUB#36 <- #184 PLEASE DO ,12SUB#37 <- #256 DO ,12SUB#38 <- #202 DO ,12SUB#39 <- #110 DO ,12SUB#40 <- #104 PLEASE DO ,12SUB#41 <- #42 DO ,12SUB#42 <- #126 DO ,12SUB#43 <- #56 DO ,12SUB#44 <- #88 PLEASE DO ,12SUB#45 <- #72 DO ,12SUB#46 <- #56 DO ,12SUB#47 <- #80 DO ,12SUB#48 <- #242 PLEASE DO ,12SUB#49 <- #228 // ,13 is bottles of beer on the wall. PLEASE DO ,13 <- #31 PLEASE DO ,13SUB#1 <- #76 DO ,13SUB#2 <- #190 DO ,13SUB#3 <- #80 DO ,13SUB#4 <- #200 PLEASE DO ,13SUB#5 <- #256 DO ,13SUB#6 <- #248 DO ,13SUB#7 <- #144 DO ,13SUB#8 <- #216 PLEASE DO ,13SUB#9 <- #202 DO ,13SUB#10 <- #14 DO ,13SUB#11 <- #144 DO ,13SUB#12 <- #98 PLEASE DO ,13SUB#13 <- #190 DO ,13SUB#14 <- #160 DO ,13SUB#15 <- #256 DO ,13SUB#16 <- #88 PLEASE DO ,13SUB#17 <- #74 DO ,13SUB#18 <- #14 DO ,13SUB#19 <- #128 DO ,13SUB#20 <- #114 PLEASE DO ,13SUB#21 <- #214 DO ,13SUB#22 <- #24 DO ,13SUB#23 <- #112 DO ,13SUB#24 <- #162 PLEASE DO ,13SUB#25 <- #22 DO ,13SUB#26 <- #104 DO ,13SUB#27 <- #80 DO ,13SUB#28 <- #256 PLEASE DO ,13SUB#29 <- #194 DO ,13SUB#30 <- #36 DO ,13SUB#31 <- #256 // ,20 MAPS NEWLINES TO DIGITS PLEASE DO ,20 <- #10 PLEASE DO ,20 SUB #1 <- #76 DO ,20 SUB #2 <- #196 DO ,20 SUB #3 <- #4 DO ,20 SUB #4 <- #132 PLEASE DO ,20 SUB #5 <- #36 DO ,20 SUB #6 <- #164 DO ,20 SUB #7 <- #228 DO ,20 SUB #8 <- #100 PLEASE DO ,20 SUB #9 <- #52 DO ,20 SUB #10 <- #180 // ,21 MAPS DIGITS TO DIGITS PLEASE DO ,21 <- #10 BY #10 PLEASE DO ,21SUB#1#1 <- #248 PLEASE DO ,21SUB#1#2 <- #120 PLEASE DO ,21SUB#1#3 <- #184 PLEASE DO ,21SUB#1#4 <- #56 PLEASE DO ,21SUB#1#5 <- #216 PLEASE DO ,21SUB#1#6 <- #88 PLEASE DO ,21SUB#1#7 <- #152 PLEASE DO ,21SUB#1#8 <- #24 PLEASE DO ,21SUB#1#9 <- #232 PLEASE DO ,21SUB#1#10 <- #104 DO ,21SUB#2#1 <- #128 DO ,21SUB#2#2 <- #256 DO ,21SUB#2#3 <- #64 DO ,21SUB#2#4 <- #192 DO ,21SUB#2#5 <- #96 DO ,21SUB#2#6 <- #224 DO ,21SUB#2#7 <- #32 DO ,21SUB#2#8 <- #160 DO ,21SUB#2#9 <- #112 DO ,21SUB#2#10 <- #240 DO ,21SUB#3#1 <- #64 DO ,21SUB#3#2 <- #192 DO ,21SUB#3#3 <- #256 DO ,21SUB#3#4 <- #128 DO ,21SUB#3#5 <- #32 DO ,21SUB#3#6 <- #160 DO ,21SUB#3#7 <- #224 DO ,21SUB#3#8 <- #96 DO ,21SUB#3#9 <- #48 DO ,21SUB#3#10 <- #176 DO ,21SUB#4#1 <- #192 DO ,21SUB#4#2 <- #64 DO ,21SUB#4#3 <- #128 DO ,21SUB#4#4 <- #256 DO ,21SUB#4#5 <- #160 DO ,21SUB#4#6 <- #32 DO ,21SUB#4#7 <- #96 DO ,21SUB#4#8 <- #224 DO ,21SUB#4#9 <- #176 DO ,21SUB#4#10 <- #48 PLEASE DO ,21SUB#5#1 <- #32 PLEASE DO ,21SUB#5#2 <- #160 PLEASE DO ,21SUB#5#3 <- #224 PLEASE DO ,21SUB#5#4 <- #96 PLEASE DO ,21SUB#5#5 <- #256 PLEASE DO ,21SUB#5#6 <- #128 PLEASE DO ,21SUB#5#7 <- #192 PLEASE DO ,21SUB#5#8 <- #64 PLEASE DO ,21SUB#5#9 <- #16 PLEASE DO ,21SUB#5#10 <- #144 DO ,21SUB#6#1 <- #160 DO ,21SUB#6#2 <- #32 DO ,21SUB#6#3 <- #96 DO ,21SUB#6#4 <- #224 DO ,21SUB#6#5 <- #128 DO ,21SUB#6#6 <- #256 DO ,21SUB#6#7 <- #64 DO ,21SUB#6#8 <- #192 DO ,21SUB#6#9 <- #144 DO ,21SUB#6#10 <- #16 DO ,21SUB#7#1 <- #96 DO ,21SUB#7#2 <- #224 DO ,21SUB#7#3 <- #32 DO ,21SUB#7#4 <- #160 DO ,21SUB#7#5 <- #64 DO ,21SUB#7#6 <- #192 DO ,21SUB#7#7 <- #256 DO ,21SUB#7#8 <- #128 DO ,21SUB#7#9 <- #80 DO ,21SUB#7#10 <- #208 DO ,21SUB#8#1 <- #224 DO ,21SUB#8#2 <- #96 DO ,21SUB#8#3 <- #160 DO ,21SUB#8#4 <- #32 DO ,21SUB#8#5 <- #192 DO ,21SUB#8#6 <- #64 DO ,21SUB#8#7 <- #128 DO ,21SUB#8#8 <- #256 DO ,21SUB#8#9 <- #208 DO ,21SUB#8#10 <- #80 PLEASE DO ,21SUB#9#1 <- #16 PLEASE DO ,21SUB#9#2 <- #144 PLEASE DO ,21SUB#9#3 <- #208 PLEASE DO ,21SUB#9#4 <- #80 PLEASE DO ,21SUB#9#5 <- #240 PLEASE DO ,21SUB#9#6 <- #112 PLEASE DO ,21SUB#9#7 <- #176 PLEASE DO ,21SUB#9#8 <- #48 PLEASE DO ,21SUB#9#9 <- #256 PLEASE DO ,21SUB#9#10 <- #128 DO ,21SUB#10#1 <- #144 DO ,21SUB#10#2 <- #16 DO ,21SUB#10#3 <- #80 DO ,21SUB#10#4 <- #208 DO ,21SUB#10#5 <- #112 DO ,21SUB#10#6 <- #240 DO ,21SUB#10#7 <- #48 DO ,21SUB#10#8 <- #176 DO ,21SUB#10#9 <- #128 DO ,21SUB#10#10 <- #256 // ,22 MAPS DIGITS TO SPACES PLEASE DO ,22 <- #10 PLEASE DO ,22 SUB #1 <- #8 DO ,22 SUB #2 <- #136 DO ,22 SUB #3 <- #72 DO ,22 SUB #4 <- #200 PLEASE DO ,22 SUB #5 <- #40 DO ,22 SUB #6 <- #168 DO ,22 SUB #7 <- #104 DO ,22 SUB #8 <- #232 PLEASE DO ,22 SUB #9 <- #24 DO ,22 SUB #10 <- #152 // ,10 ,11 ,12 ,20 ,21 and ,22 are defined by the makestrings script // .10 contains first digit, .11 contains second. DO .10 <- #9 DO .11 <- #9 // ,10 prints a newline from scratch PLEASE DO ,10 <- #1 PLEASE DO ,10SUB#1 <- #176 DO READ OUT ,10 // print a bare newline. DO COME FROM (999) // main loop. DO (500) NEXT // print the two digit number .10 .11 // returning the offset to get to a space // in .5. PLEASE DO ,11SUB#1 <- .5 // bottles of beer on the wall DO READ OUT ,11 DO (500) NEXT // print the two digit number .10 .11 DO ,12SUB#1 <- .5 // bottles of beer. Take...around, PLEASE DO READ OUT ,12 // .6 = (.10 == 0 ? 1 : 2) snagged from line 54 of library. PLEASE DO .6 <- '?"!10~.10'~#1"$#1'~#3 // this line, line 50, and line 51 form a conditional. DO (50) NEXT // end up here if .10 != 0 // conditional on .11==0? PLEASE DO .7 <- '?"!11~.11'~#1"$#1'~#3 // same for .7 DO (70) NEXT // .11 != 0 // subtract 1 from .11 (second digit). DO .2 <- #1 DO .1 <- .11 PLEASE DO (1010) NEXT // .3 = .1 - .2 = .11 - 1 DO .11 <- .3 DO (600) NEXT // print last verse line DO (101) NEXT // jump out of loop. (70) DO (71) NEXT // .11 == 0 DO .11 <- #9 // roll over second digit // subtract 1 from first digit DO .2 <- #1 PLEASE DO .1 <- .10 DO (1010) NEXT // .3 = .1 - .2 = .10 - 1 DO .10 <- .3 DO (600) NEXT // print last verse line DO (101) NEXT // jump out of loop. (71) DO RESUME .7 // end if .11 == 0 (50) DO (51) NEXT PLEASE DO FORGET #1 // end up here if .10 == 0. // subtract 1 from .11 (second digit). DO .2 <- #1 DO .1 <- .11 PLEASE DO (1010) NEXT // .3 = .1 - .2 = .11 - 1 DO .11 <- .3 DO (600) NEXT // print last verse line PLEASE DO .7 <- '?"!11~.11'~#1"$#1'~#3 // same for .7 DO (80) NEXT // .10 == 0, .11 != 0 DO (101) NEXT (80) DO (81) NEXT // .10 == 0, .11 == 0 DO GIVE UP (81) DO RESUME .7 (51) DO RESUME .6 // end if .10 == 0 (101) DO FORGET #1 (999) DO FORGET #1 // dummy statement // subroutine to print last line of a verse. (600) DO (500) NEXT // print the two digit number .10 .11 DO ,13SUB#1 <- .5 // bottles of beer on the wall. DO READ OUT ,13 DO RESUME #1 // subroutine to print a two digit number. The first digit is in .10, // the second is in .11. Returns the index to be READ OUT to get to a // space in .5. (500) DO ,30 <- #1 // 1 elt array for printing. DO .1 <- .10 // .1 gets first digit. DO (1020) NEXT // .1++ PLEASE DO ,30SUB#1 <- ,20SUB.1 // map from newline to digit DO READ OUT ,30 // print the digit. // now we map from the first digit to the second digit. DO .3 <- .1 // stash array index away. DO .1 <- .11 // .1 gets second digit. DO (1020) NEXT // .1++ PLEASE DO ,30SUB#1 <- ,21SUB .3 .1 // map from first digit to second digit DO READ OUT ,30 // print the digit. DO .5 <- ,22SUB.1 // map to space and return that value. PLEASE DO RESUME #1 // return from (500) subrtn.