Закритий гольф FizzBuzz [закрито]


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
Chris Jester-Young

Числа 3 і 5 відображаються у вашому коді, тому це неправильно !!!
Лабо

@Labo Необхідно задовольнити лише один із критеріїв, не всі три. Прочитайте питання ще раз. :-)
Кріс Єстер-Янг

Це ЖОРТИ? Я витрачаю на це кілька годин! Хоча я все - таки вдалося отримати довгий 58 символів коду Python: р 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.
Nabb

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
Б'юсь об заклад, що проходить мертвий .
kaoD

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
Це плутає мій брейн.
Mateen Ulhaq

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 для постійного струму. Навіть непомітна, звичайно, це не особливо читабельно .
Джессі Мілікан


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

Хоча я не впевнений, що це відповідає стандарту С :)
Хоча це працює. У 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

Пітон 2 - 54 символи

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

Пітон 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

Пітон 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

Чи не повинен він зупинитися на 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+"");}}

Вирішив зняти очевидне слово фіз і гудіння і піти на трохи більше затуманення. Другий коротший, ніж перший, але трохи більше спрямований на те, що відбувається в додаванні.


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 . Ось пояснення з вихідного коду:

Використовує той факт, що насіння 1781773465 в ранді Рубі генерує 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

Пітон, 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

Скрип (4.4) Маленький розмову 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 з однозначною лінією vars), тоді краще уникати тривіального #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

226 байт Haskell, включаючи пробіл для компонування;)

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 байт і його можна стиснути, але при цьому втрачається fizz-buzz-ness.

Запустіть його (для приємного виводу):

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.