“ 99 ขวดเบียร์”


71

จงเขียนโปรแกรมที่ผลเนื้อเพลง 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.

กฎ:

  • โปรแกรมของคุณต้องเข้าสู่ STDOUT หรือทางเลือกที่ยอมรับได้หรือถูกส่งคืนจากฟังก์ชั่น (มีหรือไม่มีบรรทัดใหม่ต่อท้าย)
  • โปรแกรมของคุณจะต้องเป็นโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่รันได้
  • ภาษาที่เขียนขึ้นโดยเฉพาะเพื่อส่งคำตอบแบบ 0 ไบต์ต่อความท้าทายนี้ได้รับอนุญาตไม่น่าสนใจเป็นพิเศษ

    โปรดทราบว่าจะต้องมีล่ามเพื่อให้สามารถส่งการทดสอบได้ ได้รับอนุญาต (และสนับสนุนให้) เขียนล่ามนี้ด้วยตัวคุณเองสำหรับภาษาที่ยังไม่ได้ใช้งานมาก่อน

  • สิ่งนี้แตกต่างจากผลลัพธ์โดย HQ9 + หรือ 99 คำตอบที่เขียนในภาษาเหล่านี้จะถูกลบ

เนื่องจากนี่เป็นความท้าทายของแคตตาล็อกนี่ไม่ได้เกี่ยวกับการค้นหาภาษาด้วยวิธีแก้ปัญหาที่สั้นที่สุดสำหรับเรื่องนี้ ดังนั้นจะไม่มีการทำเครื่องหมายคำตอบว่าเป็นที่ยอมรับ

แค็ตตาล็อก

สแต็คส่วนย่อยที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการคำตอบสั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม

เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:

## Language Name, N bytes

ที่Nมีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในพาดหัวโดยการตีพวกเขาผ่าน ตัวอย่างเช่น

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

หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:

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

คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:

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


13
ใครก็ตามที่ปิดเรื่องนี้อีกอันคือการประกวดความนิยม ...
TheDoctor

21
นี่เป็นภารกิจย่อยของการสร้างล่ามกอล์ฟHQ9 +
Geobits

4
@ CᴏɴᴏʀO'Bʀɪᴇɴฉันยังไม่ได้ VTCd ยังตัดสินใจว่าฉันรู้สึกอย่างไร ทั้งสองวิธีฉันคิดว่าคำตอบ (หรือตัวอย่างจากพวกเขา) จากคำตอบอื่น ๆ สามารถคัดลอก / วางโดยตรงในขณะที่ยังคงแข่งขันซึ่งเป็นแบบทดสอบตามปกติสำหรับผู้ตกเป็นเหยื่อ
Geobits

13
โปรดทราบว่าควอตาตาได้ทำการแคตตาล็อก 99BB แล้วเมื่อหลายสัปดาห์ก่อนและวางแผนที่จะโพสต์
Alex A.

13
@GamrCorps โปรดอย่าเปลี่ยนกฎโดยไม่จำเป็นหลังจากการท้าทายได้เริ่มขึ้นแล้ว ไม่มีอักขระใดในเอาต์พุตที่ควรเป็นทางเลือก
feersum

คำตอบ:


43

C #, 285 298 289 ไบต์

(ความพยายามครั้งแรกของฉันที่การตีกอล์ฟรหัส ... )

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

นิด ๆ หน่อย ๆ ungolfed:

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
tip - ใช้ var แทน string :)
Belfield

2
2 ไบต์จากการแทนที่" bottle"ด้วยอาร์กิวเมนต์รูปแบบแม้ว่าฉันแน่ใจว่ามีวิธีที่ดีกว่าการมีขวด 3 ครั้งทำให้ฉันเจ็บตา ...
Sven Writes Code

4
b==1b<2สามารถถูกแทนที่ด้วย
LegionMammal978

2
คุณวนเขียนได้แบบนี้for(int b = 100; b--> 1;)
Yassin Hajaj

2
ถ้าอย่างนั้นเราก็ควรรอให้ผู้เขียนท้าทายตัดสินใจว่าจะอนุญาตให้ขึ้นบรรทัดใหม่หรือไม่
Florian Bach

31

รหัสเครื่อง Motorola MC14500B ขนาด 46612 ไบต์

สำหรับเหตุผลด้านความยาวฉันไม่สามารถโพสต์โปรแกรมได้ที่นี่ อย่างไรก็ตามสามารถพบได้ที่นี่เป็นเลขฐานสิบหกและที่นี่เป็นเลขฐานสอง (บุด้วย0s)


นี่เป็นโปรแกรมที่สั้นที่สุดในรหัสเครื่อง Motorola MC14500B ประกอบด้วยเพียง1000และ1001( 8และ9ตามลำดับ); หนึ่ง opcode สำหรับแต่ละบิตของเอาต์พุต

มันใช้โอเปอเรเตอร์ครึ่งไบต์ 93,224 และส่งออกเนื้อเพลงครั้งละหนึ่งบิต นี่เป็นวิธีการแสดงผลที่เป็นไปได้เท่านั้น

สำหรับผู้ที่สนใจผลลัพธ์จะไปที่ขา # 3 (จาก 16) ขา I / O


คำอธิบาย

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

0ลงทะเบียนเริ่มต้นที่


รหัสสิ่งละอันพันละน้อย

  • เลขฐานสิบหกเป็น 93,224 8และ9s ยาว

  • ไบนารีคือ 745792 1และ0s ยาว

  • ฉันใช้รหัส Python 2 ด้านล่างเพื่อสร้างรหัส อินพุต0สำหรับไบนารีและ1สำหรับเลขฐานสิบหก

    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
โปรดบอกฉันว่าคุณไม่ได้ไปและเขียนสิ่งนี้ทั้งหมดโดยไม่มีตัวสร้างสตริง ... : c
Addison Crump

1
ดูส่วน "Code Trivia" ใหม่: P @VoteToClose
Zach Gates

ลิงก์ใช้งานไม่ได้ :(
ETHproductions

ฉันจะซ่อมมันเมื่อฉันกลับบ้าน ขออภัยเกี่ยวกับเรื่องนั้น): @ETHproductions
Zach Gates

28

Vitsy, 0 ไบต์



อย่างจริงจังไม่ได้ไม่มีอะไรกับฉัน (@Mego ฉันขอโทษเหลือเกิน);)

ลองออนไลน์! (เพียงกด "Run")


7
o_o ฉันต้องการสิ่งที่น่าสนใจสำหรับ Simplex ที่จะทำในศูนย์ไบต์: P
Conor O'Brien

4
@ CᴏɴᴏʀO'Bʀɪᴇɴฉันคิดว่าคุณหมายถึง "ฉันต้องการสิ่งที่มีประโยชน์สำหรับ Simplex ที่จะทำในศูนย์ไบต์"
Martin Ender

3
@VoteToClose - มันทำงานอย่างไร ฉันไม่รู้จริง ๆ เลยว่าฉันไม่ใช่นักกอล์ฟ แต่ฉันสนุกกับการมาที่นี่และเห็นผู้คนและภาษาทำ แต่ฉันไม่เข้าใจสิ่งนี้ +1 เพราะดูน่าประทับใจ!
Jonnny

1
@Jonnny คลิกที่นี่เพื่อดูตัวจัดการไฟล์ของล่าม ตัวจัดการไฟล์จะเห็นว่าไฟล์นั้นมีศูนย์เป็นศูนย์และถ้าเป็นเช่นนั้นให้พิมพ์เนื้อเพลงออกมา c:
Addison Crump

1
@ จอนนี่ใช่ - มันเป็นงานที่กำลังดำเนินอยู่วันหนึ่งมันจะดีกว่าอย่างจริงจัง แต่ตอนนี้ ... เรารอ หากคุณต้องการภาษากอล์ฟที่ดีให้ดูคำตอบที่จริงจังมันมีบางสิ่งที่บ้าอยู่ในนั้น
Addison Crump

27

อย่างจริงจัง 1 ไบต์

N

หากสแต็คว่างเปล่า (ซึ่งเป็นตอนเริ่มต้น) Nดันเนื้อเพลง จากนั้นพวกเขาจะถูกพิมพ์โดยปริยายที่ EOF

ขอบคุณ @Mego สำหรับการแก้ไขล่ามอย่างจริงจัง


22
มาร์ตินกล่าวในการท้าทาย Hello World "> โปรดอย่าตอบคำตอบที่น่าเบื่อในภาษาที่มีกอล์ฟไม่มากนัก - สิ่งเหล่านี้ยังคงมีประโยชน์สำหรับคำถามนี้เนื่องจากพยายามรวบรวมแคตตาล็อกให้สมบูรณ์ที่สุด อย่างไรก็ตามให้ตอบคำถามเป็นหลักในภาษาที่ผู้เขียนต้องใช้ความพยายามในการตีกอล์ฟเป็นหลัก " คำตอบนี้ไม่น่าสนใจ แต่เป็นคำตอบที่ถูกต้องและสั้นที่สุด
lirtosiast

1
เมื่ออ่านคำถามฉันแทบรอไม่ไหวที่จะเห็นคุณโพสต์คำตอบที่จริงจัง แต่ดูเหมือนว่าฉันไม่ต้องรอ :)
Hexaholic

8
Seriusly ????????
Vajura

1
ฉันหวังว่าจะเห็นวิธีการแก้ปัญหาของคุณโดยไม่ต้องใช้N:)
Mego

1
ใช่ - ฉันมีสี่คะแนนลงและคำตอบของฉันถูกต้อง ฉันเห็นด้วยกับสิ่งที่กล่าวไว้ในความคิดเห็นด้านบนที่นี่
Addison Crump

19

JavaScript ES6, 230 218 198 196 192 188 185 ไบต์

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()+'.')

เพียงแค่ตัดแต่งไม่กี่ไบต์ในขณะที่ยังคงรักษาความสะอาดและเข้าใจได้

3 การแก้ไขล่าสุด:

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 ไบต์ด้วยการวางตัวแปรภายนอกการควบคุมลูป: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+".")
ผู้ใช้ทั่วไป

นั่นไม่ใช่สิ่งที่บันทึก 2 ไบต์ในรหัสของคุณ อันที่จริงมันเป็นการลบวงเล็บรอบ ๆ (--x <1) สำหรับตอนนี้ฉันจะปล่อยตัวแปรไว้ในคำสั่ง for เพื่อให้ง่ายต่อการอ่าน
Adam Dally

1
@Stefnotch หากคุณสงสัยฉันพบการแก้ไขนี้โดยการตรวจสอบการเรียกฟังก์ชั่นของฉัน ... แต่ฉันไม่คิดว่านี่เป็นความตั้งใจของคุณ คำแนะนำของคุณยังคงเป็นทางเลือกสุดท้าย
Adam Dally

1
@ Paŭlo Ebermann มันดำเนินการเตือนสำหรับแต่ละข้อ แต่คุณมีอิสระที่จะเปลี่ยนเป็น console.log เพื่อดำเนินการในคอนโซลซึ่งจะทำให้ 194 ไบต์ รวมทั้งการแจ้งเนื้อเพลงทั้งหมดในคราวเดียวไม่สามารถใช้งานได้ใน Firefox อย่างน้อย ... มันตัดทอนข้อ 5-10 ข้อที่ดี
Adam Dally

1
@Stefnotch ทีนี้ 1-x พิสูจน์แล้วว่ามีประโยชน์ในขณะนี้
Adam Dally

18

JavaScript ES6, 328 318 307 305 ไบต์

เป็นฟังก์ชั่นนิรนาม เพิ่มf=ที่จุดเริ่มต้นเพื่อสร้างฟังก์ชั่นและf()ดำเนินการ

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
น่าจะน่าสนใจมากกว่านี้ถ้ามันเป็นมากกว่าการต่อสตริงที่ยาวเพียงเส้น
Sp3000

9
ทำไม ASCII แบบสุ่มคัดลอกมาจากไซต์อื่น
feersum

7
โดยเฉพาะอย่างยิ่งเนื่องจากมันใช้งานไม่ได้มันเตือน:,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
ผู้ใช้ทั่วไป

14

C, 197 196 ไบต์

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

ฉันคิดว่าฉันใช้วิธีนี้ถึงขีด จำกัด แล้ว


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();}เพียงอย่างเดียวคือ 126 ไบต์ดังนั้นจึงแสดงถึงขอบเขตล่างที่ยากยกเว้นว่ามีบางคนค้นหาวิธีการบีบอัดหรือนำส่วนต่าง ๆ ของสตริงกลับมาใช้ใหม่โดยไม่มีค่าใช้จ่ายสูง ฉันสงสัยว่าคุณอาจถึงขีด จำกัด ของวิธีการทั่วไปแล้วบวกหรือลบไม่กี่ไบต์
เรย์

12

Java 304 301 300 295 Bytes

การโพสต์คำตอบเป็นครั้งแรก ฉันได้ยินว่าเราสามารถใช้ Enum ได้ แต่ไม่สามารถหาได้

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

Ungolfed

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

ขอขอบคุณที่quartata, J AtkinและBenjamin Urquhart


คุณสามารถบันทึก 2 ไบต์โดยใช้i<2ในสถานที่ของi==1และที่นี่:i>2 i!=2
J Atkin

@JAtkin ขอบคุณ สำหรับอันแรกมันก็โอเคเอาท์พุทยังคงเหมือนเดิม แต่สำหรับคนที่สองถ้าผมทำการเปลี่ยนแปลงบรรทัดสุดท้ายจะพิมพ์99 bottleและไม่ได้99 bottles
ยัส Hajaj

1
มันกลับกลายเป็นว่ามันดีสำหรับ java แต่มันใช้งานไม่ได้กับ groovy (213 vs 245 bytes)
J Atkin

1
ไม่จริง Groovy เป็นหนึ่งในภาษา JVM แอพพลิเคชั่นส่วนใหญ่โค้ด Groovy นั้นสั้นกว่าโค้ดจาวาที่ทำสิ่งเดียวกัน goovy-lang.org
J Atkin

1
@BenjaminUrquhart เยี่ยมมาก! แก้ไขมัน!
Yassin Hajaj

11

เทมเพลตถือว่าเป็นอันตราย 667 ไบต์

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

เรียงจากการขยาย:

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 ไบต์

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

ฟังก์ชั่นfส่งคืนสตริงพร้อมเนื้อเพลง


10

/// , 341 ไบต์

/-/\/\///+/ 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^.

จะต้องใช้เวลา 99 ปีในการเขียนคำอธิบายที่ถูกต้องของรหัสนี้

ฉันอาจจะรวมผลลัพธ์ของทุกสเตจ ...

โดยพื้นฐานแล้วจะบีบอัดเนื้อเพลงซ้ำ ๆ (ตามที่ทุกคำตอบใน/// )

ลองออนไลน์!

ในแต่ละขั้นตอนของการบีบอัด

เนื่องจากการแทนที่ตามด้วยการแทนที่จะมีสตริง//จึงจะปรากฏขึ้นบ่อยครั้ง

แต่ดูเหมือนว่ามันมักจะพอที่ฉันตัดสินใจที่จะบีบอัดเข้าไป//-

เมื่อสิ่งนี้ถูกแตกผลลัพธ์จะเป็นดังนี้:

/+/ 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^.

สตริง bottleปรากฏขึ้นสามครั้งเท่านั้น แต่ฉันบีบอัดไปยัง+:

/)/\/&\/<\/
//(/\/\/?\/ //>/ 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^.

จากนั้น)สอดคล้องกับ/&/</บรรทัดใหม่และ(สอดคล้องกับ//?/ ซึ่งเป็นรูปแบบที่จะใช้บ่อยในภายหลัง:

/>/ 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^.

ตอนนี้เราจะคลายการบีบอัดสตริงที่มีประโยชน์:

  • > คลายการบีบอัด bottles of beer
  • ^ คลายการบีบอัด bottles of beer on the wall
  • !ขยายไป^,ที่ซึ่ง^อยู่ด้านบน
  • $ขยายไป>.\nที่ซึ่ง>เป็นกฎแรกและขึ้น\nบรรทัดใหม่
  • @คลายการบีบอัด$ตามด้วยTake one down and pass it around,ซึ่ง$เป็นกฎด้านบน

รหัสที่คลายการบีบอัดจะกลายเป็น:

/*/?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

เป็นกลุ่ม 139 ไบต์

ที่บันทึกไว้ 6 ไบต์เนื่องจาก 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

นี้เป็นความพยายามครั้งแรกของฉันในการเล่นกอล์ฟเป็นกลุ่มคำสั่งแม้จะเห็นได้ชัดว่ามันเป็นที่นิยมมาก ฉันได้รวมขั้นสุดท้ายZZในการนับไบต์ (เขียนไปยังไฟล์และออก) เนื่องจากดูเหมือนว่าจะเป็นบรรทัดฐานที่ยอมรับได้

หมายเหตุด้านข้าง: ภารกิจสำเร็จแล้ว


คำอธิบาย

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
การปรับปรุงเล็กน้อย: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 ขอบคุณสำหรับสิ่งนั้น ผมมองข้ามอย่างใดอย่างสมบูรณ์และ/ ?
โม่

btw เป็นไปได้ที่จะไปถึง 153 บน anagol ด้วยการปรับปรุงนี้
xsot

@xsot ได้รับ;)
โม่

8

JavaScript ES6, 237 217 208 203 195 193 189 186 ไบต์

มันยากที่จะตีกอล์ฟ ...
แก้ไข 1:ใครบางคนแซงหน้าฉันอย่างสิ้นเชิงดูเหมือนว่าฉันต้องพยายามให้มากขึ้นถ้าฉันต้องการคำตอบ Javascript ที่ดีที่สุด
แก้ไข 2:ฉันไม่อยากเชื่อเลยว่าฉันจะตีกอล์ฟได้มากขนาดนั้น!

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+`.`)

ฉันทำผิดพลาดที่ไหนสักแห่ง? ฉันยังต้องขออภัยสำหรับการใช้ถ้าคุณต้องการที่จะทดสอบรหัสของฉันแทนที่ด้วยalertconsole.log

ปัจจุบันมีคนอื่น ๆ ที่น่าสังเกตคำตอบจาวาสคริ: "99 ขวดเบียร์" ลองดูสิ! : D


ฉันจะตรวจสอบเงื่อนไขของคุณอีกครั้งและคุณควรจะตัดออกไปสองสามไบต์ พยายามอย่างดี แต่!
Adam Dally

@AdamDally Ok !! : D แต่ฉันไม่ชอบคัดลอกเนื้อหาของคนอื่น ... (ฉันจะรู้สึกผิดถ้าฉันเพิ่งคัดลอกรหัสของคุณ ... แม้ว่ามันจะเป็น "ยอมรับ" ถ้าฉันพบการปรับปรุงบางอย่าง): D
Stefnotch

@AdamDally Yay ฉันยุ่งกับฟังก์ชั่นของฉันและฉันบันทึกได้ค่อนข้างไบต์! (เส้นที่ขีดเส้นใต้เริ่มยาวขึ้น
เรื่อย ๆ

ยอดเยี่ยม! หากไม่มีทางเลือกอื่นที่ฉันมองข้ามไปอย่างสมบูรณ์ฉันรู้สึกว่าเราทั้งคู่ใกล้จะถึงจุดจบ
Adam Dally

7

JavaScript ES6, 210 209 205 199 198 196 ไบต์

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)

นี่คือการแปลอย่างหยาบของการส่ง C ของฉัน ฉันไม่รู้จักจาวาสคริปต์จริงๆดังนั้นจึงมีที่ว่างสำหรับการปรับปรุงอย่างแน่นอน

แก้ไข: เรียบร้อยฉันค้นพบ backticks


คุณสามารถแทนที่console.logด้วยalertและคุณสามารถใช้ `แทน" จากนั้นคุณสามารถแทนที่ \ n ด้วยการขึ้นบรรทัดใหม่ (เห็บที่ใช้สำหรับสายแม่แบบสตริงเหล่านั้นสามารถมีการขึ้นบรรทัดใหม่ ... ) ขอแสดงความยินดีสำหรับการตีฉัน!
Stefnotch

1
ฉันคิดว่าฉันจะออกจากที่อยู่คนเดียวเว้นแต่คนอื่นจะตีฉันเป็นconsole.logเรื่องง่ายที่จะทดสอบ อย่างไรก็ตามขอขอบคุณที่เผยให้ฉันเห็นถึง backticks!
xsot

Wohoo เอาชนะพวกคุณไปแล้ว! นอกจากนี้ขอขอบคุณที่ใช้ | | ในรหัสของคุณมันแน่ใจว่ามีประโยชน์ ... (Meh คุณสามารถเปลี่ยนconsole.logและชัยชนะของฉันจะลดลงเพื่ออะไร .. XD)
Stefnotch

1
คุณกำลังพิสูจน์ความท้าทายเพื่อให้ทัน! อนึ่งมันน่าสนใจที่จะเห็นรายละเอียดของรหัสของคุณ
Adam Dally

1
@AdamDally โดยทั่วไปแต่ละบทกวีนี้แบ่งออกเป็น 3 %d bottle%s of beer%s%sส่วนที่มีโครงสร้างต่อไปนี้: ดัชนีของแต่ละบทกวี (จำนวนขวด) จะถูกคำนวณเป็นในขณะที่ดัชนีของแต่ละย่อยเป็นเพียงi/3|0 i%3
xsot

7

Brainfuck, 743 ไบต์

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

ลองออนไลน์!

ด้านบนใช้การห่อเซลล์ในไม่กี่ที่เพื่อบันทึกคำแนะนำ ผมได้ทำนอกจากนี้ยังมีรุ่นที่ไม่ใช่การตัดใน755 คำแนะนำ


ยังไม่ย่อ

ต่อไปนี้เป็นหลายภาษาใน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 ไบต์

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

สเป็คค่อนข้างต่ำกว่าในแง่ของช่องว่างดังนั้นที่นี่ฉันสมมติว่าบรรทัดสุดท้ายต้องมีบรรทัดใหม่ต่อท้ายเดียว หากข้อมูลจำเพาะชัดเจนมิฉะนั้นฉันจะอัปเดตคำตอบนี้

ฉันค่อนข้างมีความสุขกับสิ่งนี้ แต่การดูกอล์ฟแบบอนาธิปไตยฉันรู้สึกว่าสิ่งนี้สามารถเล่นกอล์ฟได้แม้อาจมีวิธีการที่แตกต่างออกไป


6

เขาวงกต , 1195 1190 932 ไบต์

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

นี่มันเกินไปนิดหน่อย ...

แม้ว่า Labyrinth จะไม่ดีเท่าสายอักขระการพิมพ์ (เพราะคุณต้องกดรหัสตัวอักษรทั้งหมด) แต่ฉันคิดว่ามันน่าจะดีกว่านี้ด้วยการใช้เส้นยาวมากขึ้น แต่สั้นลง

เนื่องจากฉันคิดว่าการปรับปรุงการเล่นกอล์ฟจะมีการเปลี่ยนแปลงโครงสร้างของรหัสนี้อย่างมากฉันจะรอด้วยคำอธิบายจนกว่าฉันจะออกจากแนวคิดที่จะตีกอล์ฟต่อไป


6

Python 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

เอาi/2ความคิดจากคำตอบของ SP3000


6

Windows รุ่นที่ 376 ไบต์

ยาวมากและน่าเกลียดมาก:

@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 ไบต์

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

ค่อนข้างตรงไปตรงมากำหนดวลีที่พบบ่อยที่สุดพิมพ์แต่ละบิตจาก 99 ถึง 3 จากนั้นพิมพ์บรรทัดสุดท้ายโดยการเพิ่มตัวแปรและสตริงเข้าด้วยกัน


5

Julia, 227 215 213 ไบต์

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

ใช้การแก้ไขสตริง ("$variable" ) และส่วนที่สามเพื่อสร้างเอาต์พุตและพิมพ์ไปที่ STDOUT

บันทึกแล้ว 14 ไบต์ขอบคุณ Glen O!


1
แทนที่จะ(n>1?" bottles":" bottle")" of beer"ใช้" bottle""s"^(n>1)*" of beer"- โปรดทราบว่า*สิ่งที่จำเป็นหลังจากนั้น(n<1)เพราะมิฉะนั้นจะพยายามใช้(n>1)" of beer"เป็นพลังงาน นอกจากนี้ยังมีประโยชน์ใด ๆ ในการใช้งานwhile n>0เกินfor n=99:-1:1(ซึ่งช่วยให้สภาพในตอนท้ายจะง่ายขึ้นและหลีกเลี่ยงความต้องการแยกต่างหากn=99)?
เกลน O

นอกจากนี้ใช้บรรทัดใหม่จริงแทนที่\nและสลับส่วนตรงกลางเป็นการแก้ไข (แทนที่จะ",n>1?...","ใช้$(n>1?...")) เพื่อบันทึกอักขระและย้ายส่วน, ที่มีเงื่อนไขไปไว้ก่อนส่วนถัดไปดังนั้นจึงต้องเขียนเพียงครั้งเดียวเท่านั้น
เกลน O

ที่จริงแล้วลองทำตามข้อเสนอแนะเมื่อเวลาผ่านไป - ฉันเพิ่งรู้ว่าคุณต้องลบมันออกเมื่อทำตัวเลขสุดท้ายในแต่ละข้อจึงไม่มีประโยชน์สุทธิ
เกลน O

@GlenO ขอบคุณเช่นเคยสำหรับคำแนะนำที่ดี!
Alex A.

1
ฉันหวังว่าจะสามารถแนะนำการเปลี่ยนแปลงได้ - มันค่อนข้างงี่เง่าที่จะไม่อนุญาตตัวเลือกนั้นถ้าคุณมีตัวแทนมากพอที่จะทำการแก้ไขได้โดยไม่ต้องยอมรับคำตอบเดิม ฉันขอโทษถ้าฉันทำนิ้วเท้าเพื่อทำมัน ฉันเพิ่งย้ายการประเมินของส่วน "ขวด <s> ของเบียร์" ไปยังจุดสิ้นสุดดังนั้นจึงจำเป็นต้องทำเพียงครั้งเดียวและเริ่มต้นใหม่ ฉันยังใช้ Backspace แทน "s" แบบมีเงื่อนไขเพื่อบันทึกสักเล็กน้อย
เกลน O

5

JavaScript ES6, 214 ไบต์

แก้ไข:ลบรหัสก่อนหน้าทั้งหมดดูการแก้ไขหากคุณต้องการดูรหัสเก่า

ป๊อปอัป จำกัด :

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

ขยาย:

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: ขอบคุณสำหรับแนวคิดของฟังก์ชั่นลูกศรบันทึก 15 ไบต์

สำหรับเบียร์ที่ไม่มีที่สิ้นสุดให้ใช้รหัสนี้ที่นี่ 212 ไบต์

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
ฉันไม่สามารถรับรหัสเพื่อทำงานคุณใช้เบราว์เซอร์ / สภาพแวดล้อมแบบใด "SyntaxError: หายไปก่อนคำสั่ง" นอกจากนี้ให้ดูที่ฟังก์ชั่นลูกศร!
Stefnotch

เอาฉันสักครู่เพื่อหาข้อผิดพลาดทางไวยากรณ์+o'ตามที่มันถูกเปลี่ยนไป+o+'แล้ว เห็นโอกาสในการเปลี่ยนลูปและคำตอบด้วย จะตรวจสอบฟังก์ชั่นลูกศรทันที :)
ManaMan

1
232 ไบต์สำหรับการแก้ปัญหาครั้งสุดท้าย: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)
ผู้ใช้ทั่วไป

หลังจากเล่นไปรอบ ๆ แล้วฉันก็เกาะติดwhileลูปของฉันและฉันก็จะโพสต์โค้ดผลลัพธ์ทันที ขอบคุณสำหรับรีวิวรหัส! :)
ŽaMan

5

CJam, 149 148 146 144 138 137 134 ไบต์

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

hexdump ด้านบนสามารถกลับด้านxxd -rได้ ลองออนไลน์ในล่าม CJamล่าม

ด้วยค่าใช้จ่ายเพิ่มเติม 9 ไบต์รวม143 ไบต์เราสามารถหลีกเลี่ยงอักขระที่ไม่สามารถพิมพ์ได้:

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

มันทำงานอย่างไร

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

ฐาน259 ? น่าสนใจ
lirtosiast

ฐาน 256 มีการคืนค่าขนส่งซึ่งไม่ทำงานกับล่ามออนไลน์ โชคดีที่ฐาน 259 ไม่สร้างตัวละครนอกช่วง ISO 8559-1
เดนนิส

ฉันคิดว่า CJam จะสั้นกว่า GolfScript อย่างน้อย 2 ไบต์เกือบจะเป็นเรื่องเล็กน้อย ไม่ได้คาดหวังว่า 137!
โม่

1
@primo เพื่อความเป็นธรรมการประหยัดส่วนใหญ่มาจากการแปลงฐาน น่าเศร้าที่ใช้baseแล้วสองครั้งเพิ่ม 8 ไบต์ใน GolfScript ...
เดนนิส

5

C, 303 299 297 ไบต์

#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, ");}

gcc -std=c99 -wคอมไพล์ด้วย


1
กอล์ฟลงถึง 300 ไบต์: ... สำหรับ (int i = 99; - i;) {V (i + 1, i, "....
Glenn Randers-Pehrson

@ GlennRanders-Pehrson ขอบคุณ ฉันยังลบ linebreak ก่อน main ()
firefrorefiddle

5

GolfScript, 143 ไบต์

[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'](

อาจยังคงมีห้องสำหรับการปรับปรุง ใกล้เคียงกับการแก้ไขครั้งสุดท้ายฉันคิดว่า


3
เพิ่งปรับปรุงระเบียน anagol GolfScript ทีละ 12 ไบต์
โม่

5

Mathematica, 238 226 222 224 ไบต์

บันทึกหลายไบต์ด้วย 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 ไบต์

นี่มันค่อนข้างน่าเกลียด การทำซ้ำจำนวนมากและไม่มีประสิทธิภาพมากดังนั้นจึงไม่ชนะรางวัลใด ๆ อย่างไรก็ตามฉันเริ่มมันและมุ่งมั่นที่จะทำให้เสร็จ

ฉันอาจลองและปรับปรุงสิ่งนี้ แต่อาจจะไม่เคยเป็นเพราะตรงไปตรงมาสมองของฉันระยำ

แข็งแรงเล่นกอล์ฟ

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

Ungolfed

# 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

เอาท์พุท:

ลองด้วยตัวเองที่นี่!
ตกลงดังนั้นดูเหมือนว่า URL จะยาวเกินไปที่จะรวมไว้ที่นี่ดังนั้นคุณจะต้องคัดลอก / วางเพื่อลองด้วยตัวเอง

ฉันทดสอบโดยใช้ล่ามนี้


4

PHP, 251 ไบต์

สิ่งนี้อธิบายถึงปัญหาพหูพจน์ / เอกพจน์

<?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";}

อ่านได้:

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

Beam , 1141 1109 ไบต์

ฉันยังคงมีพื้นที่มากมายในการเล่นกอล์ฟต่อไปด้วยพื้นที่ว่างเปล่าทั้งหมด แต่มันยากที่จะติดตามและหยุดพักได้อย่างง่ายดาย :) มันคล้ายกับที่ฉันโพสต์สำหรับคำถามนี้ยกเว้นไปที่ร้าน ก่อนที่เบียร์จะมีค่าถึง 1 และเซลล์ที่ใช้สำหรับพารามิเตอร์นั้นถูกเลื่อน ฉันยังเปลี่ยนเค้าโครงอย่างมาก ฉันจะลองทำคำอธิบายเมื่อฉันลองออกแบบเลย์เอาต์อีกสองสามครั้ง

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-@@``/
^                   <                                       <             <

ลองในตัวอย่างสแต็กที่นี่


4

PHP, 250 246 244 233 228 ไบต์

ฉันเชื่อว่านี่เล็กที่สุด นี่เป็นพื้นฐานจากการยิง 247 ครั้งด้วยการปรับเปลี่ยนบางอย่างเพื่อลดขนาดให้เล็กลง

ลดลง

<?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";}

ขยาย

<?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
ในขณะที่คุณสามารถเรียกใช้ PHP จากบรรทัดคำสั่งphp -rซึ่งเทียบเท่าperl -eและคล้ายกันเป็นที่ยอมรับได้ที่จะละเว้นแท็กเปิด ดูการอภิปรายที่เกี่ยวข้องในการเรียกใช้ PHP กับ-rแทนของแท็กรหัส
จัดการ

อ่าขอบคุณ @ manatwork ฉันคิดว่าฉันคงทำให้ฉันผิดหวังได้มากกว่านี้อีกแล้ว
Phroggyy

while($b)ทำงานได้เช่นกัน
frnhr

มีการขึ้นบรรทัดใหม่พิเศษในตอนท้ายว่า
frnhr

ขอบคุณสำหรับคำแนะนำทั้งหมด! ต้องขึ้นบรรทัดใหม่เพื่อให้มีบรรทัดคั่นระหว่างข้อ
Phroggyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.