코드의 99 버그 줄) 여기서 X는 이전 정수에서 1을 뺀 값에

코드의 99 버그

컴퓨터 과학을위한 “벽에 맥주 99 병 병”의 적응은 병을 줄이는 대신 버그가 증가하는 경우가 종종 인터넷 주위에 다시 게시됩니다. 티셔츠 예 .

다양한 언어에서 재귀와 난수가 생성되는 것을보고 가장 효율적인 방법을 찾는 것이 흥미로울 것이라고 생각합니다.

99 병의 맥주와 관련하여 다른 몇 가지 도전 과제가 있지만 증가하고 감소하는 숫자는 없습니다!

도전

프로그램이나 기능을 입력하지 말고 인쇄하십시오

코드의 99 버그

코드의 99 버그

하나를 가져 와서 패치하십시오

코드의 X 버그

(빈 줄)

여기서 X는 이전 정수에서 1을 뺀 값에 [-15,5] 범위의 임의의 정수를 더한 값입니다.
빼기 1을 임의의 정수로 병합하여 [-16,4] 범위를 허용 할 수 있습니다.
범위는 배타적 일 수 있으므로 마이너스 1 더하기 (-16,6) 또는 (-17,5)입니다.

임의의 정수는 균등하게 분배 될 필요는없고 모두 가능해야합니다.

이 프로그램은 항상 99 개의 버그로 시작합니다.

“1 버그”의 문법 오류는 무시해도됩니다.

버그 수가 0이거나 음수이면 프로그램이 중지되고 인쇄됩니다.

코드의 버그 0 개

음수의 버그가 없어야합니다. 결말은 다음과 같아야합니다

코드의 Y 버그

코드의 Y 버그

하나를 가져 와서 패치하십시오

코드의 버그 0 개

(빈 줄)

코드의 버그 0 개

후행 줄 바꿈이 허용됩니다.

  • 코드는 전체 프로그램 또는 함수일 수 있습니다.
  • 입력이 없습니다.
  • 출력은 stdout이거나 리턴되어야합니다.
  • STDOUT에 필요한 텍스트가있는 한 로그 / STDERR의 경고 / 오류는 정상입니다. 자세한 내용은 여기 를 참조 하십시오 .

이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다.

출력 예

매번 -11 개의 버그에 대해 리깅 된 빈 예제 출력



답변

R , 182 140 138 135 바이트

n=99;while(n)cat(n,b<-" bugs in the code
",n,b,"take one down and patch it around
",n<-max(0,n-sample(21,1)+5),b,"
",c(n,b)[!n],sep="")

온라인으로 사용해보십시오!

R은 난수 생성에서 합리적으로 우수하지만 문자열과 인쇄에서 끔찍합니다. JayCe는 약 10 억 바이트를 발견했으며이를 계속해서 골프를 즐길 수있는 새로운 방법을 계속 찾고 있습니다!


답변

자바 8, 161160 바이트

v->{String s="",t=" bugs in the code\n";for(int i=99;i>0;s+=i+t+i+t+"Take one down and patch it around\n"+((i-=Math.random()*21+4)<0?0:i)+t+"\n");return s+0+t;}

@JonathanAllan 덕분에 -1 바이트 .

온라인으로 사용해보십시오.

설명:

v->{                   // Method with empty unused parameter and String return-type
  String s="",         //  Result-String, starting empty
         t=" bugs in the code\n";
                       //  Temp-String we use multiple times
  for(int i=99;i>0;    //  Start `i` at 99, and loop as long as it's larger than 0
    s+=                //   Append to the result-String:
       i+t             //    The first line of the verse
       +i+t            //    The second (duplicated) line of the verse
       +"Take one down and patch it around\n"
                       //    The third line of the verse
       +((i-=Math.random()*21-4)
                       //    Decrease `i` by a random integer in the range [-16, 4]
         <0?0:i)       //    If `i` is now negative, set it to 0
        +t+"\n");      //    And append the fourth line of the verse
  return s             //  Return the result,
         +0+t;}        //  appended with an additional line for 0 at the very end


답변

PowerShell을 , 137 135 133 131 바이트

$b=' bugs in the code';for($a=99;$a){,"$a$b"*2;"Take one down and patch it around";$a+=-16..4|Random;if($a-lt0){$a=0}"$a$b`n"}"0$b"

온라인으로 사용해보십시오!

“코드의 버그”섹션은 $b나중에 사용하기 위해 저장됩니다 . 세트 $a99하는 입력 for에 루프를 $a. 먼저 두 문자열의 배열을 만듭니다 . ," "*2이 문자열은 "X bugs in the code"입니다.

다음은 단지 문자열 "Take one down and patch it around"입니다. 그런 다음 범위에서 정수를 $a선택하여 증가시킵니다 . 그런 다음 if를 사용하여 최소 0이되도록 고정 합니다 . 그런 다음 문자열 입니다.Random[-16,4]$aif($a-lt0){$a=0}"Y bugs in the code"

마지막으로 루프가 끝나면 "0 bugs in the code"파이프 라인에 문자열을 넣습니다. 이러한 모든 문자열은 파이프 라인에서 수집되며 암시 적으로 Write-Output줄 사이에 줄 바꿈이 무료로 제공됩니다.

for루프 대신 루프를 사용하여 2 바이트를 저장했습니다 while. 자체 섹션
으로 이동 $b하여 2 바이트를 절약 했습니다.
Adrian Blackburn 덕분에 2 바이트를 절약했습니다.


답변

자바 스크립트 (Node.js) 127 바이트

f=(i=99,t=` bugs in the code
`)=>i>0?i+t+`Take one down and patch it around
`+((i+=0|Math.random()*21-15)<0?0:i)+t+`
`+f(i):0+t

온라인으로 사용해보십시오!


설명 :

f = (                                          // start of our recursive function
    i=99,t=` bugs in the code                 // parameters, 1. num bugs , 2. text
`)                                           // using string literal end text with \n
=>                                          // start function
    i > 0 ?                                // if i is greater than 0
        i + t +                           // return value of i, value of t and  
    `Take one down and patch it around   // and this text 
    `                                   // + new line
    + (( i +=                          // and add 
        0|Math.random()*21-15) < 0 ?  // remove decimal from value obtained by multiplying
                                     // random number (between 0 and 1) multiplied by 21 
                                    // and then subtracting 15 from it
                                   // if that value is less than 0
        0 :                       // add 0 to i
        i                        // otherwise add value of i  
        )                       // end the parenthesis 
    + t                        // add value of t to that
    + `\n`                    // along with a new line 
    + f(i)                   // and repeat the process (this is recursive)
    :                       // if i > 0 condition not met then
        0 + t              // return 0 + t. Zero is there so the last line can be 
                          // repeated

재귀 및 구현 아이디어를위한 @tsh 덕분에 (일부 바이트 절약)

골프에 대한 제안은 환영합니다.


답변

05AB1E , 59 바이트

99[Ð16(4ŸΩ+¾‚{θ©3F“ÿ±À€†€€ƒË“Š}“ƒ¶€µ„‹€ƒš¡€•…¡“ªsõ®>#®]sDŠ»

온라인으로 사용해보십시오!


답변

파이썬 2 , 151 바이트

j=i+max(-i,randint(-16,4))허용되지 않는 분포를 이용하여 Jo King의 멋진 트릭

니모닉 덕분에 몇 바이트 절약

from random import*
i,s=99,'bugs in the code\n'
while i:j=max(0,i+randint(-16,4));print i,s,i,s,'Take one down and patch it around\n',j,s;i=j
print i,s

온라인으로 사용해보십시오!


답변

, 81 바이트

≔⁹⁹θ≔”⧴"pWº⁴tSn/{yBⅈ⁺”ζW›θ⁰«×²﹪ζθ”↶0⪫\`3+¤⸿Zν(z¬hLÀTj'ZXεPraF”≧⁺⁻⁴‽²¹θ﹪ζ×θ›θ⁰¶»﹪ζ⁰

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

≔⁹⁹θ

코드에서 99 개의 버그로 시작하십시오.

≔”⧴"pWº⁴tSn/{yBⅈ⁺”ζ

압축 된 문자열 “% d bugs in the code \ n”을 저장하십시오.

W›θ⁰«

양의 버그가 남아있는 동안 반복하십시오.

ײ﹪ζθ

코드의 버그 수를 두 번 인쇄하십시오.

”↶0⪫\`3+¤⸿Zν(z¬hLÀTj'ZXεPraF”

“하나를 내려서 패치하십시오”를 인쇄하십시오.

≧⁺⁻⁴‽²¹θ

-17 (독점)과 4 (포함) 사이에 임의의 수의 버그를 추가하십시오.

﹪ζ×θ›θ⁰

남아있는 버그 수를 인쇄하거나 음수이면 0을 인쇄하십시오.

구절 사이에 빈 줄을 두십시오.

»﹪ζ⁰

마지막 구절이 끝나면 코드에 0 개의 버그를 다시 인쇄하십시오.