Введение
В наших недавних усилиях по сбору каталогов самых коротких решений для стандартных упражнений по программированию, вот первая в истории PPCG ванильная задача FizzBuzz. Если вы хотите увидеть другие проблемы каталога, есть «Hello World!» и "Является ли это число простым?" ,
Вызов
Напишите программу, которая печатает десятичные числа от 1 до 100 включительно. Но для кратных трех выведите «Fizz» вместо числа, а для кратных пяти - «Buzz». Для чисел, кратных трем и пяти, выведите «FizzBuzz».
Выход
Выводом будет список чисел (а также Fizzes, Buzzes и FizzBuzzes), разделенных новой строкой (либо, \n
либо \r\n
). Конечный перевод строки является приемлемым, но ведущий перевод строки - нет. Помимо выбора новой строки, вывод должен выглядеть точно так:
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, оболочки Unix или тривиальные производные Brainfuck, такие как Alphuck и ???), рассмотрите возможность добавления примечания к существующему Ответьте, что такое же или очень похожее решение является самым коротким на другом языке.
Поскольку вывод является фиксированным, вы можете жестко закодировать вывод (но это может быть не самый короткий вариант).
Вы можете использовать уже существующие решения, если вы указали автора оригинальной программы.
Стандартные лазейки запрещены.
В качестве примечания, пожалуйста, не понижайте скучные (но действительные) ответы на языках, где не так много в гольфе; они все еще полезны для этого вопроса, так как он пытается собрать каталог настолько полно, насколько это возможно. Тем не менее, делайте в первую очередь откровенные ответы на языках, где авторам пришлось приложить усилия для игры в гольф.
Каталог
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>
источник
Nothing can be printed to STDERR.
Это правда только во время работы или также при компиляции (при условии, что это отдельный шаг?)Ответы:
Python 2, 56
источник
i=1;exec"print'FizzBuzz'[i%-3&4:12&8-i%5]or i;i+=1;"*100
. Кто-нибудь хочет использовать поисковые выражения грубой силы, чтобы попытаться оптимизировать обработку битов?Гексагония , 91 байт
Спасибо за награду :)
Вау, я бы никогда не подумал, что смогу победить решение Мартина о гексагонии . Но - кто бы мог подумать - я сделал это. После нескольких дней неудачи, потому что у меня не было ни гексагонического колорера, ни эзотерики, чтобы проверить мое решение. Я неправильно понял несколько аспектов спецификации, поэтому я создал несколько неправильных «решений», просто используя ручку и бумагу и текстовый редактор. Ну, наконец-то я преодолел свою лень и клонировал оба репозитория, скачал VisualStudio и скомпилировал их. Ух, какие они полезные инструменты! Как вы можете видеть, я далеко не тот, кого вы бы назвали программистом (я имею в виду, давай! У меня даже не было установленного VisualStudio, и я почти не знаю, как скомпилировать программу);)
Мне все еще потребовалось время, чтобы найти рабочее решение, и оно довольно забито и хаотично, но вот оно во всей красе:
Fizzbuzz в размере 6 шестиугольника:
Гексагональная компоновка:
И прекрасное исполнение, благодаря Timwi's Hexagony Colorer :
Итак, вот 110-секундная GIF-анимация со скоростью 2 кадра в секунду, показывающая ход программы во время первых 6 чисел
1, 2, Fizz, 4, Buzz, Fizz
, первых 220 тактов программы (нажмите на изображение для просмотра в полном размере):Боже мой, благодаря программному обеспечению Natron, анимация указателя была все еще утомительной, но управляемой. Сохранение 260 изображений в памяти было менее забавным. К сожалению, EsotericIDE не может сделать это автоматически. В любом случае, наслаждайтесь анимацией!
В конце концов, как только вы обернетесь вокруг модели памяти и довольно нелогичного переноса путей, которые пересекают границы шестиугольника, с гексагонией работать не так уж и сложно. Но игра в гольф это может быть боль в заднице. ;)
Это было весело!
источник
3}1"$.!$>)}g4_'{$))}\<$\.\.@\;F\$/;z;u;<%<_>_..$>B/<>}))'%<>{>;e"-</_%;\/{}/>.\)(z;i;..>('
Теперь есть дополнительные (после z, который можно «отменить» с помощью a) или поместив туда z. Теперь это а), который выдвигает все команды на оранжевом пути на 1 галочку позже и вернулся с неактивной операцией, которая была в строке 3. Кстати, я также установил Visual Studio только из-за Hexagony Colorer и Esoteric IDE: PЛабиринт , 94 байта
Sub-100! Это было весело.
объяснение
Давайте начнем с краткого учебника по Лабиринту - не стесняйтесь пропустить это, если вы уже знакомы с основами:
Лабиринт имеет два стека - основной и вспомогательный. Оба стека имеют бесконечное число нулей внизу, например,
+
в пустом стеке добавляются два нуля, что приводит к нулю.Поток управления в Лабиринте определяется переходами, которые смотрят на вершину стека, чтобы определить, куда идти дальше. Отрицательное означает поворот налево, ноль означает прямое движение вперед, а положительное означает поворот направо ... но если мы врезаемся в стену, мы меняем направление. Например, если возможны только прямое движение вперед и поворот налево, но вершина стека положительна, то, поскольку мы не можем повернуть направо, мы поворачиваем налево.
Цифры в Лабиринте всплывают
x
и толкаются10*x + <digit>
, что позволяет легко создавать большие числа. Однако это означает, что нам нужна инструкция, чтобы нажать 0, чтобы начать новый номер, который находится_
в Лабиринте.Теперь давайте перейдем к реальному коду!
красный
Выполнение начинается
"
в верхнем левом углу, который является NOP. Далее идет)
, который увеличивает вершину стека, нажимая 1 на первом проходе и увеличиваяn
на каждом следующем проходе.Затем мы дублируем
n
с:
. Такn
как положительно, мы поворачиваем направо, выполняя}
(смещение вершины основного стека к вспомогательному) и:
. Мы зашли в тупик, поэтому мы поворачиваемся и выполняем}
и:
еще раз, оставляя стеки какЕще раз,
n
положительно, и мы поворачиваем направо, выполняя_101/
который делитn
на 101. Еслиn
это 101, тоn/101 = 1
и мы превращаемся в@
, который завершает программу. В противном случае наша текущая ситуацияАпельсин 1 (мод 3)
3
превращает верхний ноль в 3 (10*0 + 3 = 3
) и%
выполняет по модулю. Еслиn%3
положительный, мы поворачиваем направо в желтый"
. В противном случае мы выполняем70.105.122:..
, какие выводыFizz
. Обратите внимание, что нам не нужно вставлять новые нули,_
посколькуn%3
в этом случае ноль был равен нулю, поэтому мы можем использовать бесконечные нули в нижней части стека. Оба пути снова встречаются в голубом.Светло-синий
В настоящее время вершина стека находится в
n%3
положительном положении, поэтому_;
просто нажимает ноль и сразу же выталкивает его, чтобы убедиться, что мы идем прямо вперед, а не поворачиваемся в@
. Затем мы используем,=
чтобы поменять вершины основного и вспомогательного стеков, давая:Апельсин 2 (мод 5)
Это аналогично предыдущей ситуации, за исключением того, что
66.117.122:..
выводит,Buzz
еслиn%5
равен нулю.Темно-синий
Предыдущий раздел оставляет стеки как
{
сдвигаетn%3
назад к основному стеку и*
умножает два модуля.Если по модулю ноль, произведение равно нулю, поэтому мы переходим прямо в желтый.
=
меняет верхнюю часть стеков и_
ставит ноль, чтобы убедиться, что мы идем прямо вперед, даваяВ противном случае, если оба модуля отличны от нуля, то произведение отлично от нуля, и мы превращаемся в зеленый.
=
меняет вершины стеков, даваяпосле чего мы используем
:
для дублированияn
, повернуть направо, а затем использовать!
для выводаn
.Фиолетовый
На этом этапе основной стек имеет один или два элемента, в зависимости от того, какой путь был выбран. Нам нужно избавиться от нуля от желтого пути, и для этого мы используем
+
, что выполняетсяn + 0
в некотором порядке в обоих случаях. Наконец,\
выводится новая строка, и мы снова в начале.Каждая итерация добавляет дополнительный
(n%5)*(n%3)
к вспомогательному стеку, но в противном случае мы делаем то же самое снова и снова.источник
Perl 5, 49 байт
46 байтов сценария + 3 байта
-E"..."
Использование
say
(что требует-E"..."
) может уменьшить это до 46 байтов, так какsay
автоматически включает перевод строки (Спасибо @Dennis !):Perl 5, 50 байт
источник
say
.-E"..."
8 байтов? Пробел + Тире + Опция + Аргумент (+ Цитирование).-E
это 0 байт, но поскольку ответ primo был оценен без учета кавычек, я решил сделать его справедливым и включить кавычки в мою и +1 для-E
. Причина это принято , как бесплатно в Perl обычно запускается с помощьюperl -e
иperl -E
не больше байт (я думал ,-M5.010
илиuse 5.010
может быть свободным , как хорошо, но , возможно , не перечитывая мета пост). При добавлении-p
или-n
это считается +1, как вы будете работать сperl -pe
. Надеюсь, это поможет! Мета-ссылка: meta.codegolf.stackexchange.com/a/7539Рубин, 50 байтов
Требуется версия 1.8, которая кажется популярной среди игроков в гольф:
В современном Ruby, вы заменяете
?d
с100
для раствора 51 байт.Это, кажется, мировой рекорд.
источник
?d
это просто100
.FizzBuzz
Строка имеет символ новой строки в нем, это справедливо в Ruby.string[i, s]
это фрагмент, начинающийся с символаi
(0-индексированный), продолжающийся дляs
символов, игнорирующий индексы, указывающие вне строки. Если аргумент дляputs
уже имеет новую строку, он обрезается. Формула должна быть простой для чтения? Он делает всю работу здесь. Я не нашел бы это без помощи некоторых действительно профессиональных игроков в гольф Руби.?e.times
вместо этого можно было бы сохранить 2 байта .[i=n**4%-15,i+13]
часть, пожалуйста? Кажется, я не могу обернуть это вокруг себяi==-14
ломтик выходит за границы, мы получаемnil
. Еслиi==-9
мы нарезатьi+13==4
символы, начиная с 9-го символа в конце, так'Fizz'
. Еслиi==-5
мы нарежем 8 символов, начиная с 5-го символа в конце, так'Buzz\n'
. (Мы пытаемся нарезать 8, но есть только 5, поэтому мы получаем 5.) И так далее.Java, 130 байт
Это для последних версий Java (7+). В более старых вы можете побриться, используя
enum
трюк, но я не думаю, что логика становится короче этой (86 внутриmain
).источник
class F{public static
->interface F{static
вenum F{;public...
, чтобы вы не экономили ни одного байта.Пиф, 30
Попробуй здесь
Объяснение:
источник
Retina ,
31713913413270636055 байтПопробуйте онлайн!
объяснение
Это
.
глобальный флаг молчания, который отключает неявный вывод в конце программы.100{
оборачивает остальную часть программы в цикл, который выполняется за 100 итераций. Наконец, сам этап просто вставляет_
в начало строки, что эффективно увеличивает счетчик унарного цикла.Больше настроек.
*\(
оборачивает оставшуюся часть программы в группу, печатает ее результат с завершающим переводом строки, но также помещает всю группу в пробный запуск, что означает, что ее результат будет отброшен после печати, так что наш счетчик цикла фактически не изменяется ,a
это пользовательский модификатор регулярного выражения, который привязывает регулярное выражение ко всей строке (что экономит байт при использовании^
и$
явно).Сама атомная стадия заботится о себе
Fizz
. Делимость на3
легко проверяется в унарном порядке: просто проверьте, можно ли записать число как повторение___
. Если это так, мы добавляемFi;
к строке. Точка с запятой такова, что перед номером на следующей стадии все еще стоит граница слова. Если бы мы повернули линию вFizz___...
положение междуz
и_
не рассматривали бы границу, потому что регулярное выражение рассматривает и буквы, и подчеркивания как символы слова. Тем не менее, точка с запятой также позволяет нам удалитьzz
дубликаты изFizz
иBuzz
.Мы делаем то же самое для делимости на
5
иBu;
, хотя нам не нужно хранить эти значения_
в это время. Таким образом, мы получили бы такие результаты, какЭто позволяет очень легко избавиться от подчеркивания только в тех строках, которые содержат
Fizz
, а также заполнитьzz
s:То есть мы превращаем каждую точку с запятой в,
zz
но мы также потребляем все_
s сразу после нее. На данный момент мы закончили с FizzBuzz в унарном виде. Но задача требует десятичного вывода.&
указывает на условие: этот этап выполняется только в том случае, если строка содержит подчеркивание. ПоэтомуFizz
,Buzz
иFizzBuzz
итерации остаются нетронутыми. Во всех других итерациях (то есть тех, которые не делятся ни на 3, ни на 5), мы просто подсчитываем количество символов, преобразуя результат в десятичное число.источник
гс2 , 1
Цитата из Mauris, создатель GS2:
Обновление : добавлен 27-байтовый ответ , который не используется
f
.источник
Perl 5, 45 байт
Требуется
-E
опция, которая считается за единицу. Это должно быть запущено из командной строки, то есть:Котировки вокруг команды не нужны, если один избегает использования пробелов, или любых других символов , которые могут выступать в качестве командной строки разделителей (
|
,<
,>
,&
и т.д.).Perl 5, 48 байт
Если параметры командной строки учитываются как один каждый,
-l
будет сохранен один байт (путем замены$/
). Однако по классическим правилам Perlgolf это будет считаться 3: один для-
, один дляl
и один для необходимого пространства.источник
say
с-E
переключателем, который имеет расстояние редактирования от 1 до-e
, поэтому он должен считаться как 1 байт.say
, я предположил, что-E
может быть использован вместо того,-e
что приведет вас к 44, а не к 46. Я не думаю, что это справедливо, что я забил в отличие от вас, каков предпочтительный механизм подсчета очков? Я обычно использую,print
чтобы избежать этого! Ближайшим к консенсусу было бы это ?say
, если ваш код может быть записан в одну строку, избегая каких-либо разделителей ОС, оценка 1 для-E
. Если вам нужно использовать кавычки, например-E"$a||$b"
, оценка 3. Если вы не можете получить его в одной строке, наберите 5 для-M5.01
. Но в этот момент вам, вероятно, будет лучше использовать-l
. Я не согласен с тем, что он должен быть бесплатным по умолчанию по двум причинам: 1) улучшение тривиально и неинтересно, и 2) нет версии интерпретатора, для которой он включен по умолчанию.пчелиный воск ,
1048981 байтБолее плотная упаковка позволила отрезать еще 8 байтов.
Самое короткое решение (81 байт), тот же программный поток, другая упаковка.
Изменение концепции позволило мне сократить код на 15 байт. Я хотел избавиться от теста двойной моды 5 в решении, поэтому я применил флаг.
Краткое объяснение:
если
n%3=0
Fizz будет напечатан, и флаг будет установлен. Флаг реализуется простым нажатием верхнего значения lstack на gstack (инструкцияf
).Если
n%5=0
, то либоn%3=0
(случай FizzBuzz), либоn%3>0
(случай Buzz). В обоих случаях печатается Buzz, а флаг сбрасывается путем выталкивания стека, пока он не опустеет (инструкция?
).Теперь интересные случаи:
Если
n%5>0
, то или у насn%3=0
(печать случая Fizz, n не должен быть напечатан) илиn%3>0
(Fizz не был напечатан, поэтому n должен быть напечатан). Время проверить флаг. Это достигается путем нажатия длины gstack поверх gstack (инструкцияA
). Еслиn%3 was 0
тогда длина gstack> 0. Еслиn%3 was >0
длина gstack равна 0. Простой условный переход гарантирует, что n будет напечатан, только если длина gstack была 0.Опять же, после печати любого из n, Fizz, и / или Buzz и новой строки, gstack появляется дважды, чтобы убедиться, что он пуст. gstack либо пуст
[]
, что приводит к[0]
после инструкцииA
(длина проталкивания gstack на gstack), либо содержит один ноль ([0]
результат n% 3), что приводит к тому[0 1]
, что [0] имеет длину 1. Выдавление из пустой стек не меняет стек, поэтому его можно всплывать дважды.Если вы посмотрите поближе, то увидите, что в принципе я сложил
в
что помогает избавиться от всего потерянного пространства между
A
и<
в конце следующей строки в более старом решении ниже:Новое концептуальное решение (89 байт), включая анимационное объяснение:
Гексагональная компоновка:
Анимация первых 326 тиков со скоростью 2 кадра в секунду с локальными и глобальными стеками и выводом в STDOUT.
Для сравнения ниже приведены наложения путей более старого, более сложного решения. Может быть, это также более красивое решение, с визуальной точки зрения;)
источник
> <> ,
68666564 байтаЕдинственная хитрость заключается в том, чтобы умножить остатки как условие для печати номера. Таким образом, если один из них равен 0, мы не будем печатать число.
Вы можете попробовать это здесь .
Один байт сохранен благодаря Sp3000, а другой - рандоме. Большое спасибо!
источник
o
конец второй строки в пустое место в начале строки, я считаю.foooo Buzz
?GS2 ,
2827 (безf
)Hex:
Объяснение:
Встраивание 3 и 5 в строковую константу не работает, потому что
\x05
завершает строковые литералы.Примечание: эта проблема может быть решена в 1 байт с помощью gs2 с помощью встроенного
f
.источник
C 85 байт
-2 благодаря брезгливым.
источник
gcc
не распознает новую строку внутри строки как \ n. Это дает мне ошибку компиляции. Нужно ли передавать какой-либо параметр компилятору? Кстати, вы пропустили<=
в своем сообщении (я насчитал 88 байт с <= ..., так что я предполагаю, что он отсутствует).main(i)
попробуйтеi;main()
. Тогда вы можете избавиться отi--
в началеfor()
цикла. Вам также не нужен разрыв строки. Это должно привести к снижению количества байтов до 85.(i%3&&i%5)*i
сi%3*i%5?i:0
я собираюсь спатьCJam, 35 байт
Попробуйте онлайн в интерпретаторе CJam .
Как это устроено
источник
100{):I3%!"Fizz"*I5%!"Buzz"*+Ie|N}/
MUMPS,
5654 байтаw:$X<3 i
Вы спросите, что это за штука?$X
является магической переменной («встроенной»), которая хранит горизонтальную позицию выходного курсора (в виде количества символов от левого края терминала).w
это сокращенная формаWRITE
команды. Синтаксисcommand:condition args
постусловный - «еслиcondition
, то делайcommand args
».Таким образом, мы проверяем, был ли выходной курсор передвинут более чем на два символа (что будет означать, что по крайней мере один из
"Fizz"
или"Buzz"
был записан в терминал), и если нет, записываетi
в терминал.$X
Переменный - и , следовательно, этот вид глубокой неотделимости от терминала - это первый класс особенность свинки. Хлоп.источник
Желе ,
2420 байтПопробуйте онлайн!
Как это устроено
источник
брейкфук, 206 байт
отформатирован:
Попробуйте онлайн
Расположение памяти
где
f
циклы на 3,b
циклы на 5,d1
это одна цифра,d2
это десятки цифр,s
это флаг для того, чтобы печатать десятки цифр,d
циклы на 10,c
это пространство для копированияd
,t
это рабочее пространство, которое содержит 0 или ненужные данные или флаг для не -делится на 3 иa
определяет завершение программы путем смещения указателя после того, как Buzz был напечатан 20 раз.источник
C #,
128126125124 байтов89 байтов без кода шаблона вокруг.
Совершено с использованием условного форматирования в C # .
С двумя разделителями секций
;
Fizz или Buzz печатаются, если значение из их условия равно нулю.Сохранено всего 4 байта благодаря @RubberDuck, @Timwi и @Riokmij.
источник
Write
и добавлять новую строку прямо к строке, верно?i%3*i%5>0?i:0
вместоi%3*i%5==0?0:i
.for
выражении, используяfor(var i=0;i++<100;)
$"{(i%3*i%5>0?i:0):#}...\n"
)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");}}
Clojure,
11310610110091 байтМой первый гольф!
Ungolfed:
источник
println
же, как в решении Java , например.(doall(map #(let[t(=(mod % 3)0)](println(str(if t"Fizz""")(if(=(mod % 5)0)"Buzz"(if t""%)))))(range 1 101)))
(if t"Fizz""")
можно упростить до(if t"Fizz")
. :)Brainfuck ,
411 350 277258 байтРедактирование:
-61 байт, сохраняя значения «Fizz Buzz» как
«BuziF»,«BuziG» и переделывая секцию печати чисел.-71 байт, переделав секцию печати чисел по модулю, разделив счетчик циклов и счетчик чисел, и, среди прочего, повторно используя ячейку новой строки в качестве значения мода
-19 байт, понимая, что в числах FizzBuzz нет нулей. Также добавлено объяснение
+[-[>+<<]>-]>--[>+>++>++>++++++>+>>>++++++[<<<]>-]<+++++[>+>+>->>->++>>>-->>>++[<<<]>>>-]>[>]+++>>[>+<<<-[<]<[>+++>+<<-.+<.<..[<]<]>>-[<<]>[.>.>..>>>>+[<]+++++<]>[>]>>[[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]>,>[>]<[>-[<+>-----]<---.,<]++++++++++>]<.<<<<,>-]
Попробуйте онлайн!
Вместо того, чтобы проверять, делилось ли само число на 5 или 3, у меня было два счетчика, отслеживающих модуль числа, уменьшая их для каждого числа и распечатывая соответствующее слово, когда они достигли 0.
Как это устроено:
источник
PowerShell,
78686154 байтИзменить: 10 байтов сохранено благодаря feersum
Edit2: понял, что с трюк Feersum, мне больше не нужно формулировать $ t в виде строки кода блоков
Edit3: спас еще 7 байтов благодаря Данко Дурбич
Подобно иш по духу фондовом Rosetta Код ответа , но golfed вниз совсем немного.
объяснение
1..100|%{...}
Создайте коллекцию от 1 до 100, затем для каждого объекта в этой коллекции выполните(...,$_)
создать новую коллекцию из двух элементов: 0)$t=...
установить переменную$t
равной строке; 1)$_
наш текущий номер цикла"Fizz"*!($_%3)
возьмите наше текущее число, измените его на 3, затем НЕ результат. Умножьте «Fizz» на это и добавьте в строку (и аналогично для 5). PowerShell обрабатывает любое ненулевое число как$TRUE
, и, следовательно, НЕ ненулевое число равно 0, что означает, что только если наш текущий номер кратен 3, «Fizz» будет добавлен в строку.[!$t]
индексы в коллекцию, которую мы только что создали, на основе значения строки$t
- не пусто, напечатайте его, иначе напечатайте наше текущее числоКроме того, также 54 байта
Благодаря TesselatingHeckler
Схожий по концепции, он использует встроенный
-replace
оператор и регулярное выражение для замены пустой строки^$
с нашим текущим номером. Если строка не пустая, она не переставляется.Кроме того, также 54 байта
Это та же самая структура цикла, что и выше, но внутри она сортирует пару (n, строка) и полагается на тот факт, что пустая строка сортируется перед числом, а строка FizzBuzz сортируется после числа. Затем он индексирует второй результат сортировки.
источник
||
оператор, как в C #, мы могли бы сократить до 43 байт с чем-то похожим на1..100|%{"Fizz"*!($_%3)+"Buzz"*!($_%5)||$_}
... сомнительно, так как|
это такой важный специальный оператор в PowerShell, но я могу мечтать ...1..100|%{'Fizz'*!($_%3)+'Buzz'*!($_%5)-replace'^$',$_}
54?if($t){$t}else{$_}
что-то вроде($t,$_)[!$t]
1..100|%{(($t="Fizz"*!($_%3)+"Buzz"*!($_%5)),$_)[!$t]}
что также 54, как предложение @ TessellatingHecklerJavaScript, 62 байта
Я думаю, что это самое короткое решение Javascript сейчас.
источник
console.log
; это намного менее раздражает, чем необходимость нажимать «ОК» на 100 всплывающих окнах подряд. Не могли бы вы изменить это? Это будет только 62 байта, все еще три лучше, чем у меня.C 74 байта
0
Аргументprintf
вместо""
рыбный, но , кажется, работает на большинстве платформ я пытаюсь его.puts
segfaults, когда вы пытаетесь сделать то же самое. Без этого вы получите 75 байтов.Есть 73-байтовые решения, которые работают на анархическом гольфе , и я нашел одно, которое копается в нужных местах в Интернете, но они полагаются на поведение платформы. (Как вы уже догадались, это что-то вроде формы
puts("Buzz"±...)
.)источник
./fizzbuzz $(seq 40)
: PЦарапина,
203185 байтСогласно этому мета-сообщению, байты считаются из текстового представления в гольфе . Царапина не очень компактна.
say
это самая близкая вещь к стандартному выводу Scratch: спрайт отображает речевой пузырь, содержащий все, что он говорит. На практикеwait n secs
потребуется блок для фактического чтения этого вывода, но для этой задачи этот код удовлетворяет требованиям.источник
y =
(в обоих случаях)set y to ...
отсутствует значениеR,
8883777170 байтЯ уверен, что это может быть улучшено... и это было заслужено @flodel. Еще пара байтов сохранена благодаря предложению @njnnja и другому от @ J.Doeисточник
x=1:100;i=!x%%3;j=!x%%5;x[i]="Fizz";x[j]="Buzz";x[i&j]="FizzBuzz";cat(x,sep="\n")
write
а неcat
хотяwrite
Вызов может занять 1 вместо пустой строки такx=y=1:100;y[3*x]='Fizz';y[5*x]='Buzz';y[15*x]='FizzBuzz';write(y[x],1)
тривиальный 1 байт для гольфа на 70 байт.Haskell, 84 байта
Приблизиться к 81 байт henkma в , но не совсем там еще.
d = drop.(*4).mod n
ключ здесь:d 3 "Fizz"
естьdrop (n`mod`3 * 4) "Fizz"
. Это"Fizz"
когдаn `mod` 3
0 и в""
противном случае.источник
(%)=drop.(*4).mod n;main=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100]]
.n
не в поле зрения. Гектометрmain=mapM putStrLn[max(show n)$3%"Fizz"++5%"Buzz"|n<-[0..100],(%)<-[drop.(*4).mod n]]
PHP, 54 байта
Действительно для версии 5.5 и выше. Символ
õ
245, немного перевернутый\n
.Я предполагаю настройки интерпретатора по умолчанию, так как они без каких-либо ini. Если вы не уверены, вы можете отключить свой локальный INI,
-n
как вphp -n fizzbuzz.php
.Версия, которая будет работать без ошибок с абсолютно любым файлом конфигурации, составляет 62 байта :
источник
short_open_tag
выключен, включенE_NOTICE
. Ни один из них не является настройками по умолчанию.80386 машинный код + DOS, 75 байтов
Hexdump кода:
Исходный код (синтаксис TASM):
Этот код имеет значение от 1 до 100
ax
, формируя выходное сообщение от конца к началу. Конец сообщения ($
символ новой строки и символ, который DOS использует для флага конца сообщения) появляется в начале кода:Это выполнено как безвредная инструкция (
or ax, 240ah
). Я мог бы поместить его в более обычное место, например, после конца кода, но преимущество по адресу 0x100.Код также использует 2 дополнительных счетчика:
dl
dh
Когда счетчик достигает 0, он выталкивает строку
Fizz
илиBuzz
в конец выходного сообщения. Если это произойдет,bx
будет уменьшено, иbh
будет ноль. Это используется как условие для вывода числа в десятичной форме.Примечание: я использую 32-битные данные здесь. Это не будет работать на компьютере до 386.
источник
mov [mem], 'Fizz'
для сохраненияFizz
в этом порядке в памяти, соответствующихdb
директивам. Посмотрите мой слишком сложный "эффективный" YASM FizzBuzz, например .std
, затемstosb
/stosd
? Вы должны были бы заменитьtest bh,bh
сcmp di, 100h
или что - то. Вместо того, чтобы сохранять / восстанавливать счетчик в AL, вы можете сохранить его в BL и просто заткнуть eax, когда захотите. Например ,sub bx, 4
/mov dword ptr [bx], 'zzuB'
3 + 7 байт, верно?mov eax, 'zzuB' / stosd
составляет 6 + 2 байта (префикс размера операнда на обоих). Было бы неплохо, если бы ответ включал разборку, чтобы были видны размеры инструкций.stosd
но сам не смог получить никакого снижения баллов. После последующихstosd
декрементовDI
вы не потеряете,sub di, 4
иDI
в конце у вас будет 4 байта. Я смог-6 bytes
использовать несколько других мелких изменений, которые я в конечном итоге опубликовал в качестве отдельного ответа (только потому, что я не мог вписаться во все комментарии). Престижность!Округ Колумбия,
6462 байтаUngolfed:
источник