“ 99 ฟองเดือด”


55

ท้าทาย

เขียนโปรแกรมที่ส่งออกเนื้อเพลงไปยัง 99 ขวดเบียร์แต่แทนที่จะเป็น "เบียร์" ให้เอาท์พุท "ฟอง" ถ้าจำนวนขวดบนผนังมีหลายเท่าของ 3, "กระซิบ" ถ้ามันเป็นผลคูณของ 5 และ "fizzbuzz" ถ้ามันเป็นทวีคูณของ 3 และทวีคูณของ 5 ถ้าจำนวนขวดบนผนังไม่ใช่หลายคูณ 3 หรือ 5 ให้เอาท์พุท "เบียร์" ตามปกติ

เนื้อร้องของเพลง

99 bottles of fizz on the wall, 99 bottles of fizz.
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 fizz on the wall.

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

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

....

3 bottles of fizz on the wall, 3 bottles of fizz.
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 fizz on the wall.


นี่คือดังนั้นการส่งสั้นที่สุดในแต่ละภาษาชนะ


30
ฉันมี 95 ฟองเดือด ฉันจะไปหนึ่ง ตอนนี้ฉันมีเบียร์ 94 ขวด ตรรกะ.
Okx

2
ฉันสามารถมีฟองซ่าเบอร์หนึ่งขวดได้ไหม
สตีเฟ่น

1
ควรจะมีการขึ้นบรรทัดใหม่หลังจากขวดที่ 3 หรือไม่?
Kritixi Lithos

2
จำเป็นต้องขึ้นบรรทัดใหม่ระหว่างสองบรรทัดหรือไม่ ก่อนที่การแก้ไขของ Kritixi Lithos จะไม่มีเลยและตอนนี้ก็มี
dzaima

11
@Okx อืมเบียร์เป็นฟองและให้เสียงกระหึ่มแก่คุณ ...
Draco18s

คำตอบ:


12

Python 2 , 263 253 245 ไบต์

i=99
x=''
while i:x+=', %s on the wall.\n\n%s on the wall, %s.\n'%(('%d bottle%s of %s'%(i,'s'*(i>1),(i%3<1)*'fizz'+(i%5<1)*'buzz'or'beer'),)*3)+'GToa kteo  otnhee  dsotwonr ea nadn dp absusy  isto maer omuonrde'[i>1::2];i-=1
print x[35:]+x[:33]

ลองออนไลน์!


นี่มันเจ๋งมาก! คุณช่วยอธิบายได้ไหมว่าทำไมการสอดแทรกสตริงจึงเป็นตัวเลือกที่สั้นที่สุด?
musicman523

2
ตัวอย่างเช่น['ab','cd'][x]สามารถเขียนใหม่เป็น'acbd'[x::2]เพียงเพื่อบันทึกไบต์
Rod

7

C (GCC), 276 274 ไบต์

ขอบคุณNeilสำหรับการบันทึกสองไบต์!

#define w" on the wall"
#define c(i)printf("%d bottle%s of %s",i,"s"+!~-i,i%3?i%5?"beer":"buzz":i%5?"fizz":"fizzbuzz"),printf(
i;f(){for(i=99;i;c((i?:99))w".\n\n"))c(i)w", "),c(i)".\n"),printf(--i?"Take one down and pass it around, ":"Go to the store and buy some more, ");}

ใครไม่ชอบวงเล็บที่ไม่มีใครเทียบได้ในการขยายแมโคร

Ungolfed:

#define c(i)                               \
    printf(                                \
        "%d bottle%s of %s",               \
        i,                   /* Number  */ \
        i-1 ? "s" : "",      /* Plural  */ \
        i % 3                /* FizzBuzz*/ \
            ? i % 5                        \
                ? "beer"                   \
                : "buzz"                   \
            : i % 5                        \
                ? "fizz"                   \
                : "fizzbuzz"               \
    )

i;
f() {
    for(i = 99; i; ) {
        c(i); printf(" on the wall, ");
        c(i); printf(".\n");
        printf(
            --i
                ? "Take one down and pass it around, "
                : "Go to the store and buy some more, "
        );

        // This has been stuffed into the for increment
        c((i?:99)); printf(" on the wall.\n\n");
    }
}

เห็นมันอาศัยอยู่บน Coliru!

รุ่นสำรอง (276 ไบต์)

#define c(i)printf("%d bottle%s of %s",i,i-1?"s":"",i%3?i%5?"beer":"buzz":i%5?"fizz":"fizzbuzz"),printf(
i,*w=" on the wall";f(){for(i=99;i;c((i?:99))"%s.\n\n",w))c(i)"%s, ",w),c(i)".\n"),printf(--i?"Take one down and pass it around, ":"Go to the store and buy some more, ");}

นี่สุดยอดมาก! ฉันตกใจเสมอกับคำตอบที่ดีของ C กับการจัดการสตริง
musicman523

บันทึกไม่กี่ไบต์โดยการเปลี่ยนไป#define w" on the wall" *w=" on the wall"
MD XF

@MDXF mmh ฉันได้จำนวนไบต์เท่ากันทั้งหมด ฉันพลาดอะไรไปรึเปล่า?
เควนติน

ฉันคิดว่าพวกเขาหมายถึงคุณสามารถแทนที่#define wด้วย*w=เพื่อบันทึกไบต์ที่นั่น จริงๆแล้วฉันไม่ใช่ทุกคนที่คุ้นเคยกับการเล่นกอล์ฟ C แต่ฉันเดาว่ามันจะทำให้wchar * ที่กำหนดโดยปริยาย
musicman523

4
@ musicman523 ปัญหาคือว่า#defined wเป็นตัวอักษรสตริงซึ่งวางโดยอัตโนมัติด้วยตัวอักษรสตริงที่อยู่ติดกัน ถ้าเป็นตัวแปรที่ผมต้องใช้การจัดรูปแบบสตริงที่เกิดขึ้นจริงภายในw printf
Quentin

6

Röda , 273 ไบต์

f{a=`bottle`f=` on the wall`g=`99 ${a}s of fizz`;[`$g$f, $g.
`];seq 98,1|{|b|d=`s`d=``if[b=1];c=``c=`fizz`if[b%3=0];c.=`buzz`if[b%5=0];c=`beer`if[c=``];e=`$b $a$d of $c`;[`Take one down and pass it around, $e$f.

$e$f, $e.
`]}_;[`Go to the store and buy some more, $g$f.`]}

ลองออนไลน์!

จะตีกอล์ฟต่อในตอนเช้า


6

PHP, 242 ไบต์

function f($k){return"$k bottle".(s[$k<2])." of ".([fizz][$k%3].[buzz][$k%5]?:beer);}$w=" on the wall";for($b=f($c=99);$c;)echo"$b$w, $b.
",--$c?"Take one down and pass it around":"Go to the store and buy some more",", ",$b=f($c?:99),"$w.

";

ลองออนไลน์!

PHP, 244 ไบต์

for($e=s,$b=fizz,$c=99;$c;)echo strtr("301245, 30124.
6, 708295.

",[" bottle",$e," of ",$c,$b," on the wall",--$c?"Take one down and pass it around":"Go to the store and buy some more",$k=$c?:99,$e=s[2>$k],$b=[fizz][$k%3].[buzz][$k%5]?:beer]);

ลองออนไลน์!

ใช้ฟังก์ชั่นstrtr

PHP, 245 ไบต์

$f=function($k)use(&$b){$b="$k bottle".(s[$k<2])." of ".([fizz][$k%3].[buzz][$k%5]?:beer);};for($w=" on the wall",$f($c=99);$c;)echo"$b$w, $b.
",--$c?"Take one down and pass it around":"Go to the store and buy some more",", {$f($c?:99)}$b$w.

";

ลองออนไลน์!

ใช้ฟังก์ชั่นไม่ระบุชื่อในสตริงที่จะได้รับการค้ำยันขึ้นอยู่กับจำนวนเต็ม

ขยาย

$f=function($k)use(&$b){$b="$k bottle".(s[$k<2])." of ".([fizz][$k%3].[buzz][$k%5]?:beer);};
for($w=" on the wall",$f($c=99);$c;)
echo"$b$w, $b.
",--$c?"Take one down and pass it around":"Go to the store and buy some more"
,", {$f($c?:99)}$b$w.

";

1
ถ้าฉันไม่ได้คาดผิดคุณสามารถบันทึก 2 ไบต์ ( 250 ไบต์function x($n){return"$n bottle".($n-1?s:'')." of ".(($n%3?'':fizz).($n%5?'':buzz)?:beer);}$y=" on the wall";for($b=99;$b;){$c=x($b);echo"$c$y, $c.↵",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.↵↵";}ในรวม): :)
insertusername ที่นี่

1
@insertusername ที่นี่คุณมีความผิดพลาดกับการเปลี่ยนแปลงเล็กน้อยจะช่วยประหยัด 2 ไบต์ขึ้นไป ขอขอบคุณ. และคุณมีความคิดเล็กน้อยที่จะใช้useร่วมกับฟังก์ชั่นที่ไม่ระบุชื่อซึ่งช่วยประหยัด 1 ไบต์ในรุ่นนี้
JörgHülsermann

5

05AB1E , 151 146 143 ไบต์

99LRv'¬ž“fizzÒÖ“#y35SÖÏJ‚˜1(è©y“ƒ¶€µ„‹€ƒî倕…¡, ÿÏꀂ ÿ€‰€€íÒ.“ªõ®y“ÿÏꀂ ÿ€‰€€íÒ, “D#4£ðýs…ÿÿ.}‚‚˜'Ïê'±¥:`)¦¦¬#7£ðý¨“‚œ€„€€ƒï€ƒ‚¥€ä€£, ÿ.“ª)˜»

ลองออนไลน์!


4

SOGL , 136 135 134 133 131 ไบต์

Ƨ, o▓k
"πFT+╔¡‘oW
³³q"'bμ⁸‘oH? so}5\;3\«+"ΞQv↑χāσκN⌡κYT¡‘_,S─‘oθwoX▓
MH∫}¹±{▓WkƧ.¶oH¡"sΗ─χpēGķ¶¾3Ζ^9f.⅟▒E┌Fρ_╬a→‘KΘw⁽oXH‽M}HkW">⁸‘p

ก่อนอื่นฟังก์ชั่นที่ 3:

                                    ▓  name this "▓" (example input: 15)                          [15]
³³                                     Create 4 extra copies of the top thing (number of things)  [15, 15, 15, 15, 15]
  q                                    output without popping one of them                         [15, 15, 15, 15, 15]
   "...‘o                              output " bottle"                                           [15, 15, 15, 15, 15]
         H?   }                        if pop-1 [isn't 0]                                         [15, 15, 15, 15]
            so                           output "s"                                               [15, 15, 15, 15]
               5\                      push if POP divides by 5                                   [15, 15, 15, 1]
                 ;                     swap [if divides & another number copy]                    [15, 15, 1, 15]
                  3\«                  push if POP divides by 3, multiplied by 2                  [15, 15, 1, 2]
                     +                 add those together                                         [15, 15, 3]
                      "...‘            push "buzz fizz fizzbuzz beer"                             [15, 15, 3, "buzz fizz fizzbuzz beer"]
                           ...‘o       output " of " (done over here to save a byte for a quote)  [15, 15, 3, "buzz fizz fizzbuzz beer"]
                                θ      split ["buzz fizz fizzbuzz beer"] on spaces                [15, 15, 3, ["buzz","fizz","fizzbuzz","beer"]]
                                 w     get the index (1-indexed, wrapping)                        [15, 15, ["buzz","fizz","fizzbuzz","beer"], "fizzbuzz"]
                                  o    output that string                                         [15, 15, ["buzz","fizz","fizzbuzz","beer"]]
                                   X   pop the array off of the stack                             [15, 15]

ฟังก์ชั่นแรก:

Ƨ, o▓k
     k  name this "function" "k"
Ƨ, o    output ", "
    ▓   execute the "bottleify" function

ฟังก์ชั่นที่สอง:

"πFT+╔¡‘oW
         W  call this "W"
"πFT+╔¡‘    push " on the wall"
        o   output it

และส่วนหลัก:

MH∫}                                     repeat 99 times, each time pushing index
    ¹                                    wrap in an array
     ±                                   reverse it
      {                                  iterate over it
       ▓                                 execute that function
        W                                execute that function
         k                               execute that function
          Ƨ.¶o                           output ".\n"
              H¡                         push if POP-1 isn't 0 (aka 1 if pop <> 1, 0 if pop == 1)
                "...‘                    push "Stake one down and pass it aroundSgo to the store and buy some more"
                     K                   push the first letter of that string
                      Θ                  split ["take one down and pass it aroundSgo to the store and buy some more" with "S"]
                       w                 gets the xth (1-indexed, wrapping) item of that array
                        ⁽o               uppercase the 1st letter and output
                          X              pop the array off
                           H‽            if pop-1 [isn't 0]
                             M           push 100
                              }          ENDIF
                               H         decrease POP
                                k        execute that function
                                 W       execute that function
                                  ">⁸‘p  output ".\n\n"

แพ้สองสามไบต์เนื่องจากข้อผิดพลาดที่Oทำให้ขึ้นบรรทัดใหม่ก่อนและหลัง (และสิ่งนี้กลับไปที่ V0.9 (นี่คือรหัส V0.11))


4

Java, 344 340 339 ไบต์

(-4 ไบต์หลังจากเล่นกอล์ฟ fizzbuzz; -1 ไบต์ลบพื้นที่ว่างออกไป)

interface X{static void main(String[]a){for(int i=99;i>0;System.out.printf("%s on the wall, %s.%n%s, %s on the wall.%n%n",b(i),b(i--),i<1?"Go to the store and buy some more":"Take one down and pass it around",b(i<1?99:i)));}static String b(int i){return i+" bottle"+(i>1?"s":"")+" of "+(i%3<1?"fizz":"")+(i%5<1?"buzz":i%3<1?"":"beer");}}

ungolfed เล็กน้อย (ใช้การเยื้องพื้นที่ 1 รายการเพื่อกำจัดการเลื่อนในแนวนอน):

interface X {
 static void main(String[]a){
  for(int i=99;i>0;System.out.printf("%s on the wall, %s.%n%s, %s on the wall.%n%n",
   b(i),b(i--),
   i<1?"Go to the store and buy some more":"Take one down and pass it around",
   b(i<1?99:i)));
 }
 static String b(int i){
  return i+" bottle"+(i>1?"s":"")+" of "+(i%3<1?"fizz":"")+(i%5<1?"buzz":i%3<1?"":"beer");
 }
}

4

JavaScript (ES6), 316 309 ไบต์

นี่เป็นโปรแกรมเต็มรูปแบบแทนที่จะเป็นฟังก์ชั่น ไม่มีอะไรที่สร้างสรรค์มากมันเป็นเพียงแนวทางไร้เดียงสา (ดังนั้น bytecount!) ฉันใช้console.log()แทนalert()เพราะเบราว์เซอร์จำนวนมากมีการ จำกัด alert()จำนวนของตัวอักษรที่สามารถแสดงผลได้โดยใช้ โปรดทราบว่าช่องว่างและบรรทัดใหม่ทั้งหมดเป็นสิ่งจำเป็น

a="";for(i=99;i>0;i--){b=j=>"bottle"+(j>1?"s":"");d=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer");w=" on the wall";o=" of ";a+=`${i+" "+b(i)+o+d(i)+w+", "+i+" "+b(i)+o+d(i)}.
${i>1?"Take one down and pass it around, ":"Go to the store and buy some more, "}${(y=i-1?i-1:99)+" "+b(y)+o+d(y)+w}.

`;}console.log(a)

Ungolfed:

let accumulator = "";
for(let i = 99; i>0; i--){
    let bottleString = j => "bottle"+(j>1?"s":""),
    drink = a =>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer",
    wallString = " on the wall",
    of=" of ";
    accumulator += `${i+" "+bottleString(i)+of+drink(i)+wallString+", "+i+" "+bottleString(i)+of+drink(i)}.
${i>1?"Take one down and pass it around, ":"Go to the store and buy some more, "}${(y=i-1?i-1:99)+" "+bottleString(y)+of+drink(y)+wallString}.

`;
}

console.log(accumulator);

นี่คือตัวอย่าง:

a="";for(i=99;i>0;i--){b=j=>"bottle"+(j>1?"s":"");d=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer";w=" on the wall";o=" of ";a+=`${i+" "+b(i)+o+d(i)+w+", "+i+" "+b(i)+o+d(i)}.
${i>1?"Take one down and pass it around, ":"Go to the store and buy some more, "}${(y=i-1?i-1:99)+" "+b(y)+o+d(y)+w}.

`;}console.log(a)

BTW พร้อมคำตอบนี้ฉันได้รับเหรียญทองแดงใน ! ไม่เคยคิดว่าฉันจะทำสิ่งนี้ให้สำเร็จตลอดไป (ไม่ใช่ว่ามันจะเป็นความสำเร็จครั้งใหญ่)!


คุณdฟังก์ชั่นไม่จำเป็นต้องมี()เพราะ?:เป็นขวาเชื่อมโยง d=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer"แต่คุณจริงสามารถประหยัดไบต์มากยิ่งขึ้นโดยใช้
Neil

3

เรติน่า 230 ไบต์


99$*_
_\B
Take one down and pass it around, $.'#.¶¶$.'#, $.'.¶
^
99#, 99.¶
_
Go to the store and buy some more, 99#.
#
 on the wall
1\b|(\d+)
$& bottle$#1$*s of $&$*_
\b(_{15})+\b
fizzbuzz
\b(_{5})+\b
buzz
\b(___)+\b
fizz
_+
beer

ลองออนไลน์! คำอธิบาย:


99$*_

แทรก 99 _s

_\B
Take one down and pass it around, $.'#.¶¶$.'#, $.'.¶

เปลี่ยนทั้งหมดยกเว้น_สตริงล่าสุดTake one down and pass it around, $.'#.¶¶$.'#, $.'.¶โดยที่เป็นบรรทัดใหม่และ$.'เป็นจำนวนของขีดล่างที่เหลืออยู่ สิ่งนี้นับได้อย่างมีประสิทธิภาพตั้งแต่ 98 ถึง 1

^
99#, 99.¶

เพิ่มบรรทัดแรกของข้อแรกในรูปแบบ "กะทัดรัด"

_
Go to the store and buy some more, 99#.

เพิ่มบรรทัดที่สองของข้อสุดท้าย ทำไมฉันต้องกระโดดข้ามห่วงเพื่อใช้_ฉันไม่รู้ แต่$ดูเหมือนจะจับคู่สองครั้งดังนั้นฉันจึงไม่สามารถใช้สิ่งนั้นได้ ไปคิด

#
 on the wall

แทนที่สตริงซึ่งปรากฏขึ้นหลายครั้งในข้อ

1\b|(\d+)
$& bottle$#1$*s of $&$*_

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

\b(_{15})+\b
fizzbuzz
\b(_{5})+\b
buzz
\b(___)+\b
fizz
_+
beer

แทนที่ทวีคูณที่แน่นอนด้วยเครื่องดื่มที่เหมาะสม


2

sed , 468 459 456 ไบต์

s:^:99 bottles of fizz on the wall, 99 bottles of fizz.:
p
s:99:I8:g
s:fizz:XYYZ:g
x
s:^:Take one down and pass it around, I8 bottles of XYYZ on the wall.\n:
G
x
:
g
s:XXX:fizz:g
s:Y{5}:buzz:g
s:\bX*Y*Z:beer:g
s:[XYZ]::g
y:ABCDEFGHI:123456789:
s:\b0::g
/ 1 /bq
p
x
s:^::
tc
:c
s:(\S)0:\1@:g
Td
y:ABCDEFGHI:0ABCDEFGH:
:d
y:123456789@:0123456789:
s:(XXX)*(Y{5})*(Y*Z):XY\3:g
x
b
:q
s:es:e:g
aGo to the store and buy some more, 99 bottles of fizz on the wall.

ลองออนไลน์!

ต้องใช้-rธง

คำอธิบาย

พื้นที่ถือถือรูปแบบของทั้งสองสายการทำซ้ำโดยมีตัวเลขที่แสดงเป็น[A-I][0-9](ตัวเลขแยกต่างหากสำหรับการนับและคน) และชนิดของเครื่องดื่มที่เป็นตัวแทนในฐานะX*Y*Zที่Xติดตาม-N mod 3และของY-N mod 5

ในการวนซ้ำตามมาแต่ละครั้งตัวเลขจะลดลงและXs และYs จะได้รับการอัพเดต จากนั้นพักพื้นที่จะถูกคัดลอกไปยังพื้นที่รูปแบบเปลี่ยนเป็นเส้นของเพลงและพิมพ์


2

C, 349 345 344 ไบต์

#define b(x)x^1?" bottles":" bottle"
#define g i-1?"Take one down and pass it around":"Go to the store and buy some more"
*w=" on the wall";*s(x){return x?x%15?x%5?x%3?"beer":"fizz":"buzz":"fizzbuzz":"fizz";}i=100;main(){while(--i){printf("%d%s of %s%s, %d%s of %s.\n%s, %d%s of %s%s.\n",i,b(i),s(i),w,i,b(i),s(i),g,i-1?i-1:99,b(i-1),s(i-1),w);}}

เอาล่ะคุณไป ใช้เวลาหนึ่งชั่วโมง

ลองออนไลน์!


2

Javascript (ES6), 236 234 233 232 ไบต์

for(i=99;i;console.log(z()+`, ${z(_)}.
${--i?'Take one down and pass it around':'Go to the store and buy some more'}, ${z()}.

`))z=(o=' on the wall',j=i||99)=>j+` bottle${j>1?'s':_} of `+((j%3?_:'fizz')+(j%5?_='':'buzz')||'beer')+o

การสาธิต

// replace console.log to avoid 50-log limit in snippets:
console.log=_=>document.write(`<pre>${_}</pre>`)

for(i=99;i;console.log(z()+`, ${z(_)}.
${--i?'Take one down and pass it around':'Go to the store and buy some more'}, ${z()}.

`))z=(o=' on the wall',j=i||99)=>j+` bottle${j>1?'s':_} of `+((j%3?_:'fizz')+(j%5?_='':'buzz')||'beer')+o

Ungolfed

i = 99  // start counter at 99

z = (   // define function z which takes arguments with defaults:
   o = ' on the wall', // o = defaults to ' on the wall'
   j = i || 99         // j = defaults to value of counter i - or 99 when i == 0
) => 
    j +                 // our current j counter
    ' bottle' +
    (j > 1 ? 's' : _) + // choose 's' when we have more than 1 bottle, or blank _
    (
        (j % 3 ? _ : 'fizz') +      // if j % 3 is 0, add 'fizz', otherwise blank _
        (j % 5 ? _ = '' : 'buzz')   // if j % 5 is 0, add 'buzz', otherwise blank _
                                    // _ gets defined here since it's the first place it's used
            ||                      // if no fizz or buzz, result is a falsey empty string
        'beer'                      // replace falsey value with 'beer'
    ) +
    o                               // append o

while (i) {         // while counter is non-zero
    console.log(    // output string:
        z() +       // call z without o argument
        ', ' +
        z(_) +      // call z with blank _ for o to block ' on the wall' here
        '.\n' +
        ( --i       // decrement i, if still non-zero:
            ? 'Take one down and pass it around'
                    // otherwise:
            : 'Go to the store and buy some more'
        ) + 
        ', ' +
        z() +       // another call to z without o
        '.\n\n'
    )
}


1

shortC , 314 312 ไบต์

Db(x)x^1?" bottles":" bottle"
Dg i-1?"Take one down and pass it around":"Go to the store and buy some more"
*w=" on the wall";*s(x){Tx?x%15?x%5?x%3?"beer":"fizz":"buzz":"fizzbuzz":"fizz";}i=100;AW--i){R"%d%s of %s%s, %d%s of %s.\n%s, %d%s of %s%s.\n",i,b(i),s(i),w,i,b(i),s(i),g,i-1?i-1:99,b(i-1),s(i-1),w

ขออภัยไม่มีคำอธิบาย แต่ฉันลืมวิธีการทำงานอย่างสมบูรณ์


คุณควรพิจารณาเพิ่มคำตอบอื่นใน shortC ที่ตามตรรกะของคำตอบนี้เพื่อดูว่ามันเป็นอย่างไร ดูเหมือนว่าทั้งคำตอบของคุณคุณใช้มาโครสำหรับ g เพียงครั้งเดียวคุณควรจะสามารถอินไลน์และบันทึกได้สองสามไบต์
musicman523

คุณสามารถโพสต์เวอร์ชันที่ขยายได้หรือไม่
CalculatorFeline

@CalculatorFeline รหัส C ที่เทียบเท่ากันอยู่ที่นี่แล้วถ้านั่นคือสิ่งที่คุณต้องการ
musicman523

1

ถ่าน , 307 297 ไบต์

A”|‽2?{:×G↗”¦αA“6«eMηOU¶¿”¦ζA“9“e▷·gqε-g}”¦βA“9B{⦃⁺Bφ=;λO”¦ωAfizz¦φAbuzz¦γAbeer¦ηA”↶C▶▶d℅d¬r·US\λTθNevT◧→GM⁸ω┦τA“M↧k↓⁺*f÷,ψZ¢▶\¿|P“№κ×υpξXoW”¦σA.¶πF⮌…¹¦¹⁰⁰«A⎇⁻ι¹αζθ¿∧¬﹪鳬﹪ι⁵A⁺φγ﹪ι³Aφ﹪ι⁵AγεAηε⁺⁺⁺⁺⁺⁺⁺IιθεβIιθεπ¿⁻ι¹A⁻ι¹λA⁹⁹λA⎇⁻λ¹αζθ¿∧¬﹪볬﹪λ⁵A⁺φγ﹪λ³Aφ﹪λ⁵AγεAηε¿⁻ι¹AτδAσδ⁺⁺⁺⁺δλθεω

ลองออนไลน์!

ใช่เราทำได้! เชื่อมโยงไปยังรุ่น verbose นี้สามารถ golfed มากฉันแน่ใจ


น่าเศร้าที่คุณลืมที่จะเชื่อมโยงไปยังรุ่น verbose แต่ที่ดูเหมือนว่าน่าสงสัย ...
Neil

1

tcl, 298

proc B i {set x " bottle[expr $i>1?"s":""] of [expr $i%3?$i%5?"beer":"":"fizz"][expr $i%5?"":"buzz"]"}
set i 99
time {puts "$i[B $i][set w " on the wall"], $i[B $i].
Take one down and pass it around, [incr i -1][B $i]$w."} 98
puts "1[B $i]$w, 1[B $i].
Go to the store and buy some more, 99[B 9]$w."

การสาธิต

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