코드의 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의 경고 / 오류는 정상입니다. 자세한 내용은 여기 를 참조 하십시오 .
이것은 코드 골프이므로 바이트 단위의 가장 짧은 코드가 이깁니다.
출력 예
답변
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
나중에 사용하기 위해 저장됩니다 . 세트 $a
로 99
하는 입력 for
에 루프를 $a
. 먼저 두 문자열의 배열을 만듭니다 . ," "*2
이 문자열은 "X bugs in the code"
입니다.
다음은 단지 문자열 "Take one down and patch it around"
입니다. 그런 다음 범위에서 정수를 $a
선택하여 증가시킵니다 . 그런 다음 if를 사용하여 최소 0이되도록 고정 합니다 . 그런 다음 문자열 입니다.Random
[-16,4]
$a
if($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 덕분에 (일부 바이트 절약)
골프에 대한 제안은 환영합니다.
답변
답변
파이썬 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 개의 버그를 다시 인쇄하십시오.