맥주 99 병 [폐쇄]


65

'벽에 99 병의 맥주'를 재현하십시오.

원하는 출력은 다음과 같습니다.

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.

자주 사용하는 프로그래밍 언어로이 문제를 해결하는 방법을 보여주세요. 언어를 가장 창의적으로 사용하는 것이 좋습니다.


30
"가장 창조적 인 사용"은 SE 사이트에 너무 주관적이라고 생각합니다. "가장 짧은 코드"와 같은 객관적인 기준을 사용하는 것을 목표로해야합니다.
Chris Jester-Young

5
그래도 여전히 좋은 질문입니다
Chris Laplante

3
무한히 달려야합니까? 나는 그렇게 생각했다. 또한 codegolf에는 99 병의 맥주가 없으므로 토론 할 이유가 없습니다.

1
@Chris-이 SE 사이트의 가장 어려운 부분은 프로그래밍 퍼즐의 재미의 절반이기 때문에 모든 것이 창의성을 기반으로하기 때문입니다. 가장 창의적인 솔루션이 항상 가장 효율적이거나 가장 짧은 것은 아닙니다.
Nick Berardi

2
@Nick : 들려요. 본인의 판단에 따라 솔루션의 창의성이 어떻게 결정되는지 알고 싶습니다. 유권자 기준? 특히 신뢰할만한 것은 없습니다 (범죄 없음). 간결함과 같은 것은 논쟁의 여지가 없습니다. 예를 들어, 아무도 1 바이트 스택 오버플로 코드 골프 솔루션의 "좋은 점"에 대해 이의를 제기 할 수 없습니다.
Chris Jester-Young

답변:


70

펄 (410 자)

이 콘테스트 전용 웹 사이트이미 있습니다 :

Perl 솔루션 중 하나는 창의성 측면에서 이길 매우 어려울 것입니다.

[bottles.pl]

         $ a =
        "cpuu
       \ bmft p
       \ bg cff
       \ bs "; $ b
       = "포이 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 /; 에 대한(
  $ d = 100; $ d> 0; $ d-) {
  print "$ d $ a $ b $ d"
  ; print "$ a, \ n $ c,"
  ; print ($ d-1); 인쇄
  "$ a $ b. \ n";} $ x =
  "cjc"; $ y = "dobbz";
  $ z = "com"; print "\ n"
  ;-인쇄 "-$ x \ @ $ y."
   ; print "$ z \ n \ n";

원본 파일에 대한 링크는 다음과 같습니다 .


1
멋진 프리젠 테이션이지만 요청과 일치하지 않습니다 !!
F. Hauri

내가 본 난독 화 시도가 아닌 'rot1'암호. 의 사용 \b'제거'원치 않는 문자도 조금 실망입니다.
primo 2016 년

100

Brainf *** (1,509)

나는 1 대신에 9 개의 맥주 병을 만들뿐만 아니라 코드에서 7 개의 다른 문자 만 사용 하여이 대답을 능가 할 수 있다고 생각했습니다 .

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

그래도 인정해야합니다. 코드에 버그가있을 수 있습니다 (아마도 나를 고치는 방법을 알아낼 수 있습니까?) 최종 문장을 인쇄하지는 않지만 Go to the store and buy some more, 99 bottles of beer on the wall.그 외에는 기능뿐만 아니라 다른 사람들이 사용하고 싶은 계집애 프로그래밍 언어로 만들어진 프로그램.


9
거기에는 9 병 밖에 없습니다. 90 개 더 필요합니다!
Joe Z.

탄원 :이 언어의 이름을 braindrunk?
Cyoce

99

펀시 턴

나는 다른 요일에 이것을 썼습니다. :) (스크린 샷 : 시작종료 )

추가 줄 간격으로 인해 StackExchange에서보기에 좋지 않게 표시되므로 브라우저의 JavaScript 콘솔에서 다음 코드를 실행하여 문제를 해결하십시오. $('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
플러스 하나, 이것은 굉장하다
gyurisc

1
그 언어는 훌륭하고 훌륭합니다!
반 시계 회전을 중단

1
나는 이것을 Esolang.org에서 보았고 그 모양을 좋아했습니다.
ML

56

jQuery + FireBug 콘솔

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

;)


2
eval($($('code')[8]).text().replace(/print/g,'console.log'))<del> (일명 도둑질) </ del> 과 같은 것은 어떻습니까? 노래의 전체 가사를 인쇄합니다. : P
JiminP

2
Chrome의 자바 스크립트 콘솔에서도 작동합니다.
Spoike

엄청나게 영리하다.
Maxpm

1
@JiminP 불행히도, 응답 순서가 시간이 지남에 따라 어떻게 변할 수 있는지를 감안할 때 안정적인 선택기는 아닙니다 (사실 더 이상 작동하지 않습니다).
Muhd

2
@Muhd 질문이 변경되지 않는 한 여전히 작동합니다. 첫 번째 코드 블록은 질문의 블록입니다.
Bob

24

HQ9 + (1 자)

9

틀림없이 튜링 완전한 언어는 아니지만 이것이 여전히 중요합니다.


13
HQ9 B 를 사용하지 않습니까? 튜링이 완료되었습니다.
Mateen Ulhaq

1
@muntoo HQ9 + B가 튀어 나온 것을 확신하지 못합니다. 명령 B는 키보드 입력을 폴링하고이를 brainfuck로 평가하므로 옵토 날 Brainfuck 인터프리터가있는 HQ9 +입니다. 즉, HQ9 + B의 "B"프로그램은 도착할 때까지 stdin을 폴링합니다! (또는 EOF)를 Brainfuck로 해석하십시오.
Sylwester

20

C #이 너무 많은 행사를 가졌다 고 누가 말했습니까? 그것이 누구든간에 그들은 결코 옳지 않았습니다.

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 바다에서 또 다른 C 형 희생양이되었습니다.
Glenn Nelson

그것은 상당히 실질적으로 감소 될 수 있습니다.
Nellius

2
@Nellius 그의 코드 전에 무엇을 말 했는지 읽었 습니까 ilivewithian?
Daniel Standage

1
@Daniel 네, 코드의 모든 것이 필요하다고 생각합니다. 농담을 의미한다면, 이만큼 투표해서는 안됩니다. 짧거나 창의적이거나 효율적이거나 약간 영리하지 않습니다.
Nellius

@Nellius 심각한 경쟁자로 의도 된 것은 아니고,이 좋은 코드는 없습니다. 나는 그것이 줄어들고, 더 효율적이며 일반적으로 상당히 향상 될 수 있다고 확신합니다.
Rob White

18

이 프로그램은 전처리기를 사용하여 완전한 노래 텍스트를 단일 문자열로 생성합니다. 실제 C 코드는 이렇게 구성된 문자열을 출력합니다. strings생성 된 실행 파일을 호출 하면 실행 파일에 완전한 노래 텍스트가 표시됩니다.

#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
아마도 가장 효율적이고 빠른 솔루션 일 것입니다.
Tom Pažourek

1
@tomp 시간에 효율적이고 실행 파일 크기가 매우 비효율적입니다. :)
seequ

14

C 번호 ( 312 개 310 304 문자)

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
나는 당신이 나보다 더 짧은 것을 믿을 수 없습니다. 나는 감동. 더 나은 옵션을 연구해야합니다
jcolebrand

그리고 지금 나는 그것을 위해 공부했고, 나는 300 세 이하로 떨어졌습니다.)
jcolebrand

12

씨#

짧지는 않지만, 이것은 창조적 인 것으로 간주됩니까?

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

이것은 단지 하나의 진술입니다 :)


11

독창적으로 인정되지는 않지만 단일 명령으로 명령 행에서 수행됩니다.

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

하스켈, 272 , 250 , 243 자

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

매우 간단합니다.

function더 길고 호출에는 괄호가 필요하기 때문에 맥주 병에 필터를 사용하고 있습니다. 복수 감지 ( !!--$_)는 먼저 병 수를 1 씩 줄이므로 (복수는 0이 아닌 것),이를 부울로 캐스트하고 처음 !으로 부정하고 다시 부정하므로 숫자에 복수가 필요한지 여부를 설명하는 부울이 생깁니다. 또는 아닙니다. 그런 다음 문자열을 곱할 때 암시 적으로 정수로 캐스트됩니다.

인라인 줄 바꿈은 재미 있습니다.

필요한 것보다 많은 라인을 생성하고 나중에 줄입니다.


확실히 짧았고, 이것은 시도하고 들어가는 바를 설정했습니다 !!! 내 관점에서 볼 때 196과 같은 "매직 숫자"의 모양은 (99 * 2)-2를 포착하기 때문에 피할 수 있기를 희망하는 클래스에있었습니다. 병을 바꿀 수있는 대답 참조 :) 한 곳에서 계산 codegolf.stackexchange.com/questions/2/99-bottles-of-beer/...
박사 Rebmu에게

당신은 "벽에"가 없습니다. 최종 출력 라인과 모든 병이 폐기 된 후.
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."그 수정. 총 199 자 ( $w이전에 줄 바꿈 추가 ")
Iszi

수정 해 주셔서 감사합니다. 거기에도 불필요한 공간이 있었으므로 그 수는 198입니다.
Joey

10

컬 19 자

(인터넷 연결 필요)

curl -L j.mp/eGv9K5

7
나는 이것이 너무 멀리 스트레칭을 고려합니다.
marcog

8
농담이라고 생각합니다. 웹 서버에 대한 쿼리 뒤에 많은 솔루션을 숨길 수 있습니다.
Alexandru

3
그럼에도 불구하고 나는 이것을 좋아한다.
pimvdb 2016 년

1
객관적인 코드가 가장 짧은 코드라면 영리함을 알려줄 것입니다.
Neil

9

Perl을 배우는 uber 열망하는 새로운 C 프로그래머의 거의 올바른 반 골프?

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

왜 안돼 /usr/bin/env perl?
nyuszika7 시간

1
통찰력있는 비평! ;)
Daniel Standage 2014

8

자바 스크립트 ( 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>")

편집 : A는 하나의 초기 버전에서 "맥주 1 병", 세번째 버전은 완전히 다시 작성, 통지 멋진 트릭을 좋아했다 (a||99), 마지막 줄에 99를 얻기 위해 (a-1?'s':'')모든 경우에하지만 복수를하게 a==1낭비에 대한 필요없이 불구 ==하고, 값을 설정 의 b가 사용되는 문 내부.


병 / 병 최적화가 저장하는 것보다 많은 문자를 소비하는 것처럼 보입니다.
Yahel

무슨 뜻인지 잘 모르겠습니다. 정확히 무엇을 바꾸시겠습니까?
aaaaaaaaaaaa

이것은 하나의 구절을 너무 일찍 멈 춥니 다. 마지막 구절은 가야 "no more bottles of beer on the wall, no more bottles..." - 참조 : 99-bottles-of-beer.net/lyrics.html
월 Örlygsson

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)
월 Örlygsson에게

@ MárÖrlygsson 사이트에 오신 것을 환영합니다. 이 도전에 대한 가사는 오프닝 포스트에서 정의됩니다.
aaaaaaaaaaaa

7

이 질문을 놓친 것이므로 다른 곳에서 답변으로 게시 한 버전이 있습니다. C quine 기반 버전입니다. 다음 줄의 노래를 얻기 위해 컴파일하고 실행하십시오. 지루해질 때까지 반복하십시오. 코드에 "Time to go ..."라고 표시되면 다음에 명령 줄 인수로 실행할 때 맥주 수를 입력하십시오.

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

@DreamWarrior는 제안 된 편집과 관련하여 주석으로 게시 할 수 있도록 코드를 pastebin에 넣는 것을 고려 했습니까?
nderscore

6

자바 스크립트 (285)

문자열을 출력하기 위해 print라는 함수가 있다고 가정합니다.

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
가정 된 기능이 공정하다는 것을 확신하지 못합니다. 예를 들어, 내 프로그램은입니다 b();. b()벽에 99 병의 맥주를 인쇄 하는 기능이 있다고 가정 합니다. :)
Chris Laplante

10
Javascript는 문자열을 출력하는 표준 방법을 제공하지 않습니다. 브라우저에서 문자열을 실행하는 경우 인쇄 기능이 없으며 rhino에서 실행하는 경우 인쇄 기능이 없습니다.

2
document.writeln공장.
Chris Laplante

4
... 브라우저 용

5
JavaScript에는 alert출력, prompt변수 입력 및 confirm부울 입력 으로 IO가 있습니다. UI가 진행되는 한 빠르지 만 표준 IO 차단 기능입니다. alert그리고 print이렇게 코드가 동일에 대해해야한다, 같은 길이입니다.
zzzzBov

6

계획 (270)

공백 없음 :

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

공백으로 :

    (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

파이썬-많은

아미도 니트 라이트?

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

추가 참조 (코드에 많은 도움이 됨) : http://www.youtube.com/watch?v=Y0Z0raWIHXk


5

파이썬 (318)

나는 파이썬 프로그램을 더 짧게 만드는이 방법을 발견했다 :)

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

이 .decode.decode 물건은 처음봤을 때 어리석은 것처럼 보였지만 실제 목적으로 사용하고 있습니다 (파이썬 코드를 .bashrc에 함수로 눈에 잘 띄지 않도록). 감사합니다.
ixtmixilix

5
압축되지 않은 코드에는 300자가 있다고 생각합니다. 왜 압축해야합니까?
Johannes Kuhn

5

Rebmu — 167 자

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

아마도 몇 글자를 깎을 수 있었을 것입니다. 이것은 첫 번째 시도였습니다. :)

여기 에 속기가 나오는 동등한 Rebol 이 있습니다. 명확성을 고려할 때 여전히 경쟁이 치열합니다.

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에서 사용 가능한 주석 처리 된 소스 코드


5

PHP : 285 개 240 233 231 문자

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

여기에 출력 : http://ideone.com/5fQmcd


4

파이썬, 241 자

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

루비, 274 바이트

루비를 처음 접했을 때 정말 놀랍습니다.

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

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
마지막 줄에는 "99 병"대신 "99 병"이 표시되고 루프는 99 대신 19부터 시작합니다 (아마 감독 일 수도 있음).
Nellius

@Nellius ~ 수정 ~ 경쟁 코드 덕분에 광산을 다시 방문하여 단일 인서트 블록을 제거하고 내 코드에서 기존 상수를 줄였습니다. 이제 300 이하로 부드럽게 내려갑니다.
jcolebrand

"using System;"을 삭제하면 293으로 줄일 수 있습니다. "Console.WriteLine"을 "System.Console.WriteLine"으로 변경
Tester101

@ Tester101 ~ 좋은 전화. 그것을 고려하지 않았다!
jcolebrand

4

자바 스크립트 (7 가지 기능)

골프를 치지 않는다. 이것은 노래의 (주로) 기능적인 구현으로 의도되었습니다.

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

이동 (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 바이트

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

내일 좀 더 압축하길 바랍니다.


3

루비 1.9.2p136 : 223

나는 겁쟁이가 아니에요.

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

(오라클) SQL

캐릭터 수는없고 골프도 안 했어요. 방금 재미있는 방법을 찾았습니다.

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;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.