Introducción
En nuestro reciente esfuerzo por recopilar catálogos de las soluciones más cortas para ejercicios de programación estándar, este es el primer desafío FizzBuzz de vainilla de PPCG. Si desea ver otros desafíos del catálogo, hay "¡Hola mundo!" y "¿Es este número un primo?" .
Desafío
Escriba un programa que imprima los números decimales del 1 al 100 inclusive. Pero para los múltiplos de tres imprime "Fizz" en lugar del número y para los múltiplos de cinco imprime "Buzz". Para números que son múltiplos de tres y cinco, imprima "FizzBuzz".
Salida
La salida será una lista de números (y Fizzes, Buzzes y FizzBuzzes) separados por una nueva línea (ya sea \n
o \r\n
). Una nueva línea final es aceptable, pero una nueva línea principal no lo es. Además de su elección de nueva línea, la salida debería verse exactamente así:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
La única excepción a esta regla es la salida constante del intérprete de su idioma que no se puede suprimir, como un saludo, códigos de color ANSI o sangría.
Reglas adicionales
No se trata de encontrar el idioma con el enfoque más corto para jugar FizzBuzz, se trata de encontrar el enfoque más corto en cada idioma. Por lo tanto, ninguna respuesta se marcará como aceptada.
Las presentaciones se puntúan en bytes en una codificación preexistente apropiada, generalmente (pero no necesariamente) UTF-8. Algunos idiomas, como las carpetas, son un poco difíciles de puntuar; si tiene dudas, pregunte por Meta.
No se puede imprimir nada en STDERR.
A diferencia de nuestras reglas habituales, siéntase libre de usar un idioma (o versión de idioma) incluso si es más nuevo que este desafío. Si alguien quiere abusar de esto creando un lenguaje en el que el programa vacío genere la salida de FizzBuzz, felicidades por allanar el camino para una respuesta muy aburrida.
Tenga en cuenta que debe haber un intérprete para que se pueda probar el envío. Se permite (e incluso se recomienda) escribir este intérprete usted mismo para un idioma previamente no implementado.
Si su idioma de elección es una variante trivial de otro lenguaje (potencialmente más popular) que ya tiene una respuesta (piense en dialectos BASIC o SQL, shells Unix o derivados triviales de Brainfuck como Alphuck y ???), considere agregar una nota al existente responda que la misma solución o una muy similar también es la más corta en el otro idioma.
Debido a que la salida es fija, puede codificar la salida (pero esta puede no ser la opción más corta).
Puede usar soluciones preexistentes, siempre y cuando acredite al autor original del programa.
Las lagunas estándar no están permitidas.
Como nota al margen, no desestime las respuestas aburridas (pero válidas) en idiomas donde no hay mucho para jugar golf; todavía son útiles para esta pregunta, ya que trata de compilar un catálogo lo más completo posible. Sin embargo, vota principalmente sobre las respuestas en idiomas en los que los autores realmente tuvieron que esforzarse para jugar golf en el código.
Catálogo
var QUESTION_ID=58615;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=30525;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"https://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>
fuente
Nothing can be printed to STDERR.
¿Es esto cierto solo cuando se ejecuta, o también cuando se compila (suponiendo que sea un paso separado?)Respuestas:
Pitón 2, 56
fuente
i=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100
. ¿Alguien quiere forzar expresiones de búsqueda de fuerza bruta para intentar optimizar el ataque de bits?Hexagonía , 91 bytes.
Gracias por la generosidad :)
Wow, nunca hubiera imaginado que podría vencer a la solución Hexagony de Martin . Pero, quién lo habría pensado, lo logré. Después de varios días de fracaso porque no tenía el coloreador Hexagony ni el EsotericIDE para verificar mi solución. Me equivoqué en varios aspectos de la especificación, así que produje algunas "soluciones" incorrectas simplemente usando lápiz y papel y un editor de texto. Bueno, finalmente superé mi pereza y cloné ambos repositorios, descargué VisualStudio y los compilé. ¡Guau, qué herramientas útiles son! Como puede ver, estoy lejos de ser alguien a quien llamaría un programador (quiero decir, ¡vamos! Ni siquiera tenía instalado VisualStudio, y no tengo ni idea de cómo compilar un programa);)
Todavía me tomó un tiempo encontrar una solución que funcione, y es bastante abarrotado y caótico, pero aquí está en todo su esplendor:
Fizzbuzz en un hexágono de tamaño 6:
Diseño hexagonal:
Y la hermosa interpretación, gracias al Coloreador de Hexagonía de Timwi :
Entonces, aquí hay una animación GIF de 110 segundos de duración a 2 fps, que muestra el flujo del programa durante los primeros 6 números
1, 2, Fizz, 4, Buzz, Fizz
, los primeros 220 tics del programa (haga clic en la imagen para verla a tamaño completo):Dios mío, gracias al software de composición Natron, la animación del puntero aún era tediosa de crear, pero manejable. Guardar 260 imágenes de la memoria fue menos divertido. Lamentablemente, EsotericIDE no puede hacer eso automáticamente. De todos modos, ¡disfruta de la animación!
Después de todo, una vez que comprende el modelo de memoria y la envoltura bastante intuitiva de los caminos que cruzan los bordes del hexágono, no es tan difícil trabajar con la Hexagonía. Pero jugar al golf puede ser un dolor de cabeza. ;)
¡Fue divertido!
fuente
3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('
. Ahora hay un extra (después de la z, que se puede "cancelar" con a) o colocando la z allí. Ahora es a) que empuja todos los comandos en la ruta naranja 1 tick más tarde, y regresó con el no-op que estaba en la línea 3. Por cierto, también instalé Visual Studio solo debido a Hexagony Colorer y Esoteric IDE: PLaberinto , 94 bytes
Sub-100! Esto fue divertido.
Explicación
Comencemos con una breve introducción sobre Labyrinth: siéntase libre de omitir esto si ya está familiarizado con los conceptos básicos:
Labyrinth tiene dos pilas: una pila principal y una pila auxiliar. Ambas pilas tienen un número infinito de ceros en la parte inferior, por ejemplo,
+
en una pila vacía se agregan dos ceros, empujando así a cero.El flujo de control en Labyrinth se decide por las uniones, que miran en la parte superior de la pila para determinar a dónde ir después. Negativo significa girar a la izquierda, cero significa seguir recto y positivo significa girar a la derecha ... pero si golpeamos una pared, invertimos la dirección. Por ejemplo, si solo es posible hacia adelante y girar a la izquierda, pero la parte superior de la pila es positiva, entonces, como no podemos girar a la derecha, giramos a la izquierda.
Los dígitos en Labyrinth aparecen
x
y empujan10*x + <digit>
, lo que facilita la acumulación de grandes números. Sin embargo, esto significa que necesitamos una instrucción para presionar 0 para comenzar un nuevo número, que está_
en Labyrinth.¡Ahora vamos al código real!
rojo
La ejecución comienza
"
en la esquina superior izquierda, que es un NOP. El siguiente es)
, que incrementa la parte superior de la pila, empujando 1 en la primera pasada e incrementandon
en cada pasada siguiente.Luego duplicamos
n
con:
. Comon
es positivo, giramos a la derecha, ejecutándonos}
(desplazamos la parte superior de la pila principal a auxiliar) y:
. Llegamos a un callejón sin salida, así que nos damos la vuelta y ejecutamos}
y:
una vez más, dejando las pilas comoUna vez más,
n
es positivo y giramos a la derecha, ejecutando_101/
cuál se dividen
por 101. Sin
es 101, entoncesn/101 = 1
nos convertimos en@
, que termina el programa. De lo contrario, nuestra situación actual esNaranja 1 (mod 3)
3
convierte el cero superior en un 3 (10*0 + 3 = 3
) y%
realiza un módulo. Sin%3
es positivo, giramos a la derecha hacia el amarillo"
. De lo contrario, realizamos70.105.122:..
, que salidasFizz
. Tenga en cuenta que no necesitamos empujar nuevos ceros_
ya quen%3
era cero en este caso, por lo que podemos explotar los ceros infinitos en la parte inferior de la pila. Ambos caminos se encuentran nuevamente en azul claro.Azul claro
La parte superior de la pila está actualmente
n%3
, lo que podría ser positivo, por lo que_;
simplemente empuja un cero e inmediatamente lo hace estallar para asegurarse de que seguimos adelante, en lugar de girar hacia el@
. Luego usamos=
para intercambiar la parte superior de las pilas principales y auxiliares, dando:Naranja 2 (mod 5)
Esta es una situación similar a la anterior, excepto que
66.117.122:..
generaBuzz
sin%5
es cero.Azul oscuro
La sección anterior deja las pilas como
{
desplaza lan%3
espalda a la pila principal y*
multiplica los dos módulos.Si cualquiera de los módulos es cero, el producto es cero, así que vamos directamente al amarillo.
=
intercambia la parte superior de las pilas y_
empuja un cero para asegurarse de que seguimos adelante, dandoDe lo contrario, si ambos módulos son distintos de cero, entonces el producto es distinto de cero y giramos a la derecha en verde.
=
intercambia la parte superior de las pilas, dandodespués de lo cual usamos
:
para duplicarn
, giramos a la derecha, luego usamos!
para dar salidan
.Púrpura
En este punto, la pila principal tiene uno o dos elementos, según la ruta que se haya tomado. Necesitamos deshacernos del cero de la ruta amarilla, y para ello usamos
+
, que funcionan + 0
en algún orden para ambos casos. Finalmente,\
genera una nueva línea y volvemos al inicio.Cada iteración empuja un extra
(n%5)*(n%3)
a la pila auxiliar, pero de lo contrario hacemos lo mismo de nuevo.fuente
Perl 5, 49 bytes
Script de 46 bytes + 3 bytes
-E"..."
El uso
say
(que requiere-E"..."
) puede reducir esto aún más a 46 bytes, ya quesay
incluye automáticamente una nueva línea (¡Gracias @Dennis !):Perl 5, 50 bytes
fuente
say
.-E"..."
8 bytes? Espacio + Guión + Opción + Argumento (+ Comillas).-E
son 0 bytes, pero dado que la respuesta de primo se calificó excluyendo las comillas, opté por hacerlo justo e incluir las comillas en la mía y +1 para-E
. La razón por la que se acepta como gratuito es que Perl generalmente se ejecuta a través deperl -e
yperl -E
no es más bytes (pensé-M5.010
o tambiénuse 5.010
puede ser gratuito, pero tal vez no vuelva a leer la meta publicación). Al agregar-p
o-n
esto se cuenta como +1 con el que correríaperl -pe
. ¡Espero que ayude! Meta referencia: meta.codegolf.stackexchange.com/a/7539Ruby, 50 bytes.
Requiere la versión 1.8, que parece ser popular entre los golfistas:
En Rubí moderna, se reemplaza
?d
con100
una solución de 51 bytes.Este parece ser el récord mundial.
fuente
?d
es justo100
. LaFizzBuzz
cadena tiene una nueva línea, esto es válido en Ruby.string[i, s]
es un segmento, que comienza en el carácteri
(indexado a 0), continúa para loss
caracteres, ignorando los índices que apuntan fuera de la cadena. Si el argumentoputs
ya tiene una nueva línea, se corta. La fórmula debe ser simple de leer? Hace todo el trabajo aquí. No lo habría encontrado sin la ayuda de algunos golfistas Ruby realmente profesionales.?e.times
lugar.[i=n**4%-15,i+13]
parte por favor? Parece que no puedo entenderloi==-14
el corte está fuera de los límites, entonces obtenemosnil
. Sii==-9
dividimos losi+13==4
caracteres comenzando desde el noveno carácter desde el final, entonces'Fizz'
. Sii==-5
dividimos 8 caracteres comenzando desde el quinto carácter desde el final, entonces'Buzz\n'
. (Intentamos dividir 8 pero solo hay 5, así que obtenemos 5.) Etcétera.Java, 130 bytes
Esto es para versiones recientes de Java (7+). En los más antiguos, puede reducir un poco más el uso del
enum
truco, pero no creo que la lógica sea más corta que esto (86 adentromain
).fuente
class F{public static
->interface F{static
en java 8enum F{;public...
, por lo que en realidad no estaría guardando ningún byte.Pyth, 30
Pruébalo aquí
Explicación:
fuente
Retina ,
31713913413270636055 bytesPruébalo en línea!
Explicación
El
.
es el indicador de silencio global que desactiva la salida implícita al final del programa.100{
envuelve el resto del programa en un bucle que se ejecuta durante 100 iteraciones. Finalmente, la etapa misma simplemente inserta un_
al comienzo de la cadena, lo que efectivamente incrementa un contador de bucle unario.Más configuración
*\(
envuelve el resto del programa en un grupo, imprime su resultado con un salto de línea final, pero también coloca a todo el grupo en una ejecución en seco, lo que significa que su resultado se descartará después de la impresión, de modo que nuestro contador de bucle no se modifique realmente .a
es un modificador de expresiones regulares personalizado que ancla la expresión regular a toda la cadena (que ahorra un byte al usar^
y$
explícitamente).La etapa atómica misma se ocupa
Fizz
. La divisibilidad por3
puede verificarse fácilmente en unario: solo pruebe si el número se puede escribir como una repetición de___
. Si este es el caso, anteponemosFi;
la cadena. El punto y coma es para que todavía haya un límite de palabras delante del número para la siguiente etapa. Si convertimos la línea enFizz___...
la posición entrez
y_
no se consideraría un límite, porque regex trata las letras y los guiones bajos como caracteres de palabras. Sin embargo, el punto y coma también nos permite eliminar lazz
duplicación deFizz
yBuzz
.Hacemos exactamente lo mismo para la divisibilidad por
5
yBu;
, aunque no necesitamos mantener el_
s alrededor esta vez. Entonces obtendríamos resultados comoEsto hace que sea muy fácil deshacerse de los guiones bajos solo en las líneas que contienen
Fizz
, al tiempo que completa loszz
s:Es decir, convertimos cada punto y coma,
zz
pero también consumimos todos los_
s justo después. En este punto, hemos terminado con FizzBuzz en unario. Pero el desafío quiere salida decimal.&
indica un condicional: esta etapa solo se ejecuta si la cadena contiene un guión bajo. Por lo tanto,Fizz
,Buzz
yFizzBuzz
las iteraciones se dejan sin tocar. En todas las demás iteraciones (es decir, aquellas que no son divisibles por 3 ni 5), solo contamos el número de caracteres, convirtiendo el resultado a decimal.fuente
gs2 , 1
Una cita de Mauris, el creador de gs2:
Actualización : se agregó una respuesta de 27 bytes que no se usa
f
.fuente
Perl 5, 45 bytes
Requiere la
-E
opción, contada como una. Esto debe ejecutarse desde la línea de comando, es decir:Comillas en el comando no son necesarias, si se evita el uso de espacios en blanco u otros caracteres que pueden actuar como separadores de línea de comandos (
|
,<
,>
,&
, etc.).Perl 5, 48 bytes
Si las opciones de línea de comando se cuentan como una cada una,
-l
se ahorraría un byte (al reemplazar$/
). Por Clásico Reglas Perlgolf , sin embargo, esto contaría 3: una para el-
, uno para ell
y otro para el espacio necesario.fuente
say
, con el-E
interruptor, que tiene una distancia de edición de 1-e
, por lo que debe contar como 1 byte.say
, supuse que-E
se puede usar en lugar de-e
lo que te llevaría a 44 en lugar de 46. No creo que sea justo que esté anotando diferente a ti, ¿cuál es el mecanismo de puntuación preferido? Generalmente usoprint
para evitar esto! ¿Lo más cercano a un consenso sería esto ?say
, si su código puede escribirse en una línea evitando cualquier separador del sistema operativo, puntúe 1 para-E
. Si necesita usar comillas, por ejemplo-E"$a||$b"
, puntaje 3. Si no puede obtenerlo en una línea, califique 5 para-M5.01
. Pero en ese punto, probablemente sería mejor usarlo-l
. No estoy de acuerdo en que debería ser gratuito por defecto, por dos razones: 1) la mejora es trivial y poco interesante, y 2) no hay una versión del intérprete para la que esté habilitada de forma predeterminada.cera de abeja ,
1048981 bytesEl embalaje más denso permite cortar 8 bytes más.
La solución más corta (81 bytes), el mismo flujo de programa, empaque diferente.
Cambiar el concepto me permitió reducir el código en 15 bytes. Quería deshacerme de la prueba doble mod 5 en la solución, así que implementé una bandera.
Breve explicación:
si
n%3=0
se imprime Fizz y se establece la bandera. La bandera se realiza simplemente presionando el valor superior de lstack en el gstack (instrucciónf
).Si
n%5=0
, entoncesn%3=0
(caso FizzBuzz) on%3>0
(caso Buzz). En ambos casos, Buzz se imprime y la bandera se restablece haciendo estallar la pila hasta que esté vacía (instrucción?
).Ahora los casos interesantes:
Si
n%5>0
, entonces tuvimosn%3=0
(imprimiendo el estuche Fizz, n no debe imprimirse) on%3>0
(Fizz no se imprimió, entonces n tiene que imprimirse). Hora de revisar la bandera. Esto se realiza presionando la longitud de gstack sobre gstack (instrucciónA
). Sin%3 was 0
entonces la longitud de gstack es> 0. Sin%3 was >0
, la longitud de gstack es 0. Un salto condicional simple asegura que n solo se imprima si la longitud de gstack fue 0.Nuevamente, después de imprimir n, Fizz y / o Buzz y la nueva línea, el gstack aparece dos veces para asegurarse de que esté vacío. gstack está vacío
[]
, lo que conduce a[0]
después de la instrucciónA
(empujar la longitud de gstack en gstack), o contiene un cero ([0]
, el resultado de n% 3), lo que conduce a[0 1]
, ya que [0] tiene la longitud 1. Hacer estallar desde un la pila vacía no cambia la pila, por lo que es seguro explotar dos veces.Si miras más de cerca puedes ver que, en principio, doblé
dentro
que ayuda a eliminar todo el espacio desperdiciado entre
A
y<
al final de la siguiente fila en la solución anterior a continuación:Nueva solución conceptual (89 bytes) que incluye una explicación animada:
Diseño hexagonal:
Animación de los primeros 326 ticks a 2 fps, con pilas locales y globales, y salida a STDOUT.
A modo de comparación, a continuación se muestran las superposiciones de ruta de la solución más antigua y compleja. Quizás también sea la solución más bonita, desde un punto de vista visual;)
fuente
> <> ,
68666564 bytesEl único truco es multiplicar los residuos como condición para la impresión de números. De esa manera, si uno de ellos es 0, no imprimiremos el número.
Puedes probarlo aquí .
Guardado un byte gracias a Sp3000 y otro gracias a randomra. ¡Muchas gracias!
fuente
o
final de la segunda línea al espacio vacío al comienzo de la línea, creo.foooo Buzz
?gs2 ,
2827 (sinf
)Maleficio:
Explicación:
Incrustar 3 y 5 en la constante de cadena no funciona porque
\x05
termina los literales de cadena.Nota: Este problema se puede resolver en 1 byte con gs2 utilizando el incorporado
f
.fuente
C, 85 bytes
-2 gracias a aprensivo.
fuente
gcc
no reconoce la nueva línea dentro de la cadena como \ n. Me da un error de compilación. ¿Necesito pasar algún parámetro al compilador? Por cierto, te perdiste el<=
en tu publicación (conté 88 bytes con <= ... así que supongo que falta).main(i)
intentarloi;main()
. Entonces puedes deshacerte de éli--
al comienzo delfor()
ciclo. Tampoco necesitas el salto de línea. Eso debería reducir la cuenta de bytes a 85.(i%3&&i%5)*i
coni%3*i%5?i:0
Me voy a la camaCJam, 35 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
MUMPS,
5654 bytes¿Qué es esto
w:$X<3 i
, preguntas?$X
es una variable mágica (una "intrínseca") que almacena la posición horizontal del cursor de salida (como un número de caracteres desde el borde izquierdo del terminal).w
es la forma abreviada delWRITE
comando. La sintaxiscommand:condition args
es un postcondicional: "ifcondition
, then docommand args
".Así que estamos verificando si el cursor de salida ha avanzado más de dos caracteres (lo que significaría que al menos uno de
"Fizz"
o"Buzz"
ha sido escrito en el terminal), y si no, escribiendoi
en el terminal. La$X
variable, y por lo tanto, este tipo de inseparabilidad profunda desde el terminal, es una característica de primera clase de MUMPS. Yikesfuente
Jalea ,
2420 bytesPruébalo en línea!
Cómo funciona
fuente
brainfuck, 206 bytes
Formateado:
Pruébalo en línea
El diseño de la memoria es
donde
f
ciclos por 3,b
ciclos por 5,d1
es un dígito,d2
es decenas dígitos,s
es un indicador para imprimir diez dígitos,d
ciclos por 10,c
es espacio de copiad
,t
es espacio de trabajo que contiene 0 o datos basura o un indicador para no -divisible-by-3, ya
determina la terminación del programa compensando el puntero después de que Buzz se haya impreso 20 veces.fuente
C #,
128126125124 bytes89 bytes sin el código repetitivo alrededor.
Hecho con el uso del formato condicional de C # .
Con dos separadores de sección
;
, se imprimen Fizz o Buzz si el valor de su condición es cero.Guardado un total de 4 bytes gracias a @RubberDuck, @Timwi y @Riokmij.
fuente
Write
y agregar la nueva línea directamente a la cadena, ¿verdad?i%3*i%5>0?i:0
lugar dei%3*i%5==0?0:i
.for
declaración usandofor(var i=0;i++<100;)
$"{(i%3*i%5>0?i:0):#}...\n"
)class A{static void Main(){for(var i=0;i<100;)System.Console.Write($"{(++i%3*i%5<1?0:i):#}{i%3:;;Fizz}{i%5:;;Buzz}\n");}}
Clojure,
11310610110091 bytesMi primer golf!
Sin golf:
fuente
println
misma manera que en la solución Java , por ejemplo.(doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
(if t"Fizz""")
se puede simplificar a(if t"Fizz")
. :)brainfuck ,
411 350 277258 bytesEdiciones:
-61 bytes almacenando los valores de "Fizz Buzz" como
"BuziF""BuziG" y rehaciendo la sección de impresión de números.-71 bytes rehaciendo la sección de impresión del número de módulo, dividiendo el contador de bucle y el contador de números, y reutilizando la celda de nueva línea como el valor de mod, entre otras cosas
-19 bytes al darse cuenta de que no hay ningún 0 en ningún número de FizzBuzz. También se agregó explicación
+[-[>+<<]>-]>--[>+>++>++>++++++>+>>>++++++[<<<]>-]<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>>[>+<<<-[<]<[>+++>+<<-.+<.<..[<]<]>>-[<<]>[.>.>..>>>>+[<]+++++<]>[>]>>[[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]>,>[>]<[>-[<+>-----]<---.,<]++++++++++>]<.<<<<,>-]
Pruébalo en línea!
En lugar de verificar si el número en sí era divisible por 5 o 3, tuve dos contadores que realizaban un seguimiento del módulo del número, decrementándolos para cada número e imprimiendo la palabra correspondiente cuando llegaban a 0.
Cómo funciona:
fuente
PowerShell,
78686154 BytesEditar: guardado 10 bytes gracias a feersum
Edit2: me di cuenta de que con el truco de feersum, ya no necesito formular $ t como una cadena de bloques de código
Edit3: guardó otros 7 bytes gracias a Danko Durbić
De espíritu similar al de la respuesta estándar del Código de Rosetta , pero bajó bastante.
Explicación
1..100|%{...}
Cree una colección de 1 a 100, luego, para cada objeto de esa colección, haga(...,$_)
cree una nueva colección de dos elementos: 0)$t=...
establezca la variable$t
igual a una cadena; 1)$_
nuestro número actual del bucle"Fizz"*!($_%3)
tome nuestro número actual, modifíquelo por 3, luego NO el resultado. Multiplique "Fizz" por eso y agréguelo a la cadena (y similar para 5). PowerShell trata cualquier número que no sea cero$TRUE
y, por lo tanto, el NOT de un número que no sea cero es 0, lo que significa que solo si nuestro número actual es un múltiplo de 3, "Fizz" se agregará a la cadena.[!$t]
índices en la colección que acabamos de crear, en función del valor de la cadena$t
: no vacía, imprímala, de lo contrario imprima nuestro número actualAlternativamente, también 54 bytes
Gracias a TesselatingHeckler
De concepto similar, utiliza el
-replace
operador en línea y una expresión regular para intercambiar una cadena vacía^$
con nuestro número actual. Si la cadena no está vacía, no se intercambia.Alternativamente, también 54 bytes
Esta es la misma estructura de bucle que la anterior, pero en su interior ordena el par (n, cadena) y se basa en el hecho de que una cadena vacía se ordena antes de un número, pero una cadena FizzBuzz se ordena después de un número. Luego indexa el segundo resultado de clasificación.
fuente
||
operador, como en C #, probablemente podríamos bajar a 43 bytes con algo similar a1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}
... dudoso, ya que|
es un operador especial tan importante en PowerShell, pero puedo soñar ...1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}
para 54?if($t){$t}else{$_}
con algo como($t,$_)[!$t]
1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}
que también es 54 como la sugerencia deJavaScript, 62 bytes
Creo que esta es la solución Javascript más corta ahora.
fuente
console.log
; es mucho menos molesto que tener que presionar "OK" en 100 cuadros emergentes seguidos. ¿Podrías cambiar esto? Solo tendrá 62 bytes, tres más que el mío.C, 74 bytes
El
0
argumento de enprintf
lugar de""
es sospechoso, pero parece funcionar en la mayoría de las plataformas en las que lo pruebo.puts
sin embargo, se daña cuando intentas lo mismo. Sin ella, obtienes 75 bytes.Hay soluciones de 73 bytes que funcionan en el golf de anarquía , y encontré una buscando en los lugares correctos en Internet, pero se basan en el comportamiento específico de la plataforma. (Como habrás adivinado, es algo así como la forma
puts("Buzz"±...)
).fuente
./fizzbuzz $(seq 40)
: PScratch,
203185 bytesBytes contados a partir de la representación textual de golf , según esta meta publicación . Scratch no es muy eficiente en espacio.
say
es lo más parecido a un stdout Scratch: el sprite muestra una burbuja de diálogo que contiene todo lo que dice. En la práctica,wait n secs
se necesitaría un bloque para leer realmente esta salida, pero a los efectos de este desafío, este código cumple los requisitos.fuente
y =
(en ambos casos)set y to ...
falta de un valorR,
8883777170 bytesEstoy seguro de que esto se puede mejorar... y fue con crédito a @flodel. Un par de bytes más guardados gracias a una sugerencia de @njnnja y otra de @ J.Doefuente
x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
write
lugar decat
embargowrite
llamada puede tomar un 1 en lugar de una cadena vacía, por lo quex=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)
es un trivial golf de 1 byte para 70 bytes.Haskell, 84 bytes
Acercarse a los 81 bytes de henkma , pero aún no está allí.
d = drop.(*4).mod n
es clave aquí:d 3 "Fizz"
esdrop (n`mod`3 * 4) "Fizz"
. Esto es"Fizz"
cuandon `mod` 3
es 0 y de lo""
contrario.fuente
(%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]]
.n
no está dentro del alcance. Hm.main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
PHP, 54 bytes
Válido para v5.5 en adelante. El
õ
es el carácter 245, un poco invertido\n
.Asumo la configuración predeterminada del intérprete, ya que no tienen ini. Si no está seguro, puede deshabilitar su ini local
-n
como enphp -n fizzbuzz.php
.Una versión que se ejecutará sin errores con absolutamente cualquier archivo de configuración es de 62 bytes :
fuente
short_open_tag
está apagado,E_NOTICE
está encendido. Ninguno de estos son ajustes predeterminados.80386 código máquina + DOS, 75 bytes
Hexdump del código:
Código fuente (sintaxis TASM):
Este código cuenta de 1 a 100 pulgadas
ax
, construyendo el mensaje de salida desde el final hasta el principio. El final del mensaje (nueva línea y el$
carácter que usa DOS para el indicador de fin de mensaje) aparece al principio del código:Se ejecuta como una instrucción inofensiva (
or ax, 240ah
). Podría ponerlo en un lugar más convencional, como después del final del código, pero tenerlo en la dirección 0x100 tiene un beneficio.El código también usa 2 contadores adicionales:
dl
dh
Cuando un contador llega a 0, empuja la cadena
Fizz
oBuzz
al final del mensaje de salida. Si esto sucede,bx
se reducirá ybh
será cero. Esto se usa como condición para generar el número en forma decimal.Nota: estoy usando datos de 32 bits aquí. Esto no funcionará en una computadora anterior a 386.
fuente
mov [mem], 'Fizz'
para almacenarFizz
en ese orden en la memoria, lasdb
directivas coincidentes . Vea mi YASM FizzBuzz "eficiente" excesivamente complicado, por ejemplo .std
, entoncesstosb
/stosd
? Tendría que reemplazartest bh,bh
concmp di, 100h
o algo así. En lugar de guardar / restaurar el contador en AL, puede mantenerlo en BL y simplemente clobber eax cuando lo desee. Por ejemplo,sub bx, 4
/mov dword ptr [bx], 'zzuB'
es 3 + 7 bytes, ¿verdad?mov eax, 'zzuB' / stosd
es de 6 + 2 bytes (prefijo de tamaño de operando en ambos). Sería bueno que la respuesta incluyera el desmontaje para que los tamaños de las instrucciones fueran visibles.stosd
pero no pude buscar ninguna reducción de puntaje yo mismo. Desdestosd
decrementosDI
posteriores, no puede perder elsub di, 4
y luego tieneDI
4 bytes de descuento al final. Pude-6 bytes
usar algunos otros ajustes menores que terminé publicando como una respuesta por separado (solo porque no cabía en ningún comentario). ¡Prestigio!corriente continua,
6462 bytesSin golf:
fuente