new files
This commit is contained in:
parent
3af7344581
commit
86c034bb8b
1364 changed files with 21352 additions and 0 deletions
25
Task/99-Bottles-of-Beer/0815/99-bottles-of-beer.0815
Normal file
25
Task/99-Bottles-of-Beer/0815/99-bottles-of-beer.0815
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
<:63:x<:20:=<:62:>=>=><:6F:x<:74:=<:6C:>=>>=><:65:x<:73:=<:20:>=>=><:6F:x<:66:=<:20:>=>=>
|
||||
<:62:x<:65:=<:72:>=>>=><:20:x<:6F:=<:6E:>=>=><:20:x<:74:=<:68:>=>=><:65:x<:20:=<:77:>=>=>
|
||||
<:61:x<:6C:=>=>><:54:x<:61:=<:6B:>=>=><:65:x<:20:=<:6F:>=>=><:6E:x<:65:=<:20:>=>=><:64:x
|
||||
<:6F:=<:77:>=>=><:6E:x<:20:=<:61:>=>=><:6E:x<:64:=<:20:>=>=><:70:x<:61:=<:73:>=>=>><:20:x
|
||||
<:69:=<:74:>=>=><:20:x<:61:=<:72:>=>=><:6F:x<:75:=<:6E:>=>=><:64:~>}:_start:{~%><:1c:~
|
||||
}:_99:~{~$>=<:01:x-^:_99:<:0D:~$@:20:{~%><:10:~}:_98:~{~$>=<:01:x-^:_98:<:0D:~$@:c:<:20:~
|
||||
}:_97:~{~$>=<:01:x-^:_97:<:0D:~${x<:01:x->&==<:01:-#:_322:{~%><:1c:~}:_96:~{~$>=<:01:x-
|
||||
^:_96:<:d:~$$@:20:{~>&^:_start:}:_90:?<:4E:x<:6F:=<:20:>=>=><:6D:x<:6F:=<:72:>=>=><:65:x
|
||||
<:20:=<:62:>=>=><:6F:x<:74:=<:6C:>=>>=><:65:x<:73:=<:20:>=>=><:6F:x<:66:=<:20:>=>=><:62:x
|
||||
<:65:=<:72:>=>>=><:20:x<:6F:=<:6E:>=>=><:20:x<:74:=<:68:>=>=><:65:x<:20:=<:77:>=>=><:61:x
|
||||
<:6C:=>=>><:02:~}:_70:><:23:~}:_80:~{~$>=<:01:x-^:_80:{~<:01:=-#:_60:<:0D:~$$=^:_70:}:_60:
|
||||
<:0D:~$<:17:~}:_81:~{~$=<:01:x-^:_81:<:0D:~$?<:47:x<:6F:=<:20:>=>=><:74:x<:6F:=<:20:>=>=>
|
||||
<:74:x<:68:=<:65:>=>=><:20:x<:73:=<:74:>=>=><:6F:x<:72:=<:65:>=>=><:20:x<:61:=<:6E:>=>=>
|
||||
<:64:x<:20:=<:62:>=>=><:75:x<:79:=<:20:>=>=><:73:x<:6F:=<:6D:>=>=><:65:x<:20:=<:6D:>=>=>
|
||||
<:6F:x<:72:=<:65:>=>=><:21:~}:_18:~{~$=<:01:x-^:_18:<:0D:~$<:63:x<:20:=<:62:>=>=><:6F:x
|
||||
<:74:=<:6C:>=>>=><:65:x<:73:=<:20:>=>=><:6F:x<:66:=<:20:>=>=><:62:x<:65:=<:72:>=>>=><:20:
|
||||
x<:6F:=<:6E:>=>=><:20:x<:74:=<:68:>=>=><:65:x<:20:=<:77:>=>=><:61:x<:6C:=>=>>{~%<:1c:~
|
||||
}:_21:~{~$=<:01:x-^:_21:<:0D:~$^:end:}:_322:?<:01:x<:20:=<:62:>=>=><:6F:x<:74:=<:6C:>=>>=
|
||||
><:65:x<:20:=<:6F:>=>=><:66:x<:20:=>=><:62:x<:65:=<:72:>=>>=><:20:x<:6F:=<:6E:>=>=><:20:x
|
||||
<:74:=<:68:>=>=><:65:x<:20:=<:77:>=>=><:61:x<:6C:=>=>><:54:x<:61:=<:6B:>=>=><:65:x<:20:=
|
||||
<:6F:>=>=><:6E:x<:65:=<:20:>=>=><:64:x<:6F:=<:77:>=>=><:6E:x<:20:=<:61:>=>=><:6E:x<:64:=
|
||||
<:20:>=>=><:70:x<:61:=<:73:>=>=>><:20:x<:69:=<:74:>=>=><:20:x<:61:=<:72:>=>=><:6F:x<:75:=
|
||||
<:6E:>=>=><:64:~>{~%><:1b:~}:_299:~{~$>=<:01:x-^:_299:<:0D:~$$@:20:{~%><:1b:~}:_298:~{~$>
|
||||
=<:01:x-^:_298:<:0D:~$@:20:{~%<:f:~}:_297:~{~$>=<:01:x-^:_297:<:0D:~$@:c:<:20:~}:_296:~{~
|
||||
$>=<:01:x-^:_296:<:0D:~${x<:01:x->&==<:01:-^:_90:
|
||||
13
Task/99-Bottles-of-Beer/0DESCRIPTION
Normal file
13
Task/99-Bottles-of-Beer/0DESCRIPTION
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
In this puzzle, write code to print out the entire "99 bottles of beer on the wall" song. For those who do not know the song, the lyrics follow this form:
|
||||
X bottles of beer on the wall
|
||||
X bottles of beer
|
||||
Take one down, pass it around
|
||||
X-1 bottles of beer on the wall
|
||||
|
||||
X-1 bottles of beer on the wall
|
||||
...
|
||||
Take one down, pass it around
|
||||
0 bottles of beer on the wall
|
||||
Where X and X-1 are replaced by numbers of course. Grammatical support for "1 bottle of beer" is optional. As with any puzzle, try to do it in as creative/concise/comical a way as possible (simple, obvious solutions allowed, too).
|
||||
|
||||
See also: http://99-bottles-of-beer.net/
|
||||
18
Task/99-Bottles-of-Beer/ABAP/99-bottles-of-beer.abap
Normal file
18
Task/99-Bottles-of-Beer/ABAP/99-bottles-of-beer.abap
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
REPORT z99bottles.
|
||||
|
||||
DATA lv_no_bottles(2) TYPE n VALUE 99.
|
||||
|
||||
DO lv_no_bottles TIMES.
|
||||
WRITE lv_no_bottles NO-ZERO.
|
||||
WRITE ' bottles of beer on the wall'.
|
||||
NEW-LINE.
|
||||
WRITE lv_no_bottles NO-ZERO.
|
||||
WRITE ' bottles of beer'.
|
||||
NEW-LINE.
|
||||
WRITE 'Take one down, pass it around'.
|
||||
NEW-LINE.
|
||||
SUBTRACT 1 FROM lv_no_bottles.
|
||||
WRITE lv_no_bottles NO-ZERO.
|
||||
WRITE ' bottles of beer on the wall'.
|
||||
WRITE /.
|
||||
ENDDO.
|
||||
14
Task/99-Bottles-of-Beer/ACL2/99-bottles-of-beer.acl2
Normal file
14
Task/99-Bottles-of-Beer/ACL2/99-bottles-of-beer.acl2
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
(defun bottles-of-beer (n)
|
||||
(if (zp n)
|
||||
nil
|
||||
(prog2$ (cw (concatenate 'string
|
||||
"~%"
|
||||
"~N0 bottle~#1~[~/s~] of beer on the wall,~%"
|
||||
"~n0 bottle~#1~[~/s~] of beer.~%"
|
||||
"Take one down, pass it around,~%"
|
||||
"~n2 bottle~#3~[~/s~] of beer on the wall.~%")
|
||||
n
|
||||
(if (= n 1) 0 1)
|
||||
(1- n)
|
||||
(if (= n 2) 0 1))
|
||||
(bottles-of-beer (- n 1)))))
|
||||
7
Task/99-Bottles-of-Beer/AWK/99-bottles-of-beer.awk
Normal file
7
Task/99-Bottles-of-Beer/AWK/99-bottles-of-beer.awk
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{ i = 99
|
||||
while (i > 0)
|
||||
{print i, " bottles of beer on the wall,"
|
||||
print i, " bottles of beer."
|
||||
print "Take one down, pass it around,"
|
||||
i--
|
||||
print i, " bottles of beer on the wall\n"}}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
for(var numBottles:uint = 99; numBottles > 0; numBottles--)
|
||||
{
|
||||
trace(numBottles, " bottles of beer on the wall");
|
||||
trace(numBottles, " bottles of beer");
|
||||
trace("Take one down, pass it around");
|
||||
trace(numBottles - 1, " bottles of beer on the wall\n");
|
||||
}
|
||||
12
Task/99-Bottles-of-Beer/Ada/99-bottles-of-beer-1.ada
Normal file
12
Task/99-Bottles-of-Beer/Ada/99-bottles-of-beer-1.ada
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
with Ada.Text_Io; use Ada.Text_Io;
|
||||
|
||||
procedure Bottles is
|
||||
begin
|
||||
for X in reverse 1..99 loop
|
||||
Put_Line(Integer'Image(X) & " bottles of beer on the wall");
|
||||
Put_Line(Integer'Image(X) & " bottles of beer");
|
||||
Put_Line("Take one down, pass it around");
|
||||
Put_Line(Integer'Image(X - 1) & " bottles of beer on the wall");
|
||||
New_Line;
|
||||
end loop;
|
||||
end Bottles;
|
||||
39
Task/99-Bottles-of-Beer/Ada/99-bottles-of-beer-2.ada
Normal file
39
Task/99-Bottles-of-Beer/Ada/99-bottles-of-beer-2.ada
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
with Ada.Text_Io; use Ada.Text_Io;
|
||||
|
||||
procedure Tasking_99_Bottles is
|
||||
subtype Num_Bottles is Natural range 1..99;
|
||||
task Print is
|
||||
entry Set (Num_Bottles);
|
||||
end Print;
|
||||
task body Print is
|
||||
Num : Natural;
|
||||
begin
|
||||
for I in reverse Num_Bottles'range loop
|
||||
select
|
||||
accept
|
||||
Set(I) do -- Rendezvous with Counter task I
|
||||
Num := I;
|
||||
end Set;
|
||||
Put_Line(Integer'Image(Num) & " bottles of beer on the wall");
|
||||
Put_Line(Integer'Image(Num) & " bottles of beer");
|
||||
Put_Line("Take one down, pass it around");
|
||||
Put_Line(Integer'Image(Num - 1) & " bottles of beer on the wall");
|
||||
New_Line;
|
||||
or terminate; -- end when all Counter tasks have completed
|
||||
end select;
|
||||
end loop;
|
||||
end Print;
|
||||
task type Counter(I : Num_Bottles);
|
||||
task body Counter is
|
||||
begin
|
||||
Print.Set(I);
|
||||
end Counter;
|
||||
type Task_Access is access Counter;
|
||||
|
||||
Task_List : array(Num_Bottles) of Task_Access;
|
||||
|
||||
begin
|
||||
for I in Task_List'range loop -- Create 99 Counter tasks
|
||||
Task_List(I) := new Counter(I);
|
||||
end loop;
|
||||
end Tasking_99_Bottles;
|
||||
12
Task/99-Bottles-of-Beer/BASIC/99-bottles-of-beer-1.bas
Normal file
12
Task/99-Bottles-of-Beer/BASIC/99-bottles-of-beer-1.bas
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
PLAY "<"
|
||||
FOR x = 99 TO 0 STEP -1
|
||||
PRINT x; "bottles of beer on the wall"
|
||||
PRINT x; "bottles of beer"
|
||||
PRINT "Take one down, pass it around"
|
||||
PRINT x-1; "bottles of beer on the wall"
|
||||
PRINT
|
||||
PLAY "e-8e-8e-8<b-8b-8b-8>e-8e-8e-8e-4"'X bottles of beer on the wall
|
||||
PLAY "f8f8f8c8c8c8f4"'X bottles of beer
|
||||
PLAY "d4d8d8 N0 d8d8d8d4"'take one down, pass it around
|
||||
PLAY "<a+8a+8a+8>c8c8d8d+8d+8d+8d+4"'X-1 bottles of beer on the wall
|
||||
NEXT x
|
||||
7
Task/99-Bottles-of-Beer/BASIC/99-bottles-of-beer-2.bas
Normal file
7
Task/99-Bottles-of-Beer/BASIC/99-bottles-of-beer-2.bas
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
FOR x = 99 TO 1 STEP -1
|
||||
PRINT x; "bottles of beer on the wall"
|
||||
PRINT x; "bottles of beer"
|
||||
PRINT "Take one down, pass it around"
|
||||
PRINT x-1; "bottles of beer on the wall"
|
||||
PRINT
|
||||
NEXT x
|
||||
17
Task/99-Bottles-of-Beer/Babel/99-bottles-of-beer.pb
Normal file
17
Task/99-Bottles-of-Beer/Babel/99-bottles-of-beer.pb
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
main: { 99 bottles }
|
||||
|
||||
bottles!:
|
||||
{ x set
|
||||
{ bw
|
||||
bx cr <<
|
||||
"Take one down, pass it around\n" <<
|
||||
1 x -=
|
||||
bw "\n" << }
|
||||
x times }
|
||||
|
||||
b : " bottles of beer"
|
||||
bx!: { x %d << b }
|
||||
w : " on the wall"
|
||||
bw!: { bx w . cr << }
|
||||
|
||||
x: [0]
|
||||
11
Task/99-Bottles-of-Beer/Befunge/99-bottles-of-beer.bf
Normal file
11
Task/99-Bottles-of-Beer/Befunge/99-bottles-of-beer.bf
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<v <.g10" bottles of beer on the wall"+*4310 <
|
||||
c>:,|
|
||||
<v <.g10" bottles of beer"+*4310
|
||||
>:,|
|
||||
<v <"take one down, pass it around"+*4310
|
||||
>:,|
|
||||
>01g1-:01p v
|
||||
v <.g10" bottles of beer on the wall"+*4310<
|
||||
>:,|
|
||||
>134*+0` |
|
||||
@
|
||||
15
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-1.c
Normal file
15
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-1.c
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned int bottles = 99;
|
||||
do
|
||||
{
|
||||
printf("%u bottles of beer on the wall\n", bottles);
|
||||
printf("%u bottles of beer\n", bottles);
|
||||
printf("Take one down, pass it around\n");
|
||||
printf("%u bottles of beer on the wall\n\n", --bottles);
|
||||
} while(bottles > 0);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
5
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-2.c
Normal file
5
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-2.c
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#include <stdio.h>
|
||||
main(){_=100;while(--_)printf("%i bottle%s of beer in the wall,\n%i bottle%"
|
||||
"s of beer.\nTake one down, pass it round,\n%s%s\n\n",_,_-1?"s":"",_,_-1?"s"
|
||||
:"",_-1?(char[]){(_-1)/10?(_-1)/10+48:(_-1)%10+48,(_-1)/10?(_-1)%10+48:2+30,
|
||||
(_-1)/10?32:0,0}:"",_-1?"bottles of beer in the wall":"No more beers");}
|
||||
30
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-3.c
Normal file
30
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-3.c
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define BOTTLE(nstr) nstr " bottles of beer"
|
||||
|
||||
#define WALL(nstr) BOTTLE(nstr) " on the wall"
|
||||
|
||||
#define PART1(nstr) WALL(nstr) "\n" BOTTLE(nstr) \
|
||||
"\nTake one down, pass it around\n"
|
||||
|
||||
#define PART2(nstr) WALL(nstr) "\n\n"
|
||||
|
||||
#define MIDDLE(nstr) PART2(nstr) PART1(nstr)
|
||||
|
||||
#define SONG PART1("100") CD2 PART2("0")
|
||||
|
||||
#define CD2 CD3("9") CD3("8") CD3("7") CD3("6") CD3("5") \
|
||||
CD3("4") CD3("3") CD3("2") CD3("1") CD4("")
|
||||
|
||||
#define CD3(pre) CD4(pre) MIDDLE(pre "0")
|
||||
|
||||
#define CD4(pre) MIDDLE(pre "9") MIDDLE(pre "8") MIDDLE(pre "7") \
|
||||
MIDDLE(pre "6") MIDDLE(pre "5") MIDDLE(pre "4") MIDDLE(pre "3") \
|
||||
MIDDLE(pre "2") MIDDLE(pre "1")
|
||||
|
||||
int main(void)
|
||||
{
|
||||
(void) printf(SONG);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
35
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-4.c
Normal file
35
Task/99-Bottles-of-Beer/C/99-bottles-of-beer-4.c
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
int b =99,u =1;
|
||||
#include<stdio.h>
|
||||
char *d[16],y[]
|
||||
= "#:ottle/ of"
|
||||
":eer_ a_Go<o5"
|
||||
"st>y\x20some6"
|
||||
"_Take8;down4p"
|
||||
"a=1rou7_17 _<"
|
||||
"h;_ m?_nd_ on"
|
||||
"_085wal" "l_ "
|
||||
"b_e _ t_ss it"
|
||||
"_?4bu_ore_9, "
|
||||
"\060.""@, 9$";
|
||||
# define x c ^=
|
||||
#include <string.h>
|
||||
#define or(t,z) else\
|
||||
if(c==t && !(c = 0) &&\
|
||||
(c =! z)); int p(char *t)
|
||||
{ char *s = t; int c; for (
|
||||
d[c = 0] = y; !t && (d[c +1
|
||||
]= strchr(s = d[c], '_'));*
|
||||
(d[++c]++) = 0); for(t = s?
|
||||
s:t;(c= *s++); c && putchar
|
||||
(c)) { if (!((( x 48)& ~0xf
|
||||
) && ( x 48)) ) p(d[c]), c=
|
||||
0 ; or('$', p(b - 99?".\n":
|
||||
"." ) && p(b - 99? t : ""))
|
||||
or ('\x40', c && p( d[!!b--
|
||||
+ 2])) or('/', c && p( b^1?
|
||||
"s": "")) or ('\043', b++ ?
|
||||
p("So6" + --b):!printf("%d"
|
||||
, b ? --b : (b += 99))) or(
|
||||
'S',!(++u % 3) * 32+ 78) or
|
||||
('.', puts("."))}return c;}
|
||||
int main() {return p(0);}
|
||||
14
Task/99-Bottles-of-Beer/Clojure/99-bottles-of-beer.clj
Normal file
14
Task/99-Bottles-of-Beer/Clojure/99-bottles-of-beer.clj
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
(defn verse
|
||||
[n]
|
||||
(printf "%d bottles of beer on the wall,
|
||||
%d bottles of beer,
|
||||
Take one down, pass it around,
|
||||
%d bottles of beer on the wall.\n\n"
|
||||
n
|
||||
n
|
||||
(dec n)))
|
||||
|
||||
(defn sing
|
||||
[start]
|
||||
(doseq [n (range start 0 -1)]
|
||||
(verse n)))
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
bottlesOfBeer = (n) ->
|
||||
"#{n} bottle#{if n is 1 then '' else 's'} of beer"
|
||||
|
||||
console.log """
|
||||
#{bottlesOfBeer n} on the wall
|
||||
#{bottlesOfBeer n}
|
||||
Take one down, pass it around
|
||||
#{bottlesOfBeer n - 1} on the wall
|
||||
\n""" for n in [99..1]
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
for j in [99..1]
|
||||
x=''
|
||||
x += [j,j-1,'\nTake one down, pass it around\n'," bottles of beer",' on the wall\n'][i] for i in [0,3,4,0,3,2,1,3,4]
|
||||
console.log x.replace /(1.+)s/g, '$1'
|
||||
|
|
@ -0,0 +1 @@
|
|||
console.log( if (j+2)%4 then (x=Math.round j/4)+" bottle#{if x-1 then 's' else ''} of beer#{if (j+1)%4 then ' on the wall' else ''}" else "Take one down, pass it around" ) for j in [396..1]
|
||||
|
|
@ -0,0 +1 @@
|
|||
((console.log if i is 2 then "Take one down, pass it around" else "#{b-!(i-1%4)} bottle#{if 4*b+i<10 and b-i then '' else 's'} of beer#{if i%3 then ' on the wall' else ''}") for i in [4..1]) for b in [99..1]
|
||||
10
Task/99-Bottles-of-Beer/Dylan/99-bottles-of-beer.dylan
Normal file
10
Task/99-Bottles-of-Beer/Dylan/99-bottles-of-beer.dylan
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
Module: bottles
|
||||
define method bottles (n :: <integer>)
|
||||
for (n from 99 to 1 by -1)
|
||||
format-out("%d bottles of beer on the wall,\n"
|
||||
"%d bottles of beer\n"
|
||||
"Take one down, pass it around\n"
|
||||
"%d bottles of beer on the wall\n",
|
||||
n, n, n - 1);
|
||||
end
|
||||
end method
|
||||
39
Task/99-Bottles-of-Beer/Erlang/99-bottles-of-beer.erl
Normal file
39
Task/99-Bottles-of-Beer/Erlang/99-bottles-of-beer.erl
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
-module(beersong).
|
||||
-export([sing/0]).
|
||||
-define(TEMPLATE_0, "~s of beer on the wall, ~s of beer.~nGo to the store and buy some more, 99
|
||||
bottles of beer on the wall.~n").
|
||||
-define(TEMPLATE_N, "~s of beer on the wall, ~s of beer.~nTake one down and pass it around, ~s of
|
||||
beer on the wall.~n~n").
|
||||
|
||||
create_verse(0) -> {0, io_lib:format(?TEMPLATE_0, phrase(0))};
|
||||
create_verse(Bottle) -> {Bottle, io_lib:format(?TEMPLATE_N, phrase(Bottle))}.
|
||||
|
||||
phrase(0) -> ["No more bottles", "no more bottles"];
|
||||
phrase(1) -> ["1 bottle", "1 bottle", "no more bottles"];
|
||||
phrase(2) -> ["2 bottles", "2 bottles", "1 bottle"];
|
||||
phrase(Bottle) -> lists:duplicate(2, integer_to_list(Bottle) ++ " bottles") ++
|
||||
[integer_to_list(Bottle-1) ++ " bottles"].
|
||||
|
||||
bottles() -> lists:reverse(lists:seq(0,99)).
|
||||
|
||||
sing() ->
|
||||
lists:foreach(fun spawn_singer/1, bottles()),
|
||||
sing_verse(99).
|
||||
|
||||
spawn_singer(Bottle) ->
|
||||
Pid = self(),
|
||||
spawn(fun() -> Pid ! create_verse(Bottle) end).
|
||||
|
||||
sing_verse(Bottle) ->
|
||||
receive
|
||||
{_, Verse} when Bottle == 0 ->
|
||||
io:format(Verse);
|
||||
{N, Verse} when Bottle == N ->
|
||||
io:format(Verse),
|
||||
sing_verse(Bottle-1)
|
||||
after
|
||||
3000 ->
|
||||
io:format("Verse not received - re-starting singer~n"),
|
||||
spawn_singer(Bottle),
|
||||
sing_verse(Bottle)
|
||||
end.
|
||||
14
Task/99-Bottles-of-Beer/Forth/99-bottles-of-beer.fth
Normal file
14
Task/99-Bottles-of-Beer/Forth/99-bottles-of-beer.fth
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
:noname dup . ." bottles" ;
|
||||
:noname ." 1 bottle" ;
|
||||
:noname ." no more bottles" ;
|
||||
create bottles , , ,
|
||||
|
||||
: .bottles dup 2 min cells bottles + @ execute ;
|
||||
: .beer .bottles ." of beer" ;
|
||||
: .wall .beer ." on the wall" ;
|
||||
: .take ." Take one down, pass it around" ;
|
||||
: .verse .wall cr .beer cr
|
||||
1- .take cr .wall cr ;
|
||||
: verses begin cr .verse ?dup 0= until ;
|
||||
|
||||
99 verses
|
||||
24
Task/99-Bottles-of-Beer/Fortran/99-bottles-of-beer.f
Normal file
24
Task/99-Bottles-of-Beer/Fortran/99-bottles-of-beer.f
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
program bottlestest
|
||||
|
||||
implicit none
|
||||
|
||||
integer :: i
|
||||
|
||||
character(len=*), parameter :: bwall = " on the wall", &
|
||||
bottles = "bottles of beer", &
|
||||
bottle = "bottle of beer", &
|
||||
take = "Take one down, pass it around", &
|
||||
form = "(I0, ' ', A)"
|
||||
|
||||
do i = 99,0,-1
|
||||
if ( i /= 1 ) then
|
||||
write (*,form) i, bottles // bwall
|
||||
if ( i > 0 ) write (*,form) i, bottles
|
||||
else
|
||||
write (*,form) i, bottle // bwall
|
||||
write (*,form) i, bottle
|
||||
end if
|
||||
if ( i > 0 ) write (*,*) take
|
||||
end do
|
||||
|
||||
end program bottlestest
|
||||
18
Task/99-Bottles-of-Beer/Go/99-bottles-of-beer.go
Normal file
18
Task/99-Bottles-of-Beer/Go/99-bottles-of-beer.go
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
cardinality := func (i int) string {
|
||||
if i!=1 {
|
||||
return "s"
|
||||
}
|
||||
return ""
|
||||
}
|
||||
for i := 99; i > 0; i-- {
|
||||
fmt.Printf("%d bottle%s of beer on the wall\n", i, cardinality(i))
|
||||
fmt.Printf("%d bottle%s of beer\n", i, cardinality(i))
|
||||
fmt.Printf("Take one down, pass it around\n")
|
||||
fmt.Printf("%d bottle%s of beer on the wall\n", i-1, cardinality(i-1))
|
||||
}
|
||||
}
|
||||
7
Task/99-Bottles-of-Beer/Haskell/99-bottles-of-beer-1.hs
Normal file
7
Task/99-Bottles-of-Beer/Haskell/99-bottles-of-beer-1.hs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
main = mapM_ (putStrLn . beer) [99, 98 .. 0]
|
||||
beer 1 = "1 bottle of beer on the wall\n1 bottle of beer\nTake one down, pass it around"
|
||||
beer 0 = "better go to the store and buy some more."
|
||||
beer v = show v ++ " bottles of beer on the wall\n"
|
||||
++ show v
|
||||
++" bottles of beer\nTake one down, pass it around\n"
|
||||
++ head (lines $ beer $ v-1) ++ "\n"
|
||||
16
Task/99-Bottles-of-Beer/Haskell/99-bottles-of-beer-2.hs
Normal file
16
Task/99-Bottles-of-Beer/Haskell/99-bottles-of-beer-2.hs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import qualified Char
|
||||
|
||||
main = putStr $ concat
|
||||
[up (bob n) ++ wall ++ ", " ++ bob n ++ ".\n" ++
|
||||
pass n ++ bob (n - 1) ++ wall ++ ".\n\n" |
|
||||
n <- [99, 98 .. 0]]
|
||||
where bob n = (num n) ++ " bottle" ++ (s n) ++ " of beer"
|
||||
wall = " on the wall"
|
||||
pass 0 = "Go to the store and buy some more, "
|
||||
pass _ = "Take one down and pass it around, "
|
||||
up (x : xs) = Char.toUpper x : xs
|
||||
num (-1) = "99"
|
||||
num 0 = "no more"
|
||||
num n = show n
|
||||
s 1 = ""
|
||||
s _ = "s"
|
||||
28
Task/99-Bottles-of-Beer/Haskell/99-bottles-of-beer-3.hs
Normal file
28
Task/99-Bottles-of-Beer/Haskell/99-bottles-of-beer-3.hs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{-# LANGUAGE TemplateHaskell #-}
|
||||
-- build with "ghc --make beer.hs"
|
||||
module Main where
|
||||
import Language.Haskell.TH
|
||||
import Control.Monad.Writer
|
||||
|
||||
-- This is calculated at compile time, and is equivalent to
|
||||
-- songString = "99 bottles of beer on the wall\n99 bottles..."
|
||||
songString =
|
||||
$(let
|
||||
sing = tell -- we can't sing very well...
|
||||
|
||||
someBottles 1 = "1 bottle of beer "
|
||||
someBottles n = show n ++ " bottles of beer "
|
||||
|
||||
bottlesOfBeer n = (someBottles n ++)
|
||||
|
||||
verse n = do
|
||||
sing $ n `bottlesOfBeer` "on the wall\n"
|
||||
sing $ n `bottlesOfBeer` "\n"
|
||||
sing $ "Take one down, pass it around\n"
|
||||
sing $ (n - 1) `bottlesOfBeer` "on the wall\n\n"
|
||||
|
||||
song = execWriter $ mapM_ verse [99,98..1]
|
||||
|
||||
in return $ LitE $ StringL $ song)
|
||||
|
||||
main = putStr songString
|
||||
20
Task/99-Bottles-of-Beer/Java/99-bottles-of-beer-1.java
Normal file
20
Task/99-Bottles-of-Beer/Java/99-bottles-of-beer-1.java
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import java.text.MessageFormat;
|
||||
public class Beer
|
||||
{
|
||||
static String bottles(final int n)
|
||||
{
|
||||
return MessageFormat.format("{0,choice,0#No more bottles|1#One bottle|2#{0} bottles} of beer", n);
|
||||
}
|
||||
public static void main(final String[] args)
|
||||
{
|
||||
String byob = bottles(99);
|
||||
for (int x = 99; x > 0;)
|
||||
{
|
||||
System.out.println(byob + " on the wall");
|
||||
System.out.println(byob);
|
||||
System.out.println("Take one down, pass it around");
|
||||
byob = bottles(--x);
|
||||
System.out.println(byob + " on the wall\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
16
Task/99-Bottles-of-Beer/Java/99-bottles-of-beer-2.java
Normal file
16
Task/99-Bottles-of-Beer/Java/99-bottles-of-beer-2.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
public class Beer
|
||||
{
|
||||
public static void main(final String[] args)
|
||||
{
|
||||
int beer = 99;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String data[] = new String[] { " bottles of beer on the wall\n",
|
||||
" bottles of beer.\nTake one down, pass it around,\n",
|
||||
"Better go to the store and buy some more." };
|
||||
|
||||
while (beer > 0)
|
||||
sb.append(beer).append(data[0]).append(beer).append(data[1]).append(--beer).append(data[0]).append("\n");
|
||||
|
||||
System.out.println(sb.append(data[2]).toString());
|
||||
}
|
||||
}
|
||||
40
Task/99-Bottles-of-Beer/Java/99-bottles-of-beer-3.java
Normal file
40
Task/99-Bottles-of-Beer/Java/99-bottles-of-beer-3.java
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import java.awt.BorderLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JTextArea;
|
||||
public class Beer extends JFrame implements ActionListener{
|
||||
private int x;
|
||||
private JButton take;
|
||||
private JTextArea text;
|
||||
public static void main(String[] args){
|
||||
new Beer();//build and show the GUI
|
||||
}
|
||||
|
||||
public Beer(){
|
||||
x= 99;
|
||||
take= new JButton("Take one down, pass it around");
|
||||
text= new JTextArea(4,30);//size the area to 4 lines, 30 chars each
|
||||
text.setText(x + " bottles of beer on the wall\n" + x + " bottles of beer");
|
||||
text.setEditable(false);//so they can't change the text after it's displayed
|
||||
take.addActionListener(this);//listen to the button
|
||||
setLayout(new BorderLayout());//handle placement of components
|
||||
add(text, BorderLayout.CENTER);//put the text area in the largest section
|
||||
add(take, BorderLayout.SOUTH);//put the button underneath it
|
||||
pack();//auto-size the window
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//exit on "X" (I hate System.exit...)
|
||||
setVisible(true);//show it
|
||||
}
|
||||
|
||||
public void actionPerformed(ActionEvent arg0){
|
||||
if(arg0.getSource() == take){//if they clicked the button
|
||||
JOptionPane.showMessageDialog(null, --x + " bottles of beer on the wall");//show a popup message
|
||||
text.setText(x + " bottles of beer on the wall\n" + x + " bottles of beer");//change the text
|
||||
}
|
||||
if(x == 0){//if it's the end
|
||||
dispose();//end
|
||||
}
|
||||
}
|
||||
}
|
||||
10
Task/99-Bottles-of-Beer/JavaScript/99-bottles-of-beer-1.js
Normal file
10
Task/99-Bottles-of-Beer/JavaScript/99-bottles-of-beer-1.js
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
// Line breaks are in HTML
|
||||
var beer = 99;
|
||||
while (beer > 0)
|
||||
{
|
||||
document.write( beer + " bottles of beer on the wall<br>" );
|
||||
document.write( beer + " bottles of beer<br>" );
|
||||
document.write( "Take one down, pass it around<br>" );
|
||||
document.write( (beer - 1) + " bottles of beer on the wall<br>" );
|
||||
beer--;
|
||||
}
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
// Line breaks are in HTML
|
||||
var beer; while ((beer = typeof beer === "undefined" ? 99 : beer) > 0) document.write( beer + " bottle" + (beer != 1 ? "s" : "") + " of beer on the wall<br>" + beer + " bottle" + (beer != 1 ? "s" : "") + " of beer<br>Take one down, pass it around<br>" + (--beer) + " bottle" + (beer != 1 ? "s" : "") + " of beer on the wall<br>" );
|
||||
21
Task/99-Bottles-of-Beer/JavaScript/99-bottles-of-beer-3.js
Normal file
21
Task/99-Bottles-of-Beer/JavaScript/99-bottles-of-beer-3.js
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// Line breaks are in HTML
|
||||
function Bottles(count){
|
||||
this.count = (!!count)?count:99;
|
||||
this.knock = function(){
|
||||
var c = document.createElement('div');
|
||||
c.id="bottle-"+this.count;
|
||||
c.innerHTML = "<p>"+this.count+" bottles of beer on the wall</p>"
|
||||
+"<p>"+this.count+" bottles of beer!</p>"
|
||||
+"<p>Take one down,<br>Pass it around</p>"
|
||||
+"<p>"+(--this.count)+" bottles of beer on the wall</p><p><br></p>";
|
||||
document.body.appendChild(c);
|
||||
}
|
||||
this.sing = function(){
|
||||
while (this.count>0) { this.knock(); }
|
||||
}
|
||||
}
|
||||
|
||||
(function(){
|
||||
var bar = new Bottles(99);
|
||||
bar.sing();
|
||||
})();
|
||||
18
Task/99-Bottles-of-Beer/JavaScript/99-bottles-of-beer-4.js
Normal file
18
Task/99-Bottles-of-Beer/JavaScript/99-bottles-of-beer-4.js
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
function bottleSong(n) {
|
||||
if (!isFinite(Number(n)) || n == 0) n = 100;
|
||||
var a = '%% bottles of beer',
|
||||
b = ' on the wall',
|
||||
c = 'Take one down, pass it around',
|
||||
r = '<br>'
|
||||
p = document.createElement('p'),
|
||||
s = [],
|
||||
re = /%%/g;
|
||||
|
||||
while(n) {
|
||||
s.push((a+b+r+a+r+c+r).replace(re, n) + (a+b).replace(re, --n));
|
||||
}
|
||||
p.innerHTML = s.join(r+r);
|
||||
document.body.appendChild(p);
|
||||
}
|
||||
|
||||
window.onload = bottleSong;
|
||||
20
Task/99-Bottles-of-Beer/LaTeX/99-bottles-of-beer-1.tex
Normal file
20
Task/99-Bottles-of-Beer/LaTeX/99-bottles-of-beer-1.tex
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
\documentclass{article}
|
||||
|
||||
\newcounter{beer}
|
||||
|
||||
\newcommand{\verses}[1]{
|
||||
\setcounter{beer}{#1}
|
||||
\par\noindent
|
||||
\arabic{beer} bottles of beer on the wall,\\
|
||||
\arabic{beer} bottles of beer!\\
|
||||
Take one down, pass it around---\\
|
||||
\addtocounter{beer}{-1}
|
||||
\arabic{beer} bottles of beer on the wall!\\
|
||||
\ifnum#1>0
|
||||
\verses{\value{beer}}
|
||||
\fi
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
\verses{99}
|
||||
\end{document}
|
||||
23
Task/99-Bottles-of-Beer/LaTeX/99-bottles-of-beer-2.tex
Normal file
23
Task/99-Bottles-of-Beer/LaTeX/99-bottles-of-beer-2.tex
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
\documentclass{article}
|
||||
|
||||
\newcounter{beer}
|
||||
\newcounter{showC}
|
||||
|
||||
\newcommand{\verses}[1]{
|
||||
\setcounter{beer}{#1}
|
||||
\loop
|
||||
\par\noindent
|
||||
\Roman{beer} bottles of beer on the wall,\\
|
||||
\Roman{beer} bottles of beer!\\
|
||||
Take one down, pass it around---\\
|
||||
\addtocounter{beer}{-1}
|
||||
% Romans didn't know how to write zero ;-)
|
||||
\ifnum\value{beer}=0 ZERO \else\Roman{beer} \fi
|
||||
bottles of beer on the wall!\\
|
||||
\ifnum\value{beer}>0
|
||||
\repeat
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
\verses{99}
|
||||
\end{document}
|
||||
11
Task/99-Bottles-of-Beer/Lua/99-bottles-of-beer.lua
Normal file
11
Task/99-Bottles-of-Beer/Lua/99-bottles-of-beer.lua
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
local bottles = 99
|
||||
|
||||
local function plural (bottles) if bottles == 1 then return '' end return 's' end
|
||||
while bottles > 0 do
|
||||
print (bottles..' bottle'..plural(bottles)..' of beer on the wall')
|
||||
print (bottles..' bottle'..plural(bottles)..' of beer')
|
||||
print ('Take one down, pass it around')
|
||||
bottles = bottles - 1
|
||||
print (bottles..' bottle'..plural(bottles)..' of beer on the wall')
|
||||
print ()
|
||||
end
|
||||
15
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-1.php
Normal file
15
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-1.php
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
$plural = 's';
|
||||
foreach (range(99, 1) as $i) {
|
||||
echo "$i bottle$plural of beer on the wall,\n";
|
||||
echo "$i bottle$plural of beer!\n";
|
||||
echo "Take one down, pass it around!\n";
|
||||
if ($i - 1 == 1)
|
||||
$plural = '';
|
||||
|
||||
if ($i > 1)
|
||||
echo ($i - 1) . " bottle$plural of beer on the wall!\n\n";
|
||||
else
|
||||
echo "No more bottles of beer on the wall!\n";
|
||||
}
|
||||
?>
|
||||
13
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-2.php
Normal file
13
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-2.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
foreach(range(99,1) as $i) {
|
||||
$p = ($i>1)?"s":"";
|
||||
echo <<< EOV
|
||||
$i bottle$p of beer on the wall
|
||||
$i bottle$p of beer
|
||||
Take one down, pass it around
|
||||
|
||||
|
||||
EOV;
|
||||
}
|
||||
echo "No more Bottles of beer on the wall";
|
||||
?>
|
||||
18
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-3.php
Normal file
18
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-3.php
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
$verse = <<<VERSE
|
||||
100 bottles of beer on the wall,
|
||||
100 bottles of beer!
|
||||
Take one down, pass it around!
|
||||
99 bottles of beer on the wall!
|
||||
|
||||
|
||||
VERSE;
|
||||
|
||||
foreach (range(1,99) as $i) { // loop 99 times
|
||||
$verse = preg_replace('/\d+/e', '$0 - 1', $verse);
|
||||
$verse = preg_replace('/\b1 bottles/', '1 bottle', $verse);
|
||||
$verse = preg_replace('/\b0 bottle/', 'No bottles', $verse);
|
||||
|
||||
echo $verse;
|
||||
}
|
||||
?>
|
||||
7
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-4.php
Normal file
7
Task/99-Bottles-of-Beer/PHP/99-bottles-of-beer-4.php
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
for($i=100;$i>0;$i--){
|
||||
$p2=$i." bottle".(($i>1)?"s":"")." of beer";
|
||||
$p1=$p2." on the wall\n";
|
||||
$p3="Take one down, pass it around\n";
|
||||
echo (($i<100)?$p1."\n":"").$p1.$p2."\n".$p3.(($i<2)?($i-1).substr($p1,1,28):"");
|
||||
}
|
||||
31
Task/99-Bottles-of-Beer/PIR/99-bottles-of-beer.pir
Normal file
31
Task/99-Bottles-of-Beer/PIR/99-bottles-of-beer.pir
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
.sub sounding_smart_is_hard_after_drinking_this_many
|
||||
.param int b
|
||||
if b == 1 goto ONE
|
||||
.return(" bottles ")
|
||||
ONE:
|
||||
.return(" bottle ")
|
||||
end
|
||||
.end
|
||||
|
||||
.sub main :main
|
||||
.local int bottles
|
||||
.local string b
|
||||
bottles = 99
|
||||
LUSH:
|
||||
if bottles == 0 goto DRUNK
|
||||
b = sounding_smart_is_hard_after_drinking_this_many( bottles )
|
||||
print bottles
|
||||
print b
|
||||
print "of beer on the wall\n"
|
||||
print bottles
|
||||
print b
|
||||
print "of beer\nTake one down, pass it around\n"
|
||||
dec bottles
|
||||
b = sounding_smart_is_hard_after_drinking_this_many( bottles )
|
||||
print bottles
|
||||
print b
|
||||
print "of beer on the wall\n\n"
|
||||
goto LUSH
|
||||
DRUNK:
|
||||
end
|
||||
.end
|
||||
18
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-1.pl
Normal file
18
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-1.pl
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/perl -w
|
||||
|
||||
my $verse = <<"VERSE";
|
||||
100 bottles of beer on the wall,
|
||||
100 bottles of beer!
|
||||
Take one down, pass it around!
|
||||
99 bottles of beer on the wall!
|
||||
|
||||
VERSE
|
||||
|
||||
{
|
||||
$verse =~ s/(\d+)/$1-1/ge;
|
||||
$verse =~ s/\b1 bottles/1 bottle/g;
|
||||
my $done = $verse =~ s/\b0 bottle/No bottles/g; # if we make this replacement, we're also done.
|
||||
|
||||
print $verse;
|
||||
redo unless $done;
|
||||
}
|
||||
6
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-2.pl
Normal file
6
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-2.pl
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
for $n (reverse(0..99))
|
||||
{
|
||||
$bottles = sprintf("%s bottle%s of beer on the wall\n",(($n==0)?"No":$n), (($n==1)?"":"s"));
|
||||
print( (($n==99)?"":"$bottles\n") .
|
||||
(($n==0)?"":(substr(${bottles}x2,0,-12) . "\nTake one down, pass it around\n")) );
|
||||
}
|
||||
14
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-3.pl
Normal file
14
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-3.pl
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
use 5.10.0;
|
||||
|
||||
$num = 99;
|
||||
while ($num > 0) {
|
||||
my $s = "s" unless ($num == 1);
|
||||
say "$num bottle$s of beer on the wall, $num bottle$s of beer";
|
||||
$num--;
|
||||
my $s = "s" unless ($num == 1);
|
||||
$num = "No more" if ($num == 0);
|
||||
say "Take one down, pass it around, $num bottle$s of beer on the wall\n"
|
||||
}
|
||||
|
||||
say "No more bottles of beer on the wall, no more bottles of beer.";
|
||||
say "Go to the store and buy some more, 99 bottles of beer on the wall.";
|
||||
16
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-4.pl
Normal file
16
Task/99-Bottles-of-Beer/Perl/99-bottles-of-beer-4.pl
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub bottles() { sprintf qq{%s bottle%s of beer}
|
||||
, $_ || 'No'
|
||||
, $_==1 ? '' : 's';
|
||||
}
|
||||
sub store() { $_=99; qq{Go to the store, buy some more...\n}; }
|
||||
sub wall() { qq{ on the wall\n} }
|
||||
sub take() { $_-- ? qq{Take one down, pass it around\n} : store }
|
||||
do { print bottles, wall
|
||||
, bottles, qq{\n}
|
||||
, take
|
||||
, bottles, qq{\n\n}
|
||||
} for reverse 0..99;
|
||||
12
Task/99-Bottles-of-Beer/PicoLisp/99-bottles-of-beer.l
Normal file
12
Task/99-Bottles-of-Beer/PicoLisp/99-bottles-of-beer.l
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
(de bottles (N)
|
||||
(case N
|
||||
(0 "No more beer")
|
||||
(1 "One bottle of beer")
|
||||
(T (cons N " bottles of beer")) ) )
|
||||
|
||||
(for (N 99 (gt0 N))
|
||||
(prinl (bottles N) " on the wall,")
|
||||
(prinl (bottles N) ".")
|
||||
(prinl "Take one down, pass it around,")
|
||||
(prinl (bottles (dec 'N)) " on the wall.")
|
||||
(prinl) )
|
||||
10
Task/99-Bottles-of-Beer/Prolog/99-bottles-of-beer-1.pro
Normal file
10
Task/99-Bottles-of-Beer/Prolog/99-bottles-of-beer-1.pro
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
bottles(0):-!.
|
||||
bottles(X):-
|
||||
writef('%t bottles of beer on the wall \n',[X]),
|
||||
writef('%t bottles of beer\n',[X]),
|
||||
write('Take one down, pass it around\n'),
|
||||
succ(XN,X),
|
||||
writef('%t bottles of beer on the wall \n\n',[XN]),
|
||||
bottles(XN).
|
||||
|
||||
:- bottles(99).
|
||||
19
Task/99-Bottles-of-Beer/Prolog/99-bottles-of-beer-2.pro
Normal file
19
Task/99-Bottles-of-Beer/Prolog/99-bottles-of-beer-2.pro
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
line1(X):- line2(X),write(' on the wall').
|
||||
line2(0):- write('no more bottles of beer').
|
||||
line2(1):- write('1 bottle of beer').
|
||||
line2(X):- writef('%t bottles of beer',[X]).
|
||||
line3(1):- write('Take it down, pass it around').
|
||||
line3(X):- write('Take one down, pass it around').
|
||||
line4(X):- line1(X).
|
||||
|
||||
bottles(0):-!.
|
||||
bottles(X):-
|
||||
succ(XN,X),
|
||||
line1(X),nl,
|
||||
line2(X),nl,
|
||||
line3(X),nl,
|
||||
line4(XN),nl,nl,
|
||||
!,
|
||||
bottles(XN).
|
||||
|
||||
:- bottles(99).
|
||||
14
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-1.py
Normal file
14
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-1.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
def plural(word, amount): # Correctly pluralize a word.
|
||||
if amount == 1:
|
||||
return word
|
||||
else:
|
||||
return word + 's'
|
||||
|
||||
def sing(b, end): # Sing a phrase of the song, for b bottles, ending in end
|
||||
print b or 'No more', plural('bottle', b), end
|
||||
|
||||
for i in range(99, 0, -1):
|
||||
sing(i, 'of beer on the wall,')
|
||||
sing(i, 'of beer,')
|
||||
print 'Take one down, pass it around,'
|
||||
sing(i-1, 'of beer on the wall.\n')
|
||||
9
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-2.py
Normal file
9
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-2.py
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
verse = '''\
|
||||
%i bottles of beer on the wall
|
||||
%i bottles of beer
|
||||
Take one down, pass it around
|
||||
%i bottles of beer on the wall
|
||||
'''
|
||||
|
||||
for bottles in range(99,0,-1):
|
||||
print verse % (bottles, bottles, bottles-1)
|
||||
9
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-3.py
Normal file
9
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-3.py
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
verse = '''\
|
||||
{some} bottles of beer on the wall
|
||||
{some} bottles of beer
|
||||
Take one down, pass it around
|
||||
{less} bottles of beer on the wall
|
||||
'''
|
||||
|
||||
for bottles in range(99,0,-1):
|
||||
print verse.format(some=bottles, less=bottles-1)
|
||||
2
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-4.py
Normal file
2
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-4.py
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
a, b, c, s = " bottles of beer", " on the wall\n", "Take one down, pass it around\n", str
|
||||
print "\n".join(s(x)+a+b+s(x)+a+"\n"+c+s(x-1)+a+b for x in xrange(99, 0, -1))
|
||||
2
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-5.py
Normal file
2
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-5.py
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
a = lambda n: "%u bottle%s of beer on the wall\n" % (n, "s"[n==1:])
|
||||
print "\n".join(a(x)+a(x)[:-13]+"\nTake one down, pass it around\n"+a(x-1) for x in xrange(99, 0, -1))
|
||||
14
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-6.py
Normal file
14
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-6.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
"""\
|
||||
{0} {2} of beer on the wall
|
||||
{0} {2} of beer
|
||||
Take one down, pass it around
|
||||
{1} {3} of beer on the wall
|
||||
"""
|
||||
print("\n".join(
|
||||
__doc__.format(
|
||||
i, i - 1,
|
||||
"bottle" if i == 1 else "bottles",
|
||||
"bottle" if i - 1 == 1 else "bottles"
|
||||
) for i in range(99, 0, -1)
|
||||
), end="")
|
||||
39
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-7.py
Normal file
39
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-7.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
ones = (
|
||||
'', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'
|
||||
)
|
||||
prefixes = ('thir', 'four', 'fif', 'six', 'seven', 'eigh', 'nine')
|
||||
tens = ['', '', 'twenty' ]
|
||||
teens = ['ten', 'eleven', 'twelve']
|
||||
for prefix in prefixes:
|
||||
tens.append(prefix + 'ty')
|
||||
teens.append(prefix +'teen')
|
||||
tens[4] = 'forty'
|
||||
|
||||
def number(num):
|
||||
"get the wordy version of a number"
|
||||
ten, one = divmod(num, 10)
|
||||
if ten == 0 and one == 0:
|
||||
return 'no'
|
||||
elif ten == 0:
|
||||
return ones[one]
|
||||
elif ten == 1:
|
||||
return teens[one]
|
||||
elif one == 0:
|
||||
return tens[ten]
|
||||
else:
|
||||
return "%s-%s" % (tens[ten], ones[one])
|
||||
|
||||
def bottles(beer):
|
||||
"our rephrase"
|
||||
return "%s bottle%s of beer" % (
|
||||
number(beer).capitalize(), 's' if beer > 1 else ''
|
||||
)
|
||||
|
||||
onthewall = 'on the wall'
|
||||
takeonedown = 'Take one down, pass it around'
|
||||
for beer in range(99, 0, -1):
|
||||
print bottles(beer), onthewall
|
||||
print bottles(beer)
|
||||
print takeonedown
|
||||
print bottles(beer-1), onthewall
|
||||
print
|
||||
7
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-8.py
Normal file
7
Task/99-Bottles-of-Beer/Python/99-bottles-of-beer-8.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
for n in xrange(99, 0, -1):
|
||||
## The formatting performs a conditional check on the variable.
|
||||
## If it formats the first open for False, and the second for True
|
||||
print n, 'bottle%s of beer on the the wall.' % ('s', '')[n == 1]
|
||||
print n, 'bottle%s of beer.' % ('s', '')[n == 1]
|
||||
print 'Take one down, pass it around.'
|
||||
print n - 1, 'bottle%s of beer on the wall.\n' % ('s', '')[n - 1 == 1]
|
||||
16
Task/99-Bottles-of-Beer/R/99-bottles-of-beer-1.r
Normal file
16
Task/99-Bottles-of-Beer/R/99-bottles-of-beer-1.r
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
#a naive function to sing for N bottles of beer...
|
||||
|
||||
song = function(bottles){
|
||||
|
||||
for(i in bottles:1){ #for every integer bottles, bottles-1 ... 1
|
||||
|
||||
cat(bottles," bottles of beer on the wall \n",bottles," bottles of beer \nTake one down, pass it around \n",
|
||||
bottles-1, " bottles of beer on the wall \n"," \n" ,sep="") #join and print the text (\n means new line)
|
||||
|
||||
bottles = bottles - 1 #take one down...
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
song(99)#play the song by calling the function
|
||||
5
Task/99-Bottles-of-Beer/R/99-bottles-of-beer-2.r
Normal file
5
Task/99-Bottles-of-Beer/R/99-bottles-of-beer-2.r
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#only one line!
|
||||
cat(paste(99:1,ifelse((99:1)!=1," bottles"," bottle")," of beer on the wall\n",99:1,ifelse((99:1)!=1," bottles"," bottle")," of beer\n","Take one down, pass it around\n",98:0,ifelse((98:0)!=1," bottles"," bottle")," of beer on the wall\n\n",sep=""),sep="")
|
||||
|
||||
#alternative
|
||||
cat(paste(lapply(99:1,function(i){paste(paste(rep(paste(i,' bottle',if(i!=1)'s',' of beer',sep=''),2),collapse =' on the wall\n'),'Take one down, pass it around',paste(i-1,' bottle',if(i!=2)'s',' of beer on the wall',sep=''), sep='\n')}),collapse='\n\n'))
|
||||
19
Task/99-Bottles-of-Beer/REXX/99-bottles-of-beer.rexx
Normal file
19
Task/99-Bottles-of-Beer/REXX/99-bottles-of-beer.rexx
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/*REXX pgm displays words to the song "99 Bottles of Beer on the Wall". */
|
||||
|
||||
do j=99 by -1 to 1 /*start countdown | singdown*/
|
||||
say j 'bottle's(j) "of beer on the wall," /*sing the #bottles of beer.*/
|
||||
say j 'bottle's(j) "of beer." /* ... and the refrain. */
|
||||
say 'Take one down, pass it around,' /*get a bottle and share it.*/
|
||||
n=j-1 /*N is #bottles we have now.*/
|
||||
if n==0 then n='no' /*use "no" instead of 0. */
|
||||
say n 'bottle's(n) "of beer on the wall." /*sing beer bottle inventory*/
|
||||
say /*blank line between verses.*/
|
||||
end /*j*/
|
||||
|
||||
say 'No more bottles of beer on the wall,' /*Finally! The last verse.*/
|
||||
say 'no more bottles of beer.' /*so sad ... */
|
||||
say 'Go to the store and buy some more,' /*replenishment of the beer.*/
|
||||
say '99 bottles of beer on the wall.' /*All is well in the tavern.*/
|
||||
exit /*we're done & also sloshed.*/
|
||||
/*───────────────────────────────────S subroutine───────────────────────*/
|
||||
s: if arg(1)=1 then return ''; return 's' /*a simple pluralizer funct.*/
|
||||
11
Task/99-Bottles-of-Beer/Racket/99-bottles-of-beer.rkt
Normal file
11
Task/99-Bottles-of-Beer/Racket/99-bottles-of-beer.rkt
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#lang racket
|
||||
|
||||
(define (plural n)
|
||||
(string-append (number->string n) " bottle" (if (equal? n 1) "" "s")))
|
||||
|
||||
(define (sing bottles)
|
||||
(printf "~a of beer on the wall\n~a of beer\nTake on down, pass it around\n~a of beer on the wall\n\n"
|
||||
(plural bottles) (plural bottles) (plural (sub1 bottles))))
|
||||
|
||||
(for ((i (in-range 100 0 -1)))
|
||||
(sing i))
|
||||
13
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-1.rb
Normal file
13
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-1.rb
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
plural = 's'
|
||||
99.downto(1) do |i|
|
||||
puts "#{i} bottle#{plural} of beer on the wall,"
|
||||
puts "#{i} bottle#{plural} of beer"
|
||||
puts "Take one down, pass it around!"
|
||||
plural = '' if i - 1 == 1
|
||||
if i > 1
|
||||
puts "#{i-1} bottle#{plural} of beer on the wall!"
|
||||
puts
|
||||
else
|
||||
puts "No more bottles of beer on the wall!"
|
||||
end
|
||||
end
|
||||
12
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-2.rb
Normal file
12
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-2.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
trace_var :$bottle_num do |val|
|
||||
$bottles = %Q{#{val == 0 ? 'No more' : val.to_s} bottle#{val == 1 ? '' : 's'}}
|
||||
end
|
||||
|
||||
($bottle_num = 99).times do
|
||||
puts "#{$bottles} of beer on the wall"
|
||||
puts "#{$bottles} of beer"
|
||||
puts "Take one down, pass it around"
|
||||
$bottle_num -= 1
|
||||
puts "#{$bottles} of beer on the wall"
|
||||
puts ""
|
||||
end
|
||||
15
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-3.rb
Normal file
15
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-3.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
def bottles(of_beer, ending)
|
||||
puts "#{of_beer} bottle#{ending} of beer on the wall,"
|
||||
puts "#{of_beer} bottle#{ending} of beer"
|
||||
puts "Take one down, pass it around!"
|
||||
end
|
||||
|
||||
99.downto(0) do |left|
|
||||
if left > 1
|
||||
bottles(left, "s")
|
||||
elsif left == 1
|
||||
bottles(left, "")
|
||||
else
|
||||
puts "No more bottles of beer on the wall!"
|
||||
end
|
||||
end
|
||||
14
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-4.rb
Normal file
14
Task/99-Bottles-of-Beer/Ruby/99-bottles-of-beer-4.rb
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
def bottles(beer, wall = false)
|
||||
"#{beer>0 ? beer : "no more"} bottle#{"s" if beer!=1} of beer#{" on the wall" if wall}"
|
||||
end
|
||||
|
||||
99.downto(0) do |remaining|
|
||||
puts "#{bottles(remaining,true).capitalize}, #{bottles(remaining)}."
|
||||
if remaining==0
|
||||
print "Go to the store and buy some more"
|
||||
remaining=100
|
||||
else
|
||||
print "Take one down, pass it around"
|
||||
end
|
||||
puts ", #{bottles(remaining-1,true)}.\n\n"
|
||||
end
|
||||
19
Task/99-Bottles-of-Beer/SNUSP/99-bottles-of-beer.snusp
Normal file
19
Task/99-Bottles-of-Beer/SNUSP/99-bottles-of-beer.snusp
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
/=!/===========!/==+++++++++# +9
|
||||
| | /=!/=====@/==@@@+@+++++# +48 (itoa)
|
||||
| | | | /==!/==@@@@=++++# +32 (space)
|
||||
| | | | | \==@@++\!+++++++++++++\!+++++\
|
||||
9 9 '9 9' space 'b' 'o' 't'
|
||||
$@/>@/>@/>@/>@/>========@/>============@/>====@/>++++++++++ \n setup
|
||||
/====================================loop=====>\!=>\!<<<<<<<< /
|
||||
\@\@\>cr.@\< ?\<->+++++++++>->+++++++++\ | |
|
||||
! | | \===-========>=>-==BCD==!\< @\< ?/< ?/# no more beer!
|
||||
/=|=====|================================/
|
||||
| | \<++t.<<----a.>----k.<++++e.<_.>>++++o.-n.< e.<_.>-d.>+o.>+++w.<-n.<<_.\
|
||||
| | / /
|
||||
| | \>---a.>n.<+++d.<_.>>++p.<---a.>>----s.s.<<<_.>>-------i.>+t.<<<_.\
|
||||
| | / /
|
||||
| | \>a.>>--r.<++++++o.>+++u.<-n.<+++d.>>>cr.<-T<+O<--B<<<#
|
||||
| !
|
||||
\@\<<<_.>>o.-n.<<_.>>>++t.<<+++h.---e.<_.>>>+++w.<<----a.>--l.l.>>CR.<---T<+++O<+B<<<#
|
||||
|
|
||||
\9.>9.>_.>B.>O.>T.t.<---l.<+++e.>>-s.<<<_.>>+++O.<+f.<_.>----b.+++e.E.>>-R.#
|
||||
14
Task/99-Bottles-of-Beer/Sather/99-bottles-of-beer.sa
Normal file
14
Task/99-Bottles-of-Beer/Sather/99-bottles-of-beer.sa
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class MAIN is
|
||||
main is
|
||||
s :STR;
|
||||
p1 ::= "<##> bottle<#> of beer";
|
||||
w ::= " on the wall";
|
||||
t ::= "Take one down, pass it around\n";
|
||||
loop i ::= 99.downto!(0);
|
||||
if i /= 1 then s := "s" else s := ""; end;
|
||||
#OUT + #FMT(p1 + w + "\n", i, "s");
|
||||
#OUT + #FMT(p1 + "\n", i, "s");
|
||||
if i > 0 then #OUT + t; end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
7
Task/99-Bottles-of-Beer/Scheme/99-bottles-of-beer.ss
Normal file
7
Task/99-Bottles-of-Beer/Scheme/99-bottles-of-beer.ss
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
(define (bottles x)
|
||||
(format #t "~a bottles of beer on the wall~%" x)
|
||||
(format #t "~a bottles of beer~%" x)
|
||||
(format #t "Take one down, pass it around~%")
|
||||
(format #t "~a bottles of beer on the wall~%" (- x 1))
|
||||
(if (> (- x 1) 0)
|
||||
(bottles (- x 1))))
|
||||
15
Task/99-Bottles-of-Beer/Smalltalk/99-bottles-of-beer.st
Normal file
15
Task/99-Bottles-of-Beer/Smalltalk/99-bottles-of-beer.st
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
Smalltalk at: #sr put: 0 ; at: #s put: 0 !
|
||||
sr := Dictionary new.
|
||||
sr at: 0 put: ' bottle' ;
|
||||
at: 1 put: ' bottles' ;
|
||||
at: 2 put: ' of beer' ;
|
||||
at: 3 put: ' on the wall' ;
|
||||
at: 4 put: 'Take one down, pass it around' !
|
||||
99 to: 0 by: -1 do: [:v | v print.
|
||||
( v == 1 ) ifTrue: [ s := 0. ]
|
||||
ifFalse: [ s := 1. ].
|
||||
Transcript show: (sr at:s) ; show: (sr at:2) ; show: (sr at:3) ; cr.
|
||||
v print.
|
||||
Transcript show: (sr at:s) ; show: (sr at:2) ; cr.
|
||||
(v ~~ 0) ifTrue: [ Transcript show: (sr at:4) ; cr. ].
|
||||
].
|
||||
10
Task/99-Bottles-of-Beer/Tcl/99-bottles-of-beer-1.tcl
Normal file
10
Task/99-Bottles-of-Beer/Tcl/99-bottles-of-beer-1.tcl
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
set s "s"; set ob "of beer"; set otw "on the wall"; set more "Take one down and pass it around"
|
||||
for {set n 100} {$n ne "No more"} {} {
|
||||
switch -- [incr n -1] {
|
||||
1 {set s ""}
|
||||
0 {set s "s"; set n "No more"; set more "Go to the store and buy some more"}
|
||||
}
|
||||
lappend verse ". $n bottle$s $ob $otw.\n"
|
||||
lappend verse "\n$n bottle$s $ob $otw, [string tolower $n] bottle$s $ob.\n$more"
|
||||
}
|
||||
puts -nonewline [join [lreplace $verse 0 0] ""][lindex $verse 0]
|
||||
28
Task/99-Bottles-of-Beer/Tcl/99-bottles-of-beer-2.tcl
Normal file
28
Task/99-Bottles-of-Beer/Tcl/99-bottles-of-beer-2.tcl
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
proc 0-19 {n} {
|
||||
lindex {"no more" one two three four five six seven eight nine ten eleven
|
||||
twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen} $n
|
||||
}
|
||||
|
||||
proc TENS {n} {
|
||||
lindex {twenty thirty fourty fifty sixty seventy eighty ninety} [expr {$n - 2}]
|
||||
}
|
||||
|
||||
proc num2words {n} {
|
||||
if {$n < 20} {return [0-19 $n]}
|
||||
set tens [expr {$n / 10}]
|
||||
set ones [expr {$n % 10}]
|
||||
if {$ones == 0} {return [TENS $tens]}
|
||||
return "[TENS $tens]-[0-19 $ones]"
|
||||
}
|
||||
|
||||
proc get_words {n} {
|
||||
return "[num2words $n] bottle[expr {$n != 1 ? "s" : ""}] of beer"
|
||||
}
|
||||
|
||||
for {set i 99} {$i > 0} {incr i -1} {
|
||||
puts [string totitle "[get_words $i] on the wall, [get_words $i]."]
|
||||
puts "Take one down and pass it around, [get_words [expr {$i - 1}]] on the wall.\n"
|
||||
}
|
||||
|
||||
puts "No more bottles of beer on the wall, no more bottles of beer."
|
||||
puts "Go to the store and buy some more, 99 bottles of beer on the wall."
|
||||
12
Task/Ackermann-function/0DESCRIPTION
Normal file
12
Task/Ackermann-function/0DESCRIPTION
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
The '''[[wp:Ackermann function|Ackermann function]]''' is a classic recursive example in computer science. It is a function that grows very quickly (in its value and in the size of its call tree). It is defined as follows:
|
||||
|
||||
:<math> A(m, n) =
|
||||
\begin{cases}
|
||||
n+1 & \mbox{if } m = 0 \\
|
||||
A(m-1, 1) & \mbox{if } m > 0 \mbox{ and } n = 0 \\
|
||||
A(m-1, A(m, n-1)) & \mbox{if } m > 0 \mbox{ and } n > 0.
|
||||
\end{cases}
|
||||
</math>
|
||||
<!-- <table><tr><td width=12><td><td><math>n+1</math><td>if <math>m=0</math> <tr><td> <td><math>A(m, n) =</math> <td><math>A(m-1, 1)</math> <td>if <math>m>0</math> and <math>n=0</math> <tr><td><td><td><math>A(m-1, A(m, n-1))</math> <td> if <math>m>0</math> and <math>n>0</math></table> -->
|
||||
|
||||
Its arguments are never negative and it always terminates. Write a function which returns the value of <math>A(m, n)</math>. Arbitrary precision is preferred (since the function grows so quickly), but not required.
|
||||
5
Task/Ackermann-function/1META.yaml
Normal file
5
Task/Ackermann-function/1META.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
category:
|
||||
- Memoization
|
||||
- Classic CS problems and programs
|
||||
note: Recursion
|
||||
45
Task/Ackermann-function/ABAP/ackermann-function.abap
Normal file
45
Task/Ackermann-function/ABAP/ackermann-function.abap
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
REPORT zhuberv_ackermann.
|
||||
|
||||
CLASS zcl_ackermann DEFINITION.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS ackermann IMPORTING m TYPE i
|
||||
n TYPE i
|
||||
RETURNING value(v) TYPE i.
|
||||
ENDCLASS. "zcl_ackermann DEFINITION
|
||||
|
||||
|
||||
CLASS zcl_ackermann IMPLEMENTATION.
|
||||
|
||||
METHOD: ackermann.
|
||||
|
||||
DATA: lv_new_m TYPE i,
|
||||
lv_new_n TYPE i.
|
||||
|
||||
IF m = 0.
|
||||
v = n + 1.
|
||||
ELSEIF m > 0 AND n = 0.
|
||||
lv_new_m = m - 1.
|
||||
lv_new_n = 1.
|
||||
v = ackermann( m = lv_new_m n = lv_new_n ).
|
||||
ELSEIF m > 0 AND n > 0.
|
||||
lv_new_m = m - 1.
|
||||
|
||||
lv_new_n = n - 1.
|
||||
lv_new_n = ackermann( m = m n = lv_new_n ).
|
||||
|
||||
v = ackermann( m = lv_new_m n = lv_new_n ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "ackermann
|
||||
|
||||
ENDCLASS. "zcl_ackermann IMPLEMENTATION
|
||||
|
||||
|
||||
PARAMETERS: pa_m TYPE i,
|
||||
pa_n TYPE i.
|
||||
|
||||
DATA: lv_result TYPE i.
|
||||
|
||||
START-OF-SELECTION.
|
||||
lv_result = zcl_ackermann=>ackermann( m = pa_m n = pa_n ).
|
||||
WRITE: / lv_result.
|
||||
18
Task/Ackermann-function/AWK/ackermann-function.awk
Normal file
18
Task/Ackermann-function/AWK/ackermann-function.awk
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
function ackermann(m, n)
|
||||
{
|
||||
if ( m == 0 ) {
|
||||
return n+1
|
||||
}
|
||||
if ( n == 0 ) {
|
||||
return ackermann(m-1, 1)
|
||||
}
|
||||
return ackermann(m-1, ackermann(m, n-1))
|
||||
}
|
||||
|
||||
BEGIN {
|
||||
for(n=0; n < 7; n++) {
|
||||
for(m=0; m < 4; m++) {
|
||||
print "A(" m "," n ") = " ackermann(m,n)
|
||||
}
|
||||
}
|
||||
}
|
||||
13
Task/Ackermann-function/ActionScript/ackermann-function.as
Normal file
13
Task/Ackermann-function/ActionScript/ackermann-function.as
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
public function ackermann(m:uint, n:uint):uint
|
||||
{
|
||||
if (m == 0)
|
||||
{
|
||||
return n + 1;
|
||||
}
|
||||
if (n == 0)
|
||||
{
|
||||
return ackermann(m - 1, 1);
|
||||
}
|
||||
|
||||
return ackermann(m - 1, ackermann(m, n - 1));
|
||||
}
|
||||
21
Task/Ackermann-function/Ada/ackermann-function.ada
Normal file
21
Task/Ackermann-function/Ada/ackermann-function.ada
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
with Ada.Text_IO; use Ada.Text_IO;
|
||||
|
||||
procedure Test_Ackermann is
|
||||
function Ackermann (M, N : Natural) return Natural is
|
||||
begin
|
||||
if M = 0 then
|
||||
return N + 1;
|
||||
elsif N = 0 then
|
||||
return Ackermann (M - 1, 1);
|
||||
else
|
||||
return Ackermann (M - 1, Ackermann (M, N - 1));
|
||||
end if;
|
||||
end Ackermann;
|
||||
begin
|
||||
for M in 0..3 loop
|
||||
for N in 0..6 loop
|
||||
Put (Natural'Image (Ackermann (M, N)));
|
||||
end loop;
|
||||
New_Line;
|
||||
end loop;
|
||||
end Test_Ackermann;
|
||||
12
Task/Ackermann-function/BASIC/ackermann-function.bas
Normal file
12
Task/Ackermann-function/BASIC/ackermann-function.bas
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
DECLARE FUNCTION ack! (m!, n!)
|
||||
|
||||
FUNCTION ack (m!, n!)
|
||||
IF m = 0 THEN ack = n + 1
|
||||
|
||||
IF m > 0 AND n = 0 THEN
|
||||
ack = ack(m - 1, 1)
|
||||
END IF
|
||||
IF m > 0 AND n > 0 THEN
|
||||
ack = ack(m - 1, ack(m, n - 1))
|
||||
END IF
|
||||
END FUNCTION
|
||||
53
Task/Ackermann-function/Babel/ackermann-function.pb
Normal file
53
Task/Ackermann-function/Babel/ackermann-function.pb
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
main:
|
||||
{((0 0) (0 1) (0 2)
|
||||
(0 3) (0 4) (1 0)
|
||||
(1 1) (1 2) (1 3)
|
||||
(1 4) (2 0) (2 1)
|
||||
(2 2) (2 3) (3 0)
|
||||
(3 1) (3 2) (4 0))
|
||||
|
||||
{ dup
|
||||
"A(" << { %d " " . << } ... ") = " <<
|
||||
reverse give
|
||||
ack
|
||||
%d cr << } ... }
|
||||
|
||||
ack!:
|
||||
{ dup zero?
|
||||
{ <-> dup zero?
|
||||
{ <->
|
||||
cp
|
||||
1 -
|
||||
<- <- 1 - ->
|
||||
ack ->
|
||||
ack }
|
||||
{ <->
|
||||
1 -
|
||||
<- 1 ->
|
||||
ack }
|
||||
if }
|
||||
{ zap 1 + }
|
||||
if }
|
||||
|
||||
zero?!: { 0 = }
|
||||
|
||||
Output:
|
||||
|
||||
A(0 0 ) = 1
|
||||
A(0 1 ) = 2
|
||||
A(0 2 ) = 3
|
||||
A(0 3 ) = 4
|
||||
A(0 4 ) = 5
|
||||
A(1 0 ) = 2
|
||||
A(1 1 ) = 3
|
||||
A(1 2 ) = 4
|
||||
A(1 3 ) = 5
|
||||
A(1 4 ) = 6
|
||||
A(2 0 ) = 3
|
||||
A(2 1 ) = 5
|
||||
A(2 2 ) = 7
|
||||
A(2 3 ) = 9
|
||||
A(3 0 ) = 5
|
||||
A(3 1 ) = 13
|
||||
A(3 2 ) = 29
|
||||
A(4 0 ) = 13
|
||||
8
Task/Ackermann-function/Befunge/ackermann-function.bf
Normal file
8
Task/Ackermann-function/Befunge/ackermann-function.bf
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
r[1&&{0
|
||||
>v
|
||||
j
|
||||
u>.@
|
||||
1> \:v
|
||||
^ v:\_$1+
|
||||
\^v_$1\1-
|
||||
u^>1-0fp:1-\0fg101-
|
||||
18
Task/Ackermann-function/C/ackermann-function-1.c
Normal file
18
Task/Ackermann-function/C/ackermann-function-1.c
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int ackermann(int m, int n)
|
||||
{
|
||||
if (!m) return n + 1;
|
||||
if (!n) return ackermann(m - 1, 1);
|
||||
return ackermann(m - 1, ackermann(m, n - 1));
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int m, n;
|
||||
for (m = 0; m <= 4; m++)
|
||||
for (n = 0; n < 6 - m; n++)
|
||||
printf("A(%d, %d) = %d\n", m, n, ackermann(m, n));
|
||||
|
||||
return 0;
|
||||
}
|
||||
41
Task/Ackermann-function/C/ackermann-function-2.c
Normal file
41
Task/Ackermann-function/C/ackermann-function-2.c
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int m_bits, n_bits;
|
||||
int *cache;
|
||||
|
||||
int ackermann(int m, int n)
|
||||
{
|
||||
int idx, res;
|
||||
if (!m) return n + 1;
|
||||
|
||||
if (n >= 1<<n_bits) {
|
||||
printf("%d, %d\n", m, n);
|
||||
idx = 0;
|
||||
} else {
|
||||
idx = (m << n_bits) + n;
|
||||
if (cache[idx]) return cache[idx];
|
||||
}
|
||||
|
||||
if (!n) res = ackermann(m - 1, 1);
|
||||
else res = ackermann(m - 1, ackermann(m, n - 1));
|
||||
|
||||
if (idx) cache[idx] = res;
|
||||
return res;
|
||||
}
|
||||
int main()
|
||||
{
|
||||
int m, n;
|
||||
|
||||
m_bits = 3;
|
||||
n_bits = 20; /* can save n values up to 2**20 - 1, that's 1 meg */
|
||||
cache = malloc(sizeof(int) * (1 << (m_bits + n_bits)));
|
||||
memset(cache, 0, sizeof(int) * (1 << (m_bits + n_bits)));
|
||||
|
||||
for (m = 0; m <= 4; m++)
|
||||
for (n = 0; n < 6 - m; n++) {
|
||||
printf("A(%d, %d) = %d\n", m, n, ackermann(m, n));
|
||||
|
||||
return 0;
|
||||
}
|
||||
4
Task/Ackermann-function/Clojure/ackermann-function.clj
Normal file
4
Task/Ackermann-function/Clojure/ackermann-function.clj
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
(defn ackermann [m n]
|
||||
(cond (zero? m) (inc n)
|
||||
(zero? n) (ackermann (dec m) 1)
|
||||
:else (ackermann (dec m) (ackermann m (dec n)))))
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
ackermann = (m, n) ->
|
||||
if m is 0 then n + 1
|
||||
else if m > 0 and n is 0 then ackermann m - 1, 1
|
||||
else ackermann m - 1, ackermann m, n - 1
|
||||
6
Task/Ackermann-function/Dylan/ackermann-function.dylan
Normal file
6
Task/Ackermann-function/Dylan/ackermann-function.dylan
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
define method ack(m == 0, n :: <integer>)
|
||||
n + 1
|
||||
end;
|
||||
define method ack(m :: <integer>, n :: <integer>)
|
||||
ack(m - 1, if (n == 0) 1 else ack(m, n - 1) end)
|
||||
end;
|
||||
41
Task/Ackermann-function/Eiffel/ackermann-function.e
Normal file
41
Task/Ackermann-function/Eiffel/ackermann-function.e
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
note
|
||||
description: "Example of Ackerman function"
|
||||
URI: "http://rosettacode.org/wiki/Ackermann_function"
|
||||
|
||||
class
|
||||
ACKERMAN_EXAMPLE
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature {NONE} -- Initialization
|
||||
|
||||
make
|
||||
do
|
||||
print ("%N A(0,0):" + ackerman (0, 0).out)
|
||||
print ("%N A(1,0):" + ackerman (1, 0).out)
|
||||
print ("%N A(0,1):" + ackerman (0, 1).out)
|
||||
print ("%N A(1,1):" + ackerman (1, 1).out)
|
||||
print ("%N A(2,0):" + ackerman (2, 0).out)
|
||||
print ("%N A(2,1):" + ackerman (2, 1).out)
|
||||
print ("%N A(2,2):" + ackerman (2, 2).out)
|
||||
print ("%N A(0,2):" + ackerman (0, 2).out)
|
||||
print ("%N A(1,2):" + ackerman (1, 2).out)
|
||||
print ("%N A(3,3):" + ackerman (3, 3).out)
|
||||
print ("%N A(3,4):" + ackerman (3, 4).out)
|
||||
end
|
||||
|
||||
feature -- Access
|
||||
|
||||
ackerman (m: NATURAL; n: NATURAL): NATURAL
|
||||
do
|
||||
if m = 0 then
|
||||
Result := n + 1
|
||||
elseif m > 0 and n = 0 then
|
||||
Result := ackerman (m - 1, 1)
|
||||
elseif m > 0 and n > 0 then
|
||||
Result := ackerman (m - 1, ackerman (m, n - 1))
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
11
Task/Ackermann-function/Erlang/ackermann-function.erl
Normal file
11
Task/Ackermann-function/Erlang/ackermann-function.erl
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
-module(main).
|
||||
-export([main/1]).
|
||||
|
||||
main( [ A | [ B |[]]]) ->
|
||||
io:fwrite("~p~n",[ack(toi(A),toi(B))]).
|
||||
|
||||
toi(E) -> element(1,string:to_integer(E)).
|
||||
|
||||
ack(0,N) -> N + 1;
|
||||
ack(M,0) -> ack(M-1, 1);
|
||||
ack(M,N) -> ack(M-1,ack(M,N-1)).
|
||||
5
Task/Ackermann-function/Forth/ackermann-function-1.fth
Normal file
5
Task/Ackermann-function/Forth/ackermann-function-1.fth
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
: acker ( m n -- u )
|
||||
over 0= IF nip 1+ EXIT THEN
|
||||
swap 1- swap ( m-1 n -- )
|
||||
dup 0= IF 1+ recurse EXIT THEN
|
||||
1- over 1+ swap recurse recurse ;
|
||||
14
Task/Ackermann-function/Forth/ackermann-function-2.fth
Normal file
14
Task/Ackermann-function/Forth/ackermann-function-2.fth
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
: ackermann ( m n -- u )
|
||||
over ( case statement)
|
||||
0 over = if drop nip 1+ else
|
||||
1 over = if drop nip 2 + else
|
||||
2 over = if drop nip 2* 3 + else
|
||||
3 over = if drop swap 5 + swap lshift 3 - else
|
||||
drop swap 1- swap dup
|
||||
if
|
||||
1- over 1+ swap recurse recurse exit
|
||||
else
|
||||
1+ recurse exit \ allow tail recursion
|
||||
then
|
||||
then then then then
|
||||
;
|
||||
27
Task/Ackermann-function/Fortran/ackermann-function.f
Normal file
27
Task/Ackermann-function/Fortran/ackermann-function.f
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
PROGRAM EXAMPLE
|
||||
IMPLICIT NONE
|
||||
|
||||
INTEGER :: i, j
|
||||
|
||||
DO i = 0, 3
|
||||
DO j = 0, 6
|
||||
WRITE(*, "(I10)", ADVANCE="NO") Ackermann(i, j)
|
||||
END DO
|
||||
WRITE(*,*)
|
||||
END DO
|
||||
|
||||
CONTAINS
|
||||
|
||||
RECURSIVE FUNCTION Ackermann(m, n) RESULT(ack)
|
||||
INTEGER :: ack, m, n
|
||||
|
||||
IF (m == 0) THEN
|
||||
ack = n + 1
|
||||
ELSE IF (n == 0) THEN
|
||||
ack = Ackermann(m - 1, 1)
|
||||
ELSE
|
||||
ack = Ackermann(m - 1, Ackermann(m, n - 1))
|
||||
END IF
|
||||
END FUNCTION Ackermann
|
||||
|
||||
END PROGRAM EXAMPLE
|
||||
9
Task/Ackermann-function/Go/ackermann-function-1.go
Normal file
9
Task/Ackermann-function/Go/ackermann-function-1.go
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
func Ackermann(m, n uint) uint {
|
||||
switch {
|
||||
case m == 0:
|
||||
return n + 1
|
||||
case n == 0:
|
||||
return Ackermann(m - 1, 1)
|
||||
}
|
||||
return Ackermann(m - 1, Ackermann(m, n - 1))
|
||||
}
|
||||
15
Task/Ackermann-function/Go/ackermann-function-2.go
Normal file
15
Task/Ackermann-function/Go/ackermann-function-2.go
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
func Ackermann2(m, n uint) uint {
|
||||
switch {
|
||||
case m == 0:
|
||||
return n + 1
|
||||
case m == 1:
|
||||
return n + 2
|
||||
case m == 2:
|
||||
return 2*n + 3
|
||||
case m == 3:
|
||||
return 8 << n - 3
|
||||
case n == 0:
|
||||
return Ackermann2(m - 1, 1)
|
||||
}
|
||||
return Ackermann2(m - 1, Ackermann2(m, n - 1))
|
||||
}
|
||||
53
Task/Ackermann-function/Go/ackermann-function-3.go
Normal file
53
Task/Ackermann-function/Go/ackermann-function-3.go
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var one = big.NewInt(1)
|
||||
var two = big.NewInt(2)
|
||||
var three = big.NewInt(3)
|
||||
var eight = big.NewInt(8)
|
||||
var u uint
|
||||
var uBits = int(unsafe.Sizeof(u))*8 - 1
|
||||
|
||||
func Ackermann2(m, n *big.Int) *big.Int {
|
||||
if m.Cmp(three) <= 0 {
|
||||
switch m.Int64() {
|
||||
case 0:
|
||||
return new(big.Int).Add(n, one)
|
||||
case 1:
|
||||
return new(big.Int).Add(n, two)
|
||||
case 2:
|
||||
r := new(big.Int).Lsh(n, 1)
|
||||
return r.Add(r, three)
|
||||
case 3:
|
||||
if n.BitLen() > uBits {
|
||||
panic("way too big")
|
||||
}
|
||||
r := new(big.Int).Lsh(eight, uint(n.Int64()))
|
||||
return r.Sub(r, three)
|
||||
}
|
||||
}
|
||||
if n.BitLen() == 0 {
|
||||
return Ackermann2(new(big.Int).Sub(m, one), one)
|
||||
}
|
||||
return Ackermann2(new(big.Int).Sub(m, one),
|
||||
Ackermann2(m, new(big.Int).Sub(n, one)))
|
||||
}
|
||||
|
||||
func main() {
|
||||
show(0, 0)
|
||||
show(1, 2)
|
||||
show(2, 4)
|
||||
show(3, 100)
|
||||
show(4, 1)
|
||||
show(4, 3)
|
||||
}
|
||||
|
||||
func show(m, n int64) {
|
||||
fmt.Printf("A(%d, %d) = ", m, n)
|
||||
fmt.Println(Ackermann2(big.NewInt(m), big.NewInt(n)))
|
||||
}
|
||||
3
Task/Ackermann-function/Haskell/ackermann-function-1.hs
Normal file
3
Task/Ackermann-function/Haskell/ackermann-function-1.hs
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
ack 0 n = n + 1
|
||||
ack m 0 = ack (m-1) 1
|
||||
ack m n = ack (m-1) (ack m (n-1))
|
||||
9
Task/Ackermann-function/Haskell/ackermann-function-2.hs
Normal file
9
Task/Ackermann-function/Haskell/ackermann-function-2.hs
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
-- everything here are [Int] or [[Int]], which would overflow
|
||||
-- * had it not overrun the stack first *
|
||||
ackermann = iterate ack [1..] where
|
||||
ack a = s where
|
||||
s = a!!1 : f (tail a) (zipWith (-) s (1:s))
|
||||
f a (b:bs) = (head aa) : f aa bs where
|
||||
aa = drop b a
|
||||
|
||||
main = mapM_ print $ map (\n -> take (6 - n) $ ackermann !! n) [0..5]
|
||||
8
Task/Ackermann-function/Java/ackermann-function.java
Normal file
8
Task/Ackermann-function/Java/ackermann-function.java
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import java.math.BigInteger;
|
||||
|
||||
public static BigInteger ack(BigInteger m, BigInteger n) {
|
||||
return m.equals(BigInteger.ZERO)
|
||||
? n.add(BigInteger.ONE)
|
||||
: ack(m.subtract(BigInteger.ONE),
|
||||
n.equals(BigInteger.ZERO) ? BigInteger.ONE : ack(m, n.subtract(BigInteger.ONE)));
|
||||
}
|
||||
4
Task/Ackermann-function/JavaScript/ackermann-function.js
Normal file
4
Task/Ackermann-function/JavaScript/ackermann-function.js
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
function ack(m, n)
|
||||
{
|
||||
return m === 0 ? n + 1 : ack(m - 1, n === 0 ? 1 : ack(m, n - 1));
|
||||
}
|
||||
5
Task/Ackermann-function/Lua/ackermann-function.lua
Normal file
5
Task/Ackermann-function/Lua/ackermann-function.lua
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
function ack(M,N)
|
||||
if M == 0 then return N + 1 end
|
||||
if N == 0 then return ack(M-1,1) end
|
||||
return ack(M-1,ack(M, N-1))
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue