1, 2, Fizz, 4, 버즈


148

소개

표준 프로그래밍 실습을위한 가장 짧은 솔루션 카탈로그를 수집하려는 최근 노력에서 PPCG의 첫 번째 바닐라 FizzBuzz 과제가 있습니다. 다른 카탈로그 문제를 보려면 "Hello World!"가 있습니다. 그리고 "이 숫자는 소수인가?" .

도전

1에서 100까지의 10 진수를 인쇄하는 프로그램을 작성하십시오. 그러나 숫자 대신 3 개의 인쇄“Fizz”의 배수와 5 개의 인쇄“Buzz”의 배수의 경우. 3과 5의 배수 인“FizzBuzz”의 숫자입니다.

산출

출력은 개행 ( \n또는 또는 \r\n)으로 구분 된 숫자 (및 Fizzes, Buzzes 및 FizzBuzzes) 목록입니다 . 후행 줄 바꿈은 허용되지만 선행 줄 바꿈은 허용되지 않습니다. 개행을 선택하는 것 외에도 출력은 다음과 같아야합니다.

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

이 규칙의 유일한 예외는 인사말, ANSI 색상 코드 또는 들여 쓰기와 같이 억제 할 수없는 언어 해석기의 일정한 출력입니다.

추가 규칙

  • FizzBuzz를 재생하는 가장 짧은 방법으로 언어를 찾는 것이 아니라 모든 언어에서 가장 짧은 방법을 찾는 것입니다. 따라서 답변이 수락 된 것으로 표시되지 않습니다.

  • 제출은 적절한 기존 인코딩 (보통 UTF-8은 아님)으로 바이트 단위로 점수가 매겨집니다. 폴더와 같은 일부 언어는 점수를 받기가 다소 까다 롭습니다. 의심스러운 경우 Meta에 문의하십시오.

  • STDERR에 인쇄 할 수있는 것이 없습니다.

  • 일반적인 규칙과 달리이 과제보다 새로운 언어라도 언어 (또는 언어 버전)를 자유롭게 사용하십시오. 빈 프로그램이 FizzBuzz 출력을 생성하는 언어를 만들어서 이것을 남용하려는 경우, 매우 지루한 답변을 준비하게 된 것을 축하합니다.

    제출물을 테스트하려면 통역사가 있어야합니다. 이전에 구현되지 않은 언어에 대해이 통역사를 직접 작성할 수 있습니다.

  • 선택한 언어가 이미 답변이있는 다른 (잠재적으로 더 널리 사용되는) 언어의 사소한 변형 인 경우 (BASIC 또는 SQL 방언, 유닉스 쉘 또는 Alphuck과 같은 사소한 Brainfuck 파생물을 생각하십시오) 기존에 메모를 추가하십시오 동일하거나 매우 유사한 솔루션은 다른 언어에서도 가장 짧습니다.

  • 출력이 고정되어 있으므로 출력을 하드 코딩 할 수 있습니다 (단, 가장 짧은 옵션은 아님).

  • 프로그램의 원래 작성자에게 크레딧을 제공하는 한 기존 솔루션을 사용할 수 있습니다.

  • 그렇지 않으면 표준 허점이 허용되지 않습니다.

부수적으로, 골프가 많지 않은 언어로 지루한 (그러나 유효한) 답변을 줄이지 마십시오. 이들은 가능한 한 완전한 카탈로그를 컴파일하려고 시도하기 때문에이 질문에 여전히 유용합니다. 그러나 저자가 실제로 코드를 작성하는 데 노력을 기울여야하는 언어로 답을 주로 투표하십시오.

목록

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. 이것은 실행 중이거나 컴파일 할 때만 적용됩니까 (별도의 단계라고 가정)?
AShelly

@AShelly 실행중인 경우에만
Beta Decay

100을 챌린지에 하드 코딩했다는 사실이 마음에 들지 않습니다. 그렇게하면 예상 된 출력 만 생성하는 프로그램은 유효한 항목이지만이 문제에는 흥미가 없습니다. 도전 과제는 프로그램이 출력 할 항목 수를 입력해야한다고 생각합니다.
Timwi

6
@Timwi 나는 그것이 약간 흥미로울 것이라는 데 동의하지만 FizzBuzz를 1에서 100으로 엄격하게 보았습니다 (예를 들어 Wikipedia 및 Rosetta Code). 목표가 "정규적인"FB 챌린지를 갖는 것이 의미가 있습니다.
Geobits

58
"바닐라 피즈 버즈"는 맛있게 들립니다.
iamnotmaynard

답변:


76

파이썬 2, 56

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

6
Dang, 그것은 피의 천재입니다. 문자열에 mod-result를 곱하는 아이디어를 훔칠 수 있습니까?
AdmBorkBork

@TimmyD 계속하십시오.
feersum

15
56에 대한 다른 방법 ( 여기에서 ) : i=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100. 비트 검색을 최적화하기 위해 강제 검색 식을 무차별 화하려는 사람이 있습니까?
xnor

1
아주 좋은 기술, 나는 모듈로 결과의 나눗셈을 바이너리로 만드는 것을 좋아합니다! 나는 당신의 방법을 54
자로 줄 이도록

2
@Tersosauros 계속해 ... 내 방법은 찾기가 어렵지 않으며 많은 사람들이 독립적으로 발견 한 것입니다.
feersum

76

헥사 고니 , 91 바이트

현상금에 감사드립니다 :)

와, 나는 Martin의 Hexagony 솔루션을 이길 수 있다고 상상하지 못했을 것 입니다. 그러나 누가 썽크었을까요? 며칠간의 실패 후 Hexagony colorer 나 EsotericIDE 가 솔루션을 확인 하지 않았기 때문에 . 사양의 여러 측면이 잘못되었으므로 펜과 종이와 텍스트 편집기를 사용하여 몇 가지 잘못된 "솔루션"을 만들었습니다. 글쎄, 마침내 나는 게으름을 극복하고 두 저장소를 복제하고 VisualStudio를 다운로드하여 컴파일했습니다. 와우, 그들이 얼마나 유용한 도구입니까! 보시다시피, 나는 당신이 프로그래머라고 부르는 사람과는 거리가 멀다. (Visual Studio를 설치하지 않았으며 프로그램을 컴파일하는 방법에 대한 단서도 거의 없다.);

작동하는 솔루션을 찾는 데 여전히 시간이 걸렸으며 상당히 혼란스럽고 혼란 스럽지만 여기에는 모든 영광이 있습니다.

크기 6 육각형의 Fizzbuzz :

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

육각형 레이아웃 :

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

Timwi의 Hexagony Colorer 덕분에 아름다운 연출이 가능합니다 .

컬러화 된 Hexagony FizzBuzz 솔루션

다음은 2fps의 110 초 길이의 GIF 애니메이션입니다. 처음 6 개의 숫자 중 프로그램 흐름을 보여주는 1, 2, Fizz, 4, Buzz, Fizz첫 번째 220 틱입니다 (전체 크기의 이미지를 클릭하십시오).

여기에 이미지 설명을 입력하십시오

Natron 컴 포지 팅 소프트웨어 덕분에 포인터의 애니메이션은 여전히 ​​지루하지만 관리하기는 쉽지 않았습니다. 메모리의 260 이미지 저장은 덜 재미있었습니다. 불행히도 EsotericIDE는 자동으로 그렇게 할 수 없습니다. 어쨌든 애니메이션을 즐기십시오!

결국, 메모리 모델 주위에 머리를 감고 육각형의 경계를 가로 지르는 다소 직관적 인 경로의 포장을하면 Hexagony는 다루기가 어렵지 않습니다. 그러나 골프는 엉덩이에 고통이 될 수 있습니다. ;)

재미 있었다!


1
아주 좋아요! :) 그것은 내가 길이 6을 직접 시도하는 것을 잊어 버린 것입니다. ;) (내 솔루션이 측면 길이 6에 더 잘 맞는지 확인하는 것이 흥미로울 것입니다.)
Martin Ender

@ MartinBüttner 나는 그것을보고 싶어요 :)
ML

2
Visual Studio가 무엇이기 때문에 나는 당신보다 프로그래머가 아닙니다. : P
Rɪᴋᴇʀ

5
불행히도 EsotericIDE는 자동으로 그렇게 할 수 없습니다. — 바로 가서 기능 제안을 제출하십시오. 언젠가는 그 일을 할 수도 있습니다 :)
Timwi

1
(이것은 6 개월의 마지막 회신 후 표시됩니다.) 회색 경로를 1 바이트만큼 이동하고 다음과 같이 주황색 경로에 "Cancelling op"를 배치하면 프로그램 끝에서 1 바이트 떨어져 골프를 3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('탈 수 있습니다. (z 다음에 a를 사용하여 "취소"할 수 있음) 또는 z를 넣습니다. 이제는 1) 나중에 주황색 경로의 모든 명령을 푸시하고 3 행의 no-op로 돌아 왔습니다. Btw 또한 Hexagony Colorer 및 Esoteric IDE로 인해 Visual Studio를 설치했습니다 .P
Sunny Pun

44

미로 , 94 바이트

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

서브 -100! 재미있었습니다.

설명

Labyrinth에 대한 간단한 입문서로 시작하겠습니다. 기본 사항에 이미 익숙한 경우이 단계를 건너 뛰어도됩니다.

  • Labyrinth에는 기본 스택과 보조 스택의 두 가지 스택이 있습니다. 두 스택 모두 바닥에 무한한 수의 0이 있습니다. 예 +를 들어 빈 스택의 경우 두 개의 0이 추가되어 0이됩니다.

  • Labyrinth의 제어 흐름은 정션에 의해 결정되며, 정션은 스택의 상단을보고 다음에 어디로 갈지 결정합니다. 음수는 좌회전, 0은 직진, 양수는 우회전 ...하지만 벽에 부딪히면 방향이 바뀝니다. 예를 들어, 직진 및 좌회전 만 가능하지만 스택의 상단이 양수이면 우회전 할 수 없으므로 대신 좌회전합니다.

  • Labyrinth의 숫자 팝 x및 푸시 10*x + <digit>를 사용하면 많은 숫자를 쉽게 빌드 할 수 있습니다. 그러나 이것은 우리가 _Labyrinth에 있는 새로운 숫자를 시작하기 위해 0을 누르라는 명령이 필요하다는 것을 의미합니다 .

이제 실제 코드를 보자!

여기에 이미지 설명을 입력하십시오

빨간

"왼쪽 상단의 NOP 에서 실행이 시작됩니다 . 다음은 )스택의 상단을 늘리고 첫 번째 패스에서 1을 누르고 n다음 패스마다마다 증가 합니다.

다음으로로 복제 n합니다 :. n양수 이므로 우회전하여 }(메인 스택의 상단을 보조로 이동) 및을 실행 :합니다. 우리는 막 다른 골목에 충돌, 그래서 우리는 돌아 서서 실행 }:같은 스택을 떠나, 더 번

Main [ n n | n n ] Aux

다시 한 번, n양수이고 우회전 하여 101로 _101/나누어 실행 n합니다. 101이면 n으로 n/101 = 1바뀌고 @프로그램이 종료됩니다. 그렇지 않으면 현재 상황은

Main [ n 0 | n n ] Aux

주황색 1 (mod 3)

3상단 0을 3 ( 10*0 + 3 = 3) 으로 바꾸고 %모듈로를 수행합니다. 경우 n%3긍정적, 우리는 바로 노란색으로 설정 ". 그렇지 않으면 우리는 수행 70.105.122:..한다 Fizz. 이 경우 0 _이래로 새로운 0을 푸시 할 필요가 없으므로 n%3스택 맨 아래에서 무한한 0을 이용할 수 있습니다. 두 경로 모두 연한 파란색으로 다시 만납니다.

하늘색

스택의 상단은 현재 n%3양수 일 수 있습니다. 따라서 _;그냥 0을 밀고 즉시 팝하여으로 바뀌지 않고 바로 진행되도록합니다 @. 그런 다음 =주 스택과 보조 스택의 상단을 교체하는 데 사용 합니다.

Main [ n | n%3 n ] Aux

주황색 2 (mod 5)

이것은 0 인 경우의 66.117.122:..출력을 제외하고는 이전과 비슷한 상황 입니다.Buzzn%5

진한 파란색

이전 섹션에서는 스택을

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

{n%3다시 메인 스택으로 이동하고 *두 모듈로를 곱합니다.

모듈로가 0이면 곱은 0이므로 곧바로 노란색으로갑니다. =스택의 상단을 바꾸고 _0을 밀어 똑바로 나아가도록합니다.

Main [ n 0 | 0 ] Aux

그렇지 않으면 두 모듈러스가 모두 0이 아닌 경우 곱은 0이 아니며 오른쪽으로 녹색으로 바뀝니다. =스택의 상단을 교체하여

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

그 후 우리는 :복제 하기 위해 사용 하고 n, 우회전 한 다음 !출력에 사용 합니다 n.

보라색

이 시점에서 메인 스택에는 어떤 경로를 사용했는지에 따라 하나 또는 두 개의 항목이 있습니다. 노란색 경로에서 0을 제거 하고 두 경우 모두 순서대로 +수행 하는을 사용해야 합니다 n + 0. 마지막으로 \줄 바꿈을 출력하고 다시 시작합니다.

각 반복은 (n%5)*(n%3)보조 스택에 여분의 것을 밀어 넣지 만 그렇지 않으면 동일한 작업을 다시 수행합니다.


7
설명을 사랑합니다.
The_Basset_Hound

29

펄 5, 49 바이트

46 바이트 스크립트 + 3 바이트 -E"..."

say(을 요구하는 -E"...")를 사용하면 say줄 바꿈이 자동으로 포함 되므로 (감사합니다. @Dennis !)

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

펄 5, 50 바이트

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

을 사용하여 몇 바이트를 저장할 수 있습니다 say.
Dennis

당신은 점수 판을 부러 ...
LegionMammal978

@ LegionMammal978 예. 예, 했어요 ... 제목을 다시 입력 해 보겠습니다. 아아!
Dom Hastings

하지가 -E"..."8 바이트? 스페이스 + 대시 + 옵션 + 인수 (+ 인용).
Erik the Outgolfer

1
@EriktheGolfer 그래서 이것을 게시 한 이후 컨센서스는 -E0 바이트이지만 primo의 답변은 따옴표를 제외하고 점수가 매겨 졌기 때문에 공평하게하고 따옴표를 내에 포함시키고 +1을 선택했습니다 -E. 그것은 무료로 받아 년대 이유는 펄은 일반적으로 통해 실행입니다 perl -e그리고 perl -E더 이상 바이트이다 (나는 생각하지 -M5.010use 5.010뿐만 아니라 무료로 할 수 있지만, 아마도 다시 읽고 있지 메타 포스트). 추가 -p하거나를 -n실행하면 +1로 계산됩니다 perl -pe. 희망이 도움이됩니다! 메타 참조 : meta.codegolf.stackexchange.com/a/7539
Dom Hastings

27

루비, 50 바이트

골퍼들 사이에서 인기가있는 버전 1.8이 필요합니다.

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

현대 루비, 당신은 대체 ?d10051 바이트 솔루션.

이것은 세계 기록 인 것 같습니다.


1
그것은 악마입니다. 그것을 사랑하십시오.
Camden Narzt

?d그냥 100입니다. FizzBuzz문자열이 루비에서 유효, 그 안에 줄 바꿈이 있습니다. string[i, s]문자 i(0 색인) 에서 시작 s하여 문자열 외부에서 가리키는 색인을 무시하고 문자 에 대해 진행 되는 슬라이스 입니다. 에 대한 인수에 puts이미 줄 바꿈이 있으면 잘립니다. 수식은 읽기 쉬워야합니까? 여기서 모든 작업을 수행합니다. 정말 프로 루비 골퍼의 도움 없이는 찾지 못했습니다.
Lynn

참고 : 입력 시작시 0을 추가 할 수 있다면 (그렇지 않습니다) ?e.times대신 2 바이트를 절약 할 수 있습니다 .
Shelvacu

[i=n**4%-15,i+13]부분 을 설명해 주 시겠습니까? 내 머리를 감쌀 수 없어
피콜로

2
@Piccolo 이 코드 조각이 도움이 되나요? 경우 i==-14슬라이스가 범위 외에 우리가 얻을 수 있도록 nil. 경우 i==-9우리는 슬라이스 i+13==4때문에, 끝에서 9 번째 문자에서 시작하는 문자를 'Fizz'. 경우 i==-5우리는 그렇게 끝에서 5 번째 문자에서 시작하는 8 자 썬다 'Buzz\n'. (우리는 슬라이스 8을 시도하지만 5가 있으므로 5를 얻습니다.)
Lynn

26

자바, 130 바이트

최신 Java 버전 (7+) 용입니다. 오래된 것들에서는 enum트릭을 사용하여 더 많은 면도를 할 수 있지만 논리가 이것보다 짧아지는 것은 아니라고 생각합니다 (86 inside 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));}}

질문에 빈 stderr이 지정되어 있기 때문에 초기화 블록 트릭이 도움이되지 않는다고 생각합니다.
feersum

흠. 정적 트릭이 stderr에 인쇄되는 것을 알고 있지만 열거 형이 깨끗하게 실행되었다고 생각했습니다. 알아두면 좋은 점 :)
Geobits

4
14 바이트 날 이길! == 0 대신 <1을 사용하는 것이 좋은 방법입니다!
ESP

2
class F{public static-> interface F{static자바 8에서
TheNumberOne

1
그건 아니에요 확실히 열거가 작동하는 방법. 당신은해야 enum F{;public...할 것이므로 실제로 바이트를 저장하지 않을 것입니다.
HyperNeutrino

23

피스, 30

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

여기 사용해보십시오

설명:

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

망막 , 317 139 134 132 70 63 60 55 바이트

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

온라인으로 사용해보십시오!

설명

.100{`^
_

.프로그램의 마지막에 암시 적 출력을 차단 글로벌 침묵 플래그입니다. 100{프로그램의 나머지 부분을 100 회 반복 실행되는 루프로 래핑합니다. 마지막으로 스테이지 자체는_ 는 문자열의 시작 부분에 를 하여 단항 루프 카운터를 효과적으로 증가시킵니다.

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

더 많은 구성. *\(나머지 프로그램을 그룹으로 묶고 결과를 후행 줄 바꿈으로 인쇄하지만 전체 그룹을 드라이 런 상태로 만듭니다. 즉, 인쇄 후 결과가 삭제되므로 루프 카운터가 실제로 수정되지 않습니다. .a는 정규식을 전체 문자열에 고정시키는 사용자 정의 정규식 수정 자입니다 (사용 ^하고 $명시 적으로 바이트를 절약합니다 ).

원자 단계 자체가 처리 Fizz합니다. 3단항으로 나눌 수 있음을 쉽게 확인할 수 있습니다 ___. 반복 횟수로 숫자를 쓸 수 있는지 테스트하십시오 . 이 경우 Fi;문자열 앞에 붙 습니다. 세미콜론은 다음 단계의 숫자 앞에 여전히 단어 경계가 있도록하는 것입니다. 우리는에 선을 설정 한 경우 Fizz___...의 위치 z_정규 표현식 모두 편지를 취급하고 단어를 문자로 밑줄 때문에, 경계를 고려하지 않을 것입니다. 그러나 세미콜론을 사용하면 및 에서 zz중복 을 제거 할 수 있습니다 .FizzBuzz

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

우리는에 의해 가분성에 대한 정확한 동일한 작업을 수행 5하고 Bu;우리가 보관할 필요가없는 있지만, _이시기에들. 그래서 우리는 다음과 같은 결과를 얻을 것입니다

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

이렇게하면을 포함하는 줄에서만 밑줄을 제거 Fizz하고 zzs를 채우는 것이 매우 쉽습니다 .

;_*
zz

즉, 우리는 각 세미콜론을로 변환 zz하지만 그 _직후 모든 s를 소비 합니다. 이 시점에서 FizzBuzz는 단항식으로 완료되었습니다. 그러나 도전은 십진 출력을 원합니다.

'_&`.

&조건을 나타냅니다.이 단계는 문자열에 밑줄이 포함 된 경우에만 실행됩니다. 따라서 Fizz, Buzz그리고 FizzBuzz반복은 그대로 남아 있습니다. 다른 모든 반복 (즉, 3이나 5로 나눌 수없는 반복)에서는 문자 수를 세어 결과를 10 진수로 변환합니다.


20

gs2 , 1

f

인용 Mauris, GS2의 창조자에서 :

나는 하나의 업에 원 goruby 의 1 바이트 Hello, world!...이 인쇄를, 그래서 "1\n2\nFizz\n4\nBuzz\n...". :)

업데이트 : 사용하지 않는 27 바이트 응답 이 추가되었습니다 f.


20

펄 5, 45 바이트

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

-E하나로 계산 된 옵션이 필요합니다 . 명령 줄에서 실행해야합니다. 예 :

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

명령 따옴표 하나 공백 사용 방지한다면, 불필요한 또는 명령 라인 분리 자로서 작용할 수있는 임의의 다른 특성 ( |, <,> , &, 등).


펄 5, 48 바이트

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

명령 행 옵션이 각각 1 개로 계산되면 -l을 교체하여 1 바이트를 절약 $/합니다. 그러나 Classic Perlgolf Rules 에서는 3 : 1 -,, 1 l, 필요한 공간을 각각 계산합니다.


편집 거리가 1 ~ 인 스위치 say와 함께 를 사용할 수 있으므로 1 바이트로 계산해야합니다. -E-e
Dennis

프리 모아, 나는에 대한 답을 속이는 것 같아 say, -E대신에 -e당신을 46이 아닌 44 세로 데려다 줄 수 있다고 생각했다. 당신과 달리, 선호하는 점수 매커니즘은 무엇입니까? 나는 print이것을 피하기 위해 일반적으로 사용 합니다! 합의에 가장 가까운 것은 이것 입니까?
Dom Hastings

내 개인적인 취지는 명령 줄의 모든 추가 바이트가 1을 기록하는 것입니다. 특히 say, OS 구분 기호를 사용하지 않고 코드를 한 줄에 작성할 수 있으면 1에 대해 점수를 매 깁니다 -E. 따옴표 (예 : -E"$a||$b"점수 3) 를 사용해야하는 경우 한 줄에 표시 할 수 없으면에 대해 5를 기록하십시오 -M5.01. 그러나 그 시점에서 아마도을 사용하는 것이 좋습니다 -l. 1) 개선이 사소하고 흥미롭지 않으며 2) 기본적으로 사용 가능한 운영체제 버전이 없습니다.
primo

20

밀랍 ,104 89 81 바이트

더 조밀 한 패킹으로 8 바이트를 더 줄일 수있었습니다.

가장 짧은 솔루션 (81 바이트), 동일한 프로그램 흐름, 다른 패킹.

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

개념을 변경하면 코드를 15 바이트 줄일 수있었습니다. 솔루션에서 이중 모드 5 테스트를 제거하고 싶었으므로 플래그를 구현했습니다.

간단한 설명 :

경우 n%3=0피즈 인쇄됩니다, 그리고 플래그가 설정됩니다. 플래그는 단순히 상단 lstack 값을 gstack (instruction f) 으로 푸시하여 실현됩니다 .

인 경우 (FizzBuzz case) 또는 (Buzz case) n%5=0중 하나 입니다. 두 경우 모두 버즈가 인쇄되고 스택이 비워 질 때까지 (지침 ) 스택을 팝하여 플래그가 재설정됩니다 .n%3=0n%3>0?

이제 흥미로운 경우 :

경우 n%5>0, 다음 중 하나를 우리가 가진 n%3=0(소다의 경우 인쇄, n은 인쇄 안) 또는 n%3>0(소다가 인쇄되지, 그래서 N이 인쇄 될). 깃발을 확인하는 시간. 이것은 gstack의 길이를 gstack 위에 밀어 넣어 실현됩니다 (명령 A). 그렇다면 n%3 was 0gstack 길이는> 0입니다. 의 경우 n%3 was >0gstack 길이는 0입니다. 간단한 조건부 점프는 gstack의 길이가 0 인 경우에만 n이 인쇄되도록합니다.

다시, n, Fizz 및 / 또는 Buzz 및 개행 문자를 인쇄 한 후 gstack이 두 번 터져 비어 있는지 확인합니다. gstack은 비어 []있으며 [0]명령 후 A(gstack에서 gstack의 푸시 길이) 또는 0 (1 [0], n % 3의 결과)을 포함합니다 [0 1]. 이는 [0]의 길이가 1이므로. 빈 스택은 스택을 변경하지 않으므로 두 번 터지는 것이 안전합니다.

자세히 보면 원칙적으로 접 었음을 볼 수 있습니다.

>      q
d`Fizz`f>

으로

<f`z`<
d`Fiz`b

아래의 오래된 솔루션에서 다음 행 사이 A<끝에서 낭비되는 모든 공간을 제거하는 데 도움이 됩니다.

q?{@b'gA<       p      <

애니메이션 설명을 포함한 새로운 개념 솔루션 (89 바이트) :

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

육각형 레이아웃 :

   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

로컬 및 전역 스택을 사용하여 2fps에서 처음 326 틱의 애니메이션이 생성되고 STDOUT으로 출력됩니다.

밀랍 FizzBuzz 애니메이션


비교를 위해 다음은 더 오래된 구형 솔루션의 경로 오버레이입니다. 어쩌면 시각적 관점에서 더 예쁘다.)

경로 오버레이 프로그램


2
이것은 Hexagony만큼이나 미쳤고 아름답습니다. +1하세요!
ETHproductions

@ETHproductions 여전히 Hexagony를 사용해 볼 필요가 있지만 언어 사양에서 알 수 있듯이 밀랍은 Hexagony의 열풍에 가깝지 않습니다.
ML


어떻게 애니메이션을 만들고 있습니까?
baordog

18

> <> , 68 66 65 64 바이트

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

유일한 트릭은 숫자 인쇄 조건으로 나머지를 곱하는 것입니다. 그렇게하면 그들 중 하나가 0이면 숫자를 인쇄하지 않습니다.

여기서 시도해 볼 수 있습니다 .

Sp3000 덕분에 1 바이트를 절약하고 randomra 덕분에 1 바이트를 절약했습니다. 많은 감사합니다!


1
골프를 잘 타면서 첫 번째 줄의 "\"와 두 번째 줄의 "\"를 재사용하는 것을 좋아합니다.
cole

1
o줄의 시작 부분에서 두 번째 줄의 끝을 빈 공간으로 옮기면 -1 바이트 라고 생각합니다.
Sp3000

@ Sp3000 실제로, 나는 이것을 골프에 너무 많은 시간을 보냈다 나는 이것이 어떻게 생각하지 않는지 모르겠다
Aaron

1
당신이 할 수있을 때 누가 피즈 버즈가 필요 foooo Buzz합니까?
caird coinheringaahing

17

gs2 , 28 27 (없이 f)

마녀:

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

설명:

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

\x05문자열 리터럴을 끝내 므로 문자열 상수에 3과 5를 삽입하면 작동하지 않습니다 .

참고 :이 문제는 내장을 사용하여 gs2 로 1 바이트 로 해결할 수 있습니다 f.


16

C, 85 바이트

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

스 퀴시 덕분에 -2.


여기서 컴파일하려고하지만 gcc문자열 내부의 새 줄을 \ n으로 인식 하지 못합니다. 컴파일 오류가 발생합니다. 컴파일러에 매개 변수를 전달해야합니까? BTW, <=귀하의 게시물에서 누락 되었습니다 (88 바이트를 <= ...로 계산하여 누락되었다고 가정합니다).
wendelbsilva

죄송합니다. 경고에서 오류가 누락되었습니다. 2 개의 문자를 추가합니다.
AShelly

전역 변수는 0으로 초기화되므로 대신을 main(i)사용해보십시오 i;main(). 그런 다음 루프 i--시작 부분에서를 제거 할 수 있습니다 for(). 줄 바꿈이 필요하지 않습니다. 바이트 수를 85로
낮추어야

2
UB를 얻는 방법에 따라 73, 74 또는 75 바이트를 수행 할 수 있습니다. 여기 내 74 바이트 답변이 있습니다.
Lynn

1
OMG 아마이 바이트를 1 바이트 작게하려고 3 시간을 보냈습니다. 여기 요 교체 (i%3&&i%5)*ii%3*i%5?i:0나는 침대에 갈거야
알버트 렌쇼

16

CJam, 35 바이트

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

CJam 통역사 에서 온라인으로 사용해보십시오 .

작동 원리

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
보다 간단한 해결책 :100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
aditsu

16

MUMPS, 56 54 바이트

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

이게 뭔지 w:$X<3 i물어봐? $X출력 변수의 수평 위치를 저장하는 마법 변수 ( "내장")입니다 (터미널의 왼쪽 가장자리에서 여러 문자로). w축약 된 WRITE명령 형식입니다 . 구문 command:condition args은 사후 조건입니다 ( "if condition, then do command args").

따라서 출력 커서가 두 개 이상의 문자 (최소한 하나 이상 "Fizz"또는 "Buzz"터미널에 쓰여 졌음을 의미 함 )인지, 그렇지 않은 경우 i터미널에 쓰는지 확인합니다. $X변수 - 따라서, 터미널에서 깊은 비 분리의 종류 - MUMPS의 일류 기능입니다. Yikes.


15

젤리 , 24 20 바이트

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

온라인으로 사용해보십시오!

작동 원리

³µ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.

골프 데니스를 다시 한 번도 아무도 (HQ9 + 스타일 답변 제외)
noɥʇʎԀʎzɐɹƆ

15

brainfuck, 206 바이트

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

형식화 :

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

온라인으로 사용해보십시오

메모리 레이아웃은

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

여기서 f3 b주기, 5주기, d11 자리, d210 자리, 10 자리 s인쇄, 10 단위 d주기, c복사 공간 d, t에 대한 복사 공간 , 0 또는 정크 데이터를 보유한 작업 공간 또는 -divisible-by-3으로, a버즈가 20 번 인쇄 된 후 포인터를 오프셋하여 프로그램 종료를 결정합니다.


14

C #을 128 126 125 124 바이트

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

상용구 코드가없는 89 바이트

C #의 조건부 서식을 사용하여 완료 .

두 섹션 구분 기호를 사용하면 ;조건의 값이 0이면 Fizz 또는 Buzz가 인쇄됩니다.


@RubberDuck, @Timwi 및 @Riokmij 덕분에 총 4 바이트가 절약되었습니다.


Write줄 바꿈을 문자열에 직접 호출 하고 추가하는 것이 더 짧 습니다.
RubberDuck

i%3*i%5>0?i:0대신 쓰는 것이 1 바이트 더 짧습니다 i%3*i%5==0?0:i.
Timwi

다음 for을 사용하여 명령문에 다른 바이트를 저장할 수 있습니다.for(var i=0;i++<100;)
Najkin

1
당신은 활용하여 세 가지 이상의 바이트를 저장할 수있는 문자열 보간 (예 : 문자열 자체에 형식 인수를 C # 6.0에서 및 포함 $"{(i%3*i%5>0?i:0):#}...\n")
LiamK

1
- 121 바이트 오늘 함께 할 수있는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");}}
제리 Kangasniemi

14

Clojure에서, 113 106 101 100 91 바이트

내 첫 골프!

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

언 골프 드 :

(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
예를 들어 Java 솔루션println 에서와 동일한 방식으로 처리하여 5자를 제거 할 수 있습니다 . (doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
resueman

1
@resueman 감사합니다! 실제로는 7 (if t"Fizz""")로 단순화되었습니다 (if t"Fizz"). :)
Sam Estep

+1 멋진 모듈러스 트릭. 처음에는 오류가 있지만 오류가 발생했습니다.
coredump

14

brainfuck , 411 350 277258 바이트

편집 :

  • "Fizz Buzz"의 값을 " BuziF" "BuziG"로 저장하고 숫자 인쇄 섹션을 다시 실행하여 -61 바이트 .

  • 모듈로 숫자 인쇄 섹션을 다시 실행하고 루프 카운터와 숫자 카운터를 분할하고 개행 셀을 모드 값으로 재사용하여 -71 바이트

  • FizzBuzz 번호에 0이 없음을 인식하여 -19 바이트 또한 추가 된 설명

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

온라인으로 사용해보십시오!

숫자 자체가 5 또는 3으로 나눌 수 있는지 확인하는 대신 숫자의 모듈로를 추적하는 두 개의 카운터가 있었고 각 숫자에 대해 감소시키고 0에 도달했을 때 해당 단어를 인쇄했습니다.

작동 방식 :

+[-[>+<<]>-]>--  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
]

잘 했어요! 나는 언젠가 그것을 이길려고 할 수도 있습니다 :)
Forcent Vintier

13

PowerShell, 78 68 61 54 바이트

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

편집 : feersum 덕분에 10 바이트 절약

Edit2 : feersum의 트릭으로 더 이상 $ t를 코드 문자열 블록으로 공식화 할 필요가 없다는 것을 깨달았습니다.

Edit3 : Danko Durbić 덕분에 7 바이트를 더 절약했습니다.

로제타 코드 (Rosetta Code) 답변 과 비슷하지만 다소 골치가 떨어졌다.

설명

1..100|%{...} 1부터 100까지의 컬렉션을 만든 다음 해당 컬렉션의 각 개체에 대해

(...,$_)두 요소의 새로운 컬렉션을 만듭니다. 0) $t=...변수 $t를 문자열과 동일하게 설정 합니다. 1) $_루프의 현재 수

"Fizz"*!($_%3)우리의 현재 숫자를 취하고 3 씩 수정 한 다음 결과는 아닙니다. "Fizz"를 곱한 후 문자열에 추가하십시오 (5와 유사). PowerShell은 0이 아닌 숫자를로 취급하므로 0이 아닌 숫자 $TRUE의 NOT은 0입니다. 즉, 현재 숫자가 3의 배수 인 경우에만 "Fizz"가 문자열에 추가됩니다.

[!$t]문자열의 값을 기반으로 방금 만든 컬렉션에 색인을 만듭니다. $t비어 있지 않은 경우 인쇄하고 그렇지 않으면 현재 숫자를 인쇄합니다.


또는 54 바이트

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

TesselatingHeckler 에게 감사합니다

개념 상 이와 유사하게 인라인 -replace연산자와 정규식을 사용하여 ^$현재 문자열 과 빈 문자열을 교체합니다 . 문자열이 비어 있지 않으면 스왑되지 않습니다.


또는 54 바이트

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

이것은 위와 동일한 루프 구조이지만 내부에서 쌍 (n, 문자열)을 정렬하고 빈 문자열은 숫자보다 먼저 정렬되지만 FizzBuzz 문자열은 숫자 다음에 정렬된다는 사실에 의존합니다. 그런 다음 두 번째 정렬 결과를 인덱싱합니다.


게다가 PowerShell이 ||C # 에서처럼 연산자를 구현 한 경우 PowerShell 에서 중요한 특수 연산자 1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}이기 때문에 ... 와 비슷한 것으로 43 바이트로 |줄일 수는 있지만 꿈을 꿀 수는 있습니다 ...
AdmBorkBork

1
어떻게 약 1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}54 하시나요?
TessellatingHeckler

당신은 대체 할 수있는 if($t){$t}else{$_}같은과($t,$_)[!$t]
단코 Durbić

1
... 그래서 당신은 1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}
@TessellatingHeckler

@TessellatingHeckler PowerShell은 융통성이 없다면 아무 것도 아닙니다.
AdmBorkBork

13

자바 스크립트, 62 바이트

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

나는 이것이 가장 짧은 자바 스크립트 솔루션이라고 생각합니다.


와우, 그냥 와우! 그러나 다른 모든 JS 답변은 사용합니다 console.log. 100 개의 팝업 상자에서 "OK"를 누르는 것보다 훨씬 성가시다. 이걸 바꿔 주실 래요? 그것은 62 바이트에 불과하지만 여전히 내 것보다 3이 좋습니다.
ETHproductions

내 자신의 게시물 5 개를 이미 편집했으며 더 이상 편집 할 수 없으므로 내일 그렇게해야합니다.
Mama Fun Roll

2
오, 나는 편집에 한계가 있다는 것을 몰랐다 ...
ETHproductions

12

C, 74 바이트

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

0인수하는 printf대신 ""비린내입니다,하지만 난 그것을 시도 대부분의 플랫폼에서 작동하는 것 같다.puts그래도 같은 일을 시도 할 때 segfaults. 그렇지 않으면 75 바이트를 얻습니다.

무정부 상태의 골프 에서 작동하는 73 바이트 솔루션이 있으며 인터넷의 올바른 장소에서 파헤치는 것을 발견했지만 플랫폼 별 행동에 의존합니다. (아마도 짐작할 수 있듯이 형식 puts("Buzz"±...)입니다.)


args가없는 경우 (argc = 1)에 i = 1을 얻는 좋은 트릭. 그것은 기능입니다 : 당신은 다음을 실행 ./fizzbuzz $(seq 40)
Peter Cordes

12

스크래치, 203 185 바이트

이 메타 포스트 당 골프 텍스트 표현 에서 계산 된 바이트 수 입니다. 스크래치는 공간 효율적이지 않습니다.

sayScratch는 stdout에 가장 가까운 것입니다. 스프라이트는 말하는 내용이 포함 된 말풍선을 표시합니다. 실제로, wait n secs블록은 실제로 출력을 읽는 데 필요한 것입니다,하지만이 도전의 목적으로이 코드는 요구 사항을 충족합니다.


y =(두 경우 모두에서) 숫자가 누락되었습니다
Beta Decay

@BetaDecay 죄송합니다? 나는 따르지 않는다.
timothymh

반복 루프 내에서 set y to ...값이 누락되었습니다
Beta Decay

1
@BetaDecay 빈 문자열입니다. :) 이미지를 클릭하면 실제로 볼 수 있습니다!
timothymh

Ohhh haha ​​죄송합니다.;)
Beta Decay

12

R, 88 83 77 71 70 바이트

나는 이것이 향상 될 수 있다고 확신합니다 ... 그리고 @flodel의 신용을 얻었습니다. @njnnja의 제안과 @ J.Doe의 제안으로 인해 몇 바이트가 더 절약되었습니다.

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

고양이 대답. 마우스가 위에 있습니다 :)
Silviu Burcea

1
나는 조금 더 나은 것을 발견했다 :x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
flodel

@njnnja 제안 해 주셔서 감사합니다. 나는 그것을 구현 write보다는 cat그래도
MickyT

2
네크로 맨시! 이 write호출은 빈 문자열 대신 1을 사용할 수 있으므로 x=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)70 바이트의 간단한 1 바이트 골프입니다.
J.Doe

68 바이트 . 바이트 수에는 인쇄 할 수없는 3 개의 백 스페이스가 포함되어 있으며 TIO에서 제대로 작동하지 않습니다.
J.Doe

12

하스켈, 84 바이트

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

henkma의 81 바이트에 가까워 지다 졌지만 아직은 아닙니다.

d = drop.(*4).mod n여기서 핵심은 : d 3 "Fizz"입니다 drop (n`mod`3 * 4) "Fizz". 입니다 "Fizz"경우 n `mod` 30이고 "", 그렇지 않으면.


재배치하면 82로 줄어 듭니다 (%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]].
CR Drost

기다렸다가 n범위 내에 있지 않습니다. 흠.
CR Drost

그래, 그것은 작동하지 않지만, 나는 그 것처럼 많이 보이는 대안적인 85 바이트 솔루션을 쳤다.main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
Lynn

줄 바꿈을 사용하지 않는 이유는 무엇입니까? 세미콜론만큼 짧지 만 읽을 수는 없습니다.
dfeuer

1
코드 골프 웹 사이트에서 읽을 수있는 코드를 찾아보십시오. :)
Lynn

11

PHP, 54 바이트

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

v5.5 이상에서 유효합니다. (가) õ문자 245, 약간 반전 \n.

기본 인터프리터 설정은 ini가 없기 때문에 가정합니다. 확실하지 않으면 -n에서 와 같이 로컬 ini를 비활성화 할 수 있습니다 php -n fizzbuzz.php.

절대적으로 모든 구성 파일로 오류없이 실행되는 버전은 62 바이트입니다 .

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

STFU 연산자 @가 반드시 코드에 오류가 없음을 의미하지는 않습니다.
sitilge


@Kzqai ideone.com/0zRA9e short_open_tag 가 꺼져 E_NOTICE있습니다. 이들 중 어느 것도 기본 설정이 아닙니다.
primo September

나는 3v4l.org에 오류가 잔뜩 받고 있어요
코더

@acoder 관련 메타 포스트 . 3v4l.org가 유용 해 보입니다.
primo

11

80386 머신 코드 + DOS, 75 바이트

코드의 16 진 덤프 :

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

소스 코드 (TASM 구문) :

    .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

이 코드는 1에서 100 인치까지 계산 ax하여 끝에서 시작까지 출력 메시지를 작성합니다. 메시지의 끝 (줄 바꿈 및 $DOS가 메시지 끝 플래그에 사용 하는 문자)이 코드의 시작 부분에 나타납니다.

db 10, 10, '$'

무해한 명령으로 실행됩니다 ( or ax, 240ah). 코드 종료 후와 같이보다 일반적인 장소에 넣을 수는 있지만 주소 0x100에두면 이점이 있습니다.

이 코드는 2 개의 추가 카운터도 사용합니다.

  • 3에서 0으로 계산 dl
  • 5에서 0까지 계산 dh

카운터가 0에 도달 할 때 문자열 푸시 Fizz또는 Buzz출력 메시지의 끝에있다. 이런 일이 발생 bx하면 감소하고bh 0이됩니다. 이것은 10 진수 형식으로 숫자를 출력하기위한 조건으로 사용됩니다.

참고 : 여기서 32 비트 데이터를 사용하고 있습니다. 386 이전의 컴퓨터에서는 작동하지 않습니다.


TASM은 실제로 NASM과 반대 순서로 멀티 바이트 문자 상수를 처리합니까 ? NASM에서는 쓰기 mov [mem], 'Fizz'저장하기 위해 Fizz일치하는 메모리에 순서대로 db지시를. 예를 들어, 지나치게 복잡한 "효율적인"YASM FizzBuzz를 참조하십시오 .
Peter Cordes

1
사용할 바이트를 저장 std한 다음 stosb/ stosd? 당신 test bh,bhcmp di, 100h또는 무엇 으로 교체해야합니다 . AL에서 카운터를 저장 / 복원하는 대신 BL로 유지하고 원할 때마다 클로버 eax를 유지할 수 있습니다. 예 sub bx, 4/ mov dword ptr [bx], 'zzuB'오른쪽 3 + 7 바이트? mov eax, 'zzuB' / stosd6 + 2 바이트입니다 (둘 다의 피연산자 크기 접두사). 답변에 디스 어셈블리가 포함되어 있으면 명령 크기가 표시되는 것이 좋습니다.
Peter Cordes

1
이것은 데이터에 대한 양성 지침을 남용하고 결코 사용하지 않는 PSP 메모리 공간을 사용하는 훌륭한 답변입니다. @PeterCordes 나는 당신의 제안을 사용하여 연주 stosd했지만 점수를 직접 감출 수 없었습니다. 이후 stosd감소 DI가 발생하면을 잃지 않고 마지막에 4 바이트 sub di, 4DI줄어 듭니다. 나는 -6 bytes약간의 다른 미세 조정 을 사용하여 별도의 답변으로 게시 하게되었습니다 (모든 의견에 맞지 않을 수 있기 때문에). 명성!
640KB

11

dc, 64 62 바이트

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

언 골프 드 :

[[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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.