Puzzle di programmazione e codice Golf ha aperto un camion taco ! La parola è finita e ora gli utenti di tutta la rete Stack Exchange stanno arrivando per provare i nostri gustosi tacos ASCII . Abbiamo bisogno del tuo aiuto per garantire che tutti ricevano i loro ordini in modo tempestivo. Non c'è molto spazio all'interno dei camion di cibo, quindi avrai bisogno che il tuo codice sia il più corto possibile.
Ora per un po 'di formazione sul posto di lavoro.
Il tuo lavoro
Scrivi un programma completo che legge un ordine da STDIN o una funzione che ottiene un singolo ordine di stringa come input. I tacos sono stampati su STDOUT, realizzati su ordinazione.
Prendendo ordini
I clienti ti daranno i loro ordini tramite STDIN o argomento della funzione. Gli ordini saranno sotto forma di un elenco delimitato da virgole dei condimenti desiderati. L'ordine in cui vengono dati i condimenti determina l'ordine in cui appaiono nel taco, con il primo elencato in cima e l'ultimo in cima. Ecco cosa teniamo in stock:
- fagioli
- Riso
- Verdure
- Lattuga
- guacamole
- Panna acida
- salsa
I clienti possono ordinare solo 1 topping ma non più di 5 topping. I condimenti non devono essere distinti.
Puoi presumere che i clienti abbiano familiarità con il menu prima di ordinare e quindi tutti gli ordini conterranno solo ingredienti che immagazziniamo. Cioè, l'input sarà sempre valido.
Tacos al servizio
I clienti chiedono che i loro tacos vengano stampati su STDOUT. Stanno bene con alcuni spazi bianchi iniziali o finali nel loro cibo.
Le ricerche di mercato mostrano che tutti vogliono mangiare tacos come parole e le parole in maiuscolo sono molto più saporite. Quindi elencheremo i condimenti in TUTTE LE MAIUSCOLE senza spazi.
Nell'interesse della presentazione artistica, non possiamo limitarci a buttare roba in una tortilla e chiamarla buona, dobbiamo posare delicatamente condimenti da sinistra a destra, avvolgendoli e ripetendoli secondo necessità. Ogni topping ottiene un minimo di 2 righe per sé. Tutto ciò diventerà più chiaro quando esamineremo il piatto di campionamento.
Piatto di esempio
Diamo un'occhiata ad alcuni ordini di esempio.
Il cliente ordina: Beans,Veggies,Rice,Lettuce,Sour Cream
Consegnamo:
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
Sembra abbastanza gustoso, vero? I condimenti si avvolgono dopo 6 caratteri in una nuova riga e vengono ripetuti per riempire 2 righe ciascuno, troncati a 12 caratteri. Il primo ingrediente ottiene 6 caratteri nella sua riga superiore ma solo 4 nella sua seconda riga. Questo assicura che si adatti alla piega della tortilla. Allo stesso modo, l'ultimo ingrediente ottiene sempre 4 caratteri nella sua riga superiore e 6 nella sua seconda.
Cosa succede se un cliente ordina due uguali topping di fila? Continua a avvolgere quell'ingrediente per tutte le righe consecutive di quell'ingrediente.
Il cliente ordina: Lettuce,Lettuce,Lettuce,Salsa
Consegnamo:
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
Il cliente ordina: Guacamole
T L
O I
R T
T R
I O
L GUAC T
L AMOLEG A
A UACA L
TORTIL
Un solo ingrediente? Dai in cima 4 personaggi extra.
Dipendenti del mese
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>
Buona cucina!