1, 2, Fizz, 4, Buzz


148

Giriş

Standart programlama alıştırmaları için en kısa çözümlerin kataloglarını toplama çabalarımızda, PPCG'nin ilk vanilya FizzBuzz mücadelesi. Diğer katalog zorluklarını görmek istiyorsanız, "Merhaba Dünya!" Var. ve "Bu sayı asal mı?" .

Meydan okuma

Ondalık sayıları 1 ile 100 arasında dahil basan bir program yazın. Ancak, sayı yerine üç baskı katları için “Fizz” ve beş baskı “katlama” katları için. Üç ve beşin katları olan sayılar için “FizzBuzz” yazınız.

Çıktı

Çıktı, yeni bir satırla (ya \nda \r\n) ayrılan sayıların (ve Fizzes, Buzzes ve FizzBuzzes) bir listesi olacaktır . Sondaki bir satırsonu kabul edilebilir, ancak baştaki satırsonu değil. Tercih ettiğiniz newline dışında, çıktı tam olarak şöyle görünmelidir:

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

Bu kuralın tek istisnası, selamlama, ANSI renk kodları veya girintiler gibi bastırılamayan dilinizin tercümanının sürekli çıktısıdır.

Ek Kurallar

  • Bu, FizzBuzz'ı oynamak için en kısa yaklaşımı olan dili bulmakla ilgili değildir, bu her dilde en kısa yaklaşımı bulmakla ilgilidir. Bu nedenle, hiçbir cevap kabul edilmiş olarak işaretlenmeyecektir.

  • Gönderimler bayt cinsinden uygun bir önceden kodlanmış kodlamada, genellikle (ancak zorunlu değil) UTF-8 ile puanlanır. Klasörler gibi bazı dilleri puanlamak biraz zor - eğer şüpheniz varsa, lütfen Meta'ya danışın.

  • STDERR'ye hiçbir şey basılamaz.

  • Her zamanki kurallarımızdan farklı olarak, bu zorluktan daha yeni olsa bile, bir dili (veya dil sürümünü) kullanmaktan çekinmeyin. Eğer biri boş programın FizzBuzz çıktısı oluşturduğu bir dil yaratarak bunu kötüye kullanmak isterse, çok sıkıcı bir cevabın yolunu açtığı için tebrikler.

    Göndermenin test edilebilmesi için bir tercüman olması gerektiğini unutmayın. Daha önce uygulanmamış bir dil için bu tercümanı kendiniz yazmanıza izin verilir (ve hatta teşvik edilir).

  • Seçtiğiniz dil zaten bir cevabı olan başka bir (potansiyel olarak daha popüler) dilin önemsiz bir değişkeni ise (BASIC veya SQL lehçelerini düşünün, Unix kabukları veya Alphuck ve ??? gibi önemsiz Brainfuck türevleri) mevcut olanlara bir not eklemeyi düşünün aynı veya çok benzer bir çözümün diğer dilde de en kısa çözüm olduğunu söyleyin.

  • Çıkış sabit olduğundan, çıkışı zorlayabilir (ancak bu en kısa seçenek olmayabilir).

  • Programın asıl yazarına kredi verdiğiniz sürece önceden varolan çözümleri kullanabilirsiniz.

  • Standart boşluklar aksi takdirde izin verilmez.

Bir yandan not olarak, lütfen golf için fazla bir şey olmadığı dillerde sıkıcı (ama geçerli) cevapları azaltmayınız; Bunlar bir kataloğu mümkün olduğu kadar eksiksiz bir şekilde derlemeye çalıştığı için bu soru için hala faydalıdır. Bununla birlikte, öncelikle yazarların gerçekte kodu golf oynamak için çaba harcadıkları dillerde cevapları çoğaltınız.

Katalog

var QUESTION_ID=58615;var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe";var COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk";var OVERRIDE_USER=30525;var answers=[],answers_hash,answer_ids,answer_page=1,more_answers=true,comment_page;function answersUrl(index){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(index,answers){return"https://api.stackexchange.com/2.2/answers/"+answers.join(';')+"/comments?page="+index+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){answers.push.apply(answers,data.items);answers_hash=[];answer_ids=[];data.items.forEach(function(a){a.comments=[];var id=+a.share_link.match(/\d+/);answer_ids.push(id);answers_hash[id]=a});if(!data.has_more)more_answers=false;comment_page=1;getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:true,success:function(data){data.items.forEach(function(c){if(c.owner.user_id===OVERRIDE_USER)answers_hash[c.post_id].comments.push(c)});if(data.has_more)getComments();else if(more_answers)getAnswers();else process()}})}getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/;var OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(a){return a.owner.display_name}function process(){var valid=[];answers.forEach(function(a){var body=a.body;a.comments.forEach(function(c){if(OVERRIDE_REG.test(c.body))body='<h1>'+c.body.replace(OVERRIDE_REG,'')+'</h1>'});var match=body.match(SCORE_REG);if(match)valid.push({user:getAuthorName(a),size:+match[2],language:match[1],link:a.share_link,});else console.log(body)});valid.sort(function(a,b){var aB=a.size,bB=b.size;return aB-bB});var languages={};var place=1;var lastSize=null;var lastPlace=1;valid.forEach(function(a){if(a.size!=lastSize)lastPlace=place;lastSize=a.size;++place;var answer=jQuery("#answer-template").html();answer=answer.replace("{{PLACE}}",lastPlace+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link);answer=jQuery(answer);jQuery("#answers").append(answer);var lang=a.language;lang=jQuery('<a>'+lang+'</a>').text();languages[lang]=languages[lang]||{lang:a.language,lang_raw:lang.toLowerCase(),user:a.user,size:a.size,link:a.link}});var langs=[];for(var lang in languages)if(languages.hasOwnProperty(lang))langs.push(languages[lang]);langs.sort(function(a,b){if(a.lang_raw>b.lang_raw)return 1;if(a.lang_raw<b.lang_raw)return-1;return 0});for(var i=0;i<langs.length;++i){var language=jQuery("#language-template").html();var lang=langs[i];language=language.replace("{{LANGUAGE}}",lang.lang).replace("{{NAME}}",lang.user).replace("{{SIZE}}",lang.size).replace("{{LINK}}",lang.link);language=jQuery(language);jQuery("#languages").append(language)}}
body{text-align:left!important}#answer-list{padding:10px;width:290px;float:left}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody id="languages"> </tbody> </table> </div> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table>


1
Nothing can be printed to STDERR. Bu yalnızca çalışırken veya derlerken de (ayrı bir adım olduğunu varsayarak mı?)
Doğru

@AShelly Yalnızca çalıştırırken
Beta

100’ü zorlukla kodladığınız gerçeğini sevdiğimden emin değilim. Bu şekilde, sadece beklenen çıktıyı üreten bir program geçerli bir giriştir, ancak bu zorluk için ilginç değildir. Bence bu zorluk, programın çıkacak öğe sayısını girmesini beklemeli.
Timwi

6
@Timwi Bunu daha ilginç hale getireceğine katılıyorum (sadece biraz) daha ilginç olsa da, FizzBuzz'ı kesinlikle 1 ile 100 arasında (örneğin Wikipedia ve Rosetta Kodunda) görmüştüm. Amaç "kanonik" bir FB mücadelesine sahip olmaksa, mantıklı geliyor.
Geobits

58
Bir "vanilya fizzbuzz" kulağa lezzetli geliyor.
iamnotmaynard

Yanıtlar:


76

Python 2, 56

i=0;exec"print i%3/2*'Fizz'+i%5/4*'Buzz'or-~i;i+=1;"*100

6
Dang, bu kanlı bir dahi. Diziyi mod sonucuyla çarpma fikrinizi çalabilir miyim?
AdmBorkBork

@TimmyD Devam et.
feersum

15
(İle 56 için farklı bir yöntem, burada ) i=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100. Bit temelini optimize etmek için arama terimlerini zorlamak isteyen var mı?
xnor

1
Çok güzel bir teknik, modulo sonucunu ikili yapmak için ayırmayı seviyorum! Metodunuzu 54 karaktere indirecek kadar iyileştirmem var ... Tabii ki izniniz olmadan cevap olarak göndermezdim (cevabınız ~% 95'tir);)
Tersosauros

2
@Tersosauros Devam edin ... yöntemimi bulmak çok zor değil ve hiç şüphesiz birçok kişi tarafından bağımsız olarak keşfedildi.
feersum

76

Altıgen , 91 bayt

Ödül için teşekkürler :)

Vay be, Martin'in Hexagony çözümünü yenebileceğimi asla hayal edemezdim . Ama — kim attırabilirdi - yaptım. Birkaç gün süren başarısızlıktan sonra, çözümümü kontrol etmek için ne Hexagony boyacısı ne de ezoterik kullandım. Şartnamenin bazı yönlerini yanlış anladım, bu yüzden sadece kalem, kağıt ve metin editörü kullanarak birkaç yanlış “çözüm” ürettim. Sonunda tembelliğimi aştım ve her iki veri havuzunu da klonladım, VisualStudio'yu indirdim ve derledim. Vay, onlar ne yararlı araçlar! Gördüğünüz gibi, programcı olarak adlandırdığınız bir kişi olmaktan çok uzaktayım (demek istediğim, hadi! VisualStudio uygulaması bile yüklü değildi ve bir programın nasıl derleneceği hakkında hiçbir fikrim yoktu);

Çalışan bir çözüm bulmam hala biraz zaman aldı ve oldukça tıkandı ve karmakarışık, ama burada tüm görkemiyle:

6 altıgen boyutta Fizzbuzz:

3}1"$.!$>)}g4_.{$'))\<$\.\.@\}F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\;.z;i;..>(('

Altıgen düzen:

      3 } 1 " $ .
     ! $ > ) } g 4
    _ . { $ ' ) ) \
   < $ \ . \ . @ \ }
  F \ $ / ; z ; u ; <
 % < _ > _ . . $ > B /
  < > } ) ) ' % < > {
   > ; e " - < / _ %
    ; \ / { } / > .
     \ ; . z ; i ;
      . . > ( ( '

Timwi'nin Hexagony Colorer'ı ve güzel yorumu :

Colorized Hexagony FizzBuzz solution

Bu nedenle, 2 fps'de 110 saniyelik bir GIF animasyonu, ilk 6 sayıdaki program akışını, programın 1, 2, Fizz, 4, Buzz, Fizzilk 220 tikini gösterir (tam boyut için resmin üzerine tıklayın):

enter image description here

Aman Tanrım, Natron kompozit yazılımı sayesinde işaretçinin animasyonu hala can sıkıcıydı ama yönetilebilirdi. Hafızanın 260 görüntüsünün kaydedilmesi daha az eğlenceliydi. Ne yazık ki EsotericIDE bunu otomatik olarak yapamaz. Neyse, animasyonun tadını çıkar!

Sonuçta, kafanızı bir bellek modelinin etrafına sardığınızda ve altıgenin sınırlarını geçen yolların tersine çevrilmesiyle sarılmaya başladığınızda, Hexagony ile çalışmak zor değildir. Ancak golf oynamak popoda bir acı olabilir. ;)

Eğlenceliydi!


1
Çok hoş! :) Ben kendimi yan uzunluğu 6 denemek unutmak için ne olsun. ;) (Çözümümün kenar uzunluğu 6'ya rağmen daha kolay
Martin Ender

@ MartinBüttner Görmeyi çok isterim :)
ML

2
Senden daha az programcıyım, çünkü Visual Studio nedir? : P
Rɪᴋᴇʀ

5
Ne yazık ki EsotericIDE bunu otomatik olarak yapamaz. - Lütfen hemen devam edin ve bir öneride
bulunun

1
(bu son 6 ay sonra ortaya çıkacaktır). Programın sonundan itibaren 1 byte'lık gri yolu 1 byte değiştirerek ve "turuncu bir yola" Canceling op " 3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('ekleyerek golf oynayabilirsiniz . (z ile "a ile" iptal edilebilir) sonra veya z'yi oraya koyarak. Şimdi, a) tüm komutları turuncu yoldaki 1 daha sonra tıklar ve 3. satırdaki no-op ile geri döner. Btw Ayrıca Hexagony Colorer ve Ezoterik IDE: P
Sunny Pun

44

Labirent , 94 bayt

"):_1
\ } 01/3%70.105
" :   @ "     .
"  =";_""..:221
+  _
"! 5%66.117
_:= "     .
="*{"..:221

Alt 100! Bu eğlenceli bir şeydi.

açıklama

Labyrinth üzerine kısa bir astarla başlayalım; temel bilgileri zaten biliyorsanız, bunu atlamaktan çekinmeyin:

  • Labirentte iki yığın bulunur - ana yığın ve yardımcı yığın. Her iki istifin alt kısmında sonsuz sayıda sıfır var, örn.+ iki istifin boş bir istif üzerinde iki sıfır ekler, böylece sıfıra iter.

  • Labirent'teki kontrol akışına, bir sonraki nereye gidileceğini belirlemek için yığının tepesine bakan kavşaklar tarafından karar verilir. Negatif, sola dönüş, sıfır düz dümdüz ve pozitif araç sağa dönüş demektir ... fakat bir duvara çarptığımızda yönünü değiştiririz. Örneğin, sadece dümdüz ileri ve sola dönüş mümkündür, ancak yığının tepesi pozitifse, o zaman sağa dönemediğimiz için sola döneriz.

  • Labirentte Rakamlar pop xve it10*x + <digit> , bu da büyük sayıları oluşturmayı kolaylaştırır. Ancak bu _, Labirent'te yeni bir numara başlatmak için 0'a basma komutuna ihtiyacımız olduğu anlamına gelir .

Şimdi gerçek koda geçelim!

enter image description here

Kırmızı

Yürütme ", NOP olan sol üst köşeden başlar . Sonraki, )istifin üstünü artıran, ilk geçişte 1 iterek ve artann sonraki her geçişte yapan.

Sonraki biz çoğaltmak nile :. nOlumlu olduğu için sağa döneriz, }(ana yığının üstünü yardımcıya kaydırırız) ve :. Çıkmaza girdik, o yüzden arkamıza dönüp ilerledik }ve bir :kez daha bıraktık,

Main [ n n | n n ] Aux

Bir kez daha, npozitif ve biz yürütme, sağa _101/bölen nise 101 ile ndaha sonra 101 n/101 = 1ve biz dönüşür @programı sonlandırır, hangi. Aksi halde şu anki durumumuz

Main [ n 0 | n n ] Aux

Turuncu 1 (mod 3)

3üst sıfırı 3 ( 10*0 + 3 = 3) değerine döndürür ve %bir modulo gerçekleştirir. Eğer n%3pozitif, doğru sarı dönüşür ". Aksi taktirde 70.105.122:..çıkış yaparız Fizz. O _zamandan beri yeni sıfırlar itmemize gerek olmadığını unutmayın.n%3 bu durumda sıfır olduğunu, bu yüzden biz yığının altındaki sonsuz sıfır yararlanabilir. Her iki yol da açık mavi renkte tekrar buluşuyor.

Açık mavi

Yığının tepesi şu anda n%3pozitif olabilir, bu yüzden _;sadece bir sıfıra basar ve derhal öne doğru ilerlememizi sağlamak için hemen açılır @. Daha sonra =, aşağıdakileri vererek ana ve yardımcı yığınların üstlerini değiştirmek için kullanıyoruz :

Main [ n | n%3 n ] Aux

Turuncu 2 (mod 5)

Dışında bu, daha önce benzer bir durum 66.117.122:..çıkışı Buzzisen%5 sıfırdır.

Koyu mavi

Önceki bölüm gibi yığınları bırakır

Main [ n%5 | n%3 n ] Aux

{n%3sırtını ana yığına kaydırır ve *iki modülü çoğaltır.

Her iki modulo da sıfırsa, ürün sıfırdır, bu yüzden doğrudan sarıya gideriz. Dümdüz ilerlememizi sağlamak =için yığınların üstünü değiştirir ve _sıfıra basar

Main [ n 0 | 0 ] Aux

Aksi takdirde, her iki modül de sıfır değilse, ürün sıfır değildir ve sağ yeşile döneriz. =vererek, yığınların üstünü değiştirir

Main [ n | (n%5)*(n%3) ] Aux

Bundan sonra :çoğaltmak için nsağa, sonra !çıktısını kullanmak için kullanırız .n .

Mor

Bu noktada, ana istif, hangi yolun kullanıldığına bağlı olarak bir veya iki öğeye sahiptir. Sıfırdan sarı yoldan kurtulmamız ve her iki durumda da bir sırayla +yerine getirdiğimiz işlemi yapmamız gerekiyor n + 0. En sonunda,\ yeni bir satır çıkarır ve tekrar başlıyoruz.

Her yineleme (n%5)*(n%3), yardımcı yığına fazladan bir itme yapar, ancak aksi halde yine aynı şeyi yaparız.


7
Açıklamayı seviyorum.
The_Basset_Hound

29

Perl 5, 49 bayt

46 bayt komut dosyası + 3 bayt -E"..."

Kullanmak say(gerektiren -E"..."), bunu sayotomatik olarak bir yeni satır içerdiğinden 46 bayta azaltabilir (Thanks @Dennis !):

say'Fizz'x!($_%3).Buzz x!($_%5)||$_ for 1..100

Perl 5, 50 bayt

print'Fizz'x!($_%3).Buzz x!($_%5)||$_,$/for 1..100

Kullanarak birkaç bayt kaydedebilirsiniz say.
Dennis,

Sen puan tahtası kırdı ...
LegionMammal978

@ LegionMammal978 Evet. Evet yaptım ... Başlığı tekrar yazacağım! Ahh!
Dom Hastings

-E"..."8 bayt değil mi? Boşluk + Çizgi + Seçenek + Bağımsız Değişken (+ Alıntı).
Outgolfer Erik,

1
@EriktheGolfer, bunu gönderdiğimden beri, fikir birliği -E0 bayttır, ancak primo'nun yanıtı tırnaklar hariç tutulduğundan, onu adil kılmayı ve benimkiler için +1 için tırnak işaretleri koymayı seçtim -E. Özgür olarak kabul edilmesinin nedeni genellikle Perl'dir perl -eve perl -Eartık bayt değildir (Düşündüm -M5.010ya use 5.010da özgür olabilirim, ama belki de meta gönderisini yeniden okumam). Eklerken -pya da -nbu koştuğunuz gibi +1 olarak sayılır perl -pe. Umarım yardımcı olur! Meta referansı: meta.codegolf.stackexchange.com/a/7539
Dom Hastings

27

Ruby, 50 bayt

Golfçüler arasında popüler gibi görünen 1.8 sürümünü gerektirir:

1.upto(?d){|n|puts'FizzBuzz
'[i=n**4%-15,i+13]||n}

Modern Ruby'de ?dile değiştirin100 51 bayt çözümü için.

Bu dünya rekoru gibi görünüyor.


1
Bu şeytanidir, sevin.
Camden Narzt

?dsadece 100. FizzBuzzDize bu Ruby geçerlidir, içinde bir yeni satır vardır. string[i, s]karakterden başlayarak i(0 indeksli), skarakterlerin devam ettiği , dizginin dışına işaret eden dizinleri görmezden gelen bir dilimdir . Argümanın putszaten yeni bir satırı varsa, kesilir. Formül okunması kolay mı olmalı? Buradaki tüm işleri yapıyor. Gerçekten profesyonel olmayan Ruby golfçülerinin yardımı olmadan bulamazdım.
Lynn

Not: Girişin başına 0 ekleyebiliyorsanız (siz değilsiniz), ?e.timesbunun yerine 2 bayt kaydedilebilirdi .
Shelvacu

Parçayı açıklar [i=n**4%-15,i+13]mısın lütfen? Kafamın etrafına dolanmış gibi görünmüyor
Piccolo

2
@ Piccolo Bu pasajı yardımcı olur mu? i==-14Dilim sınırların dışına çıkarsa , anlarız nil. Eğer i==-9biz dilim i+13==4yüzden ucundan 9 karakter başlayarak karakter 'Fizz'. Eğer i==-5bu yüzden, ucundan 5. karakterden başlayarak 8 karakter dilim 'Buzz\n'. (8 dilimlemeye çalışıyoruz ama sadece 5 tane var, yani 5 alıyoruz.) Et cetera.
Lynn,

26

Java, 130 bayt

Bu, son Java sürümleri (7+) içindir. Eskilerde enumnumarayı kullanarak biraz daha tıraş edebilirsiniz , ancak mantığın bundan daha kısa olduğunu sanmıyorum (86 iç main).

class F{public static void main(String[]a){for(int i=0;i++<100;)System.out.println((i%3<1?"Fizz":"")+(i%5<1?"Buzz":i%3<1?"":i));}}

Sorunun boş stderr olduğunu belirttiği için başlatıcı blok numarasının burada yardımcı olduğunu sanmıyorum.
feersum 24:15

Hmm. Statik numarasının stderr'e baskı yaptığını biliyorum, ama enum'un düzgün çalıştığını sanıyordum.
Bilinmesi Gerekenler

4
beni 14 byte ile yen! == 0 yerine <1 kullanmak tasarruf etmek için harika bir yoldur!
ESP

2
class F{public static-> interface F{staticjava 8'de
TheNumberOne

1
Bu değil oldukça çeteleler nasıl çalıştığını. Yapmanız gerekecek enum F{;public..., yani herhangi bir baytı kurtarmayacaksınız.
HyperNeutrino,

23

Pyth, 30

VS100|+*!%N3"Fizz"*!%N5"Buzz"N

Burada dene

Açıklama:

VS100|+*!%N3"Fizz"*!%N5"Buzz"N
VS100                            : for N in range(1,101)
     |                           : logical short-circuiting or
      +*!%N3"Fizz"               : add "Fizz" * not(N % 3)
                                 : Since not gives True/False this is either "" or "Fizz"
                  *!%N5"Buzz"    : Same but with 5 and Buzz
                             N   : Otherwise N
                                 : The output of the | is implicitly printed with a newline

23

Retina , 317 139 134 132 70 63 60 55 bayt

.100{`^
_
*\(a`(___)+
Fi;$&
\b(_{5})+$
Bu;
;_*
zz
'_&`.

Çevrimiçi deneyin!

açıklama

.100{`^
_

Programın .sonunda örtük çıktıları kapatan küresel sessiz bayrak. 100{Programın geri kalanını 100 yineleme için yürütülen bir döngü içine sarar. Son olarak, sahne alanı sadece _dizgenin başlangıcına bir ekler , bu da bir unary loop sayacını etkili bir şekilde arttırır.

*\(a`(___)+
Fi;$&

Daha fazla yapılandırma *\(Programın geri kalanını bir grupta sarar, sonucunu takip eden bir satır beslemesiyle yazdırır, ancak aynı zamanda tüm grubu da kuru çalışmaya koyar, bu da sonucunun yazdırıldıktan sonra atılması anlamına gelir, böylece döngü sayacımız gerçekten değiştirilmez .aregex'i tüm dizeye bağlayan özel bir regex değiştiricisidir (kullanım sırasında ^ve $açıkça bir bayttan tasarruf sağlar ).

Atom aşamasının kendisi ilgilenir Fizz. Tarafından bölünebilirlik 3kolayca unary olarak kontrol edilebilir: sadece rakamın tekrarı olarak yazılıp yazılmadığını test et ___. Bu durumda, Fi;dizeye hazırlanırız. Noktalı virgül, sonraki aşamada sayının önünde hala bir sözcük sınırı olacak şekildedir. Biz konusunda çizgiyi açtıysanız Fizz___...arasındaki konumda zve _regex hem harf davranır ve kelime karakter olarak altını çünkü bir sınır sayılmaz. Ancak, noktalı virgül, zzçoğaltmayı Fizzve öğesinden kaldırmamıza da izin verir Buzz.

\b(_{5})+$
Bu;

Biz bölünme için tamamen aynı yapmak 5ve Bu;biz tutmak gerekmez, ancak _bu sefer s. Böylece gibi bir sonuç elde edersiniz

_
__
Fi;___
____
Bu;
Fi;______
...
Fi;Bu;
...

Bu, alt çizgilerden yalnızca içeren satırlarda kurtulmayı çok kolaylaştırır Fizz, aynı zamanda zzs'yi doldurur :

;_*
zz

Yani, her bir noktalı virgül haline getiririz, zzancak ondan _hemen sonra hepsini tüketiriz . Bu noktada biz FizzBuzz ile birlikteyiz. Ancak meydan okuma ondalık çıktı istiyor.

'_&`.

&bir koşullu olduğunu gösterir: bu aşama yalnızca dize alt çizgi içeriyorsa gerçekleştirilir. Bu nedenle, Fizz, Buzzve FizzBuzzyineleme dokunulmaz. Diğer tüm yinelemelerde (yani, 3 veya 5 ile bölünmeyenler), sadece karakter sayısını sayarak sonucu ondalık sayıya çeviririz.



20

Perl 5, 45 bayt

say((Fizz)[$_%3].(Buzz)[$_%5]or$_)for+1..100

-EBir olarak sayılan seçeneği gerektirir . Bu komut satırından çalıştırılmalıdır, yani:

perl -Esay((Fizz)[$_%3].(Buzz)[$_%5]or$_)for+1..100

Komuta etrafında alıntılar tek boşluk kullanmaktan kaçınır ise, gereksiz veya komut satırı ayırıcı olarak hareket edebilir başka karakterler ( |, <, >,& , vs.).


Perl 5, 48 bayt

print+(Fizz)[$_%3].(Buzz)[$_%5]||$_,$/for 1..100

Komut satırı seçenekleri her biri olarak sayılırsa, -lbir byte'ı (değiştirerek $/) kaydeder . By Klasik Perlgolf Kuralları : Bunlardan biri, ancak bu 3 sayılır -, diğeri lve gerekli alanı için bir tane.


Sen kullanabilirsiniz sayile -Edüzenleme mesafe 1 sahiptir anahtarı, -ebu yüzden 1 byte olarak sayılmalı.
Dennis,

Ben kullandığım için yanıtında hile gibi primo Hey, hissediyorum saybunu varsaydım, -Eyerinde kullanmak da mümkün -eolan aşağı 44 yerine 46'ya getirecek bunu ben puanlama ediyorum adil olduğunu düşünmüyorum Senden farklı olarak, tercih edilen puanlama mekanizması nedir? Bunu printönlemek için genellikle kullanırım ! Bir fikir birliğine en yakın olan bu mu?
Dom Hastings

Benim kişisel almak komut satırında her ek bayt için özellikle 1. puanı gerektiğidir saykodunuzu herhangi OS ayırıcılar kaçınarak tek bir satırda yazılabilir, eğer için 1 puan -E. Örneğin -E"$a||$b", puan 3'ü kullanmanız gerekiyorsa , 3 puan -M5.01. Ancak bu noktada muhtemelen kullanmaktan daha iyi olursunuz -l. İki nedenden ötürü varsayılan olarak ücretsiz olması gerektiği konusunda hemfikir değilim: 1) iyileştirme önemsiz ve ilgi çekicidir ve 2) tercümanın varsayılan olarak etkinleştirildiği bir sürümü yoktur.
primo

20

balmumu ,104 89 81 bayt

8 bayt daha kesmek için daha yoğun paketleme yapılmasına izin verildi.

En kısa çözüm (81 bayt), aynı program akışı, farklı paketleme.

p?@<
p?{@b'gA<
p@`zzuB`d'%~5F@<f`z`<
 >~P"#"_"1F3~%'d`Fiz`b
 d;"-~@~.<
>?N@9P~0+d

Kavramı değiştirmek, kodu 15 bayt kadar azaltmamı sağladı. Çözümdeki double mod 5 testinden kurtulmak istedim, bu yüzden bir bayrak uyguladım.

Kısa açıklama:

eğer n%3=0Fizz baskılı alır ve bayrak set alır. Bayrak, üst lstack değerini gstack'a (talimat f) iterek gerçekleştirilir .

Eğer n%5=0öyleyse, n%3=0(FizzBuzz durumu) veya n%3>0(Buzz durumu). Her iki durumda da, Buzz yazdırılır ve istif boşalıncaya kadar yığını açarak bayrak sıfırlanır (talimat ?).

Şimdi ilginç vakalar:

Eğer n%5>0öyleyse ya bizde n%3=0(Fizz davası basılıyor, n basılmamalı) ya da n%3>0(Fizz basılmamış, n basılmalıdır). Bayrağı kontrol etme zamanı. Bu, gstack'ın uzunluğunu gstack'ın üstüne getirerek gerçekleştirilir (talimat A). Eğer n%3 was 0öyleyse gstack uzunluğu> 0'dır. Eğer n%3 was >0, gstack uzunluğu 0'dır basit bir koşullu atlama gstack uzunluğu 0 emin eğer n sadece basılı alır hale getirir.

Yine, n, Fizz ve / veya Buzz ve newline'lerden herhangi birini yazdırdıktan sonra, gstack boş olduğundan emin olmak için iki kez fırlatılır. gstack ya boştur [], bu komuttan [0]sonra yol açar A(gstack'taki gstack'ın uzunluğunu itin) ya da bir sıfırı ( [0]n% 3'ün sonucunu) içerir [0 1]; boş yığın yığını değiştirmez, bu yüzden iki kez patlamak güvenlidir.

Daha yakından bakarsanız, ilke olarak katladığımı görebilirsiniz.

>      q
d`Fizz`f>

içine

<f`z`<
d`Fiz`b

hangi arasındaki tüm israf alanı kurtulmak için yardımcı olur Ave <aşağıda yaşlı çözeltide aşağıdaki satırın sonunda:

q?{@b'gA<       p      <

Animasyonlu açıklama içeren yeni konsept çözümü (89 bayt):

q?@ <
 q?{@b'gA<       p      <
p?<@`zzuB`b'%~5F@<f`zziF`b'<
>N@9P~0+.~@~-";~P"#"_"1F3~%d

Altıgen düzen:

   q ? @   <
    q ? { @ b ' g A <               p             <
 p ? < @ ` z z u B ` b ' % ~ 5 F @ < f ` z z i F ` b ' <
> N @ 9 P ~ 0 + . ~ @ ~ - " ; ~ P " # " _ " 1 F 3 ~ % d

İlk 326'nın animasyonu 2 fps'de yerel ve global yığınlar ile işaretlenir ve STDOUT'a çıkar.

beeswax FizzBuzz animation


Karşılaştırma için, eski, daha karmaşık çözümün yol kaplamaları aşağıdadır. Belki görsel açıdan da güzel bir çözüm;)

Program with path overlay


2
Bu Hexagony kadar çılgın ve güzel. + 1'leyin!
ETHProductions

@ETProductions Hala Hexagony'i denemeye ihtiyacım var, ancak dil özelliklerinden öğrenebileceğim şeyden sonra balmumu Hexagony çılgınlığına bile yaklaşmıyor.
ML


Bu animasyonları nasıl yapıyorsunuz?
baordog

18

> <> , 68 66 65 64 bayt

1\2+2foooo "Buzz"<
o>:::3%:?!\$5%:?!/*?n1+:aa*)?;a
o.!o"Fizz"/oo

Tek hile, kalanları sayı baskısına koşul olarak çarpmaktır. Bu sayede onlardan biri 0 olur.

Burada deneyebilirsiniz .

Sp3000 ve bir diğerini randomra sayesinde bir bayt kurtardı. Çok teşekkürler!


1
Çok iyi golf oynadım, ilk satırda "\" ve ikinci satırda tekrar kullanılmasını seviyorum.
cole, 22

1
oİkinci satırın sonundaki satırın başındaki boş alana giderseniz -1 bayt , inanıyorum.
Sp3000

@ Sp3000 Gerçekten, golf oynamak için çok zaman harcadım, bunun aklıma nasıl geldiğini bilmiyorum
Aaron

1
Sahip olabileceğiniz zaman kim fizz buzz'a ihtiyaç duyar foooo Buzz?
caird coinheringaahing

17

gs2 , 28 27 (olmadan f)

hex:

1b 2f fe cc 04 46 69 7a 7a 09 07 42 75 7a 7a 19 06 27 2d d8 62 32 ec 99 dc 61 0a

Açıklama:

1b    100
2f    range1 (1..n)
fe    m: (map rest of program)

cc    put0 (pop and store in register 0)
04    string-begin
Fizz
09    9
07    string-separator
Buzz
19    25
06    string-end-array (result: ["Fizz"+chr(9) "Buzz"+chr(25)])

27    right-uncons
2d    sqrt
d8    tuck0 (insert value of register 0 under top of stack)
62    divides
32    times (string multiplication)
ec    m5 (create block from previous 5 tokens, then call map)

99    flatten
dc    show0 (convert register 0 to string and push it)
61    logical-or
0a    newline

\x05Dize değişmezlerini sona erdirdiğinden , 3 ve 5 dizelerinin sabit dizisine gömülmesi çalışmaz .

Not: Bu sorun , yerleşik kullanarak gs2 ile 1 byte içinde çözülebilir f.


16

C, 85 bayt

i;main(){for(;i++<=99;printf("%s%s%.d\n",i%3?"":"Fizz",i%5?"":"Buzz",(i%3&&i%5)*i));}

-2 pürüzlü sayesinde.


Burada derlemeye çalışıyorum, ancak gccdizenin içindeki yeni satırı \ n olarak tanımıyor. Bana bir derleme hatası veriyor. Derleyiciye herhangi bir parametre iletmem gerekiyor mu? BTW, <=gönderinizi kaçırdınız (88 bayt'ı <= ... ile saydım, bu yüzden eksik olduğunu tahmin ediyorum).
wendelbsilva

ayy. uyarılardaki hatayı özledim. 2 karakter ekler.
AShelly

Genel değişkenler sıfıra başlatılır, bunun yerine main(i)deneyin i;main(). Sonra döngünün i--başlangıcında kurtulabilirsiniz for(). Satır sonlarına da ihtiyacınız yok. Bu bayt sayımını
85'e düşürmeli.

2
UB'yi nasıl almak istediğinize bağlı olarak 73, 74 veya 75 bayt yapabilirsiniz. İşte 74 baytlık cevabım .
Lynn,

1
OMG Bu şeyi sadece bir bayt küçültmek için 3 saat harcadım. Hadi bakalım. Yatağa gidiyorum (i%3&&i%5)*iile değiştirini%3*i%5?i:0
Albert Renshaw

16

CJam, 35 bayt

100{)_[Z5]f%:!"FizzBuzz"4/.*s\e|N}/

CJam tercümanında çevrimiçi olarak deneyin .

Nasıl çalışır

100{)_[Z5]f%:!"FizzBuzz"4/.*s\e|N}/
100{                             }/  For each integer I between 0 and 99:
    )_                                 Increment I and push a copy.
      [Z5]                             Push [3 5].
          f%                           Map % to push [(I+1)%3 (I+1)%5].
            :!                         Apply logical NOT to each remainder.
              "FizzBuzz"4/             Push ["Fizz" "Buzz"].
                          .*           Vectorized string repetition.
                            s\         Flatten the result and swap it with I+1.
                              e|       Logical OR; if `s' pushed an empty string,
                                       replace it with I+1.
                                N      Push a linefeed.

3
Daha basit çözüm:100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
aditsu 30:15

16

MUMPS, 56 54 bayt

f i=1:1:100 w:i#5=0 "Fizz" w:i#3=0 "Buzz" w:$X<3 i w !

Bu w:$X<3 işey ne , sordun mu? $Xçıkış imlecinin yatay konumunu (terminalin sol kenarından bir dizi karakter olarak) kaydeden bir sihirli değişkendir ("içsel"). komutun wkısaltılmış şeklidir WRITE. Sözdizimi command:condition argspostconditional - "eğer conditionöyleyse command args".

Bu yüzden çıktı imlecinin iki karakterden daha fazla gelişmiş olup olmadığını kontrol etmekteyiz (bu, en az birinin terminale yazıldığı "Fizz"veya "Buzz"terminale yazıldığı anlamına gelir ) ve eğer değilse, iterminale yazıyordur . $XDeğişken - ve bu nedenle, terminalden derin birbirinden ayrılamaz bu tür - kabakulak birinci sınıf bir özelliğidir. Amanın.


15

Jöle , 24 20 bayt

³µ3,5ḍTị“¡Ṭ4“Ụp»ȯµ€G

Çevrimiçi deneyin!

Nasıl çalışır

³µ3,5ḍTị“¡Ṭ4“Ụp»ȯµ€G  Main link. No input.

³                     Yield 100.
 µ                    Begin a new, monadic chain.
                 µ€   Apply the preceding chain to all integers n in [1, ..., 100].
  3,5ḍ                Test n for divisibility by 3 and 5.
      T               Get all truthy indices.
                      This yields [1] (mult. of 3, not 5), [2] (mult. of 5, not 3),
                      [1, 2] (mult. of 15) or [].
        “¡Ṭ4“Ụp»      Yield ['Fizz', 'Buzz'] by indexing in a dictionary.
       ị              Retrieve the strings at the corr. indices.
                ȯ     Logical OR hook; replace an empty list with n.
                   G  Grid; join the list, separating by linefeeds.

yine dışarıda hiç kimse golfed dennis (HQ9 + tarzı cevap hariç)
noɥʇʎԀʎzɐɹƆ

15

beyin fırtınası, 206 bayt

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

biçimlendirilmiş:

++>+++++>>>>>
++++++++++[>+>>+>>+>+<<<[++++<-<]<,<,-<-<++<++++[<++>++++++>]++>>]
>
[
  +
  [
    [<<]
    <[>>]
    +++<
    [
      Fizz
      <.<.<..
      [>]
    ]
    <<-
    [
      >>>
      [
        ,>>[<]
        >[--.++<<]
        >
      ]
    ]
    +++++<
    [
      Buzz
      +[-----.++++<<]
      >>+..
      <-
      [>]
    ]
    <[->>,>+>>>->->.>]
    <<
  ]
  <[>+< <<,<->>>+]
  <
]

Çevrimiçi deneyin

Hafıza düzeni

0 a 122 105 70 b f 0 t d1 s d2 c d 10 0

nerede f3 ile döngüleri, b5 ile döngüleri, d1olanları haneli olduğu d2, onlarca rakamdır sonlarca rakamı yazdırmak olmadığına dair bir bayrak olup, d10 ile döngüleri, ckopya uzay içindir d, t0 veya önemsiz verileri ya da olmasın için bir bayrak tutan çalışıyor boşluk -di-tarafından-3, aBuzz'ın 20 kez basılmasından sonra imleci ofsetleyerek programın sonlandırılmasını belirler.


14

C #, 128 126 125 124 bayt

class A{static void Main(){for(var i=0;i++<100;)System.Console.Write("{0:#}{1:;;Fizz}{2:;;Buzz}\n",i%3*i%5>0?i:0,i%3,i%5);}}

Kazan kodu olmadan 89 bayt.

C # koşullu biçimlendirme kullanımı ile yapılır .

İki bölümlü ayırıcılarla ;, durumlarından elde edilen değer sıfırsa, Fizz veya Buzz yazdırılır.


@RubberDuck, @Timwi ve @Riokmij sayesinde toplam 4 bayt kaydedildi.


WriteNewline'ı çağırmak ve doğrudan dizeye eklemek daha kısa olacaktır , değil mi?
RubberDuck

Aynı zamanda yazmak i%3*i%5>0?i:0yerine bir bayt daha kısa i%3*i%5==0?0:i.
Timwi

forAçıklamada başka bir bayttan tasarruf edebilirsinizfor(var i=0;i++<100;)
Najkin

1
Dize enterpolasyonunu C # 6.0'dan $"{(i%3*i%5>0?i:0):#}...\n"
kaldırarak

1
121 bayt ile bugün yapabilir -class A{static void Main(){for(var i=0;i<100;)System.Console.Write($"{(++i%3*i%5<1?0:i):#}{i%3:;;Fizz}{i%5:;;Buzz}\n");}}
Jerri Kangasniemi

14

Clojure, 113 106 101 100 91 bayt

Benim ilk golf!

(dotimes[i 100](println(str({2'Fizz}(mod i 3))({4'Buzz}(mod i 5)({2""}(mod i 3)(inc i))))))

Ungolfed:

(dotimes [i 100] ; account for off-by-one later
  (println (str ({2 'Fizz} ; str converts symbols to strings
                 (mod i 3))
                ({4 'Buzz} ; 4 instead of 0 because of off-by-one
                 (mod i 5)
                 ({2 ""} ; shortest way to write when-not
                  (mod i 3)
                  (inc i))))))

1
Örneğin println, Java çözümündekiyle aynı şekilde işleyerek 5 karakteri kaldırabilirsiniz . (doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
Kurtarıcı

1
@resueman Teşekkürler! Aslında 7 oldu, çünkü (if t"Fizz""")basitleştirilebilir (if t"Fizz"). :)
Sam Estep 25:15

+1 Güzel modulo numarası, ilk başta bir hatalar yapmış olsanız da.
coredump 8

14

brainfuck , 411 350 277 258 bayt

Düzenlemeler:

  • -61 bayt "Fizz Buzz" değerlerini "BuziF" "BuziG" olarak kaydederek ve sayı yazdırma bölümünü yineleyerek.

  • -71 bayt, modulo numarası yazdırma bölümünü tekrarlayarak, döngü sayacını ve sayı sayacını bölerek ve yeni satır hücresini mod değeri olarak tekrar kullanarak

  • -19 bayt, herhangi bir FizzBuzz numarasında 0 olmadığını fark ederek. Ayrıca açıklama eklendi

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

Çevrimiçi deneyin!

Sayının kendisinin 5 veya 3 ile bölünebilir olup olmadığını kontrol etmek yerine, sayının modülünü izleyen, her sayı için azaltan ve 0'a ulaştıklarında karşılık gelen sözcüğü basan iki sayacım vardı.

Nasıl çalışır:

+[-[>+<<]>-]>--  Generate the number 61
[>+>++>++>++++++>+>>>++++++[<<<]>-] Set the tape to multiples of 61
TAPE: 0 0' 61  122 122 110 61  0 0 110
           "=" "z" "z" "n" "="
<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>> Modify values by multiples of 5
TAPE: 0' 5 66  117 122 105 71  3 0 100' 0 0 10
           "B" "u" "z" "i" "G"
Some info:
  5     - Buzz counter
  "Buz" - Buzz printing
  "ziG" - Fizz printing. Modifying the G in the loop is shorter than modifying it outside
  3     - Fizz counter
  0     - This is where the Fizz|Buzz check will be located
  100   - Loop counter
  0     - Number counter. It's not worth it to reuse the loop counter as this.
  0     - Sometimes a zero is just a zero
  10    - Value as a newline and to mod the number by

[ Loop 100 times
  >+<<<  Increment number counter
  -[<]<  Decrement Fizz counter
  [ If Fizz counter is 0
    >+++ Reset the Fizz counter to 3
    >+<< Set the Fizz|Buzz check to true
    -.+<.<.. Print "Fizz"
  [<]<] Sync pointers
  >>-[<<]> Decrement Buzz counter
  [ If Buzz counter is 0
    .>.>.. Print "Buzz"
    >>>>+  Set the Fizz|Buzz check to true
    [<]+++++< Reset the Buzz counter to 5
  ]
  >[>]>> Go to Fizz|Buzz check
  [ If there was no Fizz or Buzz for this number
    TAPE: 3% BuziG 5% 0 Loop Num' 0 10
    [->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]  Mod the number counter by 10
    TAPE: 3% BuziG 5% 0 Loop 0' Num 10-Num%10 Num%10 Num/10
    >[-<+>] Move Num back in place
    >,>[>]< Reset 10-Num%10
    [ For both Num/10 (if it exists) and Num%10
      >-[<+>-----]<--- Add 48 to the number to turn it into the ASCII equivilent
      .,< Print and remove
    ]
    ++++++++++> Add the 10 back
  ]
  <. Print the newline
  <<<<, Remove Fizz|Buzz check
  >- Decrement Loop counter
]

Aferin Jo! Bunu birgün
yenmeye çalışabilirim

13

PowerShell, 78 68 61 54 Bayt

1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}

Düzenleme: Feersum sayesinde 10 bayt kaydedildi

Düzen2: Feersum numarasıyla artık $ t kod bloğu dizisi olarak formüle etmem gerekmediğini fark ettim.

Düzen3: Danko Durbić sayesinde 7 bayt daha kaydedildi

Hisse senedi benzer-ish hisse Rosetta Kod cevap , ancak oldukça aşağı golf.

açıklama

1..100|%{...} 1'den 100'e kadar bir koleksiyon oluşturun, ardından bu koleksiyondaki her nesne için

(...,$_)iki elemanın yeni bir koleksiyonunu oluşturun: 0) $t=...değişkeni $tbir dizeye eşit ayarlayın ; 1)$_ döngünün akım numarası

"Fizz"*!($_%3)akım-sayımızı alın, 3 ile modlayın, ardından sonucu DEĞİL. Bunu "Fizz" ile çarpın ve dizeye ekleyin (ve 5 için benzer). PowerShell, sıfır olmayan herhangi bir sayı olarak kabul eder $TRUEve bu nedenle sıfır olmayan bir sayının NOT değeri 0 olur; bu, yalnızca geçerli sayımızın 3 katı olması durumunda, "Fizz" dizeye eklenecektir.

[!$t]dizginin değerine bağlı olarak oluşturduğumuz koleksiyona dizinler $t- boş değil, yazdır, aksi halde güncel sayı


Alternatif olarak, ayrıca 54 bayt

1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}

TesselatingHeckler'e teşekkürler

Konsepte benzer olarak, bu satır içi -replaceoperatörü ve normal bir ifadeyi ^$akım sayımızla boş bir dizgeyle değiştirmek için kullanır . Dize boş değilse, değiştirilmez.


Alternatif olarak, ayrıca 54 bayt

1..100|%{($_,('Fizz'*!($_%3)+'Buzz'*!($_%5))|sort)[1]}

Bu, yukarıdakiyle aynı döngü yapısına sahiptir, ancak içindeki içindeki çifti (n, string) sıralar ve boş bir dizenin bir sayıdan önce sıralanmasına, ancak bir FizzBuzz dizesinin bir sayıdan sonra sıralanmasına dayanır. Sonra ikinci sıralama sonucunu endeksler.


Bir kenara, eğer PowerShell ||, C # 'da olduğu gibi operatörü şimdiye kadar uyguladıysa, muhtemelen 1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}şüphe uyandıran bir şeye sahip olan 43 byte'a kadar düşebiliriz , çünkü bu |, PowerShell'de çok önemli bir özel operatör olduğundan, hayal edebiliyorum ...
AdmBorkBork 24:15

1
1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}54'e ne dersin ?
TessellatingHeckler

Gibi bir if($t){$t}else{$_}şeyle değiştirebilirsiniz($t,$_)[!$t]
Danko Durbić

1
... yani 1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}hangisi daha 54 ise @ TessellatingHeckler'in önerisi gibi
Danko Durbić

@TessellatingHeckler PowerShell esnek değilse hiçbir şey değildir.
AdmBorkBork

13

JavaScript, 62 bayt

for(i=0;++i<101;console.log(i%5?f||i:f+'Buzz'))f=i%3?'':'Fizz'

Bence bu şu anda en kısa Javascript çözümü.


Vay, sadece vay! Ancak diğer tüm JS cevaplarının kullanımı console.log; arka arkaya 100 açılır kutuda "OK" (Tamam) düğmesine basmaktan çok daha sinir bozucu. Lütfen bunu değiştirir misiniz? Sadece 62 bayt, yine de benimkinden üç tanesi daha iyi olacak.
ETHProductions

Kendi gönderilerimin 5 tanesini daha önce düzenlediğim ve artık düzenleyemediğim için bunu yarın yapmak zorunda kalacağım ...
Mama Fun Roll

2
Oh, düzenlemenin bir sınırı olduğunu
bilmiyordum

12

C, 74 bayt

main(i){for(;i<101;puts(i++%5?"":"Buzz"))printf(i%3?i%5?"%d":0:"Fizz",i);}

Bunun yerine 0argüman balık, ama denedim çoğu platformda çalışıyor gibi görünüyor.printf""putsYine de aynı şeyi denediğinizde segfaults. Onsuz, 75 bayt alırsınız.

Anarşi golfünde çalışan 73 baytlık çözümler var ve bir tanesini internette doğru yerlere kazarken buldum, ancak platforma özgü davranışlara güveniyorlar. (Tahmin edebileceğiniz gibi, bu formun bir şeyi puts("Buzz"±...).)


Args yok durum için i = 1 almak için iyi bir numara (argc = 1). Bu bir özellik: ./fizzbuzz $(seq 40)
Peter Cordes

12

Kazı kazan, 203 185 bayt

Golfed itibaren sayılır bayt sayısı metinsel gösterimi başına, bu meta yazı . Kazı kazan çok fazla alan verimli değil.

saybir stdout'a en yakın şey Scratch'ın: sprite söylediklerini içeren bir konuşma balonu gösterir. Uygulamada, wait n secsbu çıktının gerçekten okunması için bir bloğa ihtiyaç duyulur, ancak bu zorluğun amaçları için bu kod gereklilikleri yerine getirir.


y =(Her ikisinde de) sonra sayıların eksik
Beta Decay

@BetaDecay Üzgünüz? Ben takip etmiyorum
timothymh

Tekrarlama döngüsünün içinde, set y to ...bir değer eksik
Beta Decay

1
@BetaDecay Bu boş dize. :) Eğer resmin üzerine tıklarsanız, eylem halindeyken görebilirsiniz!
timothymh

Ohhh haha ​​senden şüphe ettiğin için üzgünüm;)
Beta Decay

12

R, 88 83 77 71 70 bayt

Bunun geliştirilebileceğine eminim ... ve @ flodel’e kredisi vardı. @Njnnja'dan bir öneri ve @JDoe'dan başka bir kaç byte kurtarıldı.

x=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)

Bir kedi cevap. Fare yukarıda :)
Silviu Burcea 25:15

1
Biraz daha iyi buldum:x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
flodel 28:15

@njnnja Öneri için teşekkürler. Ben olsa writeyerine daha yerine uyguladıcat
MickyT

2
Büyücülük burada! writeÇağrı yerine boş bir dize 1 öylesine alabilir x=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)70 bayt için önemsiz 1 bayt golf olduğunu.
J.Doe

68 bayt . Bayt sayısı, yazdırılamayan üç geri alanı içerir ve TIO'da düzgün çalışmıyor.
J.Doe

12

Haskell, 84 bayt

main=mapM f[1..100]
f n|d<-drop.(*4).mod n=putStrLn$max(show n)$d 3"Fizz"++d 5"Buzz"

Yakın alınıyor henkma 81 bayt ama oldukça orada henüz.

d = drop.(*4).mod nBurada anahtar: d 3 "Fizz"bir drop (n`mod`3 * 4) "Fizz". Bu 0 "Fizz"olduğunda n `mod` 3ve ""başka türlü.


Düzenlenme 82 aşağı Buna çoraplar, sanırım: (%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]].
CR Drost

Bekle, sonra nkapsamda değil. Hm.
CR Drost

Evet, bu işe yaramıyor ama buna çok benzeyen alternatif bir 85 baytlık çözüm buldum:main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
Lynn

Neden bir satır sonu kullanmıyorsunuz? Noktalı virgül kadar kısa ama okunaksız daha az.
dfeuer

1
Bir kod golf sitesinde okunabilir kod arayışını tekrar gözden geçirmeni öneririm :)
Lynn

11

PHP, 54 bayt

<?for(;$i++<100;)echo[Fizz][$i%3].[Buzz][$i%5]?:$i,~õ;

V5.5 tarihinden itibaren geçerlidir. õKarakteri 245, biraz ters\n .

Varsayılan tercüman ayarlarını, herhangi bir ini olmadığı gibi kabul ediyorum. Emin değilseniz yerel ini'nizi olduğu -ngibi devre dışı bırakabilirsiniz php -n fizzbuzz.php.

Herhangi bir yapılandırma dosyasında hatasız çalışacak bir sürüm 62 bayttır :

<?php
for(;$i++<100;)echo@([Fizz][$i%3].[Buzz][$i%5]?:$i),"
";

STFU operatörü @, kodun hatasız olduğu anlamına gelmez.
sitilge 28:15


@Kzqai ideone.com/0zRA9e short_open_tag kapalı, E_NOTICEaçık. Bunların hiçbiri varsayılan ayar değildir.
primo

3v4l.org'da bir sürü hata alıyorum
kodlayıcı olan

@ acoder ile ilgili meta post . 3v4l.org yararlı görünüyor.
primo

11

80386 makine kodu + DOS, 75 bayt

Kodun Hexdump:

0D 0A 24 B1 64 33 C0 BA-03 05 BB 00 01 40 50 FE
CE 75 0C 83 EB 04 66 C7-07 42 75 7A 7A B6 05 FE
CA 75 0C 83 EB 04 66 C7-07 46 69 7A 7A B2 03 84
FF 74 0C D4 0A 04 30 4B-88 07 C1 E8 08 75 F4 52
8B D3 B4 09 CD 21 5A 58-E2 C0 C3

Kaynak kodu (TASM sözdizimi):

    .MODEL TINY

    .CODE
    .386
    org 100h

MAIN PROC
    db 13, 10, '$'
    mov cl, 100
    xor ax, ax
    mov dx, 503h

main_loop:
    mov bx, 100h
    inc ax
    push ax

    dec dh
    jnz short buzz_done
    sub bx, 4
    mov dword ptr [bx], 'zzuB'
    mov dh, 5
buzz_done:

    dec dl
    jnz short fizz_done
    sub bx, 4
    mov dword ptr [bx], 'zziF'
    mov dl, 3
fizz_done:

    test bh, bh
    jz short num_done

decimal_loop:
    aam;
    add al, '0'
    dec bx
    mov [bx], al
    shr ax, 8
    jnz decimal_loop

num_done:
    push dx
    mov dx, bx;
    mov ah, 9
    int 21h
    pop dx
    pop ax

    loop main_loop
    ret

MAIN ENDP
    END MAIN

Bu kod 1 - 100 inç arasında ax sayılarak çıktı mesajını baştan sona oluşturur. Mesajın sonu (newline ve $DOS'un mesaj sonu bayrağı için kullandığı karakter) kodun başında görünür:

db 10, 10, '$'

Zararsız bir talimat olarak yürütülür ( or ax, 240ah). Kodun bitiminden sonra olduğu gibi daha geleneksel bir yere koyabilirim, ancak 0x100 adresinde bulundurmanın bir faydası var.

Kod ayrıca 2 ek sayaç kullanır:

  • 3'ten 0'a kadar sayma dl
  • 5'ten 0'a kadar sayma dh

Bir sayaç 0'a ulaştığında, dizeyi Fizzveya Buzzçıktı mesajının sonuna iter . Bu olursa, bxazalacak vebh sıfır olacaktır. Bu, sayıyı ondalık biçimde vermek için bir koşul olarak kullanılır.

Not: Burada 32 bit veri kullanıyorum. Bu 386 öncesi bir bilgisayarda çalışmaz.


TASM, çok baytlık karakter sabitlerini NASM'den tam tersi sırada mı işlemektedir ? NASM’de, bu sırayla bellekte mov [mem], 'Fizz'depolamak Fizziçin dbyönergeleri eşleştirerek yazıyorsunuz . Bkz örneğin benim overcomplicated "verimli" YASM FizzBuzz .
Peter Cordes,

1
Kullanmak için herhangi bir bayt kaydediyor mu std, stosb/ / stosd? Sen değiştirmek zorunda kalacak test bh,bholan cmp di, 100hbir şey. Sayacı AL'ye kaydetmek / geri yüklemek yerine, BL'de saklayabilir ve istediğiniz zaman sadece kabarcıklı baltayı tutabilirsiniz. Örneğin sub bx, 4/ mov dword ptr [bx], 'zzuB'sağ, 3 + 7 bayt? mov eax, 'zzuB' / stosd6 + 2 bayttır (her ikisinde de operand boyutu öneki). Cevabın sökme işlemini içermesi iyi olurdu, böylece talimat boyutları görülebilirdi.
Peter Cordes

1
Bu harika bir cevap - veri için iyi huylu talimatları suistimal ve hiç kullanılmamış PSP hafıza alanı kullanma. @PeterCordes Önerilerinizi kullanarak oynamıştım stosdancak herhangi bir puan düşürmeyi başaramadım. Yana stosdazalmasına DIsonradan kaybetmek alamadım sub di, 4ve sonra var DIsonunda kapalı 4 bayt. Ben başardı -6 bytesben sona erdi birkaç diğer küçük özellikler kullanılarak ayrı bir cevap olarak ilanı (sadece çünkü geleni yorumunda muhtemelen uygun değildir). Kudos!
640KB

11

dC, 64 62 bayt

[[Fizz]P]sI[[Buzz]P]sU[dn]sNz[zdd3%d0=Ir5%d0=U*0<NAPz9B>L]dsLx

Ungolfed:

[[Fizz]P]sI  # macro I: print "Fizz"
[[Buzz]P]sU  # macro U: print "Buzz"
[dn]sN       # macro N: print current stack depth

z            # increase stack depth

[            # Begin macro
  zdd           # Get current stack depth and ducplicate it twice
  3%d0=I        # Check modulo 3 and leave a duplicate. If it's 0, run macro I
  r             # Rotate top two elements, bringing up the stack depth again
  5%d0=U        # Check modulo 5 and leave a duplicate. It it's 0, run macro U
  *             # Multiply the duplicates of modulos of 3 and 5 ...
  0<N           # ... if it's not 0, run macro N
  AP            # Print a newline (`A` is 10)
                # The macro leaves the stack with one more element each time
  z9B>L      # Run macro L if stack depth is less than "ninety eleven" (101)
]         # End macro

dsLx  # store the macro in register L and execute it
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.