99 Flaschen Bier [geschlossen]

65

Erstellen Sie '99 Flaschen Bier an der Wand 'neu.

Die gewünschte Ausgabe lautet wie folgt:

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.

96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.

95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.

....

3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer on the wall.

2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.

1 bottle of beer on the wall, 1 bottle of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.

Zeigen Sie mir, wie Sie dies mit Ihrer bevorzugten Programmiersprache lösen würden. Der kreativste Gebrauch einer Sprache gewinnt.

Nick Berardi
quelle
30
"Die kreativste Verwendung" ist meiner Meinung nach für eine SE-Site zu subjektiv. Wir sollten versuchen, objektive Kriterien wie den "kürzesten Code" zu verwenden.
Chris Jester-Young
5
Dennoch eine gute Frage
Chris Laplante
3
Soll es unendlich laufen? Ich habe es angenommen. Außerdem besitzt Codegolf keine 99 Flaschen Bier, weshalb es keinen Grund gibt, darüber zu diskutieren.
1
@Chris - Das wird der schwierigste Teil dieser SE-Site, denn das Ganze basiert auf Kreativität, denn das ist der halbe Spaß beim Programmieren von Rätseln. Die kreativste Lösung ist nicht immer die effizienteste oder kürzeste.
Nick Berardi
2
@ Nick: Ich höre dich. Ich möchte nur wissen, wie man bestimmen kann, wie kreativ eine Lösung ist - basierend auf Ihrem eigenen Urteilsvermögen? Basierend auf den Wählern? Weder ist besonders zuverlässig (kein Vergehen). So etwas wie Kürze ist unbestreitbar - zum Beispiel kann niemand die "Güte" der 1-Byte-Stack-Overflow-Code-Golf-Lösung bestreiten.
Chris Jester-Young

Antworten:

70

Perl (410 Zeichen)

Es gibt bereits eine Website zu diesem Wettbewerb:

Eine der Perl-Lösungen wäre in Bezug auf Kreativität kaum zu übertreffen. Sie lautet:

[bottles.pl]

         $ a =
        "cpuu
       \ bmft p
       \ bg cff
       \ bs "; $ b
       = "po ui
       \ bf xbm
      \ bm "; $ c ="
      Ypv ublf p
     \ bof epxo qb
   \ btt ju bspvoe ";
  $ a = ~ s / \ n //; $ a = ~
  s / \ s + / / g; $ b = ~
  s / \ n //; $ b = ~
  s / \ s + / / g; $ c = ~
  s / \ n //; $ c = ~
  s / \ s + / / g; $ a = ~
  y / bz / az /; $ b = ~
  tr / bz / az /; $ c = ~
  tr / bz / az /; zum(
  $ d = 100; $ d> 0; $ d -) {
  print "$ d $ a $ b $ d"
  ; print "$ a, \ n $ c"
  ; print ($ d-1); print
  "$ a $ b. \ n";} $ x =
  "cjc"; $ y = "dobbz";
  $ z = "com"; print "\ n"
  ; print "- $ x \ @ $ y."
   ; print "$ z \ n \ n";

Hier ist der Link zur Originaldatei .

Gummistiefel
quelle
1
Schöne Präsentation, aber das passt nicht zur Anfrage !!
F. Hauri
Eine 'rot1'-Chiffre, nicht der beste Versuch, mich zu verschleiern, den ich je gesehen habe. \bEin wenig enttäuschend ist auch die Verwendung , um unerwünschte Zeichen zu entfernen.
Primo
100

Brainf *** (1.509)

Ich dachte, ich könnte diese Antwort übertreffen , indem ich nicht nur 9 Bierflaschen anstelle von 1 mache, sondern auch nur 7 verschiedene Zeichen im Code benutze.

    +++           +++           +++           [>+           +++           ++>           +++           +++           <<- 
    ]>+           ++>           +++           >++           +++           +++           ++>           +++           +++ 
   +++>+         +++++         +++++         [>+++         >++++         >++++         <<<-]         >->>+         +>+++ 
   +++++         [>+++         +++++         ++++>         +++++         +++++         ++>++         +++++         +++++ 
   >++++         +++++         +++>+         +++++         +++++         +>+++         +++++         +++++         >++++
   +++++         ++++>         +++++         +++++         +++>+         +++++         +++++         ++>++         +++++ 
  ++++++>       +++++++       ++++++>       +++++++       +++++++       >++++++       +++++++       +>+++++       +++++++
  ++>++++       +++++++       +++>+++       +++++++       ++++>++       +++++++       +++++<<       <<<<<<<       <<<<<<<
  <-]>+>+       +>++++>       +++++>+       +++++>>       +>+++>+       +++>+++       +++>+++       ++++>>+       +>+++>+ 
 +++>+++++     >+++++++<     <<<<<<<<<     <<<<<<<<<     <<<<[>[<<     <.>.>>>>.     >>>>>.>>>     >>>>>>.>>     >>..<<<<<
<.<<<<<.>>>   >>>>>>>.<<<   <<<<<<<<<<<   <<<.>>>>>>>   >>>>>>>.<<<   <<<.<<<<<<<   <.>>>>>.>>.   .>>>>>>>>>.   <<<<<<<<<<<
<<<<<.>>>>>   >>>>>>>>>.<   .<<<<<<<<<<   <<<.>>>>>>>   >>>>>>>>>>>   .<<<<<<<<<.   <<.<<<<<<<.   >>>>>>>>>>>   >>>>>>>>>.<
<<<<<<<<<<<   <<<<.>>>>>>   >>..<<<<<<<   <<<<.<.<<<<   <.>.>>>>.>>   >>>.>>>>>>>   >>.>>>>..<<   <<<<.<<<<<.   >>>>>>>>>>.
<<<<<<<<<<<   <<<<<<.>>>>   >>>>>>>>>>.   <<<<<<.<<<<   <<<<.>>>>>.   >>..>>>>>>>   >>.<<<<<<<<   <<<<<<<.<.>   >>>>>>>>>>>
>>>>>>.<<<<   <<<<<<<<<<.   >>>>>>>.<<<   <.<<<<<<<.>   >>>>>>>>>>>   >>.<.<<<<<<   .<<<<<<<.>>   >>>>.>>>>>>   >>.>>>>>>.<
<<<<<<.<<<<   <<<<<<<<<.>   >>>.>>>>>>>   >>.<<<<<<<.   <<<<<<.>>>>   >>>>>>>>>>>   .<<<<<<<<<<   <.>>>>>>>>>   >>>>..<<<<<
<<<<<<<<<<<   <.>>>>>>>>>   >.>>>>>>>>.   <<<<<<<<<<<   <<<<<<<.>>>   >.>>>>>>>>>   >>>.<<.>>>>   >.<<<<<<.<<   <<<<<.<<<<<
.<.<<<<<.>-   .>>>>.>>>>>   .>>>>>>>>>.   >>>>..<<<<<   <.<<<<<.>>>   >>>>>>>.<<<   <<<<<<<<<<<   <<<.>>>>>>>   >>>>>>>.<<<
<<<.<<<<<<<   <.>>>>>.>>.   .>>>>>>>>>.   <<<<<<<<<<<   <<<<<.>>>>>   >>>>>>>>>.<   .<<<<<<<<<<   <<<.>>>>>>>   >>>>>>>>>>>
 .<< < <<<     <<< . <<.     <<< < <<<     .>> > >>>     >>> > >>>     >>> > >>>     .<< < <<<     <<< < <<<     <<< . >>> 
  >> >>>.       .<<< <<       <<<< <.       << . <<       -]+ +++       ++ + ++       << + ++       ++ + ++       +<->>-]

Ich muss allerdings zugeben, dass der Code einen Fehler enthält (vielleicht können Sie herausfinden, wie Sie ihn für mich beheben können?) Und den letzten Satz nicht ausgibt. Go to the store and buy some more, 99 bottles of beer on the wall.Ansonsten funktioniert er genauso gut wie jeder andere die programme, die in jenen sissy programmiersprachen erstellt wurden, scheinen alle anderen gern zu benutzen.

Peter Olson
quelle
9
Sie haben dort nur 9 Flaschen. Du brauchst noch 90!
Joe Z.
Petition: Diese Sprache umbenennen in braindrunk?
Cyoce
99

Funktion

Ich habe das erst neulich geschrieben. :) (Screenshots: Start und Ziel )

Da dies in StackExchange aufgrund des zusätzlichen Zeilenabstands hässlich aussieht, sollten Sie den folgenden Code in der JavaScript-Konsole Ihres Browsers ausführen, um dies zu beheben: $('pre').css('line-height',1)

                                            ╓┬────╖
     ╔════╗  ┌───╖                          ╟┘99b ║
     ║ −1 ╟──┤ + ╟──┐                       ╙──┬──╜
     ╚════╝  ╘═╤═╝  ├──────────────────────────┴─────────────────────────────┐
     ╔════╗  ┌─┴─╖  │  ╔════════════════════════════════════════════════════╗│
     ║ 99 ╟──┤ ? ╟──┘  ║ 93438979891487426396059469986395555362079573844971 ║│
     ╚════╝  ╘═╤═╝     ║ 71377306928718494179034460561943201885027745835961 ║│
            ┌──┴───╖   ║ 98129935108241412387473531261660077880505710501626 ║│
    ╔════╗  │ 99bp ║   ║ 32694396343717333192558234646820019070451056711    ║│
    ║ 99 ║  ╘══╤═══╝   ╚══════════════════════════╤═════════════════════════╝│
    ╚═╤══╝   ┌─┴─╖                       ┌───╖  ┌─┴─╖  ╔═════════════════╗   │
   ┌──┴──╖   │ ‼ ╟───────────────────────┤ ‼ ╟──┤ ? ╟──╢ 445551776368547 ║   │
   │ 99b ║   ╘═╤═╝┌─────────────────────┐╘═╤═╝  ╘═╤═╝  ║ 925186328623383 ║   │
   ╘══╤══╝     │  │╔═══════════════════╗│  │      │    ║ 851314944882510 ║   │
      │        │  │║ 15177132563375318 ║│  │      │    ║ 812246570019017 ║   │
 ╔════════╗    │  │║ 07655616350359109 ║│  │      │    ║ 240477365113929 ║   │
 ║ 318287 ║    │  │║ 82597577171382437 ║│  │      │    ║ 659548419629671 ║   │
 ║ 023073 ║    │  │║ 18150105146396039 ║│  │      │    ║ 952755268258505 ║   │
 ║ 603558 ║    │  │║ 2022986808360992  ║│  │      │    ║ 759402210908648 ║   │
 ║ 743780 ║    │  │╚══════════╤════════╝│  │      │    ║ 737406010882693 ║   │
 ║ 068900 ║    │  │         ┌─┴─╖ ┌───╖ │  │      │    ║ 018745757193818 ║   │
 ║ 028319 ║    │  │         │ ‼ ╟─┤ ‼ ╟─┘  │      │    ║ 597439618635403 ║   │
 ║ 948400 ║    │  │         ╘═╤═╝ ╘═╤═╝    │      │    ║ 821854707881243 ║   │
 ║ 620075 ║    │  │         ┌─┴─╖   │    ┌─┴─╖    │    ║ 92049082452     ║   │
 ║ 955580 ║    │  └─────┬───┤ ‼ ╟────────┤ ‼ ║    │    ╚═════════════════╝   │
 ║ 347161 ║    │        │   ╘═══╝┌──────┐╘═╤═╝    └─────────────┐            │
 ║ 651333 ║    │   ╔═══╗│┌──────╖│╔════╗│ ╔╧═════════╗          │            │
 ║ 590970 ║    │   ║ 0 ║└┤ 99bp ╟┘║ −1 ║└┐║ 20971566 ║          ├────────────┘
 ║ 678045 ║    │   ╚══╤╝ ╘══════╝ ╚══╤═╝ │╚══════════╝          │
 ║ 336290 ║  ┌─┴─╖  ┌─┴─╖  ┌─────╖  ┌┴──╖├──────────────────────┘
 ║ 721824 ╟──┤ ‼ ╟──┤ ? ╟──┤ 99b ╟──┤ + ║│
 ╚════════╝  ╘═══╝  ╘═╤═╝  ╘═════╝  ╘═╤═╝│    ╓┬──────╖
                      └───────┬───────┘  │    ╟┘ 99bp ║
                              └──────────┘    ╙───┬───╜
 ┌────────────────────────────────────────────────┴──────────────┐
 │╔══════════════════════════════════════════╗╔═══════════╗      │
 │║ 8592134145756414358602136806465202028576 ║║ 232783950 ║      │
 │╚══════════════════════════════╤═══════════╝╚╤══════════╝      │
 │               ┌───╖  ╔═══╗  ┌─┴─╖  ┌───╖  ┌─┴─╖  ┌─────────╖  │
 └───────────────┤ = ╟──╢ 1 ║  │ ‼ ╟──┤ ‼ ╟──┤ ? ╟──┤ int→str ╟──┴┐
                 ╘═╤═╝  ╚═══╝  ╘═╤═╝  ╘═╤═╝  ╘═╤═╝  ╘═════════╝   │
          ╔═══╗  ┌─┴─╖         ┌─┴─╖    │      └──────────────────┘
          ║ 0 ╟──┤ ? ╟─────────┤ ‼ ╟──┐
          ╚═══╝  ╘═╤═╝         ╘═══╝  │
              ╔════╧╗╔════════════════╧════════════════════════════════╗
              ║ 115 ║║ 20338288213193790107412311132593873016630280224 ║
              ╚═════╝╚═════════════════════════════════════════════════╝
Timwi
quelle
1
plus eins, das ist fantastisch
Gyurisc
1
Diese Sprache ist unglaublich, tolle Arbeit!
aufgehört, sich am
1
Ich habe das auf Esolang.org gesehen und es hat mir gut gefallen.
ML
56

jQuery + FireBug Console

$('code:first').text()

;)

powtac
quelle
2
Was ist mit so etwas wie eval($($('code')[8]).text().replace(/print/g,'console.log'))<del> (aka. Stehlen) </ del>? Es druckt den gesamten Text des Songs. : P
JiminP
2
Funktioniert auch auf der Javascript-Konsole von Chrome.
Spoike
Teuflisch schlau.
Maxpm
1
@JiminP Leider ist dies kein stabiler Selektor, da sich die Antwortreihenfolge im Laufe der Zeit ändern kann (tatsächlich funktioniert dies nicht mehr).
Muhd
2
@ Muhd ​​Funktioniert immer noch, solange die Frage nicht geändert wird - der erste Codeblock ist der in der Frage.
Bob
24

HQ9 + (1 Zeichen)

9

Zugegeben, es ist keine vollständige Sprache für Turing, aber das zählt immer noch

tobyodavies
quelle
13
Warum benutzt du nicht HQ9 B ? Es ist Turing abgeschlossen.
Mateen Ulhaq
1
@muntoo Ich bin mir nicht sicher, ob HQ9 + B fertig ist. Der Befehl B fragt die Tastatureingabe ab und wertet sie als Brainfuck aus, also ist es HQ9 + mit einem optionalen Brainfuck-Interpreter. dh das Programm "B" in HQ9 + B fragt stdin ab, bis es kommt! (oder EOF) und interpretieren Sie das als Brainfuck ..
Sylwester
20

Wer hat gesagt, dass C # zu viel Zeremonie hatte? Wer auch immer es war, sie hatten noch nie so recht.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _99Bottles
{
    class Program
    {
        static void Main(string[] args)
        {
            PrintSong(99);
        }

        static void PrintSong(int bottleCount)
        {
            Func<int, string> sOrBlank = howMany => howMany > 1 ? "s" : "";

            PrintBottles(howManyBottles =>
            {
                Console.WriteLine("{0} bottle{1} of beer on the wall, {0} bottle{1} of beer.", howManyBottles, sOrBlank(howManyBottles));
                if (howManyBottles > 1)
                {
                    Console.WriteLine("Take one down and pass it around, {0} bottle{1} of beer on the wall.", --howManyBottles, sOrBlank(howManyBottles));
                }
                else
                {
                    Console.WriteLine("Go to the store and buy some more, 99 bottles of beer on the wall.", --howManyBottles);
                }
            },
            bottleCount);
        }

        static void PrintBottles(Action<int> printBottles, int count)
        {
            printBottles(count);

            if (count > 1)
            {
                PrintBottles(printBottles, --count);
            }
         }
    }
}
Rob White
quelle
11
+1 Für ein weiteres Opferlamm im C-Stil in einem Ozean von Perl.
Glenn Nelson
Das kann ganz erheblich reduziert werden.
Nellius
2
@Nellius Hast du mal gelesen, was ilivewithianvor seinem Code gesagt wurde?
Daniel Standage
1
@ Daniel Ja, und es impliziert, dass er denkt, dass alles in seinem Code notwendig ist. Wenn es sich um einen Witz handelt, sollte nicht so viel darüber abgestimmt werden. Es ist nicht kurz, kreativ, effizient oder auch nur ein bisschen clever.
Nellius
@Nellius Es war nicht als ernstzunehmender Anwärter gedacht, auf keiner Ebene ist dieser Code gut. Ich bin sicher, dass es reduziert, effizienter gemacht und im Allgemeinen erheblich verbessert werden kann.
Rob White
18

C

Dieses Programm generiert den kompletten Liedtext als einzelne Zeichenkette unter Verwendung des Präprozessors. Der tatsächliche C-Code gibt nur den so aufgebauten String aus. Wenn Sie stringsdie generierte ausführbare Datei aufrufen, wird der vollständige Liedtext in der ausführbaren Datei angezeigt.

#define BOTTLES(n) n " bottles of beer"
#define BOTTLE "1 bottle of beer"
#define OTW " on the wall, "
#define TAKE "Take one down, pass it around, "
#define BUY "Go to the store and buy some more, "
#define STOP "."
#define NL "\n"

#define LINE1(n) BOTTLES(n) OTW BOTTLES(n) STOP NL
#define LINE1A BOTTLE OTW BOTTLE STOP NL
#define LINE2(n) TAKE BOTTLES(n) STOP NL
#define LINE2A TAKE BOTTLE STOP NL
#define LINEX BUY BOTTLES("99") NL

#define MIDDLEPART(n) LINE2(n) NL LINE1(n)
#define MIDDLELAST LINE2A NL LINE1A

#define EIGHT_TO_TWO(S, M) M(S "8") M(S "7") M(S "6") M(S "5") M(S "4") M(S "3") M(S "2")
#define EIGHT_TO_ONE(S, M) EIGHT_TO_TWO(S, M) M(S "1")
#define EIGHT_TO_TWO_AGAIN(S, M) M(S "8") M(S "7") M(S "6") M(S "5") M(S "4") M(S "3") M(S "2")
#define EIGHT_TO_ONE_AGAIN(S, M) EIGHT_TO_TWO_AGAIN(S, M) M(S "1")
#define NINE_TO_TWO(S, M) M(S "9") EIGHT_TO_TWO(S, M)
#define EIGHT_TO_ZERO(S, M) EIGHT_TO_ONE(S, M) M(S "0")
#define NINE_TO_ZERO(S, M) M(S "9") EIGHT_TO_ZERO(S, M)

#define NINETIES EIGHT_TO_ZERO("9", MIDDLEPART)
#define NTIES(n) NINE_TO_ZERO(n, MIDDLEPART)
#define EIGHTIES_TO_TENS EIGHT_TO_ONE_AGAIN("", NTIES)
#define NAUGHTIES NINE_TO_TWO("", MIDDLEPART)

#define SONG LINE1("99") NINETIES EIGHTIES_TO_TENS NAUGHTIES MIDDLELAST LINEX

#include <stdio.h>

int main()
{
  puts(SONG);
  return 0;
}
Celtschk
quelle
1
Wahrscheinlich die effizienteste und schnellste Lösung davon.
Tom Pažourek
1
@tomp Effizient zeitweise, sehr ineffizient in der Größe der ausführbaren Datei :)
Siehe auch
14

C # ( 312 310 304 Zeichen)

class P{static void Main(){string b=" bottle",w=" on the wall",o=" of beer",p=".\n",s="s";for(int i=99;i>0;i--)System.Console.Write(i+b+(i>1?s:"")+o+w+", "+i+b+(i>1?s:"")+o+p+(i>1?"Take one down and pass it around, "+(i-1)+b+(i-1>1?s:"")+o+w+p+"\n":"Go to the store and buy some more, "+99+b+s+o+w+p));}}
Nellius
quelle
1
Ich kann nicht glauben, dass Sie es in kürzer als ich haben. Ich bin beeindruckt. Ich muss lernen, um eine bessere
Auswahl zu
Und jetzt habe ich dafür
gelernt
12

C #

Nicht kurz gedacht, aber vielleicht zählt das ja als kreativ?

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        Console.WriteLine(string.Join(Environment.NewLine, Enumerable.Range(0, 100).Select(i =>
            string.Format(
                string.Format(
                    "{0} {1} {{3}} {{4}},{{9}}{0} {1} {{3}}.{{9}}{2},{{9}}{3} {4} {{3}} {{4}}.{{9}}",
                    i == 99 ? "{0}" : "{7}",
                    i == 98 ? "{1}" : "{2}",
                    i == 99 ? "{6}" : "{5}",
                    i == 98 ? "{0}" : "{8}",
                    i == 97 ? "{1}" : "{2}"
                ),
                "No",
                "bottle",
                "bottles",
                "of beer",
                "on the wall",
                "Take one down, pass it around",
                "Go to the store, buy some more",
                99 - i,
                (198 - i) % 100,
                Environment.NewLine
        ))));
    }
}

Beachten Sie, dass dies nur eine einzige Aussage ist :)

Timwi
quelle
11

Definitiv nicht als kreativ zu qualifizieren, aber es wird von der Kommandozeile mit einem einzigen Befehl erledigt.

perl -e '$i=99;while($i>1){print("$i bottles of beer on the wall, $i bottles of beer.\nTake one down and pass it around, ".--$i." bottles of beer on the wall\n\n");}print("1 bottle of beer on the wall, 1 bottle of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.\n");'
Daniel Standage
quelle
11

Haskell, 272 , 250 , 243 Zeichen

(&)=(++)
b 1=" bottle"
b _=b 1&"s"
w=" on the wall"
p n=show n&b n&" of beer"
f n=putStrLn$p n&w&","&p n&".\n"&c(n-1)
c 0="Go to the store and buy some more, "&p 99&w&"."
c n="Take one down and pass it around, "&p n&w&"\n"
main=mapM f[99,98..1]
Jonathan Sternberg
quelle
11

Windows PowerShell (198)

filter b{"$_ bottle$('s'*!!--$_) of beer"}(99..1|%{($_|b)+($w=' on the wall')+", $($_|b)."
"Take one down and pass it around, $(--$_|b)$w.
"})[0..196]
"Go to the store and buy some more, $(99|b)$w."

Ziemliech direkt.

Ich benutze einen Filter für die Bierflaschen, da dieser functionlänger ist und der Aufruf auf jeden Fall Klammern benötigt. Die Plural-Erkennung ( !!--$_) dekrementiert zuerst die Anzahl der Flaschen um eins (Plural ist also alles, was nicht Null ist), wandelt sie in einen Booleschen Wert um und negiert sie mit der ersten! und negiert sie erneut oder nicht. Dies wird dann implizit in eine Ganzzahl umgewandelt, wenn die Zeichenfolge multipliziert wird.

Inline-Zeilenumbrüche machen Spaß.

Mehr Linien als nötig spawnen und auch danach zurückschneiden.

Joey
quelle
Auf jeden Fall kurz, und dies ist eine Messlatte, um zu versuchen, unterzugehen !!! Obwohl aus meiner Sicht das Auftreten einer "magischen Zahl" wie 196 in der Klasse der Dinge lag, die ich hoffentlich vermeiden kann, weil sie (99 * 2) - 2 erfasst. Für eine Antwort, bei der Sie die Flasche wechseln können an einem Ort zählen :) siehe codegolf.stackexchange.com/questions/2/99-bottles-of-beer/…
Dr. Rebmu
Sie vermissen "an der Wand". in der letzten Zeile der Ausgabe und nachdem jede Flasche abgenommen wird.
Iszi
filter b{"$_ bottle$('s'*!!--$_) of beer"}(99..1|%{($_|b)+($w=' on the wall')+", $($_|b).";"Take one down and pass it around, $(--$_|b)$w. "})[0..196];"Go to the store and buy some more, $(99|b) $w."behebt das. Insgesamt 199 Zeichen. (Fügen Sie einen Zeilenumbruch nach $wvorher hinzu ")
Iszi
Danke für das Update. Es gab dort auch einen überflüssigen Platz, daher wurde stattdessen 198 gezählt.
Joey
10

Curl 19 Zeichen

(Internetverbindung erforderlich)

curl -L j.mp/eGv9K5
Alexandru
quelle
7
Ich halte das für zu weit gespannt.
Marcog
8
Ich halte es für einen Witz. Viele Lösungen können sich hinter einer Abfrage an einen Webserver verstecken.
Alexandru
3
Ich mag dieses trotzdem.
pimvdb
1
Wenn das Ziel der kürzeste Code wäre, würde ich Ihnen einen Punkt für Cleverness geben.
Neil
9

Fast korrektes Anti-Golf-Spiel vom überaus eifrigen neuen C-Programmierer, der gerade Perl lernt?

#!/usr/bin/perl
#      ^
#      |
#      |
# That's the Perl interpreter.
# You might need to change this line based on
# your Linux/Unix distribution.

# Pragmas for debugging!
use strict;
use warnings;

# Library dependencies...none! lolz

# Main implementation
my $number_of_bottles_of_beer_on_the_wall = 99; #start with 99 bottles
LOOP: while( $number_of_bottles_of_beer_on_the_wall > 0 )
{
  printf( "%d bottles of beer on the wall, %d bottles of beer\n",
          $number_of_bottles_of_beer_on_the_wall,
          $number_of_bottles_of_beer_on_the_wall,                  );

  if( $number_of_bottles_of_beer_on_the_wall > 1 )
  {
    $number_of_bottles_of_beer_on_the_wall -= 1;
    printf( "Take one down and pass it around, %d bottles of beer on the wall.\n\n",
            $number_of_bottles_of_beer_on_the_wall,                               );
  }
  else
  {
    printf( "Go to the store and buy some more, %d bottles of beer on the wall\n",
            99                                                                     );
    last LOOP;
  }
}
Daniel Standage
quelle
Warum nicht /usr/bin/env perl?
Nyuszika7h
1
@ nyuszika7h Aufschlussreiche Kritik! ;)
Daniel Standage
8

JavaScript ( 216 228 215)

for(a=99,c=" on the wall";a;)document.write((d=eval(b="(a||99)+' bottle'+(a-1?'s':'')+' of beer'"))+c+", "+d+".<br>"+(--a?"Take one down and pass it around, ":"Go to the store and buy some more, ")+eval(b)+c+".<p>")

Bearbeiten: Hatte eine einzelne "1 Flaschen Bier" in der ersten Version, 3. Version ist komplett umgeschrieben, beachten Sie coole Tricks wie (a||99)99 in der letzten Zeile zu bekommen, (a-1?'s':'')Plural für jeden Fall, aber a==1ohne die Notwendigkeit für die Verschwendung ==, und setzen Sie den Wert von binnerhalb einer Anweisung, in der es verwendet wird.

aaaaaaaaaaa
quelle
Es sieht so aus, als würde Ihre Flaschenoptimierung mehr Zeichen kosten, als sie spart.
Yahel
Ich bin mir nicht sicher, was du meinst, was genau würdest du ändern?
aaaaaaaaaaa
Dieser hält einen Vers zu früh an. Letzter Vers sollte gehen "no more bottles of beer on the wall, no more bottles..." - Siehe: 99-bottles-of-beer.net/lyrics.html
Már Örlygsson
Übrigens habe ich eine vollständige, korrekte Version in 233 Bytes geschafft: for(o,e,n=100,t=" on the wall";n-->-1;)o=e+t+", "+e+".<br>"+(n>-1?"Take one down, pass it around, ":"Go to the store and buy some more, ")+(e=(0>n?99:n||"no more")+" bottle"+(1!=n?"s":"")+" of beer")+t+".<p>",99>n&&document.write(o)
Már Örlygsson
@ MárÖrlygsson Willkommen auf der Seite. Die Texte für diese Herausforderung sind im Eröffnungsbeitrag definiert.
aaaaaaaaaaa
7

C

Ich muss diese Frage verpasst haben. Hier ist eine Version, die ich an anderer Stelle als Antwort veröffentlicht habe. Es ist eine C-Quine-basierte Version. Kompilieren und ausführen, um die nächste Zeile des Songs zu erhalten. Wiederholen, bis Langeweile aufkommt. Wenn der Code "Time to go ..." lautet, geben Sie die Anzahl der Biere ein, die Sie das nächste Mal als Befehlszeilenargument ausführen.

// Time to go to the shop and get some beer
//
//
//
//
// #####.#####.#####.#####.#####.#####.#####
// ##.#####.#####.#####.#####.#####.#####.##
// #####.#####.#####.#####.#####.#####.#####
// ##.#####.#####.#####.#####.#####.#####.##

char *z [] = {
"void l(char *s,int b){int i;printf(\"// \");for(i=0;i<b;++i)printf(s);",
"printf(\"\\n\");}\nint main(int argc, char *argv[]){\nint i,j,k,x=%d;",
"char*p;\nif(!x&&argc==2)x=atoi(argv[1]);\nif(!x){printf(\"// Time to ",
"go to the shop and get some beer\\n//\\n//\\n//\\n//\\n\");k=7;\n",
"}else{printf(\"// %%d bottles of beer on the wall, %%d bottles of beer",
".\\n\",x,x);printf(\"// Take one down and pass it round, \");\n",
"if(x>1)printf(\"%%d bottles of beer on the wall.\\n//\\n\",x-1);\n",
"else printf(\"no more bottles of beer on the wall.\\n//\\n\");\n",
"k=x>2?x:2;l(\"  ^   \",x);l(\" / \\\\  \",x);l(\"/   \\\\ \",x);",
"l(\"|   | \",x);l(\"|Duf| \",x);l(\"|   | \",x);l(\"----- \",x);}\n",
"for(i=0;i<4;++i){\nprintf(\"// %%s\", i&1 ? \"##.\" : \"\");\n",
"for(j=i&1;j<k;++j)\nprintf(\"%%s#####\",j!=(i&1)?\".\":\"\");\n",
"printf(\"%%s\\n\",i&1?\".##\":\"\");}\nprintf(\"\\nchar *z [] = {\\n\");\n",
"for(i=0;i<sizeof z/sizeof z[0];++i){\nprintf(\"\\\"\");\n",
"for(p=z[i];*p;++p)\nswitch (*p){\ncase '\\n':printf(\"\\\\n\");break;\n",
"case '\\\\':printf(\"%%c%%c\",92,92);break;\n",
"case '%%':printf(\"%%c\",37);break;\ncase '\"':printf(\"%%c%%c\",92,'\"');break;\n",
"default:printf(\"%%c\", *p);break;}\nprintf(\"\\\",\\n\");}\n",
"printf(\"};\\n\");\nfor(i=0;i<sizeof z/sizeof z[0];++i)\n",
"printf(z[i],x?x-1:0);}\n",
};
void l(char *s,int b){int i;printf("// ");for(i=0;i<b;++i)printf(s);printf("\n");}
int main(int argc, char *argv[]){
int i,j,k,x=0;char*p;
if(!x&&argc==2)x=atoi(argv[1]);
if(!x){printf("// Time to go to the shop and get some beer\n//\n//\n//\n//\n");k=7;
}else{printf("// %d bottles of beer on the wall, %d bottles of beer.\n",x,x);printf("// Take one down and pass it round, ");
if(x>1)printf("%d bottles of beer on the wall.\n//\n",x-1);
else printf("no more bottles of beer on the wall.\n//\n");
k=x>2?x:2;l("  ^   ",x);l(" / \\  ",x);l("/   \\ ",x);l("|   | ",x);l("|Duf| ",x);l("|   | ",x);l("----- ",x);}
for(i=0;i<4;++i){
printf("// %s", i&1 ? "##." : "");
for(j=i&1;j<k;++j)
printf("%s#####",j!=(i&1)?".":"");
printf("%s\n",i&1?".##":"");}
printf("\nchar *z [] = {\n");
for(i=0;i<sizeof z/sizeof z[0];++i){
printf("\"");
for(p=z[i];*p;++p)
switch (*p){
case '\n':printf("\\n");break;
case '\\':printf("%c%c",92,92);break;
case '%':printf("%c",37);break;
case '"':printf("%c%c",92,'"');break;
default:printf("%c", *p);break;}
printf("\",\n");}
printf("};\n");
for(i=0;i<sizeof z/sizeof z[0];++i)
printf(z[i],x?x-1:0);}
Skizz
quelle
@DreamWarrior Haben Sie in Bezug auf Ihre vorgeschlagene Bearbeitung in Betracht gezogen, Ihren Code in den Pastebin zu stellen, damit Sie ihn als Kommentar veröffentlichen können?
nderscore
6

Javascript (285)

Dies setzt voraus, dass es eine Funktion namens print gibt, die eine Zeichenfolge ausgibt.

b=' of beer on the wall';n=100;while(--n>1)if(n>1)print(n+" bottles"+b+', '+n+" bottles of beer.\nTake one down and pass it around, "+(n-1)+' bottle'+(n-1>1?'s':'')+b+'.\n\n');print("1 bottle"+b+", 1 bottle of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall.")

quelle
8
Ich bin mir nicht sicher, ob die angenommenen Funktionen fair sind. Zum Beispiel könnte mein Programm sein b();. Angenommen, es gibt eine Funktion b(), die 99 Flaschen Bier an die Wand druckt. :)
Chris Laplante
10
Javascript bietet keine standardmäßige Möglichkeit, einen String auszugeben. Wenn Sie ihn in einem Browser ausführen, verfügt er nicht über eine Druckfunktion. Wenn Sie ihn in Rhino ausführen, ist dies der Fall.
2
document.writelnfunktioniert.
Chris Laplante
4
... für Browser
5
JavaScript hat IO mit: alertals Ausgabe, promptals variable Eingabe und confirmals boolesche Eingabe. Sie saugen so weit wie UI geht, aber sie sind die Standard-E / A-Blockierungsfunktionen. alertund printsind gleich lang, daher sollte Ihr Code ungefähr gleich sein.
zzzzBov
6

Schema (270)

Kein Leerzeichen:

(let l((i 99))(let((b" bottle")(c" on the wall")(d"Take one down and pass it around,")(e".\n")(f", ")(g" of beer"))(if(= i 1)(map display`(1,b,g,c,f,1,b,g,e"Go to the store and buy some more, 99",b,c,e))(begin(map display`(,i,b,g,c,f,i,b,e,d,i,b,c,e"\n"))(l(-1+ i))))))

Mit Leerzeichen:

    (let l ((i 99))
      (let ((b" bottle")
            (c" on the wall")
            (d"Take one down and pass it around, ")
            (e".\n")
            (f", ")
            (g" of beer"))
        (if (= i 1)
            (map display`(1 ,b ,g ,c ,f ,1 ,b ,g ,e
                          "Go to the store and buy some more, 99" ,b ,c ,e))
            (begin (map display `(,i ,b ,g ,c ,f ,i ,b ,e ,d ,i ,b ,c ,e "\n"))
                   (l (-1+ i))))))
Hoa Long Tam
quelle
6

Python - viel

Amidoinitrit?

print"""99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.

96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.

95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.

....

  Ok, this is stupid. First of all, what the brainfuck are the bottles doing on the wall? They're not spiders nor picture frames. And how are they sitting on the wall?

94 bottles of beer on the wall, 9.. oops, they fell down. 94 bottles of beer on the floor, 94 bottles of beer.

  Second.. who the HQ9+ wants to keep track? I think I lost count after drinking the 2nd one...

Take one ... um... up, and pass it around,  .....  er.. a lot of bottles of beer still on the floor.

  Fourthly, what's with this passing around scheme? They're not j..I mean letters, yeah, or boxes of chocolate. We all can just take one and drink it. It's healthier too.

A pile of bottles of beer on the floor, a pile of bottles of beer.
Everyone take one up and drink it, still a whole bunch of bottles of beer on the floor.

  Um.. seventhly, are we really that many in this assembly that we can finish 200 or however many bottles we had in the beginning? Without passing out?

Go to the store and buy some more

  Yeah and who's gonna pay for it? Definitely not me. And how are you going to bring 300 bottles back from the store?
  In your car? Buddy, you're so drunk, you can't even C anything. Go home dude, go home. Take a cab."""

Zusätzlicher Verweis (hat mir beim Code sehr geholfen): http://www.youtube.com/watch?v=Y0Z0raWIHXk

aditsu
quelle
5

Python (318)

Ich habe diese Art gefunden, ein Python-Programm kürzer zu machen :)

exec'eJxtjrFqwzAQQHd/xVVgLCVqSbq5RHO2TtlcgyX7Qk3luyAphP59ZA0thGzi9O7es0bUERyn5DE/+AwOMdTxi0TljLeLmyzQB4GlaaCBg/hkWDigqMb/76aZz0CHHaCPCLaWTpLSTWw2kl7MXmkBTJC+EW7Wey3U9hmzzqU42R/MNMLEt6KFi40R5gQ28JUmndO0ODIkLhdjyjWFc9dfiLxg6Vsx1ZExu36Vddn2miVD2w59R4d9/6d+f8h7Wze3Y+GrS5gpwSjbVlV3Y1BZCg=='.decode('base64').decode('zip')
Marinus
quelle
Dieses .decode.decode-Zeug schien mir beim ersten Mal dumm, aber ich verwende es jetzt für praktische Zwecke (um Python-Code auf unauffällige Weise als Funktionen in mein .bashrc zu kopieren), also danke.
ixtmixilix
5
Ich zähle, dass der unkomprimierte Code 300 Zeichen hat. Warum komprimieren Sie es dann?
Johannes Kuhn
5

Rebmu - 167 Zeichen

M N 99 Bdz[cb[n{ bottle}egN 1{s}{}{ of beer}]]loN[cb[b W{ on the wall}C{, }b P{.}lfEZ--n[Nm{Go to the store and buy some more}]{Take one down and pass it around}cBwPlf]]

Könnte wahrscheinlich ein paar Charaktere abschneiden, das war nur ein erster Versuch. :)

Hier ist gleichbedeutend mit Rebol, bei dem die Kurzschrift ausgekocht ist. Immer noch ziemlich wettbewerbsfähig, vor allem angesichts der Klarheit:

m: n: 99

b: does [
    combine [n { bottle} either n > 1 {s} {} { of beer}]
]

loop n [
    print combine [
        b w: { on the wall} c: {, } b p: {.} newline

        either 0 == -- n [
            n: m
            {Go to the store and buy some more}
        ] [
            {Take one down, and pass it around}
        ]

        c b w p newline
    ]
]

Kommentierter Quellcode auf GitHub verfügbar

Dr. Rebmu
quelle
5

PHP: 285 240 233 231 Zeichen

$i=99;$b=" bottles of beer";$o=" bottle of beer";$c=" on the wall";while($i>1){echo"$i$b$c, $i$b.\nTake one down and pass it around, ".--$i.(($i>1)?$b:$o).$c.".\n\n";}echo"$i$o$c, $i$o.\nGo to the store and buy some more, 99$b$c.";

Ausgabe hier: http://ideone.com/5fQmcd

Yahel
quelle
4

Python, 241 Zeichen

s=""
i=99
b="%d bottl%s of beer"
w=" on the wall"
t="Take one down and pass it around, "
p=q="es"
while i:s+=b%(i,p)+w+", "+b%(i,p)+".\n";i-=1;p=p[:i];s+=t+b%(i,p)+w+".\n\n"
print s[:-64]+"Go to the store and buy some more, "+b%(99,q)+w+"."
Keith Randall
quelle
4

Ruby, 274 Bytes

Ruby ist noch ziemlich neu und spielt einfach nur rum

o =" bottles of beer";w=" on the wall";t="Take one down and pass it around, ";s=" bottle of beer"
99.downto(3){|b|puts"#{b}#{o+w}, #{b}#{o}.\n#{t}#{b-1}#{o+w}.\n\n"}
puts"2 #{o+w}, 2 #{o}.\n#{t}1#{s}#{w}.\n\n1#{s+w}, 1#{s}.\nGo to the store and buy some more, 99#{o+w}."
derekerdmann
quelle
4

C # (299 Zeichen)

using System;class D{static void Main(){string a="s",z="",w=" on the wall",q=", ",p=".\n",b=" bottle",c=" of beer";for(int O=99;O>=1;)Console.WriteLine(O+b+(O>1?a:z)+c+w+q+O+b+(O>1?a:z)+c+p+(--O>0?"Take one down and pass it around, "+O:"Go to the store and buy some more, 99")+b+(O==1?z:a)+c+w+p);}}
Jcolebrand
quelle
1
In Ihrer letzten Zeile wird "99 bottle" anstelle von "99 bottles" angezeigt, und Ihre Schleife beginnt bei 19 anstatt bei 99 (obwohl dies wahrscheinlich nur ein Versehen ist).
Nellius
@Nellius ~ Korrigiert ~ und dank Ihres Konkurrenzcodes habe ich meinen überarbeitet und einige einzelne Einfügeblöcke entfernt und einige bereits existierende Konstanten in meinem eigenen Code reduziert. Jetzt runter auf unter 300 reibungslos.
Jcolebrand
Sie erreichen 293, indem Sie "using System" löschen. und Ändern von "Console.WriteLine" in "System.Console.WriteLine"
Tester101
@ Tester101 ~ Guter Anruf. Hatte das nicht bedacht!
Jcolebrand
4

JavaScript (7 Funktionen)

Nicht golfen. Dies ist als (meist) funktionale Umsetzung des Songs gedacht.

function firstUpper(s) {
    return s.slice(0, 1).toUpperCase() + s.slice(1);
}

function bottles(x) {
    return (x || "no more") + " " + (x == 1 ? "bottle" : "bottles") + " of beer";
}

function wall(x) {
    return bottles(x) + " on the wall";
}

function line1(x) {
    return wall(x) + ", " + bottles(x) + ".";
}

function line2(x, max) {
     return (x ? "take one down and pass it around, " + wall(x - 1) : "go to the store and buy some more, " + wall(max)) + ".";
}

function verse(x, max) {
    return [line1(x), line2(x, max)].map(firstUpper).join("\n") + "\n\n";
}


function song(max) {
    var text = "";
    for(var x = max; x >= 0; x--) {
        text += verse(x, max);
    }
    return text;
}

print(song(99));
PleaseStand
quelle
4

Los (263)

package main
import "fmt"
func main(){b,i,e,r:=fmt.Println,99,"bottles","of beer on the wall"
for i>0{b(i,e,r+",",i,e,r[:7]+".")
if i--;i<2{e=e[:6]}
if i>0{b("Take one down and pass it around,",i,e,r+`.
`)}}
b("Go to the store and buy some more,",99,e+"s",r+".")}
Slitione
quelle
3

PHP - 252 Bytes

$a=" bottles of beer";$b=str_replace("s","",$a);$c=" on the wall";for($i=98;$i;)echo($j=$i+1).$a.$c.", ".$j.$a.".
Take one down and pass it around, ".$i.($i-->1?$a:$b).$c.".

";echo"1".$b.$c.", 1".$b.".
Go to the store and buy some more, 99".$a.$c.".";

Ich hoffe, ich werde morgen noch etwas komprimieren.

Aurel Bílý
quelle
3

Ruby 1.9.2p136: 223

Ich bin kein Feigling, du kannst meinen lesen; p

b="%d bottle%s of beer"
w=' on the wall'
99.downto(1){|z|s=b%[z,z>1?'s':'']
puts s+w+", "+s+".
"+(z>1?"Take one down and pass it around, "+b%[z-1,z>2?'s':'']+w+".

" :'Go to the store and buy some more, '+b%[99,'s']+w+".")}

quelle
3

(Oracle) SQL

Keine Anzahl von Charakteren, ich habe es nicht golfen. Ich fand das eine unterhaltsame Art und Weise, es zu tun.

WITH
   bottles AS (
      SELECT LEVEL - 1 AS bottle 
      FROM dual
      CONNECT BY LEVEL <= &number_of_bottles + 1
   ),
   fragments AS (
      SELECT
         'no more ' AS none,
         'bottles of beer' AS supply,
         ' on the wall' AS wall,
         'Take one down and pass it around' AS drink,
         'Go to the store and buy some more' AS refill,
         CHR(13) || CHR(10) AS newline
      FROM dual
   ),
   combined AS (
      SELECT
         b.bottle,
         DECODE(
            b.bottle, 
            1, b.bottle || ' ' || REPLACE(f.supply, 's'),
            0, f.none || f.supply,  
            b.bottle || ' ' || f.supply
         ) AS supply
      FROM bottles b
      CROSS JOIN fragments f

   ),
   two_lines AS (
      SELECT LEVEL AS line
      FROM dual
      CONNECT BY LEVEL <= 2
   )
SELECT
   CASE l.line
      WHEN 1 THEN REPLACE(c1.supply, 'n', 'N') || f.wall || ', ' || c1.supply || '.'
      WHEN 2 THEN DECODE(b.bottle, 0, f.refill, f.drink) || ', '  || c2.supply || f.wall || '.' 
   END AS song 
FROM bottles b
LEFT JOIN combined c1 ON (c1.bottle = b.bottle)
LEFT JOIN combined c2 ON (c2.bottle = DECODE(b.bottle - 1, -1, &number_of_bottles, b.bottle - 1))
CROSS JOIN two_lines l
CROSS JOIN fragments f
ORDER BY
   b.bottle DESC,
   l.line;
SQB
quelle