Codegolf - 99 Бутылок Пива

  • Автор темы Sulu
  • Обновлено
  • 22, Oct 2024
  • #1
;

Напишите программу, которая выводит текст песни «99 бутылок пива». в как можно меньшем количестве байтов.

Текст:

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

Правила:

  • Ваша программа должна войти в STDOUT или приемлемый альтернативный вариант или быть возвращена из функции (с завершающим символом новой строки или без него).
  • Ваша программа должна быть полноценной работоспособной программой или функцией.
  • Языки, специально написанные для предоставления 0-байтового ответа на этот вызов, разрешены, но не особенно интересны.

    Обратите внимание, что для проверки представленного материала необходим переводчик. Разрешается (и даже поощряется) написать этот интерпретатор самостоятельно для ранее не реализованного языка.

  • Это отличается от вывода HQ9+ или 99. Любые ответы, написанные на этих языках, будут удалены.

Поскольку это задача каталога, речь идет не о поиске языка с кратчайшим решением для этой задачи (есть случаи, когда пустая программа делает свое дело), ​​а о поиске кратчайшего решения на каждом языке. Поэтому ни один ответ не будет помечен как принятый.

Каталог

Фрагмент стека в нижней части этого поста генерирует каталог из ответов: а) в виде списка кратчайших решений для каждого языка и б) в виде общей таблицы лидеров.

Чтобы ваш ответ появился, начните его с заголовка, используя следующий шаблон Markdown:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes

где ## Perl, 43 + 2 (-p flag) = 45 bytes is the size of your submission. If you improve your score, you может держите старые результаты в заголовке, вычеркивая их. Например:

## Ruby, <s>104</s> <s>101</s> 96 bytes

Если вы хотите включить в заголовок несколько чисел (например, потому что ваша оценка представляет собой сумму двух файлов или вы хотите перечислить штрафы за флаги интерпретатора отдельно), убедитесь, что фактическая оценка соответствует последний номер в шапке:

N

Вы также можете сделать название языка ссылкой, которая затем будет отображаться во фрагменте:

## Language Name, N bytes 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.

#код-гольф #строка #колмогоров-сложность

Sulu


Рег
16 Feb, 2011

Тем
87

Постов
167

Баллов
612
  • 26, Oct 2024
  • #2

С#, 285 298 289 байт

(Моя первая попытка игры в гольф по Кодексу...)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 <?php

$b=99;
function x($n){return"$n bottle".($n-1?'s':'')." of beer";}
$y=" on the wall";
while(b){

$c=x($b);

echo"$c$y, $c.\n",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.\n\n";
}
 

Немного негольф:

<?php $b=99;function x($n){return"$n bottle".($n-1?'s':'')." of beer";}$y=" on the wall";while($b){$c=x($b);echo"$c$y, $c.\n",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.\n\n";} ||answer||

Машинный код Motorola MC14500B, 46612 байт

По причине длины не могу разместить программу здесь. Однако его можно найти здесь в шестнадцатеричном формате, и здесь в двоичном формате (дополненный P'P''''>`++++++)++'''P>`+++++++++++++)'''''''''''P+++++++++++++`P```>`++\ v@@++++++++++L(`<@+p'''''''''PL< v``P''(++++++`<P'''''''''(++++++++`<L```P'+++++P'+++P'++++++P'++++P''''(/> p++@---@``p@'''''p+++@`> `)''' 'p-@''p\ >''p:'p@'p@'\>n' >`>`)'''p@''''p@\>n'''p@''''p@-@````p@'''''p@`>`)'''''/v `P+p``@p'''(`<@-p''''''''P'+up(`<`@@/ ^/``@@p'@p''/ >'''\ /-p'@p'@p``@p``/`>-'P''''''''p+@>`)''p`n`L++++++++++@S 'p@````p@````p@'''''p@`p@````p@'''''p@```p++@---@``p@'''''p-@+@`p@+++@``p-@``p@'p-@'''p-@```p++@`p@'p@''''p+@++++@`````p@'''''p-@`p@--@``p-@``p@''''p--@p@+++@``p-@''''p-@>`)'''p@'p+:`p@'p@'''p@'p@@``p@`p-@'''p-@`>`)'''p@''''p@``p@``p@'p@'p-@@'''p--@`>`)'''p@''''p@-@````p@'''''p@`>`)'''''p++@---@``p@'''''p+++@`>`)''''p-@''p@@'''p+@H ^\p@`p-@```p`//'''/ \@@'''p--@`>`)'p/``````@pS@++++++++++L`<vP+p`P-p`P-p`@ p'''(`<@-p''''@--p``@-p`@+p'@p`@--p''''@-p'@p`````@p'''@+++p''@p```\ ^ \'p-@/v \ p-@''p-@`p-@``p@''''p@ -@``p-@``p@'p ++@'''p@'p+++@`p-@````p@'p-@'''p-@```p++@`p@''''p+@```p-@''''p-@@``/ ^ < < < s).


Это самая короткая программа в машинном коде Motorola MC14500B. Он состоит только из #define BOT "bottle%s of beer" main(){ char *e[]={"Go to the store an buy some more","Take one down and pass it around"};char *z[]={"","s"}; for(int i=99;i>0;i--){int j=i>1?i-1:99;char* s=z[i>1]; printf("%d "BOT" on the wall, %d "BOT". %s, %d "BOT" on the wall.\n",i,s,i,s,e[i>1],j,z[j>1]);}} и #define B "%d bottle%s of beer" main(i,a){ for (i = 99; i; i--) { a=i<2; printf(B" on the wall, "B".\n%s, "B" on the wall.\n\n", i, "s"+a, i, "s"+a, a? "Go to the store and buy some more":"Take one down and pass it around", a? 99 : i-1, "s"+(i==2)); } } ( gcc -std=c99 -w beer.c and #define B "%d bottle%s of beer" main(i,a){for(i=99;i;i--)a=i<2,printf(B" on the wall, "B".\n%s, "B" on the wall.\n\n",i,"s"+a,i,"s"+a,a?"Go to the store and buy some more":"Take one down and pass it around",a?99:i-1,"s"+(i==2));} , соответственно); один код операции для каждого бита вывода.

Он использует 93 224 полубайтовых опкода и выводит текст песни побитно. Это единственный возможный метод вывода.

Для тех, кому интересно, выход идет на контакт №3 (из 16), контакт ввода-вывода.


Объяснение

a={ToString@#," bottle",If[#<2,"","s"]," of beer"}&;b=a@#<>" on the wall"&;Echo[{b@n,", ",a@n,". "}<>If[n<2,"Go to the store and buy some more, "<>b@99<>".","Take one down and pass it around, "<>b[n-1]<>". "]]~Do~{n,99,1,-1}

Реестр начинается с [99.{[', '\.' bottle''s of beer'@(:i!>' on the wall''. 'n].1>~;5$4<\'Take one down and pass it around'i}**'Go to the store and buy some more']( .


Кодовые мелочи

  • шестнадцатеричный составляет 93 224 gcc -std=c99 -w s and #define B"%d bottle%s of beer" #define O" on the wall" #define P printf( #define V(n,m,S)q(n);P O);P", ");q(n);P S);q(m);P".\n"); *s[]={"","s"};q(n){P B,n,s[n>1]);}main(){for(int i=99;--i;){V(i+1,i,".\nTake one down and pass it around, ")P"\n");}V(1,99,".\nGo to the store and buy some more, ");} это долго.

  • двоичный составляет 745 792 99{ e# For each I in [0 ... 98]: [ e# ",." e# Push that string. "…" e# Push a string. { e# Define a decoder function: 269b e# Convert the string from base 269 to integer. 25b e# Convert from integer to base 25. 'af+ e# Add 'a' to each base-25 digit. 'jSer e# Replace j's with spaces. ( e# Shift the first character from the resulting string. eu e# Convert it to uppercase. \+ e# Prepend it to the remaining string. * e# Join the string/array on the stack, using the e# generated string as delimiter. }:D~ e# Name the function D and execute it. e# This pushes ", x bottles of beer on the wall.". NN e# Push two linefeeds. 2$ e# Push a copy of the generated string. 2>) e# Discard the first two characters and pop the dot. 4$ e# Push another copy of the generated string. J< e# Discard all but the first 19 characters. e# This pushes ", x bottles of beer on the wall". \N e# Swap the string with the dot and push a linefeed. ]s e# Collect in an array and cast to string. 'x/ e# Split at occurrences of 'x'. 99@- e# Rotate I on top of 99 and compute their difference. s* e# Cast to string and and join. e# This replaces x's with 99-I. }/ e# 's- e# Remove all occurrences of 's' for the last generated string. ] e# Wrap the entire stack in an array. "…"D e# Join the array with separator "Take one down and pass it around". 35/( e# Split into chunks of length 35 and shift out the first. e# This shifts out ", 99 bottles of beer on the wall.\n\n". ] e# Wrap the modified array and shifted out chunk in an array. "…"D e# Join the array with separator "Go to the store and buy some more". s and 99{[", X bottles of beer on the wall."NN2$2>)4$J<\N]s'X/99@-s*}/'s-]"Take one down and pass it around"*35/("Go to the store and buy some more"\ это долго.

  • Для генерации кода я использовал приведенный ниже код Python 2. Вход xxd -r for binary and 00000000: 39 39 7b 5b 22 2c 2e 22 22 01 bd 8f 2d b4 49 b5 f5 99{[",.""...-.I.. 00000011: 9d bd 21 e8 f2 72 27 df 4d 4f 22 7b 32 36 39 62 32 ..!..r'.MO"{269b2 00000022: 35 62 27 61 66 2b 27 6a 53 65 72 28 65 75 5c 2b 2a 5b'af+'jSer(eu\+* 00000033: 7d 3a 44 7e 4e 4e 32 24 32 3e 29 34 24 4a 3c 5c 4e }:D~NN2$2>)4$J<\N 00000044: 5d 73 27 78 2f 39 39 40 2d 73 2a 7d 2f 27 73 2d 5d ]s'x/99@-s*}/'s-] 00000055: 22 07 9c 4b a2 4e 15 d7 df d5 82 88 c9 d9 a7 ad 37 "..K.N..........7 00000066: 16 7e 76 22 44 33 35 2f 28 5d 22 41 90 1d b1 f3 69 .~v"D35/(]"A....i 00000077: ba 3d 05 45 81 50 af 07 e4 1b 38 f7 19 22 44 .=.E.P....8.."D для шестнадцатеричного.

    p='.';o=" of beer";e=o+" on the wall";i=99;u=m=>i+" bottle"+(i==1?'':'s');while(i>0){alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, "+u(i=99)+e)+p)}
 

Сердж05


Рег
13 May, 2011

Тем
68

Постов
195

Баллов
605
  • 26, Oct 2024
  • #3

Витси, 0 Байт

Серьезно, на меня ничего нет. (@Mego, мне очень жаль. ;))

Попробуйте онлайн! (Просто нажмите «Выполнить»)

 

Aptolmacheva


Рег
27 May, 2014

Тем
79

Постов
204

Баллов
619
  • 26, Oct 2024
  • #4

Серьезно, 1 байт

p='.'; o=" of beer"; e=o+" on the wall"; i=99; u=m=>i+" bottle"+(i==1?'':'s'); while(i>0){ alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, 99 bottles"+e)+p) }

Если стек пуст (как в начале), p='.';o=" of beer";e=o+" on the wall";i=99;u=m=>i+" bottle"+(i==1?'':'s');while(i>0){alert(u()+e+", "+u()+o+p+(--i>0?"Take one down and pass it around, "+u()+e:"Go to the store and buy some more, 99 bottles"+e)+p)} pushes the lyrics. Then they're implicitly printed at EOF.

Спасибо @Mego за исправление интерпретатора Seriously.

 

Master037


Рег
20 Oct, 2016

Тем
64

Постов
194

Баллов
524
  • 26, Oct 2024
  • #5

JavaScript ES6, 230 218 198 196 192 188 185 байт

"$variable"

Просто обрезаем несколько байтов, сохраняя при этом чистый и понятный вид.

3 последние версии:

w=" on the wall" b=" bottles" o=" of beer" k=b*o for n=99:-1:1 println("$n$k$w, $n$k. $(n>1?"Take one down and pass it around":"Go to the store and buy some more"), $(n>1?"$(n-1)$(k=b*"\b"^(n<3)*o)":"99$b"o)$w. ")end ||answer||

JavaScript ES6, 328 318 307 305 байт

Это анонимная функция. Добавлять n=198 while n:s="bottle%s of beer"%"s"[:n^2>1];print n%2*"GToa kteo otnhee dsotwonr ea nadn dp absusy isto maer omuonrde,, "[n>1::2]+`n/2or 99`,s,"on the wall"+[", %d %s."%(n/2,s),".\n"[:n]][n%2];n-=1 at the beginning to make function and b,o,s,t="bottles of beer","on the wall","bottle of beer",".\nTake one down and pass it around," i=99;exec'print i,b,o+",",i,b+t,i-1,b,o+".\\n";i-=1;'*97 print"2",b,o+", 2",b+t+" 1",s,o+".\n\n1",s,o+", 1",s+".\nGo to the store, buy some more, 99",b,o+"." выполнить.

# SETUP COUNTERS >>+++[-<+++<+++>>] >>++++++[-<++++++++++<++++++++++>>]<---<--->> # SETUP CONSTANTS >+++++[-<++++++>]<++> >++++++++++[-<++++++++++>]<--> # B >++++++++++[-<+++++++++++>]<+> # O >++++++++++[-<++++++++++>]<+> # E >++++++++++[-<++++++++++>]<++> # F >++++++++++[-<+++++++++++>]<++++++> # T >++++++++++[-<++++++++++>]<++++> # H >++++++++++[-<+++++++++++>]<--> # L >++++++++++[-<+++++++++++>]<++++> # R >++++++++++[-<+++++++++++>]<+++++> # S >++++++++++[-<+++++++++++>] # N >++++++++++[-<+++++++++++>]<+++++++++># W >++++++++++[-<++++++++++>]<---> # A >+++++[-<++++++>]<++> # SPACE >++++[-<++++++++++++>]<----> # Comma >++++[-<++++++++++++>]<--> # Stop ++++++++++> # Newline >++++++++++[-<+++++++++++>]<---> # K >++++++++++[-<++++++++++>] # D >++++++++++[-<+++++++++++>]<++> # P >++++++++++[-<++++++++++>]<+++++> # I >++++++++++[-<+++++++++++>]<+++++++ # U # BACK TO START <<<<<<<<<<<<<<<<<<<<<<<<< [> [ -> # Dec x0 counter .> # Print 0x char .> # Print x0 char .> .>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>. # Comma <. <<<<<<<<<<<<<<<.>.- # Counter with decrement >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer >>>>>>>. # Stop >. # Newline <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take <<<. >>.>>>>>>>>.<<<<<<<. # One <<<. >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down >>>. <.<<.>>>>>>>>. # And <<<<<. >>>>>>.<<<<<<<.<<<.. # Pass >>>>. >>>>>>>.<<<<<<<<<<<<<<<. # It >>>>>>>>. <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around <<<<. # Comma <. <<<<<<<<<<<<<<<.>. # 0x and x0 >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>>. # Stop >.. # Newline x2 <<<<<<<<<<<<<<<<<<< # Reset loop ] <- >+++++++++ >.>. >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>. # Comma <. <<<<<<<<<<<<<<<.- # 0x with decrement >.+++++++++ # x0 with increment >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer >>>>>>>. # Stop >. # Newline <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take <<<. >>.>>>>>>>>.<<<<<<<. # One <<<. >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down >>>. <.<<.>>>>>>>>. # And <<<<<. >>>>>>.<<<<<<<.<<<.. # Pass >>>>. >>>>>>>.<<<<<<<<<<<<<<<. # It >>>>>>>>. <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around <<<<. # Comma <. <<<<<<<<<<<<<<<.>. # Counter >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>>. # Stop >.. # Newline x2 <<<<<<<<<<<<<<<<<<<< # Reset outer loop ] >-- # Decrement counter to only count from 7 # Last 8 loop [ -> # Dec counter >. # Print x0 char >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>. # Comma <. <<<<<<<<<<<<<<.- # x with decrement >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer >>>>>>>. # Stop >. # Newline <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take <<<. >>.>>>>>>>>.<<<<<<<. # One <<<. >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down >>>. <.<<.>>>>>>>>. # And <<<<<. >>>>>>.<<<<<<<.<<<.. # Pass >>>>. >>>>>>>.<<<<<<<<<<<<<<<. # It >>>>>>>>. <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around <<<<. # Comma <. <<<<<<<<<<<<<<. # Count >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>>. # Stop >.. # Newline x2 <<<<<<<<<<<<<<<<<<< # Reset loop ] # Last but 1 exception >>. # Counter >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>. # Comma <. <<<<<<<<<<<<<<.- # x with decrement >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer >>>>>>>. # Stop >. # Newline <<<<<<<<<<<.>>>>>>>.>>>>>.<<<<<<<<<<<<<<. # Take <<<. >>.>>>>>>>>.<<<<<<<. # One <<<. >>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<.>>>>>>>>>.<. # Down >>>. <.<<.>>>>>>>>. # And <<<<<. >>>>>>.<<<<<<<.<<<.. # Pass >>>>. >>>>>>>.<<<<<<<<<<<<<<<. # It >>>>>>>>. <.<<<<.<<<<<<.>>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<.>>>>>>>>. # Around <<<<. # Comma <. <<<<<<<<<<<<<<. # Count >. >.>.>>>..>>.<<<<. # Bottle <<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>>. # Stop >.. # Newline x2 # Last 1 exception <<<<<<<<<<<<<<<<<. # Counter >. >.>.>>>..>>.<<<<. # Bottle <<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>. # Comma <. <<<<<<<<<<<<<<.++++++++ # x with reset to 99 >. >.>.>>>..>>.<<<<. # Bottle <<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer >>>>>>>. # Stop >. # Newline >---- # Change K to G >>+++++++++ # Change P to Y >++++ # Change I to M <<<.<<<<<<<<<<<<<<<. # Go <<. >>>>>.<<<. # To <<. >>>>>.>.<<<. # The <<<. >>>>>>>>>.<<<<.<<<.>>>>>>.<<<<<. # Store <<<. >>>>>>>>>>>>.<<.>>>>>>>>. # And <<<<<. <<<<<<<<<<<<.>>>>>>>>>>>>>>>>>>>>.<<. # Buy <<<<<<. <<<<.<<<<<<<.>>>>>>>>>>>>>>>>>>.<<<<<<<<<<<<<<<<<. # Some >>>>>>>>>>. >>>>>>>.<<<<<<<<<<<<<<<<<<.>>>>>>.<<<<<. # More >>>>>>>>>>>. <. <<<<<<<<<<<<<<.. # 99 >. >.>.>>>..>>.<<<<.>>>>>>. # Bottles <<<<<<<<<. >>.>>. # Of <<<<. >.>>..>>>>>. # Beer <<<<<<<<. >>.>>>>>>>>. # On >>>. <<<<<<<<.>.<<<. # The <<<. >>>>>>>>>>>.>.<<<<<.. # Wall >>>>>>>>. # Stop >. # Newline x2 ||answer||

С, 197 196 байт

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

Думаю, я достиг предела такого подхода.

 

Mivkav


Рег
01 Dec, 2019

Тем
76

Постов
208

Баллов
618
  • 26, Oct 2024
  • #6

Java 304 301 300 295 байт

Впервые публикую ответ. Я слышал, что мы можем использовать перечисление, но не нашел, как это сделать.

@echo off setlocal enabledelayedexpansion set B=bottles set C=on the wall set D=of beer for /l %%* in (99,-1,1) do ( set A=%%* if !A! EQU 1 set B=bottle echo !A! !B! !D! !C!, !A! !B! !D!. set /a A=!A!-1 if !A! EQU 1 set B=bottle if !A! EQU 0 ( echo Go to the store and buy some more, 99 bottles !D! !C!. ) else ( echo Take one down and pass it around, !A! !B! !D! !C!. echo. ))

Негольфед

"{"9" ^ } "" < 713.101.801..:611.111.89.23}!:({.23.44.001.011.711.111.411.79.23.611.501.23..:511.79.211.23.001.011.79.23.011.911.111.001.23.101.(.:111.23.101.701.79.48\.411..:101.89.23.201.111.23.511.101.801..:611.111.89.23}!:{.23.44..:801.79.911.23.101.401.611.23.(.:111.23.411..:101.89.23.201.111.23.511.101.801..:611.111.89.23}!:{ _ 3`< _ ( """" " {(32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..46.\\49.32.98.111.116:..108.101.32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..44.32.49.32.98.111.116:..108.101.32.111.102.32.98.101:..114.46.\71.111.32.116.111.32.116.104.101.32.115:.).111.114.101.32.97.110.100.32.98.117.121.32.115.111.109.101.32.109.111.114.101.44.32.9!9!32.98.111.116:..108.101.115.32.111.102.32.98.101:..114.32.111:.(.32.116.104.101.32.119.97.108:..46.@ ) } < 87\\.64..:801.79.911.23.101.401.611.23.(.:111.23.411..:101.89.23.201.111.23.511 _ 3`< _ ( v"""

Благодаря s="" for(i=299;--i>1;s+=`${i/3|0||99} bottle${5/i^1?"s":""} of beer`+(i%3?" on the wall":i^3?`. Take one down and pass it around`:`. Go to the store and buy some more`)+(~i%3?", ":`. `));alert(s) , ; byte sequence ; \n _ _ _ _ c \n comma space d t o l T G ++++++++++>> --->++++>------>-->>++>+>>+>->++ [[>+++++++[>++>+>+<<<-]<-]+<+++] >>>>>-->>-->>++>->+++[<] c = 0 n = 100 > while(n) [ n = n minus 1 -<< N = str(n) ; first time \n _ becomes 9 9 +[<->-----]<---[<[<]>[->]<] +<[>-]>[-<++++++++++<->>>] -[<->-----]<+++[<[<]>[+>]<] <->>> if(c) [ > if(n) [ 'Take one down and' [>]<<<<.<<<<---.>>>-.<<<++++.<.>>>.-.<<.<.>-.>>+.<+++.>-.<<<.>---.>>.<<+++. ' pass it around' comma space <.>>>++.<<---.>----..<<.>>>>--.+++<<+.<<.>.>--.>-.<+++.->-.+<<+++.<<.>.<<<<-< ]> else [ 'Go to the store and' [>]<<<-.<<<.<<<.>>.>.<<<.>>.<++++.---.<.>>-.+.>.<--.<.<.>----.>>-.<<+++. ' buy some more' comma space <.>--.>+++.++++.<<.>>------.>+.--.<<+++.<.>>>.++.<-.++<.-<<.>.<<<<- N = '9' N <<<+++++++++.>>> ] <+> ] c = c plus 2 <++ while(c) [ N <<[<]>[.>]>>> ' bottle' >>>.>--.>>.<..->>.<<<+++.<<<< if(n minus 1) 's' -[>>>>>.[<]]<[>]>+ ' of beer' >>>.>>>.<<+.<.>----.+++..->-.++ [<<]<- if(c minus 1) [ ' on the wall' >>>>>.>>>.-.+<<<.>>.<++++.---.<.>>+++.---<----.+++>>>..[<<] ] <<[>]>- if(c minus 2) [ period newline >>>>++.--<.<<<+ if(c minus 1) newline [>>>.<<<<]>[>]<-< ]>> else [ comma space >>.>.<<<< ] if(not n) c = c minus 2 >[<<++>] c = c minus 1 <[>]<- ] c = 1 >+> ] and ++++++++++>>--->++++>------>-->>++>+>>+>->++[[>+++++++[>++>+>+<<<-]<-]+<+++]>>>>>-- >>-->>++>->+++[<]>[-<<+[<->-----]<---[<[<]>[->]<]+<[>-]>[-<++++++++++<->>>]-[<->--- --]<+++[<[<]>[+>]<]<->>>[>[[>]<<<<.<<<<---.>>>-.<<<++++.<.>>>.-.<<.<.>-.>>+.<+++.>- .<<<.>---.>>.<<+++.<.>>>++.<<---.>----..<<.>>>>--.+++<<+.<<.>.>--.>-.<+++.->-.+<<++ +.<<.>.<<<<-<]>[[>]<<<-.<<<.<<<.>>.>.<<< . > > .<++++.---.<.>>-.+.>.<--.<.<.>----.> >-.<<+++.<.>--.>+++.++++.<<.>>------.>+.--.<<+++.<.>>>.++.<-.++<.-<<.>.<<<<-<<<++++ +++++.>>>]<+>]<++[<<[<]>[.>]>>>>>>.>--.>>.<..->>.<<<+++.<<<<-[>>>>>.[<]]<[>]>+>>>.> >>.<<+.<.>----.+++..->-.++[<<]<-[>>>>>.>>>.-.+<<<.>>.<++++.---.<.>>+++.---<----.+++ >>>..[<<]]<<[>]>-[>>>>++.--<.<<<+[>>>.<<<<]>[>]<-<]>>[>>.>.<<<<]>[<<++>]<[>]<-]>+>]

 

Alekzuz


Рег
25 May, 2011

Тем
67

Постов
181

Баллов
576
  • 26, Oct 2024
  • #7

Шаблоны считаются вредными, 667 байт

console.log

Вроде расширенного:

alert ||answer||

///, 341 байт

for(i=99,Y=" on the wall",o=k=>k+(i||99)+` bottle${i==1?'':'s'} of beer`;i;)alert(o``+Y+o`, `+o(--i?`. Take one down and pass it around, `:`. Go to the store and buy some more, `)+Y+`.`)

Чтобы написать правильное объяснение этого кода, потребуется 99 лет.

Я бы, наверное, просто включил результат каждого этапа...

По сути, это многократно сжимает текст (как и каждый ответ в ///).

Попробуйте онлайн!

Каждый шаг декомпрессии

Поскольку замены, за которыми следуют замены, будут иметь строку i/2 , it will appear often.

Это появляется достаточно часто, поэтому я решил сжать i=198 while i:s=`i/2or 99`+' bottle%s of beer'%'s'[1<i<4:];print['%s, '+s+'.','Take one down and pass it around, %s.\n',"Go to the store and buy some more, %s."][i%2+1/i]%(s+' on the wall');i-=1 into Command Effect ------------------------------------------------------------------------------------------- i, 99 bottles of beer on the wall.<ESC> insert text at cursor Y copy this line into buffer IGo to t<SO> store and buy some more<ESC> insert text at beginning of line auto-complete "the" (<Ctrl-N>, searches forward) qa begin recording macro into "a" <LF> move down one line (if present) 3P paste 3 times before cursor 2x delete 2 characters at cursor gJ join this line with next (without space between) X delete character before cursor $ move to last non-whitespace character of line 12. repeat the last edit command (X) 12 times + move to column 0 of next line <CAN> numeric decrement (<Ctrl-X>) Y copy this line into buffer ITake one down a<SO> pass it around<ESC> insert text at beginning of line auto-complete "and" (<Ctrl-N>, searches forward) o<ESC> insert text on new line q stop recording macro 98@a repeat macro "a" 98 times dk delete upwards (this line and the one above it) ?s<LF> move to previous /s/ x delete character at cursor n.n. repeat last match and delete 2 times ZZ write to file and exit .

При распаковке результат будет следующим:

ZZ

Строка i, 99 bottles of beer on the wall.<ESC>YIGo to t<SO> store and buy some more<ESC>qa 3P2xgJX$12.+<CAN>YITake one down a<SO> pass it around<ESC>o<ESC>q98@adk?s xn.n.ZZ only appeared three times, but I compressed it to f в любом случае:

o=" of beer on the wall" a n=shows n" bottle"++['s'|n>1] b 1="Go to the store and buy some more, "++a 99 b n="Take one down and pass it around, "++a(n-1) f=[99,98..1]>>= \n->[a n,o,", ",a n," of beer.\n",b n,o,".\n\n"]>>=id

Затем, /*/?1 bottles of beer. Take one down and pass it around,?0 bottles of beer on the wall. <0 bottles of beer on the wall,?0 bottles of beer. Take one down and pass it around,//%/99 bottles of beer on the wall,?9 bottles of beer. Take one down and pass it around,?8 bottles of beer on the wall. <8 bottles of beer on the wall,?8 bottles of beer. Take one down and pass it around,?7 bottles of beer on the wall. <7 bottles of beer on the wall,?7 bottles of beer. Take one down and pass it around,?6 bottles of beer on the wall. <6 bottles of beer on the wall,?6 bottles of beer. Take one down and pass it around,?5 bottles of beer on the wall. <5 bottles of beer on the wall,?5 bottles of beer. Take one down and pass it around,?4 bottles of beer on the wall. <4 bottles of beer on the wall,?4 bottles of beer. Take one down and pass it around,?3 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 bottles of beer on the wall. <1 bottles of beer on the wall,//&/?9 bottles of beer on the wall. %*//</ 9//?/ 9/%*/</ 8//?/ 8/&/</ 7//?/ 7/&/</ 6//?/ 6/&/</ 5//?/ 5/&/</ 4//?/ 4/&/</ 3//?/ 3/&/</ 2//?/ 2/&/</ 1//?/ 1/&/</ 0//?/ 0// 0/ // 0/ / bottles of beer on the wall. /1 bottles/1 bottle/ % 01 bottles of beer. Go to the store and buy some more, 099 bottles of beer on the wall. corresponds to $ за которым следует новая строка, и Take one down and pass it around, corresponds to $ , которые являются шаблонами, которые будут часто использоваться позже:

@

Теперь мы распакуем некоторые полезные строки:

  • \n decompresses to >
  • >.\n decompresses to $
  • ^ decompresses to ^, , где ! is the one above.
  • bottles of beer on the wall decompresses to ^ , где bottles of beer is the first rule and > это новая строка.
  • />/ bottles of beer//^/> on the wall//!/^,//$/>. //@/$Take one down and pass it around,//#/^. //*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9# %*//</ 9//?/ 9/%*/</ 8//?/ 8/&/</ 7//?/ 7/&/</ 6//?/ 6/&/</ 5//?/ 5/&/</ 4//?/ 4/&/</ 3//?/ 3/&/</ 2//?/ 2/&/</ 1//?/ 1/&/</ 0//?/ 0// 0/ // 0/ /#/1 bottles/1 bottle/ % 01$Go to the store and buy some more, 099^. decompresses to //?/ с последующим ( , where /&/</ это правило выше.

Распакованный код теперь выглядит следующим образом:

) ||answer||

Хаскель, 228 223 байта

/)/\/&\/<\/ //(/\/\/?\/ //>/ bottles of beer//^/> on the wall//!/^,//$/>. //@/$Take one down and pass it around,//#/^. //*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9# %*//</ 9(9/%*/</ 8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0// 0/ // 0/ /#/1 bottles/1 bottle/ % 01$Go to the store and buy some more, 099^.

Функция + returns a string with the lyrics.

 

Kse


Рег
28 Jan, 2008

Тем
79

Постов
187

Баллов
602
  • 26, Oct 2024
  • #8

Вим, 139 байт

Сэкономлено 6 байт из-за хсот.

bottle

Это моя первая попытка поиграть в команды Vim, хотя, видимо, это довольно популярный. я включил финал /+/ bottle//)/\/&\/<\/ //(/\/\/?\/ //>/+s of beer//^/> on the wall//!/^,//$/>. //@/$Take one down and pass it around,//#/^. //*/?1@?0#<0!?0@//%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!//&/?9# %*//</ 9(9/%*/</ 8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0// 0/ // 0/ /#/1+s/1+/ % 01$Go to the store and buy some more, 099^. in the byte count (write to file and exit) as it seems to be the accepted norm.

Боковое примечание: миссия выполнена.


Объяснение

- ||answer||

Питон 2, 195

//

Взял // idea from Ответ Sp3000.

 

PaulineMn


Рег
26 Mar, 2014

Тем
72

Постов
205

Баллов
585
  • 26, Oct 2024
  • #9

JavaScript ES6, 237 217 208 203 195 193 189 186 байт

Играть в гольф становится все труднее...
Редактировать 1: Кто-то полностью переиграл меня, похоже, мне придется больше стараться, если я хочу получить лучший ответ на Javascript.
Редактировать 2: Я, честно говоря, не могу поверить, что мне удалось так много поиграть в гольф!

/-/\/\///+/ bottle-)/\/&\/<\/ -(/\/\/?\/ ->/+s of beer-^/> on the wall-!/^,-$/>. -@/$Take one down and pass it around,-#/^. -*/?1@?0#<0!?0@-%/99!?9@?8#<8!?8@?7#<7!?7@?6#<6!?6@?5#<5!?5@?4#<4!?4@?3#<3!?3@?2#<2!?2@?1#<1!-&/?9# %*-</ 9(9/%*/</ 8(8)7(7)6(6)5(5)4(4)3(3)2(2)1(1)0(0- 0/ - 0/ /#/1+s/1+/ % 01$Go to the store and buy some more, 099^.

Я где-то напутал? Ap< Fun< Ap< Fun< Cat< Cat<Cat<Cat< Ap<A<1,1>,A<1>> , A<2,1> >, St<44,32> >, Ap<A<1,1>,A<1>> >, If<A<1>, Cat<Cat<Cat<Cat< St<46,10,84,97,107,101,32,111,110,101,32,100,111,119,110,32,97,110,100,32,112,97,115,115,32,105,116,32,97,114,111,117,110,100,44,32> , Ap<A<1,1>,Sub<A<1>,T>> >, A<2,1> >, St<46,10,10> >, Ap<A<0>,Sub<A<1>,T>> >, Cat<Cat<Cat< St<46,10,71,111,32,116,111,32,116,104,101,32,115,116,111,114,101,32,97,110,100,32,98,117,121,32,115,111,109,101,32,109,111,114,101,44,32> , Ap<A<1,1>,I<98>> >, A<2,1> >, St<46> > > > >, I<98> > >, Fun< Cat<Cat<Cat< Add<A<1>,T> , St<32,98,111,116,116,108,101> >, If<A<1>,St<'s'>,St<>> >, St<32,111,102,32,98,101,101,114> > >, St<32,111,110,32,116,104,101,32,119,97,108,108> > , if you want to test my code, replace it with Ap<Fun<Ap<Fun<Cat<Cat<Cat<Cat<Ap<A<1,1>,A<1>>,A<2,1>>,St<44,32>>,Ap<A<1,1>,A<1>>>,If<A<1>,Cat<Cat<Cat<Cat<St<46,10,84,97,107,101,32,111,110,101,32,100,111,119,110,32,97,110,100,32,112,97,115,115,32,105,116,32,97,114,111,117,110,100,44,32>,Ap<A<1,1>,Sub<A<1>,T>>>,A<2,1>>,St<46,10,10>>,Ap<A<0>,Sub<A<1>,T>>>,Cat<Cat<Cat<St<46,10,71,111,32,116,111,32,116,104,101,32,115,116,111,114,101,32,97,110,100,32,98,117,121,32,115,111,109,101,32,109,111,114,101,44,32>,Ap<A<1,1>,I<98>>>,A<2,1>>,St<46>>>>>,I<98>>>,Fun<Cat<Cat<Cat<Add<A<1>,T>,St<32,98,111,116,116,108,101>>,If<A<1>,St<'s'>,St<>>>,St<32,111,102,32,98,101,101,114>>>,St<32,111,110,32,116,104,101,32,119,97,108,108>> .

Я также прошу прощения за использование В настоящее время есть еще один примечательный ответ Javascript:«99 бутылок пива»

. Проверьте это! :D

 

Serg.fiat


Рег
15 Jan, 2008

Тем
67

Постов
179

Баллов
564
  • 26, Oct 2024
  • #10
Benjamin Urquhart

Brainfuck, 743 байта

Попробуйте онлайн! Вышеприведенный пример использует перенос ячеек в нескольких местах для сохранения инструкций. Я также сделал версию без упаковки в.


755 инструкций

Несжатый Ниже приводится полиглот.

J Atkin ||answer||

Язык аннотаций Brainfuck

quartata

JavaScript ES6, 210 209 205 199 198 196 байт

Это грубый перевод моего представления C. На самом деле я не знаю JavaScript, поэтому определенно есть куда совершенствоваться.

Изменить: аккуратно, я обнаружил обратные кавычки

 

Steinbachp4


Рег
04 May, 2020

Тем
77

Постов
187

Баллов
592
  • 26, Oct 2024
  • #11
Лабиринт interface A { static void main(String[] a) { String b = " of beer", c = " on the wall", n = ".\n", s; for (int i = 100; i-- > 1; s = " bottle" + (i > 1 ? "s" : ""), System.out.println(i + s + b + c + ", " + i + s + b + n + (i < 2 ? "Go to the store and buy some more, 99" : "Take one down and pass it around, " + (i - 1)) + " bottle" + (i != 2 ? "s" : "") + b + c + n)); } }

, 1195 1190 932 байт

Это немного лишнее...

Хотя Labyrinth не особенно хорош для печати строк (поскольку вам нужно вставить все коды символов), я думаю, что можно добиться большего, используя больше, но более короткие длинные строки и еще больше усложняя вращение сетки.

Поскольку я думаю, что любые улучшения игры в гольф существенно изменят структуру этого кода, я подожду с объяснениями, пока у меня не закончатся идеи, как играть в гольф дальше.

 

Ikostyan


Рег
01 Jun, 2010

Тем
72

Постов
190

Баллов
570
  • 26, Oct 2024
  • #12

Пакетный пакет Windows, 376 байт

interface A{static void main(String[]a){String b=" of beer",c=" on the wall",n=".\n",s;for(int i=100;i-->1;s=" bottle"+(i>1?"s":""),System.out.println(i+s+b+c+", "+i+s+b+n+(i<2?"Go to the store and buy some more, 99":"Take one down and pass it around, "+(i-1))+" bottle"+(i!=2?"s":"")+b+c+n));}} ||answer||

Очень-очень длинно и некрасиво:

Brainfuck, 4028 байт

Это довольно ужасно.

Много дублирования и очень неэффективно, поэтому он не выиграет никаких призов. Однако я начал это и был полон решимости закончить.

main(i){for(i=299;i--/3;printf("%d bottle%s of beer%s%s",i/3?:99,"s"+5/i%2,i%3?" on the wall":i^3?".\nTake one down and pass it around":".\nGo to the store and buy some more",~i%3?", ":".\n\n"));}

Я могу попытаться улучшить это, но, вероятно, не буду, потому что, честно говоря, мой мозг - пиздец.

x=>eval('s=o=>v=(o?o:" no more")+" bottle"+(1==o?"":"s");for(o="",i=99;i>0;)o+=`${s(i)}@ on the wall, ${v}@.\nTake one down, pass it around, ${s(--i)}@ on the wall.\n`;o+`No more bottles@ on the wall, no more bottles@.\nGo to the store and buy some more, 99 bottles@ on the wall.`'.replace(/@/g," of beer"))

играл в гольф

Негольфед
Выход:

Попробуйте сами здесь! Хорошо, кажется, URL-адрес слишком длинный, чтобы его можно было включить сюда, поэтому вам придется скопировать/вставить его, чтобы попробовать самостоятельно..

Я проверил это, используя

этот переводчик

f()

 

Stormobile


Рег
06 Oct, 2007

Тем
76

Постов
202

Баллов
592
  • 26, Oct 2024
  • #13

Питон, 254 байта

Довольно просто: назначьте несколько наиболее распространенных фраз, выведите каждый бит от 99 до 3, затем выведите последние строки, сложив переменные и несколько строк.

f=

 

MercenarieVVV


Рег
19 Sep, 2005

Тем
70

Постов
201

Баллов
571
  • 26, Oct 2024
  • #14

Я очень доволен этим, но, глядя на анархический гольф, я чувствую, что в него все еще можно играть, возможно, с другим подходом.

 

Upgradepro


Рег
13 Apr, 2010

Тем
80

Постов
197

Баллов
647
  • 26, Oct 2024
  • #15

Юля, 227 215 213 байт

for(x=99,z=a=>`${x||99} bottle${1-x?'s':''} of beer${a||' on the wall'}`;x;)alert(z()+', '+z(`. `)+(--x?'Take one down and pass it around, ':'Go to the store and buy some more, ')+z()+'.') for(x=99,z=a=>(x||99)+' bottle'+(1-x?'s':'')+' of beer',w=' on the wall';x;)alert(z()+w+', '+z()+(--x?`. Take one down and pass it around, `:`. Go to the store and buy some more, `)+z()+w+'.') for(x=99,o=' bottle',q=b=o+'s',e=' of beer',w=e+" on the wall";x;)alert(x+b+w+', '+x+b+e+(--x?`. Take one down and pass it around, `+x:`. Go to the store and buy some more, 99`)+(b=1-x?q:o)+w+'.')

При этом используется строковая интерполяция ( for(x=99,z=(a=' on the wall')=>`${x||99} bottle${1-x?'s':''} of beer`+a;x;)alert(z()+', '+z`. `+(--x?'Take one down and pass it around, ':'Go to the store and buy some more, ')+z()+'.') ) and ternaries to construct the output and print it to STDOUT.

Сэкономлено 14 байт благодаря Глену О!

 

Arcadia2uk


Рег
09 Nov, 2004

Тем
97

Постов
218

Баллов
733
  • 26, Oct 2024
  • #16

JavaScript ES6, 214 байт

Редактировать: Удален весь предыдущий код. Просмотрите изменения, если хотите увидеть старый код.

Ограниченные всплывающие окна:

N

Расширено:

N

@commenters: Спасибо за идею со стрелочными функциями, сэкономлено 15 байт.

Чтобы получить бесконечное количество пива, просто используйте этот код здесь, 212 байт.

a,b=["8","9"]if input()else["00001000","00001001"] f="""99 Bottles of Beer lyrics""" print''.join(b if int(i)else a for i in''.join((8-len(bin(i)[2:]))*'0'+bin(i)[2:]for i in bytearray(f))) ||answer||

CJam, 149 148 146 144 138 137 134 байта

1

Вышеупомянутый шестнадцатеричный дамп можно отменить с помощью 0 . Try it online in the CJam-переводчик.

За счет 9 дополнительных байт, всего 143 байта, мы можем избежать непечатаемых символов:

0

Как это работает

1 ||answer||

С, 303 299 297 байт

9

Скомпилировать с 8 .

 

Laf


Рег
18 Jul, 2020

Тем
84

Постов
199

Баллов
639
  • 26, Oct 2024
  • #17

Гольфскрипт, 143 байта

0

Возможно, еще есть возможности для улучшения. Думаю, приближаюсь к финальной версии.

 

Coolnev


Рег
20 Feb, 2013

Тем
75

Постов
210

Баллов
595
  • 26, Oct 2024
  • #18

Математика, 238 226 222 224 байта

Сэкономлено несколько байт благодаря Мартину Бюттнеру.

8 Store the register's value 9 Store the logical complement of the register's value ||answer||

С, 230 байт

Моя первая игра в гольф и изучение C!

9

Составлено с 8

Читабельно (вроде):

1001

Моя первая запись(293 байта):

1000

Ха-ха, мне нравятся все эти грязные трюки, которые я применил, но которые никогда не могли существовать на C!

 

Moreofkaya


Рег
19 May, 2020

Тем
98

Постов
219

Баллов
749
  • 26, Oct 2024
  • #19

Луч, 1141 1109 байт

У меня все еще есть много места для игры в гольф, несмотря на все пустые места, но за ним становится очень трудно следить, и он довольно легко ломается :) Это очень похоже на то, что я выложил для этоговопрос

0

, за исключением того, что оно отправляется в хранилище до того, как пиво достигнет 1, а ячейки, используемые для параметров, будут смещены. Я также значительно изменил макет. Я постараюсь дать объяснение, как только опробую еще пару макетов. Попробуйте это в фрагменте стека

здесь

 

DAN398


Рег
03 Dec, 2008

Тем
61

Постов
189

Баллов
514
  • 26, Oct 2024
  • #20

PHP, 250 246 244 233 228 байт

Я считаю, что это наименьший показатель на данный момент. Это основано на выстреле 247 с некоторыми изменениями для дальнейшего минимизации.

class d{ static void Main(){ for(int b = 99; b > 0;){ System.Console.Write("{0}{6}{1}{2}, {0}{6}{1} of beer.\n{3}, {4}{6}{5}{2}.{7}", b, b==1 ? "" : "s", " of beer on the wall", b == 1 ? "Go to the store and buy some more" : "Take one down and pass it around", b == 1 ? 99 : b-1, b== 2 ? "" : "s", " bottle", b--<2 ? "" : "\n\n"); } } }

Минимизированный

class d{static void Main(){for(int b=99;b>0;)System.Console.Write("{0}{6}{1}{2}, {0}{6}{1} of beer. {3}, {4}{6}{5}{2}.{7}",b,b==1?"":"s"," of beer on the wall",b==1?"Go to the store and buy some more":"Take one down and pass it around",b==1?99:b-1,b==2?"":"s"," bottle",b--<2?"":"\n\n");}}
 

Karuna16


Рег
03 Dec, 2019

Тем
71

Постов
193

Баллов
568
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно