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 \no \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
xy 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 incrementandonen cada pasada siguiente.Luego duplicamos
ncon:. Comones 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,
nes positivo y giramos a la derecha, ejecutando_101/cuál se dividenpor 101. Sines 101, entoncesn/101 = 1nos convertimos en@, que termina el programa. De lo contrario, nuestra situación actual esNaranja 1 (mod 3)
3convierte el cero superior en un 3 (10*0 + 3 = 3) y%realiza un módulo. Sin%3es 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%3era 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:..generaBuzzsin%5es cero.Azul oscuro
La sección anterior deja las pilas como
{desplaza lan%3espalda 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 + 0en 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 quesayincluye automáticamente una nueva línea (¡Gracias @Dennis !):Perl 5, 50 bytes
fuente
say.-E"..."8 bytes? Espacio + Guión + Opción + Argumento (+ Comillas).-Eson 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 -eyperl -Eno es más bytes (pensé-M5.010o tambiénuse 5.010puede ser gratuito, pero tal vez no vuelva a leer la meta publicación). Al agregar-po-nesto 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
?dcon100una solución de 51 bytes.Este parece ser el récord mundial.
fuente
?des justo100. LaFizzBuzzcadena 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 losscaracteres, ignorando los índices que apuntan fuera de la cadena. Si el argumentoputsya 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.timeslugar.[i=n**4%-15,i+13]parte por favor? Parece que no puedo entenderloi==-14el corte está fuera de los límites, entonces obtenemosnil. Sii==-9dividimos losi+13==4caracteres comenzando desde el noveno carácter desde el final, entonces'Fizz'. Sii==-5dividimos 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
enumtruco, pero no creo que la lógica sea más corta que esto (86 adentromain).fuente
class F{public static->interface F{staticen 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 .aes 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 por3puede 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 entrezy_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 lazzduplicación deFizzyBuzz.Hacemos exactamente lo mismo para la divisibilidad por
5yBu;, 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 loszzs:Es decir, convertimos cada punto y coma,
zzpero 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,BuzzyFizzBuzzlas 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
-Eopció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,
-lse ahorraría un byte (al reemplazar$/). Por Clásico Reglas Perlgolf , sin embargo, esto contaría 3: una para el-, uno para elly otro para el espacio necesario.fuente
say, con el-Einterruptor, que tiene una distancia de edición de 1-e, por lo que debe contar como 1 byte.say, supuse que-Ese puede usar en lugar de-elo 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 usoprintpara 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=0se 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 0entonces 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
Ay<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
ofinal 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
\x05termina 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
gccno 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)*iconi%3*i%5?i:0Me 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?$Xes 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).wes la forma abreviada delWRITEcomando. La sintaxiscommand:condition argses 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, escribiendoien el terminal. La$Xvariable, 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
fciclos por 3,bciclos por 5,d1es un dígito,d2es decenas dígitos,ses un indicador para imprimir diez dígitos,dciclos por 10,ces espacio de copiad,tes espacio de trabajo que contiene 0 o datos basura o un indicador para no -divisible-by-3, yadetermina 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
Writey agregar la nueva línea directamente a la cadena, ¿verdad?i%3*i%5>0?i:0lugar dei%3*i%5==0?0:i.fordeclaració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
printlnmisma 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$tigual 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$TRUEy, 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
-replaceoperador 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
0argumento de enprintflugar de""es sospechoso, pero parece funcionar en la mayoría de las plataformas en las que lo pruebo.putssin 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.
sayes 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 secsse 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")writelugar decatembargowritellamada 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 nes clave aquí:d 3 "Fizz"esdrop (n`mod`3 * 4) "Fizz". Esto es"Fizz"cuandon `mod` 3es 0 y de lo""contrario.fuente
(%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]].nno 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
-ncomo 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_tagestá apagado,E_NOTICEestá 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:
dldhCuando un contador llega a 0, empuja la cadena
FizzoBuzzal final del mensaje de salida. Si esto sucede,bxse reducirá ybhserá 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 almacenarFizzen ese orden en la memoria, lasdbdirectivas coincidentes . Vea mi YASM FizzBuzz "eficiente" excesivamente complicado, por ejemplo .std, entoncesstosb/stosd? Tendría que reemplazartest bh,bhconcmp di, 100ho 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' / stosdes 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.stosdpero no pude buscar ninguna reducción de puntaje yo mismo. DesdestosddecrementosDIposteriores, no puede perder elsub di, 4y luego tieneDI4 bytes de descuento al final. Pude-6 bytesusar 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