99 Bira Şişesi [kapalı]


65

'Duvarda 99 bira şişesi' hazırla.

İstenilen çıktı şudur:

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.

Bana bunu favori programlama dilinizle nasıl çözeceğinizi gösterin. Bir dilin en yaratıcı kullanımı kazanır.


30
"En yaratıcı kullanım" bir SE sitesi için fazla özneldir, sanırım. En kısa kod gibi objektif kriterleri kullanmayı hedeflemeliyiz.
Chris Jester-Young

5
Yine de iyi bir soru
Chris Laplante

3
Sonsuzca koşması mı gerekiyor? Ben de öyle düşündüm. Ayrıca codegolf'un 99 biranın sahibi olmadığı için tartışmak için bir neden yok.

1
@Chris - Bu SE sitenin en zorlu kısmı olacak, çünkü her şey yaratıcılığa dayanıyor çünkü programlama bulmacalarının yarısı eğlenceli. En yaratıcı çözüm her zaman en verimli veya en kısa çözüm değildir.
Nick Berardi,

2
@Nick: Seni duyuyorum. Sadece bir çözümün kendi kararınıza dayalı olarak ne kadar yaratıcı olduğunu belirleyebileceğini bilmek istiyorum. Seçmenlere göre? İkisi de özellikle güvenilir değil (suç yok). Kısalık gibi bir şey tartışılmazdır - örneğin, hiç kimse 1 baytlık yığın taşma kodu golf çözümünün "iyiliğini" tartışamaz.
Chris Jester-Young,

Yanıtlar:


70

Perl (410 karakter)

Bu yarışmaya adanmış bir web sitesi zaten var :

Perl çözümlerinden biri yaratıcılık açısından yenmek çok zor olurdu, okuyor:

[Bottles.pl]

         $ A =
        "cpuu
       \ bmft p
       \ bg cff
       \ Bs "; $ b
       = "po kullanıcı arayüzü
       \ 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 /; için(
  $ D = 100; $ d> 0; $ d -) {
  "$ d $ a $ b $ d" yazdır
  ; "$ a, \ n $ c" yazdırabilirsiniz.
  , Baskı ($ d-1); Baskı
  "$ a $ b. \ n";} $ x =
  "CJC"; $ Y = "dobbz";
  $ Z = "com"; "n \" baskı
  ; "- $ x \ @ $ y." yazdırabilirsiniz.
   ; "$ z \ n \ n" yazdır;

İşte orjinal dosyanın bağlantısı .


1
Güzel sunum, ancak bu istekle eşleşmiyor !!
F. Hauri

Bir 'rot1' şifresi, aldatma olayındaki en iyi girişim değil. Kullanımı \b'kaldır' istenmeyen karakterlere de biraz hayal kırıklığı yaratıyor.
primo

100

Brainf *** (1.509)

Bu cevabı sadece 1 yerine 9 bira şişesi yaparak değil, aynı zamanda koddaki 7 farklı karakteri kullanarak da çözebileceğimi düşündüm .

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

Yine de itiraf etmeliyim ki, kodda bir hata var (belki benim için nasıl düzeltebilirsin?) Ve son cümleyi yazmıyor, Go to the store and buy some more, 99 bottles of beer on the wall.ama bunun dışında, herhangi biri kadar iyi çalışıyor Bu sissy programlama dillerinde yapılan programlar herkesin kullanmaktan hoşlanıyor gibi görünüyor.


9
Orada sadece 9 şişen var. 90 tane daha lazım!
Joe Z.

Dilekçe: Bu dilin ismini değiştirelim braindrunkmi?
Cyoce

99

funciton

Bunu geçen gün yazdım. :) (Ekran görüntüsü: başlangıç ve bitiş )

Bu, fazladan satır aralığı nedeniyle StackExchange'te çirkin göründüğünden, bunu düzeltmek için tarayıcınızın JavaScript konsolunda aşağıdaki kodu çalıştırmayı düşünün: $('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 ║
              ╚═════╝╚═════════════════════════════════════════════════╝

1
artı bir, bu harika
gyurisc

1
Bu dil harika, harika bir iş!
saat

1
Bunu Esolang.org'da gördüm ve görünüşünü beğendim.
ML

56

jQuery + FireBug Konsolu

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

;)


2
Peki ya eval($($('code')[8]).text().replace(/print/g,'console.log'))<del> (aka. Çalma) </del> gibi bir şey? Şarkının sözlerinin tamamını basar. : P
JiminP

2
Ayrıca Chrome'un javascript konsolunda da çalışır.
Spoike

Şeytani zekice.
Saat

1
@JiminP Ne yazık ki, cevap sırasının zaman içinde nasıl değişebileceği göz önüne alındığında, bu kararlı bir seçici değildir (aslında, artık çalışmaz).
Muhd

2
@Muhd Soru değişmediği sürece hala çalışır - ilk kod bloğu söz konusu olandır.
Bob

24

HQ9 + (1 karakter)

9

Kuşkusuz, Turing'in eksiksiz bir dili değil, ancak bu hala geçerli.


13
Neden HQ9 B kullanmıyorsun ? Turing tamamlandı.
Mateen Ulhaq,

1
@muntoo HQ9 + B'nin tam bir şekilde çalıştığından emin değilim .. B komutu klavye girişini seçer ve bunu beyin fırtınası olarak değerlendirir, bu nedenle optonal bir Brainfuck yorumlayıcısına sahip HQ9 + olduğunu söyler. yani, HQ9 + B'deki "B" programı gelene kadar stdin'i yok edecektir! (veya EOF) ve bunu Brainfuck olarak yorumlayın ..
Sylwester

20

Kim C # çok fazla tören yaptığını söyledi? Her kimse, bu kadar doğru olmamıştı.

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);
            }
         }
    }
}

11
+1 Perl okyanusunda bir başka C tarzı kurban kuzu olduğu için.
Glenn Nelson

Bu oldukça azaltılabilir.
Nellius

2
@Nellius Kodundan önce ne dediğini okudunilivewithian mu?
Daniel Standage,

1
@Daniel Evet ve kodundaki her şeyin gerekli olduğunu düşünüyor. Şaka demek istiyorsan, bu kadar oylanmamalı. Kısa, yaratıcı, verimli ve hatta biraz zeki değil.
Nellius

@Nellius Ciddi bir rakip olarak kastetmedi, hiçbir şekilde bu iyi kod değil. Küçültülebildiğinden, daha verimli yapıldığından ve genel olarak önemli ölçüde iyileştirildiğinden eminim.
Rob White,

18

C

Bu program tam şarkı metnini önişlemciyi kullanarak tek bir dize olarak oluşturuyor. Gerçek C kodu, bu şekilde oluşturulan dizgeyi çıktılar. stringsOluşturulan çalıştırılabilir dosyanın çağrılması , çalıştırılabilir dosyadaki tüm şarkı metnini gösterecektir.

#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;
}

1
Muhtemelen bunların en verimli ve en hızlı çözümleri.
Tom Pažourek

1
@tomp Verimli timewise, çalıştırılabilir dosya boyutunda çok verimsiz :)
seequ

14

C # ( 312 310 304 karakter)

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));}}

1
Benden daha kısa olduğuna inanamıyorum. Etkilendim. Daha iyi seçenekler için çalışmam gerekecek
jcolebrand

Ve şimdi bunun için çalıştım, 300 yaşın altındayım;)
jcolebrand

12

C #

Kısa olması amaçlanmadı, ama belki de bu yaratıcı sayılır?

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
        ))));
    }
}

Bu sadece tek bir açıklama olduğuna dikkat edin :)


11

Kesinlikle yaratıcı olarak nitelendirilmez, ancak tek bir komutla komut satırından yapılır.

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");'

11

Haskell, 272 , 250 , 243 karakter

(&)=(++)
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]

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."

Yeterince açıksözlü.

Bira şişeleri için filtre kullanıyorum, çünkü functiondaha uzun ve aşılama her durumda parantez gerekiyor. Çoğul algılama ( !!--$_) ilk önce biberon sayısını azaltır (yani çoğul sıfır olmayan bir şeydir), boolean atar ve ilk ile olumsuzlar! ve yeniden çoğaltır, böylece sayının çoğul gerektirip gerektirmediğini açıklayan bir boole var ya da değil. Bu daha sonra dize çarpılırken dolaylı olarak bir tamsayıya aktarılır.

Satır içi satır sonları eğlencelidir.

İhtiyaç duyulandan daha fazla çizgi üretmek ve daha sonra geri kesim yapmak.


Kesinlikle kısa ve bu denemek ve altında gitmek için bir bar ayarlayın! Benim bakış açıma göre, 196 gibi bir "sihirli sayı" nın görünmesi kaçınmayı umduğum şeyler sınıfındaydı, çünkü yakalar (99 * 2) - 2. Şişeyi değiştirebileceğiniz bir cevap için tek bir yerde saymak :) bkz. codegolf.stackexchange.com/questions/2/99-bottles-of-beer/…
Dr. Rebmu

"Duvarda" eksik. Nihai çıktı satırında ve her şişe sonra alınır.
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."Bunu düzeltir. Toplam 199 karakter. (Sonra bir satır sonu ekleme $wönce ")
Iszi

Düzeltme için teşekkürler. Orada da gereksiz bir yer vardı, bu yüzden sayı 198.
Joey

10

Kıvrım 19 karakter

(internet bağlantısı gerektirir)

curl -L j.mp/eGv9K5

7
Bunun çok uzadığını düşünüyorum.
marcog

8
Şaka olarak görüyorum. Bir web sunucusuna yapılan bir sorgunun arkasına birçok çözüm gizlenebilir.
Alexandru

3
Yine de bunu beğendim.
pimvdb

1
Amaç en kısa kod olsaydı, size zekâ için bir puan verirdim.
Neil

9

Neredeyse doğru anti-golf meraklısı istekli yeni C programcısı Perl öğreniyor?

#!/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;
  }
}

Neden olmasın /usr/bin/env perl?
nyuszika7h

1
@ nyuszika7h Anlaşılır bir eleştiri! ;)
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>")

Düzenleme: İlk versiyonda tek bir "1 şişe bira" vardı, 3. versiyon tamamen yeniden yazıldı, (a||99)en son satırda 99 elde etmek gibi hoş numaralara dikkat edin , (a-1?'s':'')her durum için çoğul hale getirdi , ancak a==1israfa gerek kalmadı ==ve değeri belirledi arasında bkullanıldığı açıklamada içeride.


Şişe / şişe optimizasyonunuz kaydettiğinizden daha fazla karaktere mal oluyor gibi görünüyor.
Yahel

Ne demek istediğini anlamadım, tam olarak ne değiştirirdin?
aaaaaaaaaaaa

Bu, bir ayeti çok erken durdurur. Son ayet gitmeli "no more bottles of beer on the wall, no more bottles..." - Bakın: 99-bottles-of-beer.net/lyrics.html
Már

BTW, 233 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)
baytta

@ MárÖrlygsson Siteye Hoşgeldiniz. Bu meydan okuma için şarkı sözleri açılışta tanımlanır.
aaaaaaaaaaaa

7

C

Bu soruyu cevaplamamış olmalıyım, işte başka bir yerde cevap olarak gönderdiğim bir versiyon. Bir C quine tabanlı versiyonu. Derleme ve sonraki şarkıyı almak için çalıştırın. Sıkılıncaya kadar tekrarlayın. Kod "Gitme zamanı ..." yazıyorsa, bir dahaki sefere komut satırı argümanı olarak çalıştırdığınızda bira sayısını girin.

// 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);}

Önerilen düzenleme ile ilgili @DreamWarrior, yorumunuzu gönderebilmeniz için kodunuzu pastebin içine koymayı düşündünüz mü?
nderscore

6

Javascript (285)

Bu, bir dizge çıktısı almak için print adlı bir işlev olduğunu varsayar.

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.")

8
Varsayılan işlevlerin adil olduğundan emin değilim. Örneğin, programım olabilir b();. Bir işlev olduğunu varsayarakb()Duvarda 99 şişe bira basan olduğunu varsayalım. :)
Chris Laplante,

10
Javascript bir dizge çıktısı için herhangi bir standart yol sağlamaz, eğer bir tarayıcıda çalıştırıyorsanız, gergedan çalıştırıyorsanız, yazdırma işlevi yoktur.

2
document.writeln Eserleri.
Chris Laplante

4
... tarayıcılar için

5
JavaScript'in içinde: IO var: alertçıkış, promptdeğişken giriş ve confirmboolean giriş. Kullanıcı arayüzüne gittiği kadar emiyorlar, ancak bunlar standart engelleme IO işlevleri. alertve printaynı uzunluktadır, bu yüzden kodunuz yaklaşık olarak eşit olmalıdır.
zzzzBov

6

Şema (270)

Boşluk yok:

(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))))))

Boşluk ile:

    (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))))))

6

Python - çok

Amidoinitrite?

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."""

Ek referans (kodla ilgili çok yardımcı oldu): http://www.youtube.com/watch?v=Y0Z0raWIHXk


5

Python (318)

Python programını kısaltmanın bu yolunu buldum :)

exec'eJxtjrFqwzAQQHd/xVVgLCVqSbq5RHO2TtlcgyX7Qk3luyAphP59ZA0thGzi9O7es0bUERyn5DE/+AwOMdTxi0TljLeLmyzQB4GlaaCBg/hkWDigqMb/76aZz0CHHaCPCLaWTpLSTWw2kl7MXmkBTJC+EW7Wey3U9hmzzqU42R/MNMLEt6KFi40R5gQ28JUmndO0ODIkLhdjyjWFc9dfiLxg6Vsx1ZExu36Vddn2miVD2w59R4d9/6d+f8h7Wze3Y+GrS5gpwSjbVlV3Y1BZCg=='.decode('base64').decode('zip')

Bu .decode.decode şeyler ilk gördüğümde bana aptalca geldi, ama şimdi pratik amaçlar için kullanıyorum (python kodunu .bashrc'ime göze batmayan bir şekilde işlevler olarak eklemek için).
ixtmixilix

5
Sıkıştırılmamış kodun 300 karaktere sahip olduğunu sayıyorum. Neden sıkıştırıyor o zaman?
Johannes Kuhn

5

Rebmu - 167 karakter

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]]

Muhtemelen birkaç karakter tıraş olabilir, bu sadece bir ilk deneme oldu. :)

İşte stenografi kaynatılmış eşdeğeri Rebol . Özellikle netlik göz önüne alındığında hala oldukça rekabetçi:

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
    ]
]

GitHub'da mevcut yorumlanmış kaynak kodu


5

PHP: 285 240 233 231 Karakterler

$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.";

Buradan çıktı: http://ideone.com/5fQmcd


4

Python, 241 karakter

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+"."

4

Ruby, 274 bayt

Yine de Ruby için oldukça yeni, gerçekten sadece oyun oynuyor

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}."

4

C # (299 karakter)

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);}}

1
Son satırınız "99 şişe" yerine "99 şişe" gösteriyor ve ilki 99 yerine 19'dan başlıyor (muhtemelen sadece bir gözetim).
Nellius

@Nellius ~ Düzeltildi ~ ve rekabetçi kodunuz sayesinde benim madeni tekrar ziyaret ettim ve bazı tek ekleme blokları kaldırdım ve önceden var olan bazı sabitleri kendi kodumda azalttım. Şimdi düzgün şekilde 300'ün altına kadar.
jcolebrand,

"Sistemi kullanarak" bırakarak onu 293'e indirebilirsiniz. ve "Console.WriteLine" "System.Console.WriteLine" olarak değiştiriliyor
Tester101

@ Tester101 ~ İyi arama. Bunu düşünmemiştim!
jcolebrand

4

JavaScript (7 işlev)

Golf değil. Bu, şarkının (çoğunlukla) işlevsel bir uygulaması olarak tasarlanmıştır.

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));

4

Git (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+".")}

3

PHP - 252 bayt

$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.".";

Umarım yarın biraz daha sıkarım.


3

Yakut 1.9.2p136: 223

Ben korkak değilim, sen benimkini okuyabilirsin, 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+".")}

3

(Oracle) SQL

Karakter sayılmaz, golf oynamam. Bunu yapmanın eğlenceli bir yolunu buldum.

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.