嘶嘶声光年


9

在最近在PPCG上发布了许多(两个?)与FizzBu​​zz相关的挑战之后,我很想提出自己的挑战。看...

嘶嘶声光年

编写一个程序或函数,该程序或函数需要一个整数,n并打印出FizzBuzz可以被15整除的Fizz任何数字,可以被3整除的Buzz任何数字以及可以被5整除的任何数字,直到(包括)n。所有输出i必须在换行符之后。但是有一个转折!

对于您的第三次打印Buzz,Buzz Lightyear最终会注意您的呼叫,并在程序中崩溃。然后,他介绍了自己-但是由于崩溃着陆,他说的一些话与程序的输出混杂在一起:

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

(也就是说,仅附加 Lightyear, Space Ranger, Universe Protection Unit.BuzzFizzBuzz-否则将显示其他内容。请注意前导空格)

然而,巴斯光年,是太空游侠他,有很敏锐的听力,所以印刷FizzBuzz将会对你的计Buzz计数

然后,Buzz到处徘徊,以保护您的计算机免受所有有害输出的攻击,直到您击中另一个可被5整除的数字(或15,因为这些数字也可被5整除)。这意味着直到必须再次打印Buzz(或FizzBuzz),您才完全不打印任何内容。

当您最终达到该条件时,Buzz就会离开:

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(这是挑战首次偏离标准Fizzbuzz的时间)

当“ Buzz计数器”(同时计数BuzzFizzBuzz)达到3 时,Buzz向您问好;他在下一个Buzz(再次包含BuzzFizzBuzz)打印时离开。

他离开的人数不会计入下一个“蜂鸣器”;您应该改为Buzz从0 开始重新计数es。例如,以n = 25(示例输出)运行的程序应以“蜂鸣计数器”结尾1,因为这Buzz是自上次离开以来打印的次数。

如果n介于Buzz的一次到达和他的一次离开之间(例如,他仍在那儿-您什么都没打印),则可以正常终止。因此,输出的最后一行是他的介绍

禁止出现标准漏洞。


1
您能澄清一下nBuzz Lightyear到达与离开之间的预期行为吗?
nderscore

只需退出该程序。我将在第二时间编辑规则
osuka_

Answers:


5

使用Javascript(ES6),182个 175字节

  • -7个字节:将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

Python 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的倍数。因此,Buzz的运动发生在长度为20的周期中。

我们i从0到输入1 遍历每个对象。(这意味着它i总是比我们正在考虑的实际数字少一。)

使用-~i作为快捷方式i+1if-~i%20<16:如果检查i+1,MOD 20,是15岁或以下。(如果是16到19,则表示存在Buzz Lightyear,我们不想输出任何内容。)

在if语句中,我们希望以To infinity and beyond!20的倍数打印,即每次i%20为19。(请记住,i它比实际数字小1。)由于i%20永远不会大于19,i%20/19因此在期望值中将为1。情况下,<1。Python 2方便地在与字符串相乘时截断浮点数,因此i%20/19*"..."如果i%20为19,则给出完整的字符串,否则为""

如果上述情况适用,我们将不会打印其他任何内容。但是,如果第一个表达式是""(是虚假的),我们or将继续进行下去。对于表达式FizzBuzz以及引入被类似地计算上述和相加。

最后,如果这些情况均不适用,我们将使用来打印数字本身-~i


2

05AB1E97 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\},
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.