FizzBuzz Golf ofuscado [cerrado]

50

Cree la implementación de FizzBuzz ofuscada más corta posible.

Para ser considerado ofuscado, debe satisfacer al menos uno de los siguientes:

  1. No contiene ninguna de las palabras "Fizz", "Buzz" o "FizzBuzz"
  2. No contiene los números 3, 5 o 15.
  3. Utilice cualquiera de los anteriores de manera engañosa.

Recuerde: el objetivo es ser corto y difícil de seguir.

El ejemplo de código que inspiró esta pregunta es el siguiente:

public class Default
{
        enum FizzBuzz
        {
            Buzz = 1,
            Fizz,
            FizzBuzz
        }
        public static void Main(string[] args)
        {
            byte[] foo = 
              Convert.FromBase64String("IAmGMEiCIQySYAiDJBjCIAmGMEiCIQySYA==");
            MemoryStream ms = new MemoryStream(foo);
            byte[] myByte = new byte[1];
            do
            {
                FizzBuzz fb;
                ms.Read(myByte, 0, 1);
                for (int i = 0; i < 4; i++)
                {
                    fb = (FizzBuzz)(myByte[0] >> (2 * i) 
                         & (int)FizzBuzz.FizzBuzz);
                    Console.Out.WriteLine( (((int)fb > 0) ? "" + fb : "" 
                         + ((ms.Position - 1) * 4 + i + 1)));
                }
            } while (ms.Position < ms.Length);
        }
}
mootinator
fuente
¿Cómo sabes el límite? En su solución tiene ms.Length pero en algunas soluciones no hay tal límite ...
Labo
Estoy votando para cerrar esta pregunta como fuera de tema porque no tiene un criterio de validez objetivo, por lo que es imposible decidir indiscutiblemente si una presentación sigue las reglas.
Dennis

Respuestas:

25

GolfScript, 75 69 65 60 59 caracteres

100,{)6,{.(&},{1$1$%{;}{4*35+6875*25base{90\-}%}if}%\or}%n*

Entonces, pensarías que GolfScript por sí solo ya está ofuscado, ¿verdad? Bueno, solo para seguir las especificaciones, decidí que el programa no contuviera "fizz", "buzz", ni los números 3, 5, ni 15. :-)

Sí, hay algunos números con múltiplos de 5, como 25, 35, 90, 100 y 6875. ¿Son pistas falsas? Tú decides. ;-)

Chris Jester-Young
fuente
2
Aunque he escrito comentarios para todos mis otros envíos de GolfScript, ninguno se enviará para este. Justificación: chat.stackexchange.com/transcript/message/436819#436819 :-D
Chris Jester-Young
¡Los números 3 y 5 aparecen en su código, por lo que no es correcto!
Labo
@Labo Solo se debe cumplir uno de los criterios, no los tres. Lee la pregunta nuevamente. :-)
Chris Jester-Young
Es una broma ? ¡Me paso varias horas en eso! Aunque todavía logré tener un código Python de 58 caracteres de largo: p codegolf.stackexchange.com/a/63543/47040
Labo
44
@Labo: Puedo ver los dígitos 3 y 5 pero no los números 3 y 5.
David Ongaro
65

Javascript 97 chars - sin números en absoluto

Números ¡Quién necesita número cuando tienes Javascript!

a=b=!![]+![],a--,c=b+b;while(++a)e=!(a%(c+c+b)),alert(!(a%(c+b))?e?"FizzBuzz":"Fizz":e?"Buzz":a);

Nota: Hay un bucle infinito que te alertará sobre la secuencia.

Bonificación (666 caracteres)

  • Sin número
  • Sin letra (solo zforse ha usado en todo el script)

.

_=$=+!![];$__=((_$={})+'')[_+$+_+$+_];__$=((![])+'')[$];_$_=((_$={})+'')
[_+$+_+$+_+$];____=[][$__+((_$={})+'')[$]+(($)/(![])+'')[$]+$__+__$+_$_];$__$=(!![]+"")
[$+$+$]+([][(![]+"")[$+$+$]+(+[]+{})[$+$]+(!![]+"")[$]+(!![]+"")[+[]]]+"")[($+$)+""+
($+$+$)]+(![]+"")[$]+(![]+"")[$+$];$_$_=____()[$-$][$__$]("\"\\"+($)+($+$+$+$+$+$+$)+
($+$)+"\"");_$=(![]+'')[$-$]+([][[]]+[])[$+$+$+$+$]+$_$_+$_$_;$_=(_+{})[$+$+$]+(!![]+'')
[_+$]+$_$_+$_$_;_--,$$=$+$;____()[$-$][$__$]((![]+"")[+[]]+(+[]+{})[$+$]+(!![]+"")[$]+
"(;++_;)$$$=!(_%("+($$+$$+$)+")),____()[+[]][__$+((![])+'')["+($+$)+"]+((!![])+'')["+
($+$+$)+"]+((!![])+'')[+!![]]+_$_](!(_%("+($$+$)+"))?$$$?_$+$_:_$:$$$?$_:_);");
HoLyVieR
fuente
18
Código de programador real como el segundo.
99
@ M28: Sí. Esa es una forma de crear seguridad laboral ... porque encontrar a alguien que pueda mantener este código no sería lo más fácil.
Andy
1
Puede usar la ventana ["eval"] ('"\\' + 1 + 7 + 2 + '"') para z.
Nabb
3
@stevether Se trata principalmente de abusar de la conversión de tipos (ej .: +!![]es lo mismo 1y ({}+"")[5]es lo mismo que c) y abusar de la notación de matriz para acceder al método (ej .: window['eval'](es lo mismo eval().
HoLyVieR
1
Recuento de caracteres apropiado si alguna vez he visto uno.
captncraig
26

Python - 78 caracteres

i=0
while 1:i+=1;print"".join("BzuzzizF"[::2*j]for j in(-1,1)if 1>i%(4+j))or i
gnibbler
fuente
1
Me tomó 10 minutos entender lo que hiciste allí. Agradable y retorcido.
Trufa
23

PostScript, 96 bytes

Tan ofuscado parece basura al azar.

1<~0o0@eOuP7\C+tf6HS7j&H?t`<0f>,/0TnSG01KZ%H9ub#H@9L>I=%,:23M].P!+.F6?RU#I;*;AP#XYnP"5~>cvx exec

Uso: $ gs -q -dNODISPLAY -dNOPROMPT file.ps

KirarinSnow
fuente
55
Apuesto a que pasa diehard .
kaoD
23

C ++: 886 caracteres

He tratado de ocultar el 'fizz' y el 'zumbido'. ¿Puedes verlos?

#include <iostream>
#define d(a,b) a b
#define _(a,b) d(#b,#a)
#define b(b) _(b,b)
#define y _(i,f)c
#define x _(u,b)c
#define c b(z)
#define i int
#define p main
#define s char
#define q 810092048
#define h for
#define m 48
#define a ++
#define e ==
#define g 58
#define n 49
#define l <<
#define oe std::cout<<
#define v '\n'

int  p   (i,  s*t     ){i   j  =   q;h   (*(
i    *     )    t     =  m  ;  2     [     t
]?   0    :    1      ??(   t  ]    ?     a
1    [   t    ]       e  g  ?  1   [     t
]    =   48,  ++0     ??(    t]e   g?0   ??(

t]=  n   ,1[  t]=
2    [     t    ]
=m   :    1    :
1    :   a    0
[    t   ??)  ==g

?0[   t  ]   =49   ,1[
t  ]  =  m     :     1
;j=   (  j    /     4
)  |  (  (   j     &
3)l    28)   )oe   (j&

3?j  &   1?j  &2?
y    x     :    y
:x   :    t    )
l    v   ;    }
i    f   =m&  ~g;
Skizz
fuente
55
Eso confunde mi cerebro.
Mateen Ulhaq
2
Creo que te referías a membrana
Korvin Szanto
16

DC ( 256 255 bytes)

Aquí está, intenté (con bastante éxito, si puedo decirlo yo mismo) ocultar todo excepto las letras y +-[];:=(que son vitales e imposibles de ofuscar). Hace segfault después de llegar aproximadamente a 8482 en mi máquina, pero eso tiene que ver con problemas de pila relacionados con la forma en que se implementa la recursividad. La solución en es correcta. 255 bytes si elimina el espacio en blanco (incluido para facilitar la lectura) Disfrute:

Izzzdsa+dsbrsc+dsdd+sozdsezzsm+s
nloddd++splbz++ddaso+dln-dstsqlm
d+-sr[PPPP]ss[IP]su[lpdlqlrlsxlu
x]lm:f[lpdltdI+lm+rlblm+-lsxlux]
ln:f[[]sulm;fxln;f[IP]sux]la:f[;
fsk]sg[lmlgx]sh[lnlgx]si[lalgx]s
j[lc[lcp]sklerldlolclerlblolcler
lalox=hx=ix=jlkxclcz+scllx]dslx
Hiato
fuente
+1 para dc. Incluso no ofuscado, por supuesto, no es especialmente legible .
Jesse Millikan
12

Esto fue un poco complicado de insertar usando la sangría, así que una idea general:

Ruby, 4312 caracteres

https://gist.github.com/dzucconi/1f88a6dffa2f145f370f

eval("                                                 

















































                                                                                                                             ".split(/\n/).map(&:size).pack("C*"))
dzuc
fuente
¿Cómo funciona esto?
addison
._. Cómo funciona esto ...
TuxCrafting
"cadena de su programa" .unpack ("C *"). map {| x | "" * x} .join ("\ n")
dzuc
11

Brainfuck - 626 656

+[[>+>+<<-]>>>+++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]<[<+>>+<-]>>[-]+++>[
<<<+>>>-]>[-]<<<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[-]<<<<[>+<-]>>>[<
<<+>>>-]<<[>>+<<-]<[>+>+<<-]>[<+>-]+>[<->[-]]<[>>>[-]>[-]<>+++++++[<++
++++++++>-]<.>+++++[<+++++++>-]<.+++++++++++++++++..[-]+<<<-]<[-]>>>[<
+<+>>-]<[>+<-]+<[>-<[-]]>[>>>[-]>[-]<>++++++[<+++++++++++>-]<.>+++++[<
++++++++++>-]<+.+++++..[-]<+<<-]>[-]>[<+<+>>-]<[>+<-]+<[>-<[-]]>[<<<<[
>+>>>>+<<<<<-]>[<+>-]>>>>>>--[<->+++++]<--<[->-[>+>>]>[+[-<+>]>+>>]<<<
<<]>[-]<-[>-<+++++]>--->>[<<[<+>>>+<<-]<[>+<-]>>>.[-]]++++++++++<[->-[
>+>>]>[+[-<+>]>+>>]<<<<<]>[-]<<[>+>>>+<<<<-]>>>>.[-]<<<[>>+<<-]>>.[-]<
<<<<-]<<<++++++++++.[-]<+]

Va de 1 a 255

captncraig
fuente
1
Resulta que esto realmente hace BuzzFizz. Obtiene FizzBuzz correcto para% 15, pero intercambia% 3 y% 5. Puedo tratar de arreglarlo, pero por ahora mi cerebro está oficialmente F'ed
captncraig
2
Se corrigió a un costo de 30. Podría haber jugado más al golf con esfuerzo, pero ya he perdido suficiente tiempo en esto.
captncraig
99
"desperdicio" es una palabra fuerte ...
Claudiu
10

Brainfuck, 708 personajes

++++++++++[>++++++++++<-]>>++++++++++>->>>>>>>>>>>>>>>>-->+++++++[->++
++++++++<]>[->+>+>+>+<<<<]+++>>+++>>>++++++++[-<++++<++++<++++>>>]++++
+[-<++++<++++>>]>>-->++++++[->+++++++++++<]>[->+>+>+>+<<<<]+++++>>+>++
++++>++++++>++++++++[-<++++<++++<++++>>>]++++++[-<+++<+++<+++>>>]>>-->
---+[-<+]-<[+[->+]-<<->>>+>[-]++[-->++]-->+++[---++[--<++]---->>-<+>[+
+++[----<++++]--[>]++[-->++]--<]>++[--+[-<+]->>[-]+++++[---->++++]-->[
->+<]>>[.>]++[-->++]]-->+++]---+[-<+]->>-[+>>>+[-<+]->>>++++++++++<<[-
>+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>>[-]>>>++++++++++<[->-[>+>>]>[+[-<+>]>
+>>]<<<<<]>[-]>>[>++++++[-<++++++++>]<.<<+>+>[-]]<[<[->-<]++++++[->+++
+++++<]>.[-]]<<++++++[-<++++++++>]<.[-]<<[-<+>]+[-<+]->>]+[-]<<<.>>>+[
-<+]-<<]

La descripción de cómo funciona está disponible en mi pregunta de Revisión de Código

Simon Forsberg
fuente
9

Haskell - 147 142 138 caracteres

fi=zz.bu
bu=zz.(:).(++"zz")
[]#zz=zz;zz#__=zz
zZ%zz=zZ zz$zZ%zz
zz=(([[],[]]++).)
z=zipWith3(((#).).(++))(bu%"Fi")(fi%"Bu")$map show[1..]

El código tiene 19 caracteres más de lo que debe ser, ¡pero pensé que la estética valía la pena! Creo que los tres "objetivos" están satisfechos.

> take 20 z
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14",
"FizzBuzz","16","17","Fizz","19","Buzz"]
MtnViewMark
fuente
Hola, trato de entender tu código, ¡pero no puedo ejecutarlo! La función zZ' is applied to six arguments, but its type (a0 -> b0 -> c0) -> [a0] -> [b0] -> [c0] 'solo tiene tres
RobAu
Y yo, mientras puedo ejecutarlo, solo lo consigo ["1","2","3","4","5","6"...].
Artyom
Solucionado - La versión correcta todavía estaba en mi disco ... ¡debe haber pegado mal el texto hace mucho tiempo!
MtnViewMark
especifique cómo se puede acortar en 19 caracteres o muestre el código. Tengo curiosidad y no tengo idea
orgulloso Haskeller
Existen 19 ocurrencias de nombres de letras 2: bu, fi, zzy zZ. Estos podrían acortarse a nombres de una letra.
MtnViewMark
8

𝔼𝕊𝕄𝕚𝕟, 33 caracteres / 92 bytes (no competitivo)

ѨŃ(1,ṥ)ć⇀ᵖɘƃ႖סР깜 #ē($%3⅋4,$%5?4:8)⋎$⸩

Try it here (Firefox only).

Este lenguaje es demasiado OP para desafíos de fuente restringida.

Mama Fun Roll
fuente
6

Javascript, 469 bytes

Esta fue probablemente la más divertida que he tenido.

z=0;_=(function(){b=0;window[0xA95ED.toString(36)]((function(){yay="&F bottles of beer on the wall, &F bottles of beer. Take one down, pass it around, &z Bottles of beer on the wall.";return atob("eisrOyAg") + "console.log(((function(y){if((y%0xf)==0){return [1,72,84,84,86,78,84,84]}else if(y%0b11==0){return [1,72,84,84]}else if(y%0b101==0){return [86,78,84,84]}else{b=1;return [y]}})(z).map(function(x){return b==0?yay[x]:x}) ).join(''))"})())});setInterval(_,1000);

Pruébalo aquí

anOKsquirrel
fuente
Dang, me acabo de dar cuenta de que el objetivo era ser corto y difícil de seguir ... Lo siento: P
anOKsquirrel
+1 Puede que te hayas perdido la falta, pero al menos no tenías un zumbido de fizz
MickyT
4

Ruby - 165 caracteres

(1..100).each{|i|i%0xF==0? puts(["46697A7A42757A7A"].pack("H*")):i%(0xD-0xA)==0? puts(["46697A7A"].pack("H*")):i%(0xF-0xA)==0? puts(["42757A7A"].pack("H*")):puts(i)}

Este fue mi primer intento de código de golf. Tuve un montón de diversión. =)

Esplendor
fuente
4

Perl 6 (52 bytes)

say "Fizz"x$_%%(2+1)~"Buzz"x$_%%(4+1)||$_ for 1..100

Déjame poner una explicación aquí. Es el peor abuso de reglas que he cometido en esa tarea. Sé lo que estás diciendo: hay obvio FizzyBuzz aquí. Pero echemos un vistazo a las reglas.

Para ser considerado ofuscado, debe satisfacer al menos uno de los siguientes:

Esto evita 3, 5y 15. Por lo tanto, es una solución válida y realmente corta.

Konrad Borowski
fuente
3

Scala, 295 caracteres

object F extends Application{var(f,i,z)=("",('z'/'z'),"FBiuzzzz");while(i<(-'b'+'u'+'z'/'z')*('¥'/'!')){if(i%(-'f'+'i'/('z'/'z'))==0)f+=z.sliding(1,2).mkString;if(i%((-'b'+'u'+'z'/'z')/('f'/'f'+'i'/'i'+'z'/'z'+'z'/'z'))==0)f+=z.drop(1).sliding(1,2).mkString;if(f=="")f+=i;println(f);i+=1;f="";}}
Gareth
fuente
3

C ( 237 209 caracteres)

#include<stdlib.h>
#define e printf  
a=50358598,b=83916098,c=1862302330;_(m,n){return(m%((c&n)>>24))
||!(e(&n)|e(&c));}main(_);(*__[])(_)={main,exit};main(i){_(i,a)
&_(i,b)&&e("%i",i);e("\n");__[i>=100](++i);}

Aunque no estoy seguro de que esto se ajuste al estándar C :)
Sin embargo, funciona. En Linux usando GCC, eso es.

marinus
fuente
3

Python 3 - 338

import sys
def fibu():
        (F,I,B,U),i,u,z=sys._getframe(0).f_code.co_name,0xf,0xb,lambda x,y:x%((i//u)+(i^u))==u>>i if y>u else x%(((u<<(u>>2))&i)>>(u>>2))==i>>u
        A,RP = "",chr(ord(U)+((i//u)+(i^u)))*2
        for x in range(100):print(x if not (z(x,u)or z(x,i))else A.join((F+I+RP if z(x,u)else A,B+U+RP if z(x,i)else A)))
fibu()

Este es mi primer golf. No es el más corto, ¡pero es bastante feo! Ninguno de los números prohibidos o literales de cadena. Firp, Burp!

LexyStardust
fuente
3

Python - 157

from itertools import cycle as r
c=str.replace
[c(c(c(z+y,'x','fix'),'y','bux'),'x','zz').strip() or x for z,y,x in zip(r('  y'),r('    x'),range(1,101))]

No es el más corto, pero espero que el lector aprecie el estilo funcional puro y la extensibilidad a cuentas arbitrariamente largas.

Marcin
fuente
3

K, 155

{m:{x-y*x div y};s:{"c"$(10-!#x)+"i"$x};$[&/0=m[x]'(2+"I"$"c"$49;4+"I"$"c"$49);s"<`rs<pvw";0=m[x;2+"I"$"c"$49];s"<`rs";0=m[x;4+"I"$"c"$49];s"8lrs";x]}'!100

Podría jugar golf bastante pero preferiría que estuviera más ofuscado.

tmartin
fuente
3

Python 2 - 54 caracteres

i=0
while 1:i+=1;print'FizzBuzz'[i%~2&4:12&8+i%~4]or i

Python 3 - 56 caracteres

i=0
while 1:i+=1;print('FizzBuzz'[i%~2&4:12&8+i%~4]or i)

Si no desea que aparezca 'FizzBuzz':

Python 2 - 58 caracteres

i=0
while 1:i+=1;print' zzuBzziF'[12&8+i%~2:i%~4&4:-1]or i

Python 3 - 60 caracteres

i=0
while 1:i+=1;print(' zzuBzziF'[12&8+i%~2:i%~4&4:-1]or i)

O cómo vencer a GolfScript con Python;)

Labo
fuente
Los dos primeros parecen no hacer nada, ya que i=0significa que el whileciclo nunca se ingresa.
xnor
Lol Usé mi versión de prueba, en la que está la condición i<20.
Labo
Pero ahora funciona :)
Labo
¿No debería detenerse en 100 de acuerdo con el problema original de FizzBuzz?
David Ongaro
2

JavaScript 111 caracteres: sin números clave

a=b=c=0;while(a++<99)document.write((b>1?(b=0,"Fizz"):(b++,""))+(c==4?(c=0,"Buzz"):(c++,""))+(b*c?a:"")+"<br>")

aaaaaaaaaaaa
fuente
2

C # - 218 caracteres

using System;class D{static void Main(){int l,i,O=1;l++;string c="zz",a="fi",b="bu";l++;l++;i=l;i++;i++;for(;O<101;O++)Console.WriteLine(((O%l)>0&&1>(O%i))?a+c:(1>(O%l)&&(O%i)>0)?b+c:(1>(O%l)&&1>(O%i))?a+c+b+c:O+"");}}

Podría acortarse si introdujera otros números así: (210 caracteres en total)

using System;class D{static void Main(){int l=1,i,O=1;string c="zz",a="fi",b="bu";l+=2;i=l;i+=2;for(;O<101;O++)Console.WriteLine(((O%l)>0&&1>(O%i))?a+c:(1>(O%l)&&(O%i)>0)?b+c:(1>(O%l)&&1>(O%i))?a+c+b+c:O+"");}}

Decidí eliminar la palabra obvia fizz y zumbido e ir por un poco más de ofuscación. El segundo es más corto que el primero, pero es un poco más directo sobre lo que ocurre en la adición.

jcolebrand
fuente
2

Esto no es exactamente golf, son alrededor de 120 líneas.

Pensé que haría algo que aprovechara todo el potencial divertido para un comportamiento indefinido con la administración de memoria C ++.

#include <iostream>
#include <string>

using namespace std;

class Weh;
class HelloWorld;

class Weh
{
public:

    string value1;
    string value2;
    void (*method)(void * obj);

    Weh();

    string getV1();

    static void doNothing(void * obj);
};

class HelloWorld
{
public:
    static const int FOO = 1;
    static const int BAR = 2;
    static const int BAZ = 4;
    static const int WUG = 8;

    string hello;
    string world;
    void (*doHello)(HelloWorld * obj);

    HelloWorld();

    void * operator new(size_t size);

    void tower(int i);
    const char * doTower(int i, int j, int k);

    static void doHe1lo(HelloWorld * obj);
};

Weh::Weh()
{
    method = &doNothing;
}

void Weh::doNothing(void * obj)
{
    string s = ((Weh *) obj)->getV1();
    ((HelloWorld *) obj)->tower(1);
}

string Weh::getV1()
{
    value1[0] += 'h' - 'j' - 32;
    value1[1] += 'k' - 'g';
    value1[2] += 'u' - 'g';
    value1[3] = value1[2];
    value2 = value1 = value1.substr(0, 4);

    value2[0] += 'd' - 'h';
    value2[1] += 'w' - 'k';
    value2[2] = value1[2];
    value2[3] = value1[3];

    return "hello";
}

void * HelloWorld::operator new(size_t size)
{
    return (void *) new Weh;
}

HelloWorld::HelloWorld()
{
    hello = "hello";
    world = "world";
}

void HelloWorld::doHe1lo(HelloWorld * obj)
{
    cout << obj->hello << " " << obj->world << "!" << endl;
}

void HelloWorld::tower(int i)
{
    doTower(0, 0, i);
    tower(i + (FOO | BAR | BAZ | WUG));
}

const char * HelloWorld::doTower(int i, int j, int k)
{
    static const char * NOTHING = "";
    int hello = BAR;
    int world = BAZ;
    int helloworld = FOO | BAR | BAZ | WUG;

    if ((hello & i) && (world & j))
        cout << this->hello << this->world << endl;
    else if (hello & i)
    {
        cout << this->hello << endl;
        cout << doTower(0, j + 1, k + 1);
    }
    else if (world & j)
    {
        cout << this->world << endl;
        cout << doTower(i + 1, 0, k + 1);
    }
    else
    {
        cout << k << endl;
        cout << doTower(i + 1, j + 1, k + 1);
    }

    return NOTHING;
}

int main()
{
    HelloWorld * h = new HelloWorld;
    h->doHello(h);
}
Wug
fuente
2

Ruby - 89 caracteres

puts (0..99).map{|i|srand(1781773465)if(i%15==0);[i+1,"Fizz","Buzz","FizzBuzz"][rand(4)]}

No puedo tomar el crédito por esta brillantez, pero no podría dejar esta pregunta sin mi implementación ofuscada favorita :)

La implementación anterior fue escrita por David Brady y es de la gema rubí de fizzbuzz . Aquí está la explicación del código fuente:

Utiliza el hecho de que la semilla 1781773465 en el rand de Ruby generará la secuencia de 15 dígitos que se repite en la progresión de FizzBuzz. La premisa aquí es que queremos engañar inteligentemente a Rand para que entregue una secuencia predecible. (Es interesante notar que en realidad no obtenemos una reducción en el tamaño de la información. La secuencia de 15 dígitos puede codificarse como pares de bits y almacenarse en un número de 30 bits. Dado que 1781773465 requiere 31 bits de almacenamiento, nuestra inteligencia tiene en realidad nos costó un poco de eficiencia de almacenamiento, ¡PERO ESO NO ES EL PUNTO!

Ruby - 87 caracteres

puts (0..99).map{|i|srand(46308667)if(i%15==0);["FizzBuzz","Buzz",i+1,"Fizz"][rand(4)]}

Aquí hay una versión diferente que usa una semilla más corta pero la tabla de búsqueda está en un orden diferente. Aquí está la explicación del código fuente:

La primera implementación (89 caracteres) se adhiere al orden específico de 0 = int, 1 = Fizz, 2 = Buzz, 3 = FizzBuzz. Es posible encontrar una clave más pequeña si se cambia el orden. Hay 24 posibles permutaciones. Si suponemos que las permutaciones están distribuidas de manera uniforme en todo el espacio 2 * 31, y alrededor de un 50% de probabilidad de que esta esté "a mitad de camino", entonces podemos suponer con una confianza decente (digamos 20-50%) que hay un clave en algún lugar alrededor de 1.4e + 9 (debajo de 2 * 28). No es mucha ganancia, pero sí demuestra que aprovecha la secuencia predefinida de rand para "ocultar" 30 bits de información en menos de 30 bits de espacio.

Resultado: la permutación [3,2,0,1] aparece en la semilla 46308667, que puede almacenarse en 26 bits.

Jacob Stanley
fuente
2
muy dulce, pero contiene un literal "Fizz", "Buzz", etc., por lo que no es válido según las reglas
Arne Brasseur
2

Python, 1 línea, 376 caracteres

pep8-E501 ignorado. Solo funciona en python3.

print(*((lambda x=x: ''.join(chr(c) for c in (102, 105)) + (2 * chr(122)) + ''.join(chr(c) for c in (98, 117)) + (2 * chr(122)) + '\n' if x % (30 >> 1) == 0 else ''.join(chr(c) for c in (102, 105)) + (2 * chr(122)) + '\n' if x % (6 >> 1) == 0 else ''.join(chr(c) for c in (98, 117)) + (2 * chr(122)) + '\n' if x % (10 >> 1) == 0 else str(x) + '\n')() for x in range(1, 101)))
David Watson
fuente
2

Ruby alternativo (126 caracteres)

(1..100).map{|i|(x="\xF\3\5\1Rml6ekJ1eno=".unpack('C4m'))[-1]=~/(.*)(B.*)/
[*$~,i].zip(x).map{|o,d|i%d>0||(break $><<o<<?\n)}}

Corto y oscuro, justo como nos gusta. El 3 y el 5 están en realidad allí, pero no como literales enteros, así que creo que todavía cuenta.

Tenga en cuenta que esta es la versión más corta de Ruby sin literal 'Fizz', 'Buzz', 'FizzBuzz' aquí.

Arne Brasseur
fuente
1

Squeak (4.4) Smalltalk 206 bytes

|f i zz b u z|z:=''.b:=28r1J8D0LK. 1to:100do:[:o|0<(f:=(i:=(zz:=b\\4)//2*4)+(u:=zz\\2*4))or:[z:=z,o].b:=zz<<28+(b//4).z:=z,((z first:f)replaceFrom:1to:f with:28r1A041FHQIC7EJI>>(4-i*u*2)startingAt:1),'
'].z

O el mismo algoritmo con mensajes menos explícitos, el mismo número de caracteres

|l f i zz b u z|z:=#[].b:=36rDEB30W. 1to:100do:[:o|0<(f:=(i:=(zz:=b\\4)//2)+(u:=zz\\2)*4)or:[z:=z,('',o)].b:=zz<<28+(b//4).l:=36r2JUQE92ONA>>(1-u*i*24).1to:f do:[:k|z:=z,{l-((l:=l>>6)-1<<6)}].z:=z,'
'].'',z

Pido disculpas a Alan Kay por lo que le hice a Smalltalk.
Algunos de estos hacks son portátiles en dialectos Smalltalk, algunos requerirían una capa de compatibilidad Squeak ...

Tenga en cuenta que si ejecuta en un área de trabajo, puede omitir declaraciones | fi zz buz | y gana 14 personajes.

Si podemos permitirnos 357 caracteres (315 con vars de una sola letra), entonces es mejor evitar #to: do: loop: trivial

|fizz buzz if f fi zz b u bu z|f:=fizz:=buzz:=0.z:=#[].b:=814090528.if:=[:i|i=0or:[fi:=28.zz:=27<<7+i.u:=26.(fizz:=[zz=0or:[z:=z,{(u:=u//2)\\2+1+(zz+((fi:=fi//2)\\2+2-(zz:=zz//8)*8)*4)}.fizz value]])value]].(buzz:=[(f:=f+1)>100or:[(fi:=(zz:=b\\4)//2*17)+(bu:=zz\\2*40)>0or:[z:=z,('',f)].b:=zz<<28+(b//4).if value:fi;value:bu.z:=z,'
'.buzz value]])value.'',z
aka.nice
fuente
1

Haskell 226 bytes, incluido el espacio en blanco para el diseño;)

z=[fI$ (++)            \ 
(fi zz 1 "Fi" )        \  
(fi zz 2 "Bu" )        \ 
:[show zz]  | zz<-[1..]]
fI (zZ:zz)  | zZ==[]   \
= concat zz | 1==1=zZ  
fi zZ bu zz | zZ%bu=   \
(zz++"zz")  | 1==1=[] 
bu%zz=mod bu (zz*2+1)==0

El código 'real' es de 160 bytes y se puede comprimir, pero pierde fizz-zumbido entonces.

Ejecútelo (para una buena salida):

putStrLn (unwords (take 20 z ))

Salida:

1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz 
RobAu
fuente
0

Perl

use MIME::Base64;print map{map{(++$i,'Fizz','Buzz','FizzBuzz')[$_]."\n"}(3&ord,3&ord>>2,3&ord>>4,3&ord>>6)}split//,decode_base64"EAZJMIRBEgxhkARDGCTBEAZJMIRBEgxhkA"

Uno que hice en 2009. Sin embargo, es bastante fácil de entender.

Editar: Maldición, usa "Fizz" y "Buzz!" :( Pensé que había cambiado eso. No importa entonces.

Ry-
fuente
0

C 216 bytes

#define t(b) putchar(p+=b);
main(p,v,c){p=70;for(v=c=1;v<=p*2-40&&!(c=0);++v){if(!(v%(p/23))){t(0)t(35)t(17)t(0)++c;}if(!(v%(p/(14+c*9)))){t(-56+!c*52)t(51)t(5)t(0);++c;}if(c){t(-112)p+=60;}else printf("%i\n",v);}}
Kaslai
fuente