Obfuscated FizzBuzz Golf [zamknięte]


50

Utwórz najkrótszą możliwą zaciemnioną implementację FizzBuzz.

Aby uznać ją za zaciemnioną, powinna spełniać co najmniej jedno z poniższych:

  1. Nie zawiera słów „Fizz”, „Buzz” ani „FizzBuzz”
  2. Nie zawiera liczb 3, 5 ani 15.
  3. Użyj któregokolwiek z powyższych w sposób wprowadzający w błąd.

Pamiętaj: celem jest bycie krótkim i trudnym do naśladowania.

Przykładowy kod, który zainspirował to pytanie:

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

Skąd znasz granicę? W swoim rozwiązaniu masz ms.Length, ale w niektórych rozwiązaniach nie ma takiego ograniczenia ...
— Labo

Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ nie ma ono obiektywnego kryterium ważności, co uniemożliwia bezdyskusyjne rozstrzygnięcie, czy zgłoszenie jest zgodne z zasadami.
— Dennis,

Odpowiedzi:


25

GolfScript, 75 69 65 60 59 znaków

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

Można by pomyśleć, że sam GolfScript jest już zaciemniony, prawda? Cóż, po prostu podążając za specyfikacją, zdecydowałem, że program nie będzie zawierał „fizz”, „buzz”, ani liczb 3, 5, ani 15. :-)

Tak, istnieją pewne liczby o wielokrotnościach 5, takie jak 25, 35, 90, 100 i 6875. Czy są to czerwone śledzie? Ty decydujesz. ;-)


2
Mimo że napisałem komentarz do wszystkich innych zgłoszeń GolfScript, żadne z nich nie będzie dostępne w tym przypadku. Uzasadnienie: chat.stackexchange.com/transcript/message/436819#436819 :-D
— Chris Jester-Young

Cyfry 3 i 5 pojawiają się w kodzie, więc nie są poprawne !!!
— Labo,

@Labo Tylko jedno kryterium musi być spełnione, nie wszystkie trzy. Przeczytaj pytanie jeszcze raz. :-)
— Chris Jester-Young,

To żart ? Spędzam nad tym kilka godzin! Chociaż nadal udało mi się mieć 58- znakowy
— Labo

4
@Labo: Widzę cyfry 3 i 5, ale nie cyfry 3 i 5.
— David Ongaro

65

JavaScript 97 znaków - w ogóle żadnych liczb

Liczby ? Kto potrzebuje numeru, gdy masz Javascript!

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

Uwaga: Istnieje nieskończona pętla, która ostrzega o sekwencji.

Bonus (666 znaków)

  • Brak numeru
  • Bez litery ( zforzostało użyte tylko w całym skrypcie)

.

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

18
Prawdziwi programiści kodują tak jak drugi.

9
@ M28: Tak. To jeden ze sposobów budowania bezpieczeństwa pracy ... ponieważ znalezienie kogoś, kto będzie w stanie utrzymać ten kod, nie będzie najłatwiejsze.
— Andy

1
Możesz użyć okna [„eval”] („” \\ '+ 1 + 7 + 2 +' ”) dla z.
— Nabb

3
@stevether Chodzi przede wszystkim o nadużywanie konwersji typu (np .: +!![]jest taki sam 1i ({}+"")[5]jest taki sam jak c) oraz nadużywanie notacji tablicowej w celu uzyskania dostępu do metody (np .: window['eval'](jest taki sam eval().
— HoLyVieR,

1
Odpowiednia liczba postaci, jeśli kiedykolwiek ją widziałem.
— captncraig

26

Python - 78 znaków

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

1
Zajęło mi 10 minut, aby zrozumieć, co tam zrobiłeś. Ładne i pokręcone.
— Trufa,

23

PostScript, 96 bajtów

Więc zaciemnione wygląda na przypadkowe śmieci.

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

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


5
Założę się, że przeszedł ciężki .
— kaoD,

23

C ++: 886 znaków

Próbowałem ukryć „szum” i „szum”. Widzisz ich?

#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
To wprawia mnie w zakłopotanie.
— Mateen Ulhaq,

2
Myślę, że miałeś na myśli membranę
— Korvin Szanto,

16

DC ( 256255 bajtów)

Oto on, próbowałem (raczej skutecznie, jeśli sam mogę to powiedzieć) ukryć cokolwiek oprócz listów i +-[];:=(które są niezbędne i niemożliwe do zaciemnienia). Robi się segfault po osiągnięciu około 8482 na moim komputerze, ale ma to związek z problemami stosu związanymi ze sposobem realizacji rekurencji. Rozwiązanie samo jest prawdziwe. 255 bajtów, jeśli usuniesz spację (w celu ułatwienia odczytu). Ciesz się:

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 za sł. Oczywiście nawet nieudostępnione, nie jest to szczególnie czytelne .
— Jesse Millikan


11

Brainfuck - 626 656

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

Zaczyna od 1 do 255


1
Okazuje się, że tak naprawdę robi BuzzFizz. Dostaje FizzBuzz poprawny dla% 15, ale zamienia% 3 i% 5. Mogę spróbować to naprawić, ale na razie mój mózg jest oficjalnie F'ed
— captncraig

2
Naprawiono kosztem 30. Mogłem bardziej grać w golfa z wysiłkiem, ale zmarnowałem już wystarczająco dużo czasu na to.
— captncraig,

9
„marnotrawstwo” to mocne słowo ...
— Claudiu

10

Brainfuck, 708 znaków

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

Opis tego, jak to działa, jest dostępny w moim pytaniu dotyczącym recenzji kodu


9

Haskell - 147 142 138 znaków

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

Kod jest o 19 znaków dłuższy, niż powinien, ale myślałem, że estetyka była tego warta! Uważam, że wszystkie trzy „cele” są spełnione.

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

Cześć, próbuję zrozumieć Twój kod, ale nie jestem w stanie go uruchomić! Funkcja zZ' is applied to six arguments, but its type (a0 -> b0 -> c0) -> [a0] -> [b0] -> [c0] 'ma tylko trzy
— RobAu

A ja, będąc w stanie go uruchomić, dostaję tylko ["1","2","3","4","5","6"...].
— Artyom

Naprawiono - odpowiednia wersja wciąż znajdowała się na moim dysku ... dawno temu źle wkleiłem tekst!
— MtnViewMark

określ, w jaki sposób można go skrócić o 19 znaków, lub pokaż kod. jestem ciekawy i nie mam pojęcia
— dumny haskeller

Istnieje 19 occurrances z 2 nazw literowych: bu, fi, zzi zZ. Można je skrócić do nazw zawierających jedną literę.
— MtnViewMark


6

JavaScript, 469 bajtów

To była chyba najlepsza zabawa, jaką kiedykolwiek miałem.

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

Wypróbuj tutaj


Cholera, właśnie zdałem sobie sprawę, że cel miał być krótki i trudny do zrealizowania ... Przepraszam: P
— anOKsquirrel

+1 Może brakowało z powodu krótkości, ale przynajmniej nie było tam
— głośnego

4

Rubin - 165 znaków

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

To była moja pierwsza próba golfa kodowego. Dobrze się bawiłem. =)


4

Perl 6 (52 bajty)

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

Pozwól mi wyjaśnić tutaj. To najgorsze nadużycie zasady, jakie popełniłem w takim zadaniu. Wiem, co mówisz - jest oczywiste Fizzi Buzztutaj. Ale spójrzmy na zasady.

Aby uznać ją za zaciemnioną, powinna spełniać co najmniej jedno z poniższych:

W ten sposób unika 3, 5i 15. Dlatego jest to ważne i bardzo krótkie rozwiązanie.


3

Scala, 295 znaków

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 znaków)

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

Chociaż nie jestem pewien, czy jest to zgodne ze standardem C :)
Jednak to działa. To znaczy w systemie Linux za pomocą GCC.


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

To jest mój pierwszy golf. Nie najkrótszy, ale jest dość brzydki! Żadna z niedozwolonych liczb lub literałów łańcuchowych. Firp, Burp!


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

Nie do końca najkrótszy, ale mam nadzieję, że czytelnik doceni czysty funkcjonalny styl i możliwość rozszerzenia na dowolnie długie rachunki.


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

Mógłbym trochę zagrać w golfa, ale wolałbym, żeby był bardziej zaciemniony.


3

Python 2 - 54 znaków

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

Python 3 - 56 znaków

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

Jeśli nie chcesz, aby pojawiał się „FizzBuzz”:

Python 2 - 58 znaków

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

Python 3 - 60 znaków

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

Lub jak pokonać GolfScript za pomocą Pythona;)


Pierwsze dwa wydają się nic nie robić, ponieważ i=0oznacza to, że whilepętla nigdy nie jest wprowadzana.
— xnor

Lol Użyłem mojej wersji testowej, w której jest warunek i<20.
— Labo,

Ale teraz działa :)
— Labo

Czy nie powinno to kończyć się na 100 zgodnie z pierwotnym problemem FizzBuzz?
— David Ongaro

2

JavaScript 111 znaków - bez kluczowych numerów

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 znaków

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

Mógłbym zostać skrócony, gdybym wprowadził inne liczby takie: (łącznie 210 znaków)

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

Postanowiłem usunąć oczywiste słowo „musować” i „bzyczeć” i wybrać nieco więcej zaciemnienia. Drugi jest krótszy niż pierwszy, ale jest nieco bardziej bezpośredni w stosunku do tego, co dzieje się w dodatku.


2

To nie jest dokładnie gra w golfa, ma około 120 linii.

Pomyślałem, że zrobię coś, co wykorzysta cały zabawny potencjał nieokreślonego zachowania dzięki zarządzaniu pamięcią 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

Rubin - 89 znaków

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

Nie mogę uwierzyć w ten błyskotliwość, ale nie mogłem zostawić tego pytania bez mojej ulubionej zaciemnionej implementacji :)

Powyższe wdrożenie zostało napisane przez Davida Brady'ego i pochodzi z rubinowego klejnotu fizzbuzz . Oto wyjaśnienie z kodu źródłowego:

Wykorzystuje fakt, że ziarno 1781773465 w randie Ruby wygeneruje 15-cyfrową sekwencję, która powtarza się w trakcie FizzBuzz. Założeniem tutaj jest to, że chcemy sprytnie oszukać Rand w celu zapewnienia przewidywalnej sekwencji. (Warto zauważyć, że tak naprawdę nie uzyskujemy zmniejszenia rozmiaru informacji. 15-cyfrowa sekwencja może być kodowana jako para bitów i przechowywana w 30-bitowej liczbie. Ponieważ 1781773465 wymaga 31 bitów pamięci, nasza sprytność ma faktycznie kosztowało nas trochę wydajności przechowywania. ALE TO NIE PUNKT!

Rubin - 87 znaków

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

Oto inna wersja, która używa krótszego ziarna, ale tabela odnośników jest w innej kolejności. Oto wyjaśnienie z kodu źródłowego:

Pierwsza implementacja (89 znaków) przestrzega określonej kolejności 0 = int, 1 = Fizz, 2 = Buzz, 3 = FizzBuzz. W przypadku zmiany kolejności może być możliwe znalezienie mniejszego klucza. Możliwe są 24 kombinacje. Jeśli założymy, że permutacje są równomiernie rozmieszczone w przestrzeni 2 * 31 i istnieje około 50% prawdopodobieństwa, że ​​ta jest „w połowie drogi”, wówczas możemy założyć z przyzwoitą pewnością (powiedzmy 20-50%), że istnieje klucz gdzieś około 1,4e + 9 (poniżej 2 * 28). To niewiele, ale pokazuje, że wykorzystuje predefiniowaną sekwencję Rand, aby „ukryć” 30 bitów informacji na mniej niż 30 bitach przestrzeni.

Wynik: permutacja [3,2,0,1] pojawia się w ziarnie 46308667, który można zapisać w 26 bitach.


2
bardzo słodki, ale zawiera dosłowne „Fizz”, „Buzz” itp., więc nie obowiązuje zgodnie z zasadami
— Arne Brasseur

2

Python, 1 linia, 376 znaków

pep8-E501 zignorowano. Działa tylko w 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

Alternatywny Rubin (126 znaków)

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

Krótkie i niejasne, tak jak lubimy. 3 i 5 są w rzeczywistości, ale nie jako literały całkowite, więc myślę, że to wciąż się liczy.

Zauważ, że jest to najkrótsza wersja Rubiego bez dosłownego „Fizz”, „Buzz”, „FizzBuzz”.


1

Squeak (4.4) Smalltalk 206 bajtów

|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

Lub ten sam algorytm z mniej wyraźnymi komunikatami, taką samą liczbą znaków

|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

Przepraszam Alana Kay za to, co zrobiłem Smalltalk.
Niektóre z tych hacków są przenośne w dialektach Smalltalk, niektóre wymagałyby warstwy kompatybilności Squeak ...

Zauważ, że jeśli wykonujesz w obszarze roboczym, możesz pominąć deklaracje | fi zz buz | i zdobądź 14 znaków.

Jeśli stać nas na 357 znaków (315 z pojedynczymi zmiennymi literowymi), lepiej unikać trywialnego #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 bajtów, w tym spacja dla układu;)

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

„Rzeczywisty” kod ma 160 bajtów i można go skompresować, ale wtedy traci fizyczny szum.

Uruchom (dla dobrego wyniku):

putStrLn (unwords (take 20 z ))

Wynik:

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"

Jeden, który zrobiłem w 2009 roku. Jednak dość łatwo to rozgryźć.

Edycja: Cholera, używa „Fizz” i „Buzz!” :( Myślałem, że to zmieniłem. Nieważne.


0

C 216 bajtów

#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);}}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.