Golf FizzBuzz Kebingungan [tertutup]


50

Buat implementasi FizzBuzz sesingkat mungkin yang sesingkat mungkin.

Untuk dianggap dikaburkan, itu harus memenuhi setidaknya satu dari yang berikut:

  1. Tidak mengandung kata "Fizz", "Buzz", atau "FizzBuzz"
  2. Tidak mengandung angka 3, 5, atau 15.
  3. Gunakan salah satu di atas dengan cara yang menyesatkan.

Ingat: Tujuannya adalah menjadi singkat dan sulit untuk diikuti.

Contoh kode yang menginspirasi pertanyaan ini adalah sebagai berikut:

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

Bagaimana Anda tahu batasnya? Dalam solusi Anda, Anda memiliki m. Panjang tetapi dalam beberapa solusi tidak ada terikat seperti itu ...
Labo

Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena tidak memiliki kriteria validitas obyektif, sehingga tidak mungkin untuk memutuskan secara tak terbantahkan apakah pengajuan mengikuti aturan.
Dennis

Jawaban:


25

GolfScript, 75 69 65 60 59 karakter

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

Jadi, Anda akan berpikir GolfScript dengan sendirinya sudah dikaburkan, bukan? Nah, hanya untuk mengikuti spek, saya memutuskan agar program tidak mengandung "fizz", "buzz", atau angka 3, 5, atau 15. :-)

Ya, ada beberapa angka dengan kelipatan 5, seperti 25, 35, 90, 100, dan 6875. Apakah itu ikan haring merah? Kamu putuskan. ;-)


2
Meskipun saya sudah menulis komentar untuk semua kiriman GolfScript saya yang lain, tidak ada yang akan datang untuk yang ini. Dasar Pemikiran: chat.stackexchange.com/transcript/message/436819#436819 :-D
Chris Jester-Young

Angka 3 dan 5 muncul di kode Anda, jadi itu tidak benar !!!
Labo

@ Labo Hanya satu kriteria yang perlu dipenuhi, tidak ketiganya. Baca lagi pertanyaannya. :-)
Chris Jester-Young

Apakah ini LELUCON? Saya menghabiskan beberapa jam untuk itu! Meskipun saya masih berhasil memiliki kode Python 58 char panjang: p codegolf.stackexchange.com/a/63543/47040
Labo

4
@ Labo: Saya bisa melihat angka 3 dan 5 tetapi bukan angka 3 dan 5.
David Ongaro

65

Javascript 97 karakter - tidak ada angka sama sekali

Angka? Siapa yang butuh nomor ketika Anda memiliki Javascript!

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

Catatan: Ada loop tak terbatas yang akan memberi tahu Anda urutannya.

Bonus (666 karakter)

  • Tidak ada nomor
  • Tidak ada surat (hanya zfordigunakan dalam keseluruhan skrip)

.

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

18
Kode programmer nyata seperti yang kedua.

9
@ M28: Yap. Itu salah satu cara untuk membangun keamanan pekerjaan ... karena menemukan seseorang yang dapat mempertahankan kode ini bukan yang termudah.
Andy

1
Anda dapat menggunakan jendela ["eval"] ('"\\' + 1 + 7 + 2 + '" ") untuk z.
Nabb

3
@stevether Ini sebagian besar tentang penyalahgunaan konversi tipe (mis .: +!![]sama dengan 1dan ({}+"")[5]sama dengan c) dan penyalahgunaan notasi array untuk mengakses metode (mis .: window['eval'](sama eval().
HoLyVieR

1
Jumlah karakter yang sesuai jika saya pernah melihatnya.
captncraig

26

Python - 78 karakter

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

1
Butuh waktu 10 menit untuk memahami apa yang Anda lakukan di sana. Bagus dan bengkok.
Trufa

23

PostScript, 96 byte

Jadi dikaburkan seperti sampah acak.

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

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


5
Aku bertaruh bahwa melewati diehard .
kaoD

23

C ++: 886 karakter

Saya sudah mencoba menyembunyikan 'desis' dan 'desas-desus'. Bisakah Anda menemukannya?

#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
Itu membingungkan bran saya.
Mateen Ulhaq

2
Saya pikir maksud Anda adalah membran
Korvin Szanto

16

DC ( 256 255 byte)

Ini dia, saya mencoba (agak berhasil, jika saya bisa mengatakannya sendiri) untuk menyembunyikan apa pun kecuali untuk surat, dan +-[];:=(yang penting dan tidak mungkin dikaburkan). Memang segfault setelah mencapai sekitar 8482 atau lebih pada mesin saya, tapi itu berkaitan dengan masalah tumpukan yang terkait dengan cara rekursi diimplementasikan. Solusinya sendiri sudah benar. 255 byte jika Anda menghapus spasi putih (termasuk untuk kemudahan membaca) Nikmati:

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 untuk dc. Bahkan tanpa gangguan, tentu saja, itu tidak mudah dibaca .
Jesse Millikan


11

Brainfuck - 626 656

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

Mulai dari 1 hingga 255


1
Ternyata ini benar-benar melakukan BuzzFizz. FizzBuzz benar untuk% 15, tetapi bertukar% 3 dan% 5. Saya mungkin mencoba memperbaikinya, tetapi untuk saat ini otak saya secara resmi F'ed
captncraig

2
Diperbaiki dengan biaya 30. Bisa bermain golf lebih dengan usaha, tapi saya sudah membuang waktu yang cukup untuk ini.
captncraig

9
"buang" adalah kata yang kuat ...
Claudiu

10

Brainfuck, 708 karakter

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

Deskripsi cara kerjanya tersedia di pertanyaan Tinjauan Kode saya


9

Haskell - 147 142 138 karakter

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

Kode ini 19 karakter lebih panjang dari yang seharusnya, tapi saya pikir estetika itu sepadan! Saya percaya ketiga "tujuan" tersebut dipenuhi.

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

Hai, saya mencoba memahami kode Anda, tetapi saya tidak dapat menjalankannya! Fungsi zZ' is applied to six arguments, but its type (a0 -> b0 -> c0) -> [a0] -> [b0] -> [c0] 'hanya memiliki tiga
RobAu

Dan saya, sementara bisa menjalankannya, hanya dapat ["1","2","3","4","5","6"...].
Artyom

Diperbaiki - Versi yang tepat masih ada di disk saya ... pasti sudah salah tempel teks lama!
MtnViewMark

tolong sebutkan bagaimana bisa disingkat menjadi 19 karakter, atau tunjukkan kode saya ingin tahu dan saya tidak tahu
bangga haskeller

Ada 19 occurrances nama 2 huruf: bu, fi, zz, dan zZ. Ini bisa disingkat menjadi satu nama huruf.
MtnViewMark


6

Javascript, 469 byte

Ini mungkin yang paling menyenangkan yang pernah saya miliki.

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

Coba di sini


Dang, saya baru sadar bahwa tujuannya adalah singkat dan sulit untuk diikuti ... Maaf: P
anOKsquirrel

+1 Mungkin sudah ketinggalan pada kekurangannya, tapi setidaknya Anda tidak memiliki desis desis di sana
MickyT

4

Ruby - 165 karakter

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

Ini adalah upaya pertama saya di kode golf. Saya bersenang-senang. =)


4

Perl 6 (52 byte)

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

Biarkan saya memberikan penjelasan di sini. Ini adalah penyalahgunaan aturan terburuk yang pernah saya lakukan dalam tugas seperti itu. Saya tahu apa yang Anda katakan - ada yang jelas Fizzdan di Buzzsini. Tapi mari kita lihat peraturannya.

Untuk dianggap dikaburkan, itu harus memenuhi setidaknya satu dari yang berikut:

Ini menghindari 3, 5dan 15. Oleh karena itu, ini solusi yang valid dan sangat singkat.


3

Scala, 295 karakter

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

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

Meskipun saya tidak yakin ini sesuai dengan standar C :) Tapi
itu berhasil. Di Linux menggunakan GCC, yaitu.


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

Ini golf pertama saya. Bukan yang terpendek, tapi itu sangat jelek! Tidak ada angka terlarang atau string literal. Firp, Bersendawa!


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

Bukan yang terpendek, tapi saya harap pembaca akan menghargai gaya fungsional murni dan ekstensibilitas untuk jumlah panjang yang sewenang-wenang.


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

Saya bisa bermain golf sedikit tapi saya lebih suka itu lebih dikaburkan.


3

Python 2 - 54 karakter

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

Python 3 - 56 karakter

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

Jika Anda tidak ingin 'FizzBuzz' muncul:

Python 2 - 58 karakter

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

Python 3 - 60 karakter

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

Atau cara mengalahkan GolfScript dengan Python;)


Dua yang pertama tampaknya melakukan apa-apa, karena i=0cara tersebut whileloop tidak pernah masuk.
xnor

Lol saya menggunakan versi pengujian saya, di mana kondisinya i<20.
Labo

Tapi sekarang berhasil :)
Labo

Tidakkah seharusnya berhenti pada 100 sesuai dengan masalah FizzBuzz asli?
David Ongaro

2

JavaScript 111 karakter - tidak ada nomor kunci

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 karakter

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

Dapat dipersingkat jika saya memperkenalkan nomor lain seperti: (total 210 karakter)

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

Memutuskan untuk menghapus kata fizz dan buzz jelas dan pergi untuk kebingungan sedikit lebih. Yang kedua lebih pendek dari yang pertama tetapi sedikit lebih langsung pada apa yang terjadi di samping.


2

Ini bukan golf, itu sekitar 120 baris.

Saya pikir saya akan melakukan sesuatu yang memanfaatkan semua potensi kesenangan untuk perilaku yang tidak terdefinisi dengan manajemen memori 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

Ruby - 89 karakter

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

Saya tidak dapat mengambil kredit untuk kecemerlangan ini, tetapi saya tidak dapat meninggalkan pertanyaan ini tanpa implementasi favorit saya yang dikaburkan :)

Implementasi di atas ditulis oleh David Brady dan berasal dari permata ruby fizzbuzz . Berikut ini penjelasan dari kode sumber:

Menggunakan fakta bahwa seed 1781773465 dalam rand Ruby akan menghasilkan urutan 15 digit yang berulang dalam perkembangan FizzBuzz. Premis di sini adalah bahwa kami ingin secara cerdik menipu rand agar memberikan urutan yang dapat diprediksi. (Sangat menarik untuk dicatat bahwa kita tidak benar-benar mendapatkan pengurangan dalam ukuran informasi. Urutan 15-digit dapat dikodekan sebagai pasangan bit dan disimpan dalam jumlah 30-bit. Karena 1781773465 membutuhkan 31 bit penyimpanan, kepintaran kita memiliki sebenarnya menghabiskan sedikit efisiensi penyimpanan. TAPI BUKANLAH TITIKNYA!

Ruby - 87 karakter

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

Berikut adalah versi berbeda yang menggunakan seed yang lebih pendek tetapi tabel pencarian dalam urutan yang berbeda. Berikut ini penjelasan dari kode sumber:

Implementasi pertama (89 karakter) mematuhi urutan spesifik 0 = int, 1 = Fizz, 2 = Buzz, 3 = FizzBuzz. Dimungkinkan untuk menemukan kunci yang lebih kecil jika pemesanan diubah. Ada 24 kemungkinan permutasi. Jika kita mengasumsikan bahwa permutasi didistribusikan secara merata di seluruh ruang 2 * 31, dan sekitar 50% probabilitas bahwa ini adalah "sekitar setengah jalan", maka kita dapat mengasumsikan dengan keyakinan yang layak (katakanlah 20-50%) bahwa ada kunci di suatu tempat sekitar 1,4e + 9 (di bawah 2 * 28). Ini tidak banyak menghasilkan tetapi TIDAK menunjukkan memanfaatkan urutan yang telah ditentukan rand untuk "menyembunyikan" 30 bit informasi dalam waktu kurang dari 30 bit ruang.

Hasil: Permutasi [3,2,0,1] muncul pada seed 46308667, yang dapat disimpan dalam 26 bit.


2
sangat manis, tetapi memang mengandung literal "Fizz", "Buzz" dll jadi tidak berlaku sesuai aturan
Arne Brasseur

2

Python, 1 baris, 376 karakter

pep8-E501 diabaikan. Hanya berfungsi di 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

Ruby Alternatif (126 karakter)

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

Pendek dan tidak jelas, betapa kita menyukainya. Angka 3 dan 5 sebenarnya ada di sana tetapi tidak sebagai bilangan bulat jadi saya pikir itu masih diperhitungkan.

Perhatikan bahwa ini adalah versi Ruby terpendek tanpa 'Fizz' literal, 'Buzz', 'FizzBuzz' di sini.


1

Mencicit (4.4) Smalltalk 206 byte

|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

Atau algoritma yang sama dengan pesan yang kurang eksplisit, jumlah karakter yang sama

|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

Saya meminta maaf kepada Alan Kay atas apa yang saya lakukan pada Smalltalk.
Beberapa peretasan ini bersifat portabel di seluruh dialek Smalltalk, beberapa akan membutuhkan lapisan kompatibilitas ...

Perhatikan bahwa jika Anda mengeksekusi di Workspace, Anda bisa menghilangkan deklarasi | fi zz buz | dan dapatkan 14 karakter.

Jika kita mampu membeli 357 karakter (315 dengan vars huruf tunggal), maka lebih baik untuk menghindari hal-hal sepele #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 byte, termasuk spasi untuk tata letak;)

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

Kode 'nyata' adalah 160 byte dan dapat dikompresi, tetapi kehilangan fizz-buzz-ness saat itu.

Jalankan (untuk hasil yang bagus):

putStrLn (unwords (take 20 z ))

Keluaran:

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"

Yang saya buat tahun 2009. Tapi cukup mudah untuk menemukan jawabannya.

Sunting: Sial, ini menggunakan "Fizz" dan "Buzz!" :( Saya pikir saya mengubahnya. Namun kemudian.


0

C 216 byte

#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);}}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.