Crie a implementação FizzBuzz ofuscada mais curta possível.
Para ser considerado ofuscado, deve atender a pelo menos um dos seguintes:
- Não contém nenhuma das palavras "Fizz", "Buzz" ou "FizzBuzz"
- Não contém os números 3, 5 ou 15.
- Use qualquer uma das opções acima de maneira enganosa.
Lembre-se: o objetivo é ser curto e difícil de seguir.
O exemplo de código que inspirou essa pergunta é a seguir:
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);
}
}
code-golf
obfuscation
restricted-source
mootinator
fonte
fonte
Respostas:
GolfScript,
7569656059 caracteresEntão, você acha que o GolfScript por si só já está ofuscado, certo? Bem, apenas para seguir as especificações, decidi que o programa não contenha "fizz", "buzz", nem os números 3, 5 ou 15. :-)
Sim, existem alguns números com múltiplos de 5, como 25, 35, 90, 100 e 6875. São arenques vermelhos? Você decide. ;-)
fonte
Caracteres Javascript 97 - nenhum número
Números? Quem precisa de número quando você tem Javascript!
Nota: Há um loop infinito que alertará a sequência.
Bônus (666 caracteres)
(apenaszfor
foi usada em todo o script).
fonte
z
.+!![]
é o mesmo que1
e({}+"")[5]
é o mesmoc
) e de abusar da notação de matriz para acessar o método (ex .:window['eval'](
é o mesmoeval(
).Python - 78 caracteres
fonte
PostScript, 96 bytes
Tão ofuscado que parece lixo aleatório.
Uso:
$ gs -q -dNODISPLAY -dNOPROMPT file.ps
fonte
C ++: 886 caracteres
Eu tentei esconder o 'fizz' e o 'buzz'. Você pode identificá-los?
fonte
DC (
256255 bytes)Aqui está, tentei (com bastante sucesso, se assim posso dizer) esconder qualquer coisa, exceto as letras, e
+-[];:=
(que são vitais e impossíveis de ofuscar). Ele falha após ter atingido cerca de 8482 na minha máquina, mas isso tem a ver com problemas de pilha relacionados à maneira como a recursão é implementada. A solução em si está correta. 255 bytes se você remover o espaço em branco (incluído para facilitar a leitura)fonte
Isso foi um pouco complicado de incorporar usando o recuo, então uma essência:
Ruby, 4312 caracteres
https://gist.github.com/dzucconi/1f88a6dffa2f145f370f
fonte
Brainfuck -
626656Vai de 1 a 255
fonte
Brainfuck, 708 caracteres
A descrição de como funciona está disponível na minha pergunta de Revisão de código.
fonte
Haskell -
147142138 caracteresO código tem 19 caracteres a mais do que precisa, mas achei que a estética valeu a pena! Acredito que todos os três "objetivos" sejam satisfeitos.
fonte
zZ' is applied to six arguments, but its type
(a0 -> b0 -> c0) -> [a0] -> [b0] -> [c0] 'possui apenas três["1","2","3","4","5","6"...]
.bu
,fi
,zz
, ezZ
. Estes podem ser reduzidos para nomes de uma letra.𝔼𝕊𝕄𝕚𝕟, 33 caracteres / 92 bytes (não competitivo)
Try it here (Firefox only).
Esse idioma é muito OP para desafios de origem restrita.
fonte
Javascript, 469 bytes
Esta foi provavelmente a mais divertida que já tive.
Experimente aqui
fonte
Ruby - 165 caracteres
Esta foi a minha primeira tentativa de código de golfe. Eu me diverti muito. =)
fonte
Perl 6 (52 bytes)
Deixe-me colocar uma explicação aqui. É o pior abuso de regra que cometi nessa tarefa. Eu sei o que você está dizendo - é óbvio
Fizz
eBuzz
aqui. Mas vamos dar uma olhada nas regras.Isso evita
3
,5
e15
. Portanto, é uma solução válida e muito curta.fonte
Scala, 295 caracteres
fonte
C (
237209caracteres)Embora eu não tenha certeza se isso está de acordo com o padrão C :)
Mas funciona. No Linux usando GCC, é isso.
fonte
Python 3 - 338
Este é o meu primeiro golfe. Não é o mais curto, mas é muito feio! Nenhum dos números proibidos ou literais de cadeias. Firp, Burp!
fonte
Python - 157
Não é o mais curto, mas espero que o leitor aprecie o estilo funcional puro e a extensibilidade a contagens arbitrariamente longas.
fonte
K, 155
Eu poderia jogar um pouco de golfe, mas prefiro que fique mais ofuscado.
fonte
Python 2-54 caracteres
Python 3-56 caracteres
Se você não deseja que o 'FizzBuzz' apareça:
Python 2-58 caracteres
Python 3-60 caracteres
Ou como vencer o GolfScript com Python;)
fonte
i=0
significa que owhile
loop nunca é inserido.i<20
.Caracteres JavaScript 111 - sem números-chave
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>")
fonte
C # - 218 caracteres
Pode ser abreviado se eu apresentei outros números da seguinte forma: (total de 210 caracteres)
Decidiu remover a palavra óbvia chiar e zumbir e procurar um pouco mais de ofuscação. O segundo é mais curto que o primeiro, mas é um pouco mais direto sobre o que está ocorrendo na adição.
fonte
Isso não é exatamente um jogo de golfe, são cerca de 120 linhas.
Eu pensei em fazer algo que aproveitasse todo o potencial divertido de comportamento indefinido com o gerenciamento de memória C ++.
fonte
Ruby - 89 caracteres
Não posso me responsabilizar por esse pedaço de brilho, mas não poderia deixar essa pergunta sem minha implementação ofuscada favorita :)
A implementação acima foi escrita por David Brady e é da gema fizzbuzz ruby. Aqui está a explicação do código fonte:
Ruby - 87 caracteres
Aqui está uma versão diferente que usa uma semente mais curta, mas a tabela de pesquisa está em uma ordem diferente. Aqui está a explicação do código fonte:
fonte
Python, 1 linha, 376 caracteres
pep8-E501 ignorado. Só funciona em python3.
fonte
Ruby alternativo (126 caracteres)
Curto e obscuro, exatamente como gostamos. O 3 e o 5 estão realmente lá, mas não como literais inteiros, então eu acho que ainda conta.
Observe que esta é a versão mais curta do Ruby, sem literal 'Fizz', 'Buzz', 'FizzBuzz' aqui.
fonte
Squeak (4.4) Smalltalk 206 bytes
Ou mesmo algoritmo com menos mensagens explícitas, mesmo número de caracteres
Peço desculpas a Alan Kay pelo que fiz com Smalltalk.
Alguns desses hacks são portáteis em dialetos Smalltalk, alguns exigiriam uma camada de compatibilidade Squeak ...
Observe que, se você executar em uma área de trabalho, poderá omitir declarações | fi zz buz | e ganhe 14 caracteres.
Se pudermos pagar 357 caracteres (315 com vars de uma letra), é melhor evitar #to: do: loop:
fonte
Haskell 226 bytes, incluindo o espaço em branco para o layout;)
O código 'real' tem 160 bytes e pode ser compactado, mas perde o tempo de ebulição.
Execute-o (para obter uma saída agradável):
Resultado:
fonte
Perl
Um que eu fiz em 2009. No entanto, é bem fácil descobrir.
Edit: Droga, ele usa "Fizz" e "Buzz!" :( Eu pensei que tinha mudado isso. Deixa pra lá então.
fonte
C 216 bytes
fonte