Напишите программу, которая выводит текст песни на 99 бутылок пива с минимальным количеством байтов .
Текст песни:
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.
96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.
95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.
....
3 bottles of beer on the wall, 3 bottles of beer.
Take one down and pass it around, 2 bottles of beer on the wall.
2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.
1 bottle of beer on the wall, 1 bottle of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.
Правила:
- Ваша программа должна войти в STDOUT или приемлемую альтернативу или быть возвращена из функции (с завершающим переводом строки или без него).
- Ваша программа должна быть полной, работающей программой или функцией.
Допускается использование языков, специально написанных для предоставления 0-байтового ответа на этот вызов, но это не особенно интересно.
Обратите внимание, что должен быть переводчик, чтобы представление можно было проверить. Разрешается (и даже поощряется) самостоятельно писать этот переводчик для ранее не реализованного языка.
- Это отличается от вывода HQ9 + или 99. Любые ответы, написанные на этих языках, будут удалены.
Поскольку это задача каталога, речь идет не о поиске языка с кратчайшим решением для этого (есть такие, где пустая программа делает свое дело) - речь идет о поиске кратчайшего решения на каждом языке. Поэтому ни один ответ не будет помечен как принятый.
Каталог
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>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: bold; } table td { padding: 5px; }</style><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><script>var QUESTION_ID = 64198; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 36670; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//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 "//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(42), 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); } }</script>
Ответы:
C #,
285298289 байт(Моя первая попытка игры в гольф Код ...)
Немного негольфя
источник
" bottle"
аргументом формата, хотя я уверен, что есть лучший способ, когда 3 экземпляра бутылки повреждают мне глаза ...b==1
можно заменить наb<2
.for(int b = 100; b--> 1;)
Motorola MC14500B Машинный код , 46612 байт
По соображениям длины я не могу опубликовать программу здесь. Тем не менее, он может быть найден здесь в шестнадцатеричном и здесь в двоичном формате (дополненный с
0
).Это самая короткая из возможных программ в машинном коде Motorola MC14500B. Он состоит из только
1000
и1001
(8
и9
, соответственно); один код операции для каждого бита вывода.Он использует 93 224 полубайтовых кода операции и выводит текст песни по одному биту за раз. Это единственный возможный метод вывода.
Для тех, кто заинтересован, выход идет на вывод № 3 (из 16), вывод ввода-вывода.
объяснение
Регистр начинается с
0
.Код мелочи
Шестнадцатеричное является 93,224
8
s и9
S долго.Двоичная является 745,792
1
s и0
S долго.Я использовал код Python 2 ниже для генерации кода. Ввод
0
для двоичного и1
шестнадцатеричного.источник
Витси, 0 Байт
Серьезно, не получил ничего на меня. (@Мего, мне так жаль.;))
Попробуйте онлайн! (Просто нажмите «Run»)
источник
Серьезно , 1 байт
Если стек пуст (какой он есть в начале),
N
подталкивает текст. Тогда они неявно напечатаны в EOF.Спасибо @Mego за исправление серьёзного переводчика.
источник
N
:)JavaScript ES6,
230218198196192188185 байтПросто обрежьте несколько байтов, сохраняя при этом чистоту и понятность.
3 последние редакции:
источник
x=99;w=" on the wall";e=" of beer";o=" bottle";b=o+"s";for(z="Go to the store and buy some more, "+x+b;0<x;)console.log(x+(2>x?o:b)+e+w+", "+x+(2>x?o:b)+e+".\n"+(1>--x?z:"Take one down and pass it around, "+x+(2>x?o:b))+e+w+".")
JavaScript ES6,
328318307305 байтЯвляется анонимной функцией. Добавьте
f=
в начале, чтобы сделать функцию иf()
выполнить.источник
,+No, on the wall,,. Go to the store and buy some more, 99 bottles of beer on the wall.
С,
197196 байтЯ думаю, что я достиг предела этого подхода.
источник
"%d bottles of beer on the wallTake one down and pass it aroundGo to the store and buy some more,.\n"main(){for(;;)printf();}
один только 126 байтов, так что представляет жесткую нижнюю границу, если кто-то не найдет способ сжать или повторно использовать части строк без значительных накладных расходов. Я подозреваю, что вы, возможно, достигли предела подходов в целом, плюс или минус несколько байтов.Java
304301300295 байтПервый раз отправляю ответ. Я слышал, что мы могли бы использовать enum, но не мог найти как.
Ungolfed
Благодаря
quartata
,J Atkin
иBenjamin Urquhart
источник
i<2
вместоi==1
иi>2
здесь:i!=2
.99 bottle
99 bottles
Шаблоны считаются вредными , 667 байт
Вроде расширенный:
источник
Haskell,
228223 байтаФункция
f
возвращает строку с текстом песни.источник
/// , 341 байт
Потребовалось бы 99 лет, чтобы написать правильное объяснение этого кода.
Я бы, наверное, просто включил результат каждого этапа ...
По сути, это сжимает текст песни неоднократно (как и каждый ответ в /// ).
Попробуйте онлайн!
Каждый шаг декомпрессии
Поскольку замены, за которыми следуют замены, будут иметь строку
//
, она будет появляться часто.Оказывается достаточно часто, что я решил сжать
//
в-
.Когда это распаковано, результат будет следующим:
Строка
bottle
появлялась только три раза, но я все+
равно сжал ее :Затем,
)
соответствует/&/</
сопровождаемый новой строкой, и(
соответствует//?/
, которые являются шаблонами, которые будут часто использоваться позже:Теперь мы распаковали бы несколько полезных строк:
>
распаковывает вbottles of beer
^
распаковывает вbottles of beer on the wall
!
распаковывает^,
, где^
находится выше.$
распаковывает>.\n
, где>
находится первое правило и\n
перевод строки.@
распаковывает, чтобы$
следоватьTake one down and pass it around,
, где$
правило выше.Распакованный код теперь становится:
источник
Vim, 139 байтов
Сохранено 6 байтов благодаря xsot .
Это моя первая попытка сыграть в гольф команды Vim, хотя, видимо, она довольно популярна . Я включил финал
ZZ
в число байтов (запись в файл и выход), поскольку это кажется принятой нормой.Примечание: миссия выполнена .
объяснение
источник
i99 bottles of beer on the wall.<ESC>Yqa3P$r,J5wDr.+<CAN>YITake one down and pass it around, <ESC>o<ESCjq98@aiGo to the store and buy some more, <ESC>kdk?s<LF>xnxnxZZ
/
и?
.JavaScript ES6,
237 217 208 203 195 193 189186 байтГольф становится все труднее ...
Редактировать 1: Кто-то полностью переиграл меня, похоже, что мне нужно стараться изо всех сил, если я хочу получить лучший ответ Javascript.
Редактировать 2: я, честно говоря, не могу поверить, что мне удалось так много в гольф!
Я где-то напутал? Я также прошу прощения за использование
alert
, если вы хотите проверить мой код, замените его наconsole.log
.В настоящее время есть еще один известный ответ Javascript: «99 бутылок пива» . Проверьте это! : D
источник
JavaScript ES6,
210209205199198196 байтЭто грубый перевод моего представления С. Я на самом деле не знаю javascript, поэтому определенно есть место для улучшения.
Редактировать: аккуратно, я обнаружил спины
источник
console.log
с ,alert
и вы можете использовать `вместо». Тогда вы можете заменить \ п с новой строкой. (Клещи используются для строк шаблона, эти строки могут иметь символы новой строки ...) Кроме того , ПОЗДРАВЛЯЕТ для меня бить!console.log
это легче проверить. В любом случае, спасибо, что выставили меня на спину!console.log
, и моя победа будет сведена на нет .. XD)%d bottle%s of beer%s%s
. Индекс каждого стиха (количество бутылок) рассчитывается так же,i/3|0
как индекс каждой подстроки простоi%3
.Brainfuck, 743 байта
Попробуйте онлайн!
Вышеприведенное использует оберточные ячейки в нескольких местах для сохранения инструкций. Я также сделал версию без упаковки в 755 инструкциях .
несжатого
Ниже приводится полиглот на языке аннотаций Brainfuck .
источник
Python 2, 204 байта
Спецификация довольно недооценена с точки зрения пробелов, поэтому здесь я предполагаю, что в последней строке должен быть один завершающий символ новой строки. Если спецификация прояснит иначе, я обновлю этот ответ.
Я очень доволен этим, но, глядя на анархию в гольфе, я чувствую, что это можно по-прежнему играть в гольф, возможно, с другим подходом.
источник
Лабиринт ,
11951190932 байтаЭто немного чрезмерно ...
Хотя Лабиринт не особенно хорош в печати строк (потому что вам нужно нажимать все коды символов), я думаю, что можно добиться большего, чем это, используя больше, но более короткие длинные строки и становясь еще безумнее с вращением сетки.
Поскольку я думаю, что любые улучшения в гольфе существенно изменят структуру этого кода, я подожду с объяснением, пока у меня не останется идей, как продвигать его дальше.
источник
Питон 2, 195
Взял
i/2
идею из ответа Sp3000 .источник
Пакет Windows, 376 байт
Очень очень долго и некрасиво
источник
Python, 254 байта
Довольно просто, назначьте некоторые из наиболее распространенных фраз, напечатайте каждый бит от 99 до 3, затем напечатайте последние строки, сложив вместе переменные и несколько строк.
источник
Юлия,
227215213 байтЭто использует
"$variable"
строковую интерполяцию ( ) и троичные, чтобы создать вывод и распечатать его в STDOUT.Сохранено 14 байтов благодаря Glen O!
источник
(n>1?" bottles":" bottle")" of beer"
, чтобы использовать" bottle""s"^(n>1)*" of beer"
- обратите внимание, что*
необходимо после,(n<1)
потому что в противном случае он пытается применить(n>1)" of beer"
в качестве власти. Кроме того, есть ли какая-либо польза от использованияwhile n>0
overfor n=99:-1:1
(что позволяет упростить условие в конце и избежать отдельной необходимостиn=99
)?\n
и переключите среднюю часть на интерполяцию (а не",n>1?...","
используйте$(n>1?...")
), чтобы сохранить символ, и переместите,
внутреннюю часть условия до следующей части, так что ее нужно записать только один раз.JavaScript ES6, 214 байт
Ограниченные всплывающие окна:
Expanded:
@commenters: спасибо за идею функций со стрелками, сэкономлено 15 байт
Для бесконечного пива просто используйте этот код здесь, 212 байт
источник
+o'
как она была изменена на+o+'
. Также увидели возможность изменения цикла и ответа. Теперь буду проверять функции стрелок :)b=a=>a+" bottle"+(1<a?"s":"");for(i=100;100>--i;)l="\n",p="."+l,o=" of beer",e=o+" on the wall",alert(l+b(i)+e+", "+b(i)+o+p+(1<i?"Take one down and pass it around, "+b(i-1)+e:"Go to the store and buy some more, "+b((i=100)-1)+e)+p)
while
цикла и скоро выложу полученный код. Спасибо за обзор кода! :)CJam,
149148146144138137134 байтовВышеупомянутый hexdump может быть изменен с
xxd -r
. Попробуйте онлайн в интерпретаторе CJam .При стоимости 9 дополнительных байтов, в общей сложности 143 байта , мы можем избежать непечатаемых символов:
Как это устроено
источник
base
дважды уже добавляет 8 байтов в GolfScript ...C
303299297 байтовКомпилировать с
gcc -std=c99 -w
.источник
GolfScript, 143 байта
Возможно, еще есть возможности для улучшения.Приближаться к финальной ревизии, я думаю.источник
Mathematica,
238226222224 байтаСохранено несколько байтов благодаря Мартину Бюттнеру.
источник
Brainfuck, 4028 байт
Это довольно отвратительно. Много дублирования, и очень неэффективно, поэтому он не выиграет никаких призов. Однако, я начал это, и был полон решимости закончить это.
Я могу попытаться улучшить это, но, вероятно, не смогу, потому что, честно говоря, мой мозг трахан.
Golfed
Ungolfed
Выход:
Попробуйте сами здесь!Итак, кажется, что URL-адрес слишком длинный для включения, поэтому вам нужно будет скопировать / вставить, чтобы попробовать его самостоятельно.
Я проверил это с помощью этого интерпретатора .
источник
PHP, 251 байт
Это объясняет проблему множественного числа / единственного числа.
Удобочитаемый:
источник
Луч ,
11411109 байтУ меня все еще есть много возможностей для игры в гольф дальше со всеми пустыми пространствами, но за ним становится очень трудно следить и легко ломается :) Это очень похоже на тот, который я отправил для этого вопроса , за исключением того, что он идет в магазин до того, как пиво достигает 1 и ячейки, используемые для параметров, были сдвинуты. Я также значительно изменил макет. Я постараюсь объяснить, как только попробую еще пару макетов.
Попробуйте это во фрагменте стека здесь
источник
PHP,
250246244233228 байтЯ считаю, что это пока самое маленькое. Это основано на 247 выстрелах, с некоторыми модификациями для дальнейшего минимизации.
Минимизация
расширенный
источник
php -r
которой эквивалентенperl -e
и подобен, допустимо опустить открывающий тег. См. Соответствующее обсуждение в разделе Запуск PHP-r
вместо тегов кода .while($b)
работает так же хорошо.