피즈 버즈 라이트 이어


9

최근 PPCG에 게시 된 많은 (2?) FizzBuzz 관련 문제가 발생한 후, 나는 내 자신을 생각해 냈습니다. 보다...

피즈 버즈 라이트 이어

정수를 취하여 15 로 나눌 수있는 숫자, 3으로 나눌 수있는 숫자, 5로 나눌 수있는 숫자 (최대 포함)까지 n인쇄 하는 프로그램이나 함수를 작성하십시오 . 모두에 대한 출력 다음에 개행이 있어야합니다. 그러나 비틀기가 있습니다!FizzBuzzFizzBuzzni

을 인쇄 할 때마다 Buzz버즈 라이트 이어는 마침내 귀하의 프로그램에서 귀하의 전화 및 충돌 지역에주의를 기울입니다. 그런 다음 자신을 소개합니다. 그러나 충돌이 발생한 후, 그가 말한 것 중 일부가 프로그램의 출력과 혼합됩니다.

Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.

(즉, 추가 전용입니다  Lightyear, Space Ranger, Universe Protection Unit.BuzzFizzBuzz- 당신이 그렇지 표시 한 것 무엇이든 선행 공백을합니다.)

그러나 우주 레인저 인 버즈 라이트 이어 (Buzz Lightyear)는 매우 예리한 청력을 가지고 있으므로 인쇄 FizzBuzz는 귀하의 Buzz수에 포함 됩니다.

그런 다음 버즈는 5로 나눌 수있는 또 다른 숫자 (또는 15도 나눌 수 있기 때문에 15)를 칠 때까지 모든 악의적 인 출력으로부터 컴퓨터를 보호하기 위해 매달립니다. 그 의미는 다시 인쇄해야 할 때까지 Buzz(또는 FizzBuzz) 아무 것도 인쇄하지 않는 것입니다.

마지막으로 해당 조건에 도달하면 버즈가 출발합니다.

To infinity and beyond!

출력 예

이것은 예상 출력된다 n = 25: (통지는 16 내지 19 스킵 방법)

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
To infinity and beyond!
Fizz
22
23
Fizz
Buzz

규칙

선택적인 후행 줄 바꿈이 허용됩니다.

이것은 코드 골프입니다. 따라서 가장 짧은 코드 (바이트)가 이깁니다.

주어진 n것이 유효 하고 15 이상 이라고 가정하십시오 (이는 도전이 표준 피즈 버즈에서 처음 벗어날 때입니다)

"버즈 카운터"( Buzz와 모두를 계산 FizzBuzz)가 3에 도달하면 버즈가 인사합니다 . 다음 Buzz( Buzz및 다시 포함 FizzBuzz)이 인쇄 되면 출발합니다 .

그가 떠난 숫자는 다음 "버즈 카운터"에 포함되지 않습니다. 대신 계산 시작해야 Buzz예를 들어, 프로그램이 실행 0부터 다시 말이지 n = 25그 얼마나 많은 시간 이후, (예를 들어, 출력) 1의 '버즈 카운터 "로 끝나야합니다 Buzz그가 떠난 마지막 시간 이후 인쇄되었습니다.

nBuzz의 도착 중 하나와 출발 중 하나 사이에 해당하는 경우 (즉, 아직 거기에 있습니다-당신은 아무것도 인쇄하지 않습니다), 우아한 종료가 예상됩니다. 따라서 마지막 출력 라인은 그의 소개입니다

표준 허점은 금지되어 있습니다.


1
n버즈 라이트 이어의 도착과 출발 사이에 있을 때 예상되는 동작을 명확하게 설명 할 수 있습니까 ?
nderscore

프로그램을 종료하십시오. 규칙을 편집하겠습니다
osuka_

답변:


5

자바 (ES6) 182 175 바이트

  • -7 bytes : Buzz Lightyear 로직을 Buzz 삼항 식으로 이동했습니다.

f=(n,s=i=b=_='')=>i++<n?f(n,s+`${(i%3?_:'Fizz')+(i%5?_:`Buzz${++b%3?_:` Lightyear, Space Ranger, Universe Protection Unit.${(i+=5)>n?_:`
To infinity and beyond!`}`}`)||i}
`):s
<!-- snippet demo: -->
<input oninput=o.innerHTML=f(this.value)>
<pre id=o>


3

파이썬 (2) , 185 (178) 172 바이트

for i in range(input()):
 if-~i%20<16:print i%20/19*"To infinity and beyond!"or i%3/2*"Fizz"+i%5/4*"Buzz"+i%20/14*" Lightyear, Space Ranger, Universe Protection Unit."or-~i

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

설명

관찰 : 버즈 라이트 이어는 세 번째 "버즈 번호"에 도착하고 네 번째에 출발합니다. "버즈 번호"는 5의 배수입니다. 따라서 버즈의 움직임은 길이 20의주기에서 발생합니다.

우리는 각각 i0에서 입력 1까지 반복 합니다. (이는 i항상 우리가 고려하고있는 실제 수보다 1이 적다는 것을 의미합니다 .)

사용 -~i하는 단축키로서 i+1, if-~i%20<16:점검하는 경우 i+1, 모드 (20), 15 세 이하이다. (만약 16-19이면 Buzz Lightyear가 존재하며 아무 것도 출력하고 싶지 않습니다.)

은 if 문 내부에서, 우리는 인쇄 할 To infinity and beyond!(20)의 모든 복수에 -이다, 때마다 i%2019 (즉 기억이다 i적은 실제 수보다 하나입니다.) 이후 i%20, 19보다 클 수 없으며 i%20/19원하는 1이 될 것이다 그렇지 않으면 <1입니다. 파이썬 2는 문자열을 곱할 때 부동 소수점을 자르므로 19 i%20/19*"..."이면 전체 문자열을 제공합니다 . i%20그렇지 않으면 그렇지 않습니다 "".

위의 경우에 해당하는 경우 다른 내용은 인쇄하지 않습니다. 그러나 첫 번째 표현이 ""거짓 인 경우 or계속 진행합니다. 의 표현 Fizz, Buzz그리고 도입은 위의 유사 계산과 함께 추가됩니다.

마지막으로, 이러한 경우 중 어느 것도 해당되지 않으면 숫자 자체를로 인쇄합니다 -~i.


2

05AB1E , 97 93 90 바이트

>GN"FizzBuzz"2äN35SÖÏJ)˜1(è“To infinity€ƒ—°!“)N20%©_è®15Q” Lightyear,‡²ìÓ,ªÜŠí‰¿.”×J®16‹i,

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

추가 골프 후 올 설명.

대체 97 바이트 버전

>G"FizzBuzz"2ä” Lightyear,‡²ìÓ,ªÜŠí‰¿.”)˜N•9¨•3äR%15%_ÏJ“To infinity€ƒ—°!“)N20ÖèN)˜é®èN20%15›i\},
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.