Programming Puzzles & Code Golf hat einen Taco-Truck eröffnet ! Das Wort ist aus und jetzt kommen Benutzer aus dem gesamten Stack Exchange-Netzwerk, um unsere leckeren authentischen ASCII- Tacos zu probieren . Wir brauchen Ihre Hilfe, um sicherzustellen, dass jeder seine Bestellungen rechtzeitig erhält. In Food Trucks ist nicht viel Platz, daher muss Ihr Code so kurz wie möglich sein.
Nun zum Training am Arbeitsplatz.
Deine Arbeit
Schreiben Sie ein vollständiges Programm, das eine Anweisung von STDIN oder eine Funktion liest, die eine einzelne Zeichenfolgenreihenfolge als Eingabe erhält. Tacos werden auf Bestellung auf STDOUT gedruckt.
Bestellungen aufnehmen
Kunden geben Ihnen ihre Bestellungen über STDIN oder Funktionsargument. Bestellungen werden in Form einer durch Kommas getrennten Liste der gewünschten Beläge ausgeführt. Die Reihenfolge, in der die Beläge gegeben werden, bestimmt die Reihenfolge, in der sie im Taco erscheinen, wobei der erste aufgelistete Belag unten und der letzte oben steht. Folgendes halten wir auf Lager:
- Bohnen
- Reis
- Gemüse
- Salat
- Guacamole
- Sauerrahm
- Salsa
Kunden können nur 1 Belag, aber nicht mehr als 5 Beläge bestellen. Die Beläge müssen nicht unterschiedlich sein.
Sie können davon ausgehen, dass die Kunden mit dem Menü vor der Bestellung vertraut sind und daher alle Bestellungen nur Zutaten enthalten, die wir auf Lager haben. Das heißt, die Eingabe ist immer gültig.
Tacos servieren
Kunden fordern, dass ihre Tacos an STDOUT gedruckt werden. Es geht ihnen gut, wenn in ihrem Essen ein Leerzeichen vor- oder nachgestellt ist.
Marktforschung zeigt, dass jeder Tacos als Worte essen möchte und Worte in Großbuchstaben viel geschmackvoller sind. So werden wir Beläge in ALL CAPS ohne Leerzeichen auflisten.
Im Interesse einer künstlerischen Präsentation können wir nicht einfach Sachen in eine Tortilla legen und als gut bezeichnen, wir müssen die Beläge vorsichtig von links nach rechts legen und nach Bedarf einwickeln und wiederholen. Jeder Belag erhält mindestens 2 Zeilen für sich. Dies wird alles klarer, wenn wir den Probenteller untersuchen.
Probenteller
Werfen wir einen Blick auf einige Musterbestellungen.
Der Kunde bestellt: Beans,Veggies,Rice,Lettuce,Sour Cream
Wir liefern:
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
Sieht ziemlich lecker aus, oder? Die Zeilenumbrüche setzen sich nach 6 Zeichen in einer neuen Zeile fort und werden wiederholt, um jeweils 2 Zeilen zu füllen, die auf 12 Zeichen gekürzt sind. Die erste Zutat erhält 6 Zeichen in der obersten Zeile, aber nur 4 in der zweiten Zeile. Dies stellt sicher, dass es in die Falte der Tortilla passt. Ebenso erhält die letzte Zutat in der obersten Zeile immer 4 Zeichen und in der zweiten 6 Zeichen.
Was passiert, wenn ein Kunde zwei gleiche Toppings hintereinander bestellt? Wickeln Sie diese Zutat weiterhin in alle aufeinander folgenden Zeilen dieser Zutat ein.
Der Kunde bestellt: Lettuce,Lettuce,Lettuce,Salsa
Wir liefern:
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
Der Kunde bestellt: Guacamole
T L
O I
R T
T R
I O
L GUAC T
L AMOLEG A
A UACA L
TORTIL
Nur eine Zutat? Gib 4 zusätzliche Charaktere oben drauf.
Mitarbeiter des Monats
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>
Viel Spaß beim Kochen!
Python 3, 475 Bytes
Es ist wahrscheinlich viel zu lang, aber ich kann auch etwas posten!
quelle
r=(r+["TORTIL"])[::-1]
mitr=["TORTIL"]+r[::-1]
.range(0,l)
kann auch seinrange(l)
.if l==2:q=s[0];s=[q,q,q];l=3
eine einzelne Zeile einfügen . 3.n(l)
macht dasselbe wien(0,l)
.Ruby,
376375368363362 BytesNoch in Arbeit.
(Bonus: Funktioniert mit so vielen Belägen, wie Sie möchten, nicht nur mit 5. Meistens, weil ich diese Regel anfangs nicht gesehen habe> _ <)
Ungolfed-Version:
quelle