Programmation Puzzles & Code Golf a ouvert un camion à tacos ! Le mot est sorti et maintenant les utilisateurs de partout dans le réseau Stack Exchange viennent essayer nos savoureux et authentiques tacos ASCII . Nous avons besoin de votre aide pour nous assurer que tout le monde reçoit ses commandes en temps opportun. Il n'y a pas beaucoup de place à l'intérieur des food trucks, vous aurez donc besoin que votre code soit le plus court possible.
Maintenant, pour une formation en cours d'emploi.
Votre travail
Écrivez un programme complet qui lit un ordre de STDIN ou une fonction qui obtient un ordre de chaîne unique en entrée. Les tacos sont imprimés sur STDOUT, fabriqués sur commande.
Prendre des commandes
Les clients vous donneront leurs commandes via STDIN ou argument de fonction. Les commandes prendront la forme d'une liste délimitée par des virgules des garnitures souhaitées. L'ordre dans lequel les garnitures sont données dicte l'ordre dans lequel elles apparaissent dans le taco, avec la première garniture répertoriée en bas et la dernière en haut. Voici ce que nous gardons en stock:
- Des haricots
- Riz
- Légumes
- Salade
- Guacamole
- Crème aigre
- salsa
Les clients peuvent commander seulement 1 garniture mais pas plus de 5 garnitures. Les garnitures n'ont pas besoin d'être distinctes.
Vous pouvez supposer que les clients connaissent le menu avant de commander et donc toutes les commandes ne contiendront que des ingrédients que nous avons en stock. Autrement dit, l'entrée sera toujours valide.
Servir des tacos
Les clients exigent que leurs tacos soient imprimés sur STDOUT. Ils sont bien avec des espaces blancs en tête ou en queue dans leur nourriture.
Les études de marché montrent que tout le monde veut manger des tacos comme mots, et les mots en toutes lettres sont beaucoup plus savoureux. Ainsi, nous répertorierons les garnitures dans TOUS LES CAPS sans espaces.
Dans l'intérêt de la présentation artistique, nous ne pouvons pas simplement déposer des trucs dans une tortilla et l'appeler bonne, nous devons poser doucement les garnitures de gauche à droite, les emballer et les répéter au besoin. Chaque nappage obtient un minimum de 2 lignes pour lui-même. Tout deviendra plus clair une fois que nous aurons inspecté le plateau d'échantillons.
Plateau d'échantillons
Jetons un coup d'œil à quelques exemples de commandes.
Le client commande: Beans,Veggies,Rice,Lettuce,Sour Cream
Nous livrons:
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
Semble assez savoureux, non? Les garnitures s'enroulent après 6 caractères sur une nouvelle ligne et sont répétées pour remplir 2 lignes chacune, tronquées à 12 caractères. Le premier ingrédient obtient 6 caractères sur sa ligne supérieure mais seulement 4 sur sa deuxième ligne. Cela garantit qu'il s'insère dans le pli de la tortilla. De même, le dernier ingrédient obtient toujours 4 caractères sur sa première ligne et 6 sur sa seconde.
Que se passe-t-il si un client commande deux des mêmes garnitures d'affilée? Continuez à emballer cet ingrédient pour toutes les lignes consécutives de cet ingrédient.
Le client commande: Lettuce,Lettuce,Lettuce,Salsa
Nous livrons:
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
Le client commande: Guacamole
T L
O I
R T
T R
I O
L GUAC T
L AMOLEG A
A UACA L
TORTIL
Un seul ingrédient? Donnez 4 caractères supplémentaires en haut.
Employés du mois
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>
Bonne cuisine!
Python 3, 475 octets
C'est probablement beaucoup trop long, mais je peux aussi poster quelque chose!
la source
r=(r+["TORTIL"])[::-1]
parr=["TORTIL"]+r[::-1]
.range(0,l)
peut aussi l'êtrerange(l)
.if l==2:q=s[0];s=[q,q,q];l=3
sur une seule ligne. 3.n(l)
fait la même chose quen(0,l)
.Rubis,
376375368363362 octetsEncore un travail en cours.
(Bonus: Fonctionne avec autant de garnitures que vous le souhaitez, pas seulement 5. Surtout parce que je n'ai pas vu cette règle au début> _ <)
Version non golfée:
la source