Запутанный FizzBuzz Golf [закрыт]


50

Создайте кратчайшую запутанную реализацию FizzBuzz.

Чтобы считаться запутанным, оно должно удовлетворять как минимум одному из следующих:

  1. Не содержит слов "Fizz", "Buzz" или "FizzBuzz"
  2. Не содержит цифры 3, 5 или 15.
  3. Используйте любой из вышеперечисленных в заблуждение.

Помните: цель состоит в том, чтобы быть коротким и трудно следовать.

Пример кода, который вдохновил этот вопрос:

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);
        }
}

Как вы знаете границы? В вашем решении у вас есть ms.Length, но в некоторых решениях такой границы нет ...
Labo

Я голосую за то, чтобы закрыть этот вопрос как не по теме, поскольку у него нет объективного критерия достоверности, что делает невозможным безоговорочно решить, соответствует ли представление правилам.
Деннис

Ответы:


25

GolfScript, 75 69 65 60 59 символов

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

Итак, вы думаете, что GolfScript сам по себе уже запутан, не так ли? Ну, просто для того, чтобы следовать спецификации, я решил, что программа не должна содержать ни «fizz», ни «buzz», ни цифр 3, 5, ни 15. :-)

Да, есть несколько чисел, кратных 5, например, 25, 35, 90, 100 и 6875. Это красная сельдь? Вам решать. ;-)


2
Несмотря на то, что я написал комментарий ко всем другим своим предложениям GolfScript, ни один не будет готов к этому. Обоснование: chat.stackexchange.com/transcript/message/436819#436819 :-D
Крис Джестер-Янг

Числа 3 и 5 появляются в вашем коде, поэтому это не правильно !!!
Labo

@Labo Только один из критериев должен быть удовлетворен, а не все три. Прочтите вопрос еще раз. :-)
Крис Шут-Янг

Это шутка ? Я трачу на это несколько часов! Хотя мне все же удалось получить код Python длиной 58 символов: p codegolf.stackexchange.com/a/63543/47040
Labo

4
@Labo: я могу видеть цифры 3 и 5, но не цифры 3 и 5.
Дэвид Онгаро

65

Javascript 97 символов - вообще никаких цифр

Номера? Кому нужен номер, когда у вас есть Javascript!

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

Примечание. Существует бесконечный цикл, который предупредит вас о последовательности.

Бонус (666 символов)

  • Нет номера
  • Нет буквы (только zforиспользовался во всем сценарии)

,

_=$=+!![];$__=((_$={})+'')[_+$+_+$+_];__$=((![])+'')[$];_$_=((_$={})+'')
[_+$+_+$+_+$];____=[][$__+((_$={})+'')[$]+(($)/(![])+'')[$]+$__+__$+_$_];$__$=(!![]+"")
[$+$+$]+([][(![]+"")[$+$+$]+(+[]+{})[$+$]+(!![]+"")[$]+(!![]+"")[+[]]]+"")[($+$)+""+
($+$+$)]+(![]+"")[$]+(![]+"")[$+$];$_$_=____()[$-$][$__$]("\"\\"+($)+($+$+$+$+$+$+$)+
($+$)+"\"");_$=(![]+'')[$-$]+([][[]]+[])[$+$+$+$+$]+$_$_+$_$_;$_=(_+{})[$+$+$]+(!![]+'')
[_+$]+$_$_+$_$_;_--,$$=$+$;____()[$-$][$__$]((![]+"")[+[]]+(+[]+{})[$+$]+(!![]+"")[$]+
"(;++_;)$$$=!(_%("+($$+$$+$)+")),____()[+[]][__$+((![])+'')["+($+$)+"]+((!![])+'')["+
($+$+$)+"]+((!![])+'')[+!![]]+_$_](!(_%("+($$+$)+"))?$$$?_$+$_:_$:$$$?$_:_);");

18
Настоящие программисты кодируют так же, как и второй.

9
@ M28: Да. Это один из способов обеспечения безопасности работы ... потому что найти человека, который сможет поддерживать этот код, будет не самой простой вещью.
Энди

1
Вы можете использовать window ["eval"] ('"\\' + 1 + 7 + 2 + '"') для z.
Набб

3
@stevether В основном это злоупотребление преобразованием типов (например, +!![]то же самое, что 1и ({}+"")[5]то же, что и c) и использование записи массива для доступа к методу (например, window['eval'](то же самое eval().
HoLyVieR

1
Соответствующее количество символов, если я когда-либо видел.
Captncraig

26

Питон - 78 символов

i=0
while 1:i+=1;print"".join("BzuzzizF"[::2*j]for j in(-1,1)if 1>i%(4+j))or i

1
Мне понадобилось 10 минут, чтобы понять, что ты там делал. Красиво и скручено.
Труфа

23

PostScript, 96 байт

Так запутанно это выглядит как случайный мусор.

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

Использование: $ gs -q -dNODISPLAY -dNOPROMPT file.ps


5
Держу пари , что проходит несгибаемым .
2011 года

23

C ++: 886 символов

Я пытался скрыть «шипение» и «жужжание». Вы можете их заметить?

#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;

5
Это сбивает с толку мою брану.
Матин Улхак

2
Я думаю, что вы имели в виду мембрану
Корвин Санто

16

DC ( 256 255 байт)

Здесь я попытался (довольно успешно, если можно так выразиться) скрыть что-либо, кроме букв и +-[];:=(которые жизненно важны и их невозможно запутать). Это делает segfault после получения примерно 8482 или около того на моей машине, но это связано со стековыми проблемами, связанными со способом реализации рекурсии. Решение само по себе является правильным. 255 байт, если вы удалите пробелы (включены для удобства чтения)

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

+1 для постоянного тока. Конечно, даже не скрытый, он не особо читабелен .
Джесси Милликен

12

Это было немного сложно внедрить с использованием отступа, поэтому суть:

Рубин, 4312 символов

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

eval("                                                 

















































                                                                                                                             ".split(/\n/).map(&:size).pack("C*"))

Как это вообще работает?
Аддисон

._. Как эта штука работает ...
TuxCrafting

"строка вашей программы" .unpack ("C *"). map {| x | "" * x} .join ("\ n")
Дзук

11

Brainfuck - 626 656

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

Идет от 1 до 255


1
Оказывается, это на самом деле делает BuzzFizz. FizzBuzz получает правильное значение для% 15, но меняет местами% 3 и% 5. Я могу попытаться это исправить, но сейчас мой мозг официально F'ed
captncraig

2
Исправлено по цене 30. Могло бы играть в гольф больше с усилием, но я уже потратил достаточно времени на это.
Captncraig

9
"отходы" - это сильное слово ...
Клавдиу

10

Brainfuck, 708 персонажей

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

Описание того, как это работает, доступно в моем вопросе о проверке кода


9

Haskell - 147 142 138 символов

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..]

Код на 19 символов длиннее, чем нужно, но я подумал, что эстетика того стоила! Я считаю, что все три "цели" выполнены.

> take 20 z
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14",
"FizzBuzz","16","17","Fizz","19","Buzz"]

Привет, я пытаюсь понять твой код, но я не могу его запустить! Функция zZ' is applied to six arguments, but its type (a0 -> b0 -> c0) -> [a0] -> [b0] -> [c0] 'имеет только три
RobAu

И я, будучи в состоянии запустить его, только получаю ["1","2","3","4","5","6"...].
Артём

Исправлено - Правильная версия все еще была на моем диске ... должно быть, неправильно вставил текст давно!
MtnViewMark

уточните, пожалуйста, как его можно сократить на 19 символов, или покажите код. мне любопытно, и я понятия не имею
гордый haskeller

Есть 19 occurrances имен 2 букв: bu, fi, zz, и zZ. Они могут быть сокращены до одной буквы имен.
MtnViewMark

8

𝔼𝕊𝕄𝕚𝕟, 33 символа / 92 байта (неконкурентный)

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

Try it here (Firefox only).

Этот язык слишком OP для проблем с ограниченным источником.


6

Javascript, 469 байт

Это было, наверное, самое веселое, что я когда-либо пробовал.

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);

Попробуй здесь


Черт, я только что понял, что цель была короткой и трудной для подражания ... Извините: P
anOKsquirrel

+1 Возможно, вы упустили короткость, но, по крайней мере, у вас там не было шумихи от шипения
MickyT

4

Рубин - 165 знаков

(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)}

Это была моя первая попытка кода в гольф. У меня было много веселья. знак равно


4

Perl 6 (52 байта)

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

Позвольте мне объяснить здесь. Это худшее нарушение правил, которое я сделал в такой задаче. Я знаю , что вы говорите - там очевидно Fizzи Buzzздесь. Но давайте посмотрим на правила.

Чтобы считаться запутанным, оно должно удовлетворять как минимум одному из следующих:

Это позволяет избежать 3, 5и 15. Поэтому это верное и действительно краткое решение.


3

Скала, 295 символов

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="";}}

3

C ( 237 209 знаков)

#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);}

Хотя я не уверен, что это соответствует стандарту C :)
Это работает, хотя. На Linux с помощью GCC, то есть.


3

Питон 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()

Это мой первый гольф. Не самый короткий, но довольно уродливый! Ни один из запрещенных чисел или строковых литералов. Фирп, отрыжка!


3

Питон - 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))]

Не совсем короткий, но я надеюсь, что читатель оценит чистый функциональный стиль и расширяемость до сколь угодно длинных значений.


3

К, 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

Я мог бы немного поиграть в гольф, но я бы предпочел, чтобы это было более запутанным.


3

Python 2 - 54 символа

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

Python 3 - 56 символов

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

Если вы не хотите, чтобы FizzBuzz появлялся:

Python 2 - 58 символов

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

Python 3 - 60 символов

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

Или как победить GolfScript с помощью Python;)


Первые два, кажется, ничего не делают, поскольку i=0означает, что whileцикл никогда не вводится.
xnor

Lol Я использовал мою тестовую версию, в которой условие i<20.
Labo

Но теперь это работает :)
Labo

Разве это не должно останавливаться на 100 в соответствии с исходной проблемой FizzBuzz?
Дэвид Онгаро

2

JavaScript 111 символов - без ключей

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>")


2

C # - 218 символов

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+"");}}

Можно было бы сократить, если бы я ввел другие цифры, например, так: (всего 210 символов)

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+"");}}

Решили убрать очевидное слово fizz and buzz и пойти на чуть более запутывание. Второй короче первого, но немного более прямолинеен в том, что происходит в дополнении.


2

Это не совсем гольф, его около 120 линий.

Я думал, что сделаю что-то, что использует весь потенциал для неопределенного поведения с управлением памятью в 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);
}

2

Рубин - 89 символов

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

Я не могу взять кредит на этот кусок блеска, но я не мог оставить этот вопрос без моей любимой запутанной реализации :)

Реализация выше была написана Дэвидом Брэди и взята из рубиновой жемчужины fizzbuzz . Вот объяснение из исходного кода:

Использует тот факт, что seed 1781773465 в ранде Ruby будет генерировать последовательность из 15 цифр, которая повторяется в прогрессии FizzBuzz. Предпосылка здесь заключается в том, что мы хотим хитро обмануть Рэнда в создании предсказуемой последовательности. (Интересно отметить, что на самом деле мы не получаем уменьшения размера информации. 15-значная последовательность может быть закодирована как битовые пары и сохранена в 30-битном числе. Поскольку 1781773465 требует 31 бит памяти, наш ум имеет на самом деле стоило нам немного эффективности хранения, но это не точка!

Рубин - 87 символов

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

Вот другая версия, которая использует более короткое начальное число, но таблица поиска находится в другом порядке. Вот объяснение из исходного кода:

Первая реализация (89 символов) придерживается определенного порядка: 0 = int, 1 = Fizz, 2 = Buzz, 3 = FizzBuzz. Может быть возможно найти меньший ключ, если упорядочен. Есть 24 возможных перестановок. Если мы предположим, что перестановки равномерно распределены по всему пространству 2 * 31, и примерно 50% вероятности того, что этот «примерно на полпути», то мы можем с приличной уверенностью предположить (скажем, 20-50%), что существует ключ где-то около 1.4e + 9 (ниже 2 * 28). Это не очень хорошо, но ДЕЙСТВИТЕЛЬНО демонстрирует использование предопределенной последовательности rand, чтобы «скрыть» 30 бит информации в менее чем 30 бит пространства.

Результат: перестановка [3,2,0,1] появляется в начальном значении 46308667, который может быть сохранен в 26 битах.


2
очень сладкий, но содержит буквальное "Fizz", "Buzz" и т. д., поэтому не действует в соответствии с правилами
Arne Brasseur

2

Python, 1 строка, 376 символов

pep8-E501 игнорируется. Работает только в 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)))

2

Альтернативный Рубин (126 символов)

(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)}}

Коротко и неясно, насколько нам это нравится. 3 и 5 на самом деле там, но не как целочисленные литералы, так что я думаю, что все еще имеет значение.

Обратите внимание, что это самая короткая версия Ruby без букв «Fizz», «Buzz», «FizzBuzz».


1

Squeak (4.4) Smalltalk 206 байт

|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

Или тот же алгоритм с менее явными сообщениями, тем же количеством символов

|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

Я извиняюсь перед Аланом Кей за то, что я сделал с Smalltalk.
Некоторые из этих хаков переносимы на диалекты Smalltalk, для некоторых потребуется слой совместимости Squeak ...

Обратите внимание, что если вы выполняете в рабочей области, вы можете опустить объявления | fi zz buz | и получить 14 символов.

Если мы можем позволить себе 357 символов (315 с однобуквенными переменными), то лучше избегать тривиального #to: do: loop:

|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

1

Haskell 226 байт, включая пробелы для разметки;)

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

«Настоящий» код имеет размер 160 байт и может быть сжат, но в этом случае он теряет шипение.

Запустите его (для хорошего вывода):

putStrLn (unwords (take 20 z ))

Выход:

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

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"

Тот, который я сделал в 2009 году. Впрочем, это довольно легко выяснить.

Редактировать: Черт, он использует "Fizz" и "Buzz!" :( Я думал, что я изменил это.


0

C 216 байт

#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);}}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.