Programowanie zagadek i kodu Golf otworzył ciężarówkę taco ! To słowo jest już dostępne, a teraz użytkownicy z całej sieci Stack Exchange przyjeżdżają, aby wypróbować nasze smaczne, autentyczne tacos ASCII . Potrzebujemy Twojej pomocy, aby zapewnić, że wszyscy otrzymają swoje zamówienia w odpowiednim czasie. W ciężarówkach z jedzeniem nie ma zbyt wiele miejsca, więc kod musi być jak najkrótszy.
Teraz na szkolenie w miejscu pracy.
Twoja praca
Napisz pełny program, który odczytuje zamówienie ze STDIN lub funkcję, która pobiera dane wejściowe z jednego ciągu znaków. Tacos są drukowane na STDOUT, wykonywane na zamówienie.
Przyjmowanie zamówień
Klienci przekażą ci swoje zamówienia za pośrednictwem STDIN lub argumentu funkcji. Zamówienia będą miały postać rozdzielanych przecinkami listy żądanych dodatków. Kolejność nadawania dodatków określa kolejność ich pojawiania się w taco, przy czym pierwsza z nich znajduje się na dole, a ostatnia na górze. Oto, co mamy na stanie:
- fasolki
- Ryż
- Warzywa
- Sałata
- guacamole
- Kwaśna śmietana
- Salsa
Klienci mogą zamówić tylko 1 polewę, ale nie więcej niż 5 polew. Polewy nie muszą być wyraźne.
Możesz założyć, że klienci znają menu przed złożeniem zamówienia, a zatem wszystkie zamówienia będą zawierać wyłącznie składniki, które mamy w magazynie. Oznacza to, że dane wejściowe zawsze będą prawidłowe.
Podawanie tacos
Klienci żądają, aby ich tacos były drukowane na STDOUT. Są w porządku z niektórymi wiodącymi lub końcowymi białymi miejscami w jedzeniu.
Badania rynku pokazują, że każdy chce jeść tacos jako słowa, a słowa we wszystkich czapkach są znacznie bardziej aromatyczne. W związku z tym wymienimy polewy WSZYSTKIMI CZAPAMI bez spacji.
W interesie artystycznej prezentacji nie możemy po prostu wrzucić tortilli i nazwać to dobrym, musimy delikatnie nakładać polewy od lewej do prawej, owijając i powtarzając w razie potrzeby. Każde polewa otrzymuje co najmniej 2 linie do siebie. Wszystko to stanie się wyraźniejsze, gdy skontrolujemy talerz próbki.
Próbny talerz
Rzućmy okiem na przykładowe zamówienia.
Klient zamawia: Beans,Veggies,Rice,Lettuce,Sour Cream
Dostarczamy:
SOUR
CREAMS
T LETTUC L
O ELETTU I
R RICERI T
T CERICE R
I VEGGIE O
L SVEGGI T
L BEANSB A
A EANS L
TORTIL
Wygląda całkiem smacznie, prawda? Polewy owijają się po 6 znakach do nowej linii i są powtarzane, aby wypełnić 2 linie każda, skrócona do 12 znaków. Pierwszy składnik otrzymuje 6 znaków w górnym wierszu, ale tylko 4 w drugim wierszu. Zapewnia to, że pasuje do zagięcia tortilli. Podobnie, ostatni składnik zawsze otrzymuje 4 znaki w górnym wierszu i 6 znaków w drugim.
Co się stanie, jeśli klient zamówi dwa takie same polewy z rzędu? Opakuj ten składnik dla wszystkich kolejnych linii tego składnika.
Klient zamawia: Lettuce,Lettuce,Lettuce,Salsa
Dostarczamy:
T SALS L
O ASALSA I
R LETTUC T
T ELETTU R
I CELETT O
L UCELET T
L TUCELE A
A TTUC L
TORTIL
Klient zamawia: Guacamole
T L
O I
R T
T R
I O
L GUAC T
L AMOLEG A
A UACA L
TORTIL
Tylko jeden składnik? Daj 4 dodatkowe wartości na górze.
Pracownicy miesiąca
var QUESTION_ID=65888,OVERRIDE_USER=20469;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#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="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><div id="language-list"> <h2>Winners 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><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>
Miłego gotowania!
Python 3, 475 bajtów
To chyba zbyt długo, ale równie dobrze mogę coś opublikować!
źródło
r=(r+["TORTIL"])[::-1]
zr=["TORTIL"]+r[::-1]
.range(0,l)
może być równieżrange(l)
.if l==2:q=s[0];s=[q,q,q];l=3
jednym wierszu. 3.n(l)
robi to samo con(0,l)
.Rubinowy,
376375368363362 bajtówWciąż trwają prace.
(Bonus: działa z dowolną liczbą dodatków, nie tylko 5. Głównie dlatego, że początkowo nie widziałem tej zasady> _ <)
Wersja bez golfa:
źródło