Chai 99 chai bia bia


71

Viết chương trình xuất lời bài hát thành 99 Chai Bia, càng ít byte càng tốt .

Lời bài hát:

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.

Quy tắc:

  • Chương trình của bạn phải đăng nhập vào STDOUT hoặc một giải pháp thay thế chấp nhận được hoặc được trả về từ một chức năng (có hoặc không có dòng mới).
  • Chương trình của bạn phải là một chương trình hoặc chức năng đầy đủ, có thể chạy được.
  • Các ngôn ngữ được viết cụ thể để gửi câu trả lời 0 byte cho thử thách này được cho phép, chỉ không đặc biệt thú vị.

    Lưu ý rằng phải có một thông dịch viên để trình có thể được kiểm tra. Được phép (và thậm chí được khuyến khích) tự viết trình thông dịch này cho một ngôn ngữ chưa được thực hiện trước đó.

  • Điều này khác với đầu ra của HQ9 + hoặc 99. Mọi câu trả lời được viết bằng các ngôn ngữ này sẽ bị xóa.

Vì đây là một thách thức danh mục, đây không phải là tìm kiếm ngôn ngữ với giải pháp ngắn nhất cho việc này (có một số chương trình trống thực hiện thủ thuật) - đây là về việc tìm giải pháp ngắn nhất trong mọi ngôn ngữ. Do đó, không có câu trả lời sẽ được đánh dấu là chấp nhận.

Mục lục

Đoạn trích Stack ở cuối bài đăng này tạo ra danh mục từ các câu trả lời a) dưới dạng danh sách các giải pháp ngắn nhất cho mỗi ngôn ngữ và b) dưới dạng bảng xếp hạng tổng thể.

Để đảm bảo rằng câu trả lời của bạn hiển thị, vui lòng bắt đầu câu trả lời của bạn bằng một tiêu đề, sử dụng mẫu Markdown sau:

## Language Name, N bytes

nơi Nlà kích thước của trình của bạn. Nếu bạn cải thiện điểm số của mình, bạn có thể giữ điểm số cũ trong tiêu đề, bằng cách đánh bại chúng thông qua. Ví dụ:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Nếu bạn muốn bao gồm nhiều số trong tiêu đề của mình (ví dụ: vì điểm của bạn là tổng của hai tệp hoặc bạn muốn liệt kê riêng các hình phạt cờ của thông dịch viên), hãy đảm bảo rằng điểm thực tế là số cuối cùng trong tiêu đề:

## Perl, 43 + 2 (-p flag) = 45 bytes

Bạn cũng có thể đặt tên ngôn ngữ thành liên kết sau đó sẽ hiển thị trong đoạn trích:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


13
Bất cứ ai đóng cái này, cái kia là một cuộc thi phổ biến ...
TheDoctor

21
Đây là một nhiệm vụ con của golf Tạo phiên bản HQ9 + .
Geobits

4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Tôi chưa VTCd, vẫn quyết định tôi cảm thấy thế nào về điều đó. Dù bằng cách nào, tôi nghĩ rằng một số câu trả lời (hoặc đoạn trích từ chúng) có thể được sao chép / dán trực tiếp trong khi vẫn cạnh tranh , đây là một thử nghiệm thông thường cho sự lừa bịp.
Geobits

13
Lưu ý rằng quartata đã sandbox một danh mục 99BB vài tuần trước và đang có kế hoạch đăng nó.
Alex A.

13
@GamrCorps Xin vui lòng không thay đổi các quy tắc một cách không cần thiết sau khi thử thách đã bắt đầu. Không có ký tự nào trong đầu ra nên là tùy chọn.
frageum

Câu trả lời:


43

C #, 285 298 289 byte

(Nỗ lực đầu tiên của tôi tại Code golfing ...)

class d{static void Main(){for(int b=99;b>0;)System.Console.Write("{0}{6}{1}{2}, {0}{6}{1} of beer. {3}, {4}{6}{5}{2}.{7}",b,b==1?"":"s"," of beer on the wall",b==1?"Go to the store and buy some more":"Take one down and pass it around",b==1?99:b-1,b==2?"":"s"," bottle",b--<2?"":"\n\n");}}

Một chút vô duyên:

class d{
    static void Main(){
        for(int b = 99; b > 0;){
            System.Console.Write("{0}{6}{1}{2}, {0}{6}{1} of beer.\n{3}, {4}{6}{5}{2}.{7}", b, b==1 ? "" : "s", " of beer on the wall", b == 1 ? "Go to the store and buy some more" : "Take one down and pass it around", b == 1 ? 99 : b-1, b== 2 ? "" : "s", " bottle", b--<2 ? "" : "\n\n");
        }
    }
}

10
mẹo - sử dụng var thay vì chuỗi :)
Belfield

2
2 byte thay thế " bottle"bằng một đối số định dạng mặc dù tôi chắc chắn có một cách tốt hơn, có 3 trường hợp chai làm tổn thương mắt tôi ...
Sven Writes Code

4
b==1có thể được thay thế bằng b<2.
LegionMammal978

2
Vòng lặp for của bạn có thể được viết như thế nàyfor(int b = 100; b--> 1;)
Yassin Hajaj

2
Sau đó, có lẽ chúng ta nên chờ đợi tác giả thách thức quyết định xem một dòng mới có được phép hay không.
Florian Bach

31

Mã máy Motorola MC14500B , 46612 byte

Vì lý do độ dài, tôi không thể đăng chương trình ở đây. Tuy nhiên, nó có thể được tìm thấy ở đây trong hệ thập lục phân , và ở đây ở dạng nhị phân (được đệm bằng 0s).


Đây là chương trình ngắn nhất có thể trong mã máy Motorola MC14500B. Nó chỉ bao gồm 10001001( 89, tương ứng); một opcode cho mỗi bit đầu ra.

Nó sử dụng 93.224 opcodes nửa byte và xuất ra lời bài hát mỗi lần một bit. Đây là phương pháp đầu ra duy nhất có thể.

Đối với những người quan tâm, đầu ra sẽ chuyển đến chân số 3 (16), chân I / O.


Giải trình

8    Store the register's value
9    Store the logical complement of the register's value

Việc đăng ký bắt đầu lúc 0.


Mã đố

  • Hệ thập lục phân dài 93,224 8giây và 9s.

  • Các nhị phân là 745.792 1s và 0s dài.

  • Tôi đã sử dụng mã Python 2 bên dưới để tạo mã. Đầu vào 0cho nhị phân và 1thập lục phân.

    a,b=["8","9"]if input()else["00001000","00001001"]
    f="""99 Bottles of Beer lyrics"""
    print''.join(b if int(i)else a for i in''.join((8-len(bin(i)[2:]))*'0'+bin(i)[2:]for i in bytearray(f)))

4
Vui lòng cho tôi biết bạn đã không đi và viết tất cả những điều này mà không có một số trình tạo chuỗi ...: c
Addison Crump

1
Xem phần "Trivia Code" mới: P @VoteToC Đóng
Zach Gates

Các liên kết bị hỏng :(
ETHproductions

Tôi sẽ sửa nó khi tôi trở về nhà. Xin lỗi về điều đó): @ETHproductions
Zach Gates

28

Vitsy, 0 byte



Nghiêm túc mà nói không phải tôi không biết. (@Mego Tôi rất xin lỗi .;))

Hãy thử trực tuyến! (Chỉ cần nhấn "Chạy")


7
o_o Tôi cần một cái gì đó thú vị để Simplex thực hiện bằng 0 byte: P
Conor O'Brien

4
@ CᴏɴᴏʀO'Bʀɪᴇɴ Tôi nghĩ bạn có nghĩa là "Tôi cần một cái gì đó hữu ích cho Simplex để thực hiện trong byte không."
Martin Ender

3
@VoteToC Đóng - Làm thế nào để nó hoạt động? Tôi thực sự không biết, tôi không phải là người chơi mã, nhưng tôi thích đến đây và thấy mọi người và ngôn ngữ làm điều đó. Nhưng tôi không thể hiểu điều này. +1 vì trông ấn tượng!
Jonnny

1
@Jonnny Bấm vào đây để xem trình xử lý tệp của trình thông dịch. Trình xử lý tệp sẽ thấy rằng một tệp chứa byte không, và nếu vậy, in ra lời bài hát. c:
Addison Crump

1
@Jonnny Vâng - đó là một công việc đang tiến triển, một ngày nào đó, nó sẽ tốt hơn Nghiêm túc. Nhưng bây giờ ... Chúng tôi chờ. Nếu bạn muốn có một ngôn ngữ chơi golf tốt, hãy xem câu trả lời Nghiêm túc, nó có một số thứ điên rồ trong đó.
Addison Crump

27

Nghiêm túc , 1 byte

N

Nếu ngăn xếp trống (đó là lúc bắt đầu), Nđẩy lời bài hát. Sau đó, chúng được in ngầm tại EOF.

Cảm ơn @Mego đã sửa lỗi trình thông dịch Nghiêm túc.


22
Martin đã nói trong thử thách Hello World, "> xin đừng bỏ qua những câu trả lời nhàm chán (nhưng hợp lệ) bằng những ngôn ngữ không có nhiều thứ để chơi golf - những câu hỏi này vẫn hữu ích cho câu hỏi này khi nó cố gắng biên dịch một danh mục đầy đủ nhất có thể. Tuy nhiên, chủ yếu thực hiện các câu trả lời bằng các ngôn ngữ mà các tác giả thực sự phải nỗ lực để đánh gôn. " Câu trả lời này không thú vị, nhưng nó là một giải pháp hợp lệ và ngắn nhất.
lirtosiast

1
Khi đọc câu hỏi tôi không thể chờ đợi để thấy bạn đăng một câu trả lời Nghiêm túc. Nhưng có vẻ như tôi thậm chí không phải chờ đợi. :)
Hexaholic

8
Nghiêm túc ????????
Vajura

1
Tôi mong được thấy giải pháp của bạn mà không cần sử dụng N:)
Mego

1
Vâng - tôi có bốn phiếu bầu và câu trả lời của tôi là hợp lệ. Tôi đồng tình với những gì được nói trong bình luận hàng đầu ở đây.
Addison Crump

19

JavaScript ES6, 230 218 198 196 192 188 185 byte

for(x=99,z=(a=' on the wall')=>`${x||99} bottle${1-x?'s':''} of beer`+a;x;)alert(z()+', '+z`.
`+(--x?'Take one down and pass it around, ':'Go to the store and buy some more, ')+z()+'.')

Chỉ cần cắt bớt một vài byte trong khi vẫn giữ cho nó trông sạch sẽ và dễ hiểu.

3 phiên bản gần đây nhất:

for(x=99,z=a=>`${x||99} bottle${1-x?'s':''} of beer${a||' on the wall'}`;x;)alert(z()+', '+z(`.
`)+(--x?'Take one down and pass it around, ':'Go to the store and buy some more, ')+z()+'.')

for(x=99,z=a=>(x||99)+' bottle'+(1-x?'s':'')+' of beer',w=' on the wall';x;)alert(z()+w+', '+z()+(--x?`.
Take one down and pass it around, `:`.
Go to the store and buy some more, `)+z()+w+'.')

for(x=99,o=' bottle',q=b=o+'s',e=' of beer',w=e+" on the wall";x;)alert(x+b+w+', '+x+b+e+(--x?`.
Take one down and pass it around, `+x:`.
Go to the store and buy some more, 99`)+(b=1-x?q:o)+w+'.')

1
2 byte được lưu bằng cách đặt các biến bên ngoài các điều khiển vòng lặp:x=99;w=" on the wall";e=" of beer";o=" bottle";b=o+"s";for(z="Go to the store and buy some more, "+x+b;0<x;)console.log(x+(2>x?o:b)+e+w+", "+x+(2>x?o:b)+e+".\n"+(1>--x?z:"Take one down and pass it around, "+x+(2>x?o:b))+e+w+".")
Người dùng chung

Đó không phải là những gì tiết kiệm 2 byte trong mã của bạn. Đó thực sự là việc loại bỏ dấu ngoặc đơn xung quanh (--x <1). Bây giờ tôi sẽ để các biến bên trong câu lệnh for cho mục đích dễ đọc để giữ tất cả chúng cùng nhau.
Adam Dally

1
@Stefnotch Nếu bạn đang tự hỏi, tôi đã tìm thấy chỉnh sửa này bằng cách kiểm tra các cuộc gọi chức năng của mình ... nhưng tôi không nghĩ đây là ý định của bạn. Lời khuyên của bạn vẫn có liên quan như là một phương sách cuối cùng, mặc dù.
Adam Dally

1
@ Paŭlo Ebermann Nó thực thi cảnh báo cho từng câu, nhưng bạn có thể tự do thay đổi nó thành console.log để thực thi trong bảng điều khiển, điều này sẽ tạo ra 194 byte. Ngoài ra, việc cảnh báo toàn bộ lời bài hát trong một lần không hoạt động trong Firefox, ít nhất là ... nó cắt ra 5-10 câu thơ hay.
Adam Dally

1
@Stefnotch. Vâng, 1-x đang tỏ ra hữu ích vào lúc này.
Adam Dally

18

JavaScript ES6, 328 318 307 305 byte

Là một chức năng ẩn danh. Thêm vào f=lúc bắt đầu để thực hiện chức năng và f()thực hiện.

x=>eval('s=o=>v=(o?o:" no more")+" bottle"+(1==o?"":"s");for(o="",i=99;i>0;)o+=`${s(i)}@ on the wall, ${v}@.\nTake one down, pass it around, ${s(--i)}@ on the wall.\n`;o+`No more bottles@ on the wall, no more bottles@.\nGo to the store and buy some more, 99 bottles@ on the wall.`'.replace(/@/g," of beer"))

2
Khá thú vị hơn nhiều nếu nó không chỉ là một chuỗi nối dài
Sp3000

9
Tại sao nghệ thuật ASCII ngẫu nhiên được sao chép từ một trang web khác?
feerum

7
Đặc biệt là vì nó không hoạt động, nó thông báo:,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
Người dùng chung

14

C, 197 196 byte

main(i){for(i=299;i--/3;printf("%d bottle%s of beer%s%s",i/3?:99,"s"+5/i%2,i%3?" on the wall":i^3?".\nTake one down and pass it around":".\nGo to the store and buy some more",~i%3?", ":".\n\n"));}

Tôi nghĩ rằng tôi đã đạt đến giới hạn của phương pháp này.


1
"%d bottles of beer on the wallTake one down and pass it aroundGo to the store and buy some more,.\n"main(){for(;;)printf();}một mình là 126 byte, do đó, đại diện cho giới hạn dưới cứng trừ khi có ai đó tìm cách nén hoặc sử dụng lại các phần của chuỗi mà không cần chi phí đáng kể. Tôi nghi ngờ bạn có thể đã đạt đến giới hạn của các phương pháp tiếp cận nói chung, cộng hoặc trừ một vài byte.
Ray

12

Java 304 301 300 295 byte

Lần đầu tiên đăng một câu trả lời. Tôi nghe nói chúng tôi có thể sử dụng enum nhưng không thể tìm thấy.

interface A{static void main(String[]a){String b=" of beer",c=" on the wall",n=".\n",s;for(int i=100;i-->1;s=" bottle"+(i>1?"s":""),System.out.println(i+s+b+c+", "+i+s+b+n+(i<2?"Go to the store and buy some more, 99":"Take one down and pass it around, "+(i-1))+" bottle"+(i!=2?"s":"")+b+c+n));}}

Ung dung

interface A {
    static void main(String[] a) {
        String b = " of beer", c = " on the wall", n = ".\n", s;
        for (int i = 100; i-- > 1; s = " bottle" + (i > 1 ? "s" : ""), System.out.println(i + s + b + c + ", " + i + s + b + n + (i < 2 ? "Go to the store and buy some more, 99" : "Take one down and pass it around, " + (i - 1)) + " bottle" + (i != 2 ? "s" : "") + b + c + n));
    }
}

Cảm ơn quartata, J AtkinBenjamin Urquhart


Bạn có thể lưu 2 byte bằng cách sử dụng i<2thay thế i==1i>2tại đây : i!=2.
J Atkin

@JAkin Cảm ơn bạn. Đối với cái đầu tiên là ok, đầu ra vẫn giữ nguyên. Nhưng đối với cái thứ hai, nếu tôi thực hiện thay đổi, dòng cuối cùng sẽ in 99 bottlevà không99 bottles
Yassin Hajaj

1
Hóa ra, điều này tốt cho java, nhưng điều này không hoạt động tốt cho Groovy (213 so với 245 byte).
J Atkin

1
Không thực sự, Groovy là một trong những ngôn ngữ JVM. Đối với hầu hết các ứng dụng, mã Groovy ngắn hơn mã java thực hiện điều tương tự. goovy-lang.org
J Atkin

1
@BenjaminUrquhart Tuyệt vời! Sửa đổi nó!
Yassin Hajaj

11

Các mẫu được coi là có hại , 667 byte

Ap<Fun<Ap<Fun<Cat<Cat<Cat<Cat<Ap<A<1,1>,A<1>>,A<2,1>>,St<44,32>>,Ap<A<1,1>,A<1>>>,If<A<1>,Cat<Cat<Cat<Cat<St<46,10,84,97,107,101,32,111,110,101,32,100,111,119,110,32,97,110,100,32,112,97,115,115,32,105,116,32,97,114,111,117,110,100,44,32>,Ap<A<1,1>,Sub<A<1>,T>>>,A<2,1>>,St<46,10,10>>,Ap<A<0>,Sub<A<1>,T>>>,Cat<Cat<Cat<St<46,10,71,111,32,116,111,32,116,104,101,32,115,116,111,114,101,32,97,110,100,32,98,117,121,32,115,111,109,101,32,109,111,114,101,44,32>,Ap<A<1,1>,I<98>>>,A<2,1>>,St<46>>>>>,I<98>>>,Fun<Cat<Cat<Cat<Add<A<1>,T>,St<32,98,111,116,116,108,101>>,If<A<1>,St<'s'>,St<>>>,St<32,111,102,32,98,101,101,114>>>,St<32,111,110,32,116,104,101,32,119,97,108,108>>

Sắp xếp mở rộng:

Ap<
    Fun<
        Ap<
            Fun<
                Cat<
                    Cat<Cat<Cat< Ap<A<1,1>,A<1>> , A<2,1> >, St<44,32> >, Ap<A<1,1>,A<1>> >,
                    If<A<1>,
                        Cat<Cat<Cat<Cat< St<46,10,84,97,107,101,32,111,110,101,32,100,111,119,110,32,97,110,100,32,112,97,115,115,32,105,116,32,97,114,111,117,110,100,44,32> , Ap<A<1,1>,Sub<A<1>,T>> >, A<2,1> >, St<46,10,10> >, Ap<A<0>,Sub<A<1>,T>> >,
                        Cat<Cat<Cat< St<46,10,71,111,32,116,111,32,116,104,101,32,115,116,111,114,101,32,97,110,100,32,98,117,121,32,115,111,109,101,32,109,111,114,101,44,32> , Ap<A<1,1>,I<98>> >, A<2,1> >, St<46> >
                    >
                >
            >,
            I<98>
        >
    >,
    Fun< Cat<Cat<Cat< Add<A<1>,T> , St<32,98,111,116,116,108,101> >, If<A<1>,St<'s'>,St<>>  >, St<32,111,102,32,98,101,101,114> > >,
    St<32,111,110,32,116,104,101,32,119,97,108,108>
>

11

Haskell, 228 223 byte

o=" of beer on the wall"
a n=shows n" bottle"++['s'|n>1]
b 1="Go to the store and buy some more, "++a 99
b n="Take one down and pass it around, "++a(n-1)
f=[99,98..1]>>= \n->[a n,o,", ",a n," of beer.\n",b n,o,".\n\n"]>>=id

Hàm ftrả về một chuỗi với lời bài hát.


10

/// , 341 byte

/-/\/\///+/ bottle-)/\/&\/<\/
-(/\/\/?\/ ->/+s of beer-^/> on the wall-!/^,-$/>.
-@/$Take one down and pass it around,-#/^.
-*/?1@?0#<0!?0@-%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!-&/?9#
%*-</
9(9/%*/</
8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0-
0/
- 0/ /#/1+s/1+/
% 01$Go to the store and buy some more, 099^.

Nó sẽ cần 99 năm để viết một lời giải thích thích hợp về mã này.

Tôi có lẽ sẽ chỉ bao gồm kết quả của mọi giai đoạn ...

Về cơ bản, điều này nén lời bài hát nhiều lần (như mọi câu trả lời trong /// ).

Hãy thử trực tuyến!

Mỗi bước giải nén

Vì các thay thế theo sau thay thế sẽ có chuỗi //, nó sẽ xuất hiện thường xuyên.

Nó xuất hiện thường xuyên đủ để tôi quyết định nén //vào -.

Khi điều này được giải nén, kết quả như sau:

/+/ bottle//)/\/&\/<\/
//(/\/\/?\/ //>/+s of beer//^/> on the wall//!/^,//$/>.
//@/$Take one down and pass it around,//#/^.
//*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9#
%*//</
9(9/%*/</
8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0//
0/
// 0/ /#/1+s/1+/
% 01$Go to the store and buy some more, 099^.

Chuỗi bottlechỉ xuất hiện ba lần, nhưng tôi đã nén nó bằng mọi cách +:

/)/\/&\/<\/
//(/\/\/?\/ //>/ bottles of beer//^/> on the wall//!/^,//$/>.
//@/$Take one down and pass it around,//#/^.
//*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9#
%*//</
9(9/%*/</
8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0//
0/
// 0/ /#/1 bottles/1 bottle/
% 01$Go to the store and buy some more, 099^.

Sau đó, )tương ứng với /&/</một dòng mới và (tương ứng với //?/ , đó là các mẫu sẽ thường được sử dụng sau này:

/>/ bottles of beer//^/> on the wall//!/^,//$/>.
//@/$Take one down and pass it around,//#/^.
//*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9#
%*//</
9//?/ 9/%*/</
8//?/ 8/&/</
7//?/ 7/&/</
6//?/ 6/&/</
5//?/ 5/&/</
4//?/ 4/&/</
3//?/ 3/&/</
2//?/ 2/&/</
1//?/ 1/&/</
0//?/ 0//
0/
// 0/ /#/1 bottles/1 bottle/
% 01$Go to the store and buy some more, 099^.

Bây giờ, chúng tôi sẽ giải nén một số chuỗi hữu ích:

  • > giải nén bottles of beer
  • ^ giải nén bottles of beer on the wall
  • !giải nén đến ^,, đâu ^là cái ở trên.
  • $giải nén đến >.\n, đâu >là quy tắc đầu tiên và \nlà một dòng mới.
  • @giải nén $theo sau Take one down and pass it around,, đâu $là quy tắc trên.

Mã giải nén giờ trở thành:

/*/?1 bottles of beer.
Take one down and pass it around,?0 bottles of beer on the wall.
<0 bottles of beer on the wall,?0 bottles of beer.
Take one down and pass it around,//%/99 bottles of beer on the wall,?9 bottles of beer.
Take one down and pass it around,?8 bottles of beer on the wall.
<8 bottles of beer on the wall,?8 bottles of beer.
Take one down and pass it around,?7 bottles of beer on the wall.
<7 bottles of beer on the wall,?7 bottles of beer.
Take one down and pass it around,?6 bottles of beer on the wall.
<6 bottles of beer on the wall,?6 bottles of beer.
Take one down and pass it around,?5 bottles of beer on the wall.
<5 bottles of beer on the wall,?5 bottles of beer.
Take one down and pass it around,?4 bottles of beer on the wall.
<4 bottles of beer on the wall,?4 bottles of beer.
Take one down and pass it around,?3 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 bottles of beer on the wall.
<1 bottles of beer on the wall,//&/?9 bottles of beer on the wall.

%*//</
9//?/ 9/%*/</
8//?/ 8/&/</
7//?/ 7/&/</
6//?/ 6/&/</
5//?/ 5/&/</
4//?/ 4/&/</
3//?/ 3/&/</
2//?/ 2/&/</
1//?/ 1/&/</
0//?/ 0//
0/
// 0/ / bottles of beer on the wall.
/1 bottles/1 bottle/
% 01 bottles of beer.
Go to the store and buy some more, 099 bottles of beer on the wall.

9

Vim, 139 byte

Đã lưu 6 byte do xsot .

i, 99 bottles of beer on the wall.<ESC>YIGo to t<SO> store and buy some more<ESC>qa
3P2xgJX$12.+<CAN>YITake one down a<SO> pass it around<ESC>o<ESC>q98@adk?s
xn.n.ZZ

Đây là nỗ lực đầu tiên của tôi trong việc chơi các lệnh Vim, mặc dù rõ ràng nó khá phổ biến . Tôi đã bao gồm số cuối cùng ZZtrong số byte (ghi vào tệp và thoát) vì nó dường như là tiêu chuẩn được chấp nhận.

Lưu ý bên: nhiệm vụ đã hoàn thành .


Giải trình

Command                                    Effect
-------------------------------------------------------------------------------------------
i, 99 bottles of beer on the wall.<ESC>    insert text at cursor
Y                                          copy this line into buffer
IGo to t<SO> store and buy some more<ESC>  insert text at beginning of line
                                           auto-complete "the" (<Ctrl-N>, searches forward)
qa                                         begin recording macro into "a"
<LF>                                       move down one line (if present)
3P                                         paste 3 times before cursor
2x                                         delete 2 characters at cursor
gJ                                         join this line with next (without space between)
X                                          delete character before cursor
$                                          move to last non-whitespace character of line
12.                                        repeat the last edit command (X) 12 times
+                                          move to column 0 of next line
<CAN>                                      numeric decrement (<Ctrl-X>)
Y                                          copy this line into buffer
ITake one down a<SO> pass it around<ESC>   insert text at beginning of line
                                           auto-complete "and" (<Ctrl-N>, searches forward)
o<ESC>                                     insert text on new line
q                                          stop recording macro
98@a                                       repeat macro "a" 98 times
dk                                         delete upwards (this line and the one above it)
?s<LF>                                     move to previous /s/
x                                          delete character at cursor
n.n.                                       repeat last match and delete 2 times
ZZ                                         write to file and exit

1
Cải thiện nhẹ:i99 bottles of beer on the wall.<ESC>Yqa3P$r,J5wDr.+<CAN>YITake one down and pass it around, <ESC>o<ESCjq98@aiGo to the store and buy some more, <ESC>kdk?s<LF>xnxnxZZ
xsot

@xsot cảm ơn vì điều đó. Tôi bằng cách nào đó hoàn toàn bỏ qua /?.
primo

btw có thể đạt 153 trên anagol với cải tiến này
xsot

@xsot hiểu rồi;)
primo

8

JavaScript ES6, 237 217 208 203 195 193 189 186 byte

Việc chơi golf này trở nên khá khó khăn ...
Chỉnh sửa 1: Ai đó hoàn toàn vượt xa tôi, có vẻ như tôi phải cố gắng nhiều hơn nếu tôi muốn có câu trả lời Javascript tốt nhất.
Chỉnh sửa 2: Thành thật mà nói tôi không thể tin rằng mình đã chơi golf nhiều như vậy!

for(i=99,Y=" on the wall",o=k=>k+(i||99)+` bottle${i==1?'':'s'} of beer`;i;)alert(o``+Y+o`, `+o(--i?`.
Take one down and pass it around, `:`.
Go to the store and buy some more, `)+Y+`.`)

Tôi đã làm hỏng ở đâu đó? Tôi cũng xin lỗi vì đã sử dụng alert, nếu bạn muốn kiểm tra mã của tôi, hãy thay thế nó bằng console.log.

Hiện tại, có một câu trả lời Javascript đáng chú ý khác: "99 Chai bia" . Kiểm tra nó ra! :CƯỜI MỞ MIỆNG


Tôi sẽ kiểm tra lại các điều kiện của bạn và bạn sẽ có thể cắt bớt một vài byte. Mặc dù vậy, nỗ lực tốt để theo kịp!
Adam Dally

@AdamDally Ok !! : D Nhưng tôi không thích sao chép nội dung của người khác ... (Tôi sẽ cảm thấy tội lỗi nếu tôi chỉ sao chép mã của bạn ... mặc dù nó sẽ "chấp nhận được", nếu tôi tìm thấy một số cải tiến): D
Stefnotch

@AdamDally Yay, tôi đã làm rối tung các chức năng của mình và tôi đã lưu khá nhiều byte! (Dòng gạch chéo ngày càng dài hơn ..)
Stefnotch

Xuất sắc! Trừ khi có một số con đường thay thế mà tôi hoàn toàn bỏ qua, tôi cảm thấy như cả hai chúng ta đều gần kết thúc.
Adam Dally

7

JavaScript ES6, 210 209 205 199 198 196 byte

s=""
for(i=299;--i>1;s+=`${i/3|0||99} bottle${5/i^1?"s":""} of beer`+(i%3?" on the wall":i^3?`.
Take one down and pass it around`:`.
Go to the store and buy some more`)+(~i%3?", ":`.

`));alert(s)

Đây là một bản dịch thô của trình C của tôi. Tôi thực sự không biết javascript nên chắc chắn có chỗ để cải thiện.

Chỉnh sửa: Neat, tôi phát hiện ra backticks


bạn có thể thay thế console.logbằng alertvà bạn có thể sử dụng `thay vì". Sau đó, bạn có thể thay thế \ n bằng một dòng mới. (Các đánh dấu được sử dụng cho chuỗi mẫu, các chuỗi đó có thể có dòng mới ...) Ngoài ra, xin chúc mừng bạn đã đánh bại tôi!
Stefnotch

1
Tôi nghĩ rằng tôi sẽ để đầu ra một mình trừ khi người khác đánh bại tôi vì console.logdễ kiểm tra hơn. Dù sao, cảm ơn vì đã cho tôi thấy backticks!
xsot

Wohoo, vượt xa bạn! Ngoài ra, cảm ơn bạn đã sử dụng | | trong mã của bạn, nó chắc chắn có ích ... (Meh, bạn có thể thay đổi console.log, và chiến thắng của tôi sẽ giảm xuống không còn gì .. XD)
Stefnotch

1
Bạn đang chứng tỏ thách thức để theo kịp! Than ôi, sẽ rất thú vị khi thấy sự cố mã của bạn.
Adam Dally

1
@AdamDally Về cơ bản, mỗi câu được chia thành 3 phần với cấu trúc sau : %d bottle%s of beer%s%s. Chỉ số của mỗi câu (số chai) được tính như i/3|0trong khi chỉ số của mỗi chuỗi con chỉ đơn giản i%3.
xsot

7

Brainfuck, 743 byte

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

Hãy thử trực tuyến!

Ở trên sử dụng gói tế bào ở một vài nơi để lưu hướng dẫn. Tôi cũng đã thực hiện một phiên bản không gói trong 755 hướng dẫn .


Không nén

Sau đây là một đa âm trong Ngôn ngữ chú thích Brainfuck .

; byte sequence
; \n _ _ _ _ c \n comma space d t o l T G
++++++++++>>
--->++++>------>-->>++>+>>+>->++
[[>+++++++[>++>+>+<<<-]<-]+<+++]
>>>>>-->>-->>++>->+++[<]

c = 0
n = 100

>
while(n)
[
  n = n minus 1
  -<<
  N = str(n)
  ; first time \n _ becomes 9 9
  +[<->-----]<---[<[<]>[->]<]
  +<[>-]>[-<++++++++++<->>>]
  -[<->-----]<+++[<[<]>[+>]<]

  <->>>
  if(c)
  [
    >
    if(n)
    [
      'Take one down and'
      [>]<<<<.<<<<---.>>>-.<<<++++.<.>>>.-.<<.<.>-.>>+.<+++.>-.<<<.>---.>>.<<+++.
      ' pass it around' comma space
      <.>>>++.<<---.>----..<<.>>>>--.+++<<+.<<.>.>--.>-.<+++.->-.+<<+++.<<.>.<<<<-<
    ]>
    else
    [
      'Go to the store and'
      [>]<<<-.<<<.<<<.>>.>.<<<.>>.<++++.---.<.>>-.+.>.<--.<.<.>----.>>-.<<+++.
      ' buy some more' comma space
      <.>--.>+++.++++.<<.>>------.>+.--.<<+++.<.>>>.++.<-.++<.-<<.>.<<<<-
      N = '9'
      N
      <<<+++++++++.>>>
    ]
    <+>
  ]

  c = c plus 2
  <++

  while(c)
  [
    N
    <<[<]>[.>]>>>
    ' bottle'
    >>>.>--.>>.<..->>.<<<+++.<<<<
    if(n minus 1) 's'
    -[>>>>>.[<]]<[>]>+
    ' of beer'
    >>>.>>>.<<+.<.>----.+++..->-.++

    [<<]<-
    if(c minus 1)
    [
      ' on the wall'
      >>>>>.>>>.-.+<<<.>>.<++++.---.<.>>+++.---<----.+++>>>..[<<]
    ]

    <<[>]>-
    if(c minus 2)
    [
      period newline
      >>>>++.--<.<<<+
      if(c minus 1) newline
      [>>>.<<<<]>[>]<-<
    ]>>
    else
    [
      comma space
      >>.>.<<<<
    ]

    if(not n) c = c minus 2
    >[<<++>]

    c = c minus 1
    <[>]<-
  ]

  c = 1
  >+>
]

6

Python 2, 204 byte

n=198
while n:s="bottle%s of beer"%"s"[:n^2>1];print n%2*"GToa kteo  otnhee  dsotwonr ea nadn dp absusy  isto maer omuonrde,,  "[n>1::2]+`n/2or 99`,s,"on the wall"+[", %d %s."%(n/2,s),".\n"[:n]][n%2];n-=1

Thông số kỹ thuật khá chưa được xác định rõ về khoảng trắng, vì vậy ở đây tôi giả sử rằng dòng cuối cùng cần phải có một dòng mới duy nhất. Nếu thông số kỹ thuật làm rõ nếu không tôi sẽ cập nhật câu trả lời này.

Tôi khá hài lòng với điều này, nhưng nhìn vào golf vô chính phủ tôi cảm thấy như thế này có thể được đánh golf, có thể với một cách tiếp cận khác.


6

Mê cung , 1195 1190 932 byte

"{"9"
^ }
 ""
 <
 713.101.801..:611.111.89.23}!:({.23.44.001.011.711.111.411.79.23.611.501.23..:511.79.211.23.001.011.79.23.011.911.111.001.23.101.(.:111.23.101.701.79.48\.411..:101.89.23.201.111.23.511.101.801..:611.111.89.23}!:{.23.44..:801.79.911.23.101.401.611.23.(.:111.23.411..:101.89.23.201.111.23.511.101.801..:611.111.89.23}!:{
 _
 3`<
 _ ( 
""""
"
{(32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..46.\\49.32.98.111.116:..108.101.32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..44.32.49.32.98.111.116:..108.101.32.111.102.32.98.101:..114.46.\71.111.32.116.111.32.116.104.101.32.115:.).111.114.101.32.97.110.100.32.98.117.121.32.115.111.109.101.32.109.111.114.101.44.32.9!9!32.98.111.116:..108.101.115.32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..46.@
 )
 }
 <
 87\\.64..:801.79.911.23.101.401.611.23.(.:111.23.411..:101.89.23.201.111.23.511
 _
 3`<
 _ ( 
v"""

Điều này hơi quá ...

Mặc dù Labyrinth không đặc biệt tốt trong việc in chuỗi (vì bạn cần phải đẩy tất cả các mã ký tự), tôi nghĩ rằng có thể làm tốt hơn điều này bằng cách sử dụng nhiều dòng dài hơn nhưng ngắn hơn và thậm chí còn điên hơn với xoay lưới.

Vì tôi nghĩ rằng bất kỳ cải tiến chơi gôn nào cũng sẽ thay đổi đáng kể cấu trúc của mã này, tôi sẽ chờ một lời giải thích cho đến khi tôi không biết làm thế nào để chơi golf thêm nữa.


6

Con trăn 2, 195

i=198
while i:s=`i/2or 99`+' bottle%s of beer'%'s'[1<i<4:];print['%s, '+s+'.','Take one down and pass it around, %s.\n',"Go to the store and buy some more, %s."][i%2+1/i]%(s+' on the wall');i-=1

Lấy i/2ý tưởng từ câu trả lời của Sp3000 .


6

Batch Windows, 376 byte

Rất rất dài và xấu xí:

@echo off
setlocal enabledelayedexpansion
set B=bottles
set C=on the wall
set D=of beer
for /l %%* in (99,-1,1) do (
set A=%%*
if !A! EQU 1 set B=bottle
echo !A! !B! !D! !C!, !A! !B! !D!.
set /a A=!A!-1
if !A! EQU 1 set B=bottle
if !A! EQU 0 (
echo Go to the store and buy some more, 99 bottles !D! !C!.
) else (
echo Take one down and pass it around, !A! !B! !D! !C!.
echo.
))

5

Python, 254 byte

b,o,s,t="bottles of beer","on the wall","bottle of beer",".\nTake one down and pass it around,"
i=99;exec'print i,b,o+",",i,b+t,i-1,b,o+".\\n";i-=1;'*97
print"2",b,o+", 2",b+t+" 1",s,o+".\n\n1",s,o+", 1",s+".\nGo to the store, buy some more, 99",b,o+"."

Khá đơn giản, chỉ định một số cụm từ phổ biến nhất, in từng bit từ 99 đến 3, sau đó in các dòng cuối cùng bằng cách thêm các biến và một số chuỗi.


5

Julia, 227 215 213 byte

w=" on the wall"
b=" bottles"
o=" of beer"
k=b*o
for n=99:-1:1
println("$n$k$w, $n$k.
$(n>1?"Take one down and pass it around":"Go to the store and buy some more"), $(n>1?"$(n-1)$(k=b*"\b"^(n<3)*o)":"99$b"o)$w.
")end

Điều này sử dụng phép nội suy chuỗi ( "$variable") và ternaries để xây dựng đầu ra và in nó thành STDOUT.

Đã lưu 14 byte nhờ Glen O!


1
Thay vì (n>1?" bottles":" bottle")" of beer"sử dụng " bottle""s"^(n>1)*" of beer"- lưu ý rằng điều đó *là cần thiết sau (n<1)bởi vì nếu không nó sẽ cố gắng áp dụng (n>1)" of beer"như là sức mạnh. Ngoài ra, có bất kỳ lợi ích nào khi sử dụng while n>0hơn for n=99:-1:1(cho phép điều kiện ở cuối đơn giản hơn và tránh được nhu cầu riêng biệt n=99)?
Glen O

Đồng thời sử dụng các dòng mới thực tế thay thế \nvà chuyển phần giữa sang nội suy (thay vì ",n>1?...","sử dụng $(n>1?...")) để lưu một ký tự và di chuyển , bên trong điều kiện sang trước phần tiếp theo, vì vậy nó chỉ cần được viết một lần.
Glen O

Trên thực tế, đưa ra gợi ý về thời gian kết thúc - Tôi chỉ nhận ra rằng bạn phải trừ đi một số khi thực hiện số cuối cùng trong mỗi câu, vì vậy không có lợi ích ròng.
Glen O

@GlenO Cảm ơn như mọi khi vì những gợi ý tuyệt vời!
Alex A.

1
Tôi đã hy vọng có thể chỉ đề xuất một thay đổi - hơi ngớ ngẩn khi nó không cho phép tùy chọn đó nếu bạn có đủ đại diện để thực hiện chỉnh sửa mà không có sự chấp nhận của người trả lời ban đầu. Tôi xin lỗi nếu tôi đã làm bằng mọi cách bước lên ngón chân để làm điều đó. Tôi mới chuyển phần đánh giá của phần "chai <s> bia" sang phần cuối, vì vậy nó chỉ cần được thực hiện một lần và khởi tạo nó. Tôi cũng đã sử dụng một backspace thay vì một "s" có điều kiện để tiết kiệm một chút.
Glen O

5

JavaScript ES6, 214 byte

Chỉnh sửa: Đã xóa tất cả các mã trước đó, xem các chỉnh sửa nếu bạn muốn xem mã cũ hơn.

Cửa sổ bật lên có giới hạn:

p='.';o=" of beer";e=o+" on the wall";i=99;u=m=>i+" bottle"+(i==1?'':'s');while(i>0){alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, 99 bottles"+e)+p)}

Mở rộng:

p='.';
o=" of beer";
e=o+" on the wall";
i=99;
u=m=>i+" bottle"+(i==1?'':'s');
while(i>0){
    alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, 99 bottles"+e)+p)
}

@commenters: Cảm ơn ý tưởng về các hàm mũi tên, đã lưu 15 byte

Đối với bia vô hạn chỉ cần sử dụng mã này ở đây, 212 byte

p='.';o=" of beer";e=o+" on the wall";i=99;u=m=>i+" bottle"+(i==1?'':'s');while(i>0){alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, "+u(i=99)+e)+p)}

1
Tôi không thể lấy mã để chạy, bạn đang sử dụng trình duyệt / môi trường nào? "Cú pháp: thiếu; trước câu lệnh" Ngoài ra, hãy xem các hàm mũi tên!
Stefnotch

Mất một lúc để tìm lỗi cú pháp +o'khi nó được đổi thành +o+'. Cũng nhìn thấy cơ hội để thay đổi vòng lặp và câu trả lời. Sẽ kiểm tra các chức năng mũi tên ngay bây giờ :)
ŽaMan

1
232 byte cho giải pháp cuối cùng:b=a=>a+" bottle"+(1<a?"s":"");for(i=100;100>--i;)l="\n",p="."+l,o=" of beer",e=o+" on the wall",alert(l+b(i)+e+", "+b(i)+o+p+(1<i?"Take one down and pass it around, "+b(i-1)+e:"Go to the store and buy some more, "+b((i=100)-1)+e)+p)
Người dùng chung

Sau vài lần chơi xung quanh, tôi vẫn theo sát whilevòng lặp của mình và bây giờ tôi sẽ sớm đăng mã kết quả. Cảm ơn bạn đã xem xét mã! :)
ManaMan

5

CJam, 149 148 146 144 138 137 134 byte

00000000: 39 39 7b 5b 22 2c 2e 22 22 01 bd 8f 2d b4 49 b5 f5  99{[",.""...-.I..
00000011: 9d bd 21 e8 f2 72 27 df 4d 4f 22 7b 32 36 39 62 32  ..!..r'.MO"{269b2
00000022: 35 62 27 61 66 2b 27 6a 53 65 72 28 65 75 5c 2b 2a  5b'af+'jSer(eu\+*
00000033: 7d 3a 44 7e 4e 4e 32 24 32 3e 29 34 24 4a 3c 5c 4e  }:D~NN2$2>)4$J<\N
00000044: 5d 73 27 78 2f 39 39 40 2d 73 2a 7d 2f 27 73 2d 5d  ]s'x/99@-s*}/'s-]
00000055: 22 07 9c 4b a2 4e 15 d7 df d5 82 88 c9 d9 a7 ad 37  "..K.N..........7
00000066: 16 7e 76 22 44 33 35 2f 28 5d 22 41 90 1d b1 f3 69  .~v"D35/(]"A....i
00000077: ba 3d 05 45 81 50 af 07 e4 1b 38 f7 19 22 44        .=.E.P....8.."D

Các hexdump ở trên có thể được đảo ngược với xxd -r. Hãy thử trực tuyến trong trình thông dịch CJam .

Với chi phí là 9 byte bổ sung, với tổng số 143 byte , chúng ta có thể tránh các ký tự không thể in được:

99{[", X bottles of beer on the wall."NN2$2>)4$J<\N]s'X/99@-s*}/'s-]"Take one down and pass it around"*35/("Go to the store and buy some more"\

Làm thế nào nó hoạt động

99{         e# For each I in [0 ... 98]:
  [         e# 
    ",."    e#     Push that string.
    "…"     e#     Push a string.
    {       e#     Define a decoder function:
      269b  e#       Convert the string from base 269 to integer.
      25b   e#       Convert from integer to base 25.
      'af+  e#       Add 'a' to each base-25 digit.
      'jSer e#       Replace j's with spaces.
      (     e#       Shift the first character from the resulting string.
      eu    e#       Convert it to uppercase.
      \+    e#       Prepend it to the remaining string.
      *     e#       Join the string/array on the stack, using the 
            e#       generated string as delimiter.
    }:D~    e#     Name the function D and execute it.
            e#     This pushes ", x bottles of beer on the wall.".
    NN      e#     Push two linefeeds.
    2$      e#     Push a copy of the generated string.
    2>)     e#     Discard the first two characters and pop the dot.
    4$      e#     Push another copy of the generated string.
    J<      e#     Discard all but the first 19 characters.
            e#     This pushes ", x bottles of beer on the wall".
    \N      e#     Swap the string with the dot and push a linefeed.
  ]s        e#   Collect in an array and cast to string.
  'x/       e#   Split at occurrences of 'x'.
  99@-      e#   Rotate I on top of 99 and compute their difference.
  s*        e#   Cast to string and and join.
            e#   This replaces x's with 99-I.
}/          e#
's-         e# Remove all occurrences of 's' for the last generated string.
]           e# Wrap the entire stack in an array.
"…"D        e# Join the array with separator "Take one down and pass it around".
35/(        e# Split into chunks of length 35 and shift out the first.
            e# This shifts out ", 99 bottles of beer on the wall.\n\n".
]           e# Wrap the modified array and shifted out chunk in an array.
"…"D        e# Join the array with separator "Go to the store and buy some more".

Căn cứ 259 ? Hấp dẫn.
lirtosiast

Cơ sở 256 có lợi nhuận vận chuyển, không hoạt động với trình thông dịch trực tuyến. May mắn thay, cơ sở 259 không tạo ra các ký tự ngoài phạm vi ISO 8559-1.
Dennis

Tôi giả sử rằng CJam sẽ ngắn hơn ít nhất 2 byte so với GolfScript - gần như không đáng kể. Mặc dù vậy, không mong đợi 137!
primo

1
@primo Để công bằng, hầu hết các khoản tiết kiệm là từ chuyển đổi cơ sở. Đáng buồn thay, sử dụng basehai lần đã thêm 8 byte trong GolfScript ...
Dennis

5

C, 303 299 297 byte

#define B"%d bottle%s of beer"    
#define O" on the wall"
#define P printf(
#define V(n,m,S)q(n);P O);P", ");q(n);P S);q(m);P".\n");
*s[]={"","s"};q(n){P B,n,s[n>1]);}main(){for(int i=99;--i;){V(i+1,i,".\nTake one down and pass it around, ")P"\n");}V(1,99,".\nGo to the store and buy some more, ");}

Biên dịch với gcc -std=c99 -w.


1
Chơi gôn xuống tới 300 byte: ... for (int i = 99; - i;) {V (i + 1, i, "....
Glenn Randers-Pehrson

@ GlennRanders-Pehrson Cảm ơn. Tôi cũng đã loại bỏ ngắt dòng trước hàm main ().
firefrorefiddle

5

GolfScript, 143 byte

[99.{[', '\.' bottle''s of beer'@(:i!>' on the wall''.
'n].1>~;5$4<\'Take one down and pass it around'i}**'Go to the store and buy some more'](

Có thể vẫn còn chỗ để cải thiện. Đến gần với phiên bản cuối cùng, tôi nghĩ vậy.


3
Chỉ cần cải thiện bản ghi GolfScript anagol thêm 12 byte.
primo

5

Toán học, 238 226 222 222 byte

Đã lưu một vài byte nhờ Martin Büttner.

a={ToString@#," bottle",If[#<2,"","s"]," of beer"}&;b=a@#<>" on the wall"&;Echo[{b@n,", ",a@n,".
"}<>If[n<2,"Go to the store and buy some more, "<>b@99<>".","Take one down and pass it around, "<>b[n-1]<>".
"]]~Do~{n,99,1,-1}

5

Brainfuck, 4028 byte

Điều này khá gớm ghiếc. Rất nhiều sự trùng lặp và rất kém hiệu quả, vì vậy nó sẽ không giành được bất kỳ giải thưởng nào. Tuy nhiên, tôi đã bắt đầu nó, và đã quyết tâm hoàn thành nó.

Tôi có thể cố gắng và cải thiện điều này, nhưng có lẽ sẽ không, bởi vì thật lòng mà nói, bộ não của tôi bị đốn.

Chơi gôn

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

Ung dung

# SETUP COUNTERS
>>+++[-<+++<+++>>]
>>++++++[-<++++++++++<++++++++++>>]<---<--->>

# SETUP CONSTANTS
>+++++[-<++++++>]<++>
>++++++++++[-<++++++++++>]<-->        # B
>++++++++++[-<+++++++++++>]<+>        # O
>++++++++++[-<++++++++++>]<+>         # E
>++++++++++[-<++++++++++>]<++>        # F
>++++++++++[-<+++++++++++>]<++++++>   # T
>++++++++++[-<++++++++++>]<++++>      # H
>++++++++++[-<+++++++++++>]<-->       # L
>++++++++++[-<+++++++++++>]<++++>     # R
>++++++++++[-<+++++++++++>]<+++++>    # S
>++++++++++[-<+++++++++++>]           # N
>++++++++++[-<+++++++++++>]<+++++++++># W
>++++++++++[-<++++++++++>]<--->       # A
>+++++[-<++++++>]<++>                 # SPACE
>++++[-<++++++++++++>]<---->          # Comma
>++++[-<++++++++++++>]<-->            # Stop
++++++++++>                           # Newline
>++++++++++[-<+++++++++++>]<--->      # K
>++++++++++[-<++++++++++>]            # D
>++++++++++[-<+++++++++++>]<++>       # P
>++++++++++[-<++++++++++>]<+++++>     # I
>++++++++++[-<+++++++++++>]<+++++++   # U

# BACK TO START
<<<<<<<<<<<<<<<<<<<<<<<<<
[>
    [
        -> # Dec x0 counter
        .> # Print 0x char
        .> # Print x0 char
        .>
        .>.>>>..>>.<<<<.>>>>>>. # Bottles
        <<<<<<<<<.
        >>.>>.       # Of
        <<<<.
        >.>>..>>>>>. # Beer
        <<<<<<<<.
        >>.>>>>>>>>. # On
        >>>.
        <<<<<<<<.>.<<<. # The
        <<<.
        >>>>>>>>>>>.>.<<<<<.. # Wall
        >>>>>>>.     # Comma
        <.
        <<<<<<<<<<<<<<<.>.- # Counter with decrement
        >.
        >.>.>>>..>>.<<<<.>>>>>>. # Bottles
        <<<<<<<<<.
        >>.>>.       # Of
        <<<<.
        >.>>..>>>>>. # Beer
        >>>>>>>.     # Stop
        >.           # Newline
        <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
        <<<.
        >>.>>>>>>>>.<<<<<<<. # One
        <<<.
        >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
        >>>. 
        <.<<.>>>>>>>>.  # And
        <<<<<.
        >>>>>>.<<<<<<<.<<<..    # Pass
        >>>>.
        >>>>>>>.<<<<<<<<<<<<<<<. # It
        >>>>>>>>.
        <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
        <<<<. # Comma
        <.
        <<<<<<<<<<<<<<<.>. # 0x and x0
        >.
        >.>.>>>..>>.<<<<.>>>>>>. # Bottles
        <<<<<<<<<.
        >>.>>.  # Of
        <<<<.
        >.>>..>>>>>. # Beer
        <<<<<<<<.
        >>.>>>>>>>>. # On
        >>>.
        <<<<<<<<.>.<<<. # The
        <<<.
        >>>>>>>>>>>.>.<<<<<.. # Wall
        >>>>>>>>.    # Stop
        >..   # Newline x2
        <<<<<<<<<<<<<<<<<<<      # Reset loop
    ]
    <-
    >+++++++++
    >.>.
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>.     # Comma
    <.
    <<<<<<<<<<<<<<<.- # 0x with decrement
    >.+++++++++ # x0 with increment
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    >>>>>>>.     # Stop
    >.           # Newline
    <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
    <<<.
    >>.>>>>>>>>.<<<<<<<. # One
    <<<.
    >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
    >>>. 
    <.<<.>>>>>>>>.  # And
    <<<<<.
    >>>>>>.<<<<<<<.<<<..    # Pass
    >>>>.
    >>>>>>>.<<<<<<<<<<<<<<<. # It
    >>>>>>>>.
    <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
    <<<<. # Comma
    <.
    <<<<<<<<<<<<<<<.>. # Counter
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.  # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>>.    # Stop
    >..   # Newline x2
    <<<<<<<<<<<<<<<<<<<<      # Reset outer loop
]
>-- # Decrement counter to only count from 7
# Last 8 loop
[
    -> # Dec counter
    >. # Print x0 char    
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>.     # Comma
    <.
    <<<<<<<<<<<<<<.- # x with decrement
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.       # Of
    <<<<.
    >.>>..>>>>>. # Beer
    >>>>>>>.     # Stop
    >.           # Newline
    <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
    <<<.
    >>.>>>>>>>>.<<<<<<<. # One
    <<<.
    >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
    >>>. 
    <.<<.>>>>>>>>.  # And
    <<<<<.
    >>>>>>.<<<<<<<.<<<..    # Pass
    >>>>.
    >>>>>>>.<<<<<<<<<<<<<<<. # It
    >>>>>>>>.
    <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
    <<<<. # Comma
    <.
    <<<<<<<<<<<<<<. # Count
    >.
    >.>.>>>..>>.<<<<.>>>>>>. # Bottles
    <<<<<<<<<.
    >>.>>.  # Of
    <<<<.
    >.>>..>>>>>. # Beer
    <<<<<<<<.
    >>.>>>>>>>>. # On
    >>>.
    <<<<<<<<.>.<<<. # The
    <<<.
    >>>>>>>>>>>.>.<<<<<.. # Wall
    >>>>>>>>.    # Stop
    >..   # Newline x2
    <<<<<<<<<<<<<<<<<<<     # Reset loop
]
# Last but 1 exception
>>. # Counter
>.
>.>.>>>..>>.<<<<.>>>>>>. # Bottles
<<<<<<<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>.     # Comma
<.
<<<<<<<<<<<<<<.- # x with decrement
>.
>.>.>>>..>>.<<<<.>>>>>>. # Bottles
<<<<<<<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
>>>>>>>.     # Stop
>.           # Newline
<<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take
<<<.
>>.>>>>>>>>.<<<<<<<. # One
<<<.
>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down
>>>. 
<.<<.>>>>>>>>.  # And
<<<<<.
>>>>>>.<<<<<<<.<<<..    # Pass
>>>>.
>>>>>>>.<<<<<<<<<<<<<<<. # It
>>>>>>>>.
<.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around
<<<<. # Comma
<.
<<<<<<<<<<<<<<. # Count
>.
>.>.>>>..>>.<<<<. # Bottle
<<<.
>>.>>.  # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>>.    # Stop
>..   # Newline x2
# Last 1 exception
<<<<<<<<<<<<<<<<<. # Counter
>.
>.>.>>>..>>.<<<<. # Bottle
<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>.     # Comma
<.
<<<<<<<<<<<<<<.++++++++ # x with reset to 99
>.
>.>.>>>..>>.<<<<. # Bottle
<<<.
>>.>>.       # Of
<<<<.
>.>>..>>>>>. # Beer
>>>>>>>.     # Stop
>.           # Newline
>----        # Change K to G
>>+++++++++  # Change P to Y
>++++        # Change I to M
<<<.<<<<<<<<<<<<<<<. # Go
<<.
>>>>>.<<<.           # To
<<.
>>>>>.>.<<<.         # The
<<<.
>>>>>>>>>.<<<<.<<<.>>>>>>.<<<<<. # Store
<<<.
>>>>>>>>>>>>.<<.>>>>>>>>.       # And
<<<<<.
<<<<<<<<<<<<.>>>>>>>>>>>>>>>>>>>>.<<. # Buy
<<<<<<.
<<<<.<<<<<<<.>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<<. # Some
>>>>>>>>>>.
>>>>>>>.<<<<<<<<<<<<<<<<<<.>>>>>>.<<<<<. # More
>>>>>>>>>>>.
<.
<<<<<<<<<<<<<<..  # 99
>.
>.>.>>>..>>.<<<<.>>>>>>. # Bottles
<<<<<<<<<.
>>.>>.  # Of
<<<<.
>.>>..>>>>>. # Beer
<<<<<<<<.
>>.>>>>>>>>. # On
>>>.
<<<<<<<<.>.<<<. # The
<<<.
>>>>>>>>>>>.>.<<<<<.. # Wall
>>>>>>>>.    # Stop
>.   # Newline x2

Đầu ra:

Hãy thử nó ở đây!
OK, vì vậy có vẻ như URL quá dài để đưa vào đây, vì vậy bạn sẽ cần sao chép / dán để tự mình thử.

Tôi đã thử nó bằng cách sử dụng trình thông dịch này .


4

PHP, 251 byte

Điều này cho các vấn đề số nhiều / số ít.

<?php for($i=99;$i>0;$i--){$b=" of beer";$s=" bottles$b";$r=" bottle$b";$w=" on the wall";$h=$i-1;echo$h>=1?"$i$s$w, $i$s.\nTake one down and pass it around, $h".($h<2?$r:$s)."$w.\n\n":"$i$r$w, $i$r. \nGo to the store and buy some more, 99$s$w.\n\n";}

Có thể đọc được

for ($i=99; $i > 0; $i--) {
  $b = " of beer";
  $s = " bottles$b";
  $r = " bottle$b";
  $w = " on the wall";
  $h = $i - 1;
  echo $h >= 1 ? "$i$s$w, $i$s.\nTake one down and pass it around, $h" . ($h<2 ? $r : $s) . "$w.\n\n" : "$i$r$w, $i$r. \nGo to the store and buy some more, 99$s$w. \n\n";
}



4

Chùm , 1141 1109 byte

Tôi vẫn còn rất nhiều chỗ để chơi gôn hơn nữa với tất cả các khoảng trống, nhưng nó rất khó để theo dõi và phá vỡ khá dễ dàng :) Nó rất giống với câu hỏi mà tôi đã đăng cho câu hỏi này , ngoại trừ nó đi đến cửa hàng trước khi bia đạt 1 và các ô được sử dụng cho các tham số đã được dịch chuyển. Tôi cũng đã thay đổi bố cục đáng kể. Tôi sẽ thử và giải thích một khi tôi thử thêm một vài bố cục.

P'P''''>`++++++)++'''P>`+++++++++++++)'''''''''''P+++++++++++++`P```>`++\ v@@++++++++++L(`<@+p'''''''''PL<
v``P''(++++++`<P'''''''''(++++++++`<L```P'+++++P'+++P'++++++P'++++P''''(/> p++@---@``p@'''''p+++@`> `)''' 'p-@''p\
>''p:'p@'p@'\>n'   >`>`)'''p@''''p@\>n'''p@''''p@-@````p@'''''p@`>`)'''''/v  `P+p``@p'''(`<@-p''''''''P'+up(`<`@@/
^/``@@p'@p''/ >'''\ /-p'@p'@p``@p``/`>-'P''''''''p+@>`)''p`n`L++++++++++@S 'p@````p@````p@'''''p@`p@````p@'''''p@```p++@---@``p@'''''p-@+@`p@+++@``p-@``p@'p-@'''p-@```p++@`p@'p@''''p+@++++@`````p@'''''p-@`p@--@``p-@``p@''''p--@p@+++@``p-@''''p-@>`)'''p@'p+:`p@'p@'''p@'p@@``p@`p-@'''p-@`>`)'''p@''''p@``p@``p@'p@'p-@@'''p--@`>`)'''p@''''p@-@````p@'''''p@`>`)'''''p++@---@``p@'''''p+++@`>`)''''p-@''p@@'''p+@H
^\p@`p-@```p`//'''/ \@@'''p--@`>`)'p/``````@pS@++++++++++L`<vP+p`P-p`P-p`@ p'''(`<@-p''''@--p``@-p`@+p'@p`@--p''''@-p'@p`````@p'''@+++p''@p```\
^             \'p-@/v               \ p-@''p-@`p-@``p@''''p@ -@``p-@``p@'p ++@'''p@'p+++@`p-@````p@'p-@'''p-@```p++@`p@''''p+@```p-@''''p-@@``/
^                   <                                       <             <

Hãy thử nó trong đoạn trích stack ở đây


4

PHP, 250 246 244 233 228 byte

Tôi tin rằng đây là nhỏ nhất cho đến nay. Điều này dựa trên ảnh chụp 247, với một số sửa đổi để giảm thiểu hơn nữa.

Tối thiểu hóa

<?php $b=99;function x($n){return"$n bottle".($n-1?'s':'')." of beer";}$y=" on the wall";while($b){$c=x($b);echo"$c$y, $c.\n",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.\n\n";}

Mở rộng

<?php

$b=99;
function x($n){return"$n bottle".($n-1?'s':'')." of beer";}
$y=" on the wall";
while(b){
    $c=x($b);
    echo"$c$y, $c.\n",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.\n\n";
}

1
Vì bạn có thể chạy PHP từ dòng lệnh php -rtương đương perl -evà tương tự, có thể chấp nhận bỏ qua thẻ mở. Xem các cuộc thảo luận liên quan trong Chạy PHP -rthay vì các thẻ mã .
manatwork

À, cảm ơn @manatwork, tôi đoán tôi có thể lấy của tôi xuống thêm một chút nữa.
Phroggyy

while($b)hoạt động tốt như vậy.
frnhr

Có một dòng mới vào cuối mặc dù.
frnhr

Cảm ơn toàn bộ gợi ý! Tuy nhiên, dòng mới là bắt buộc, để có một dòng ở giữa các câu
Phroggyy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.