A programação de quebra-cabeças e código Golf abriu um caminhão de taco ! A notícia acabou e agora usuários de toda a rede Stack Exchange estão experimentando nossas saborosas e autênticas tacos ASCII . Precisamos da sua ajuda para garantir que todos recebam seus pedidos em tempo hábil. Como não há muito espaço dentro dos caminhões de alimentos, você precisará que seu código seja o mais curto possível.
Agora, para algum treinamento no trabalho.
Seu emprego
Escreva um programa completo que leia um pedido de STDIN ou uma função que receba um único pedido de sequência como entrada. Os tacos são impressos em STDOUT, feitos sob encomenda.
Recebendo ordens
Os clientes darão seus pedidos via STDIN ou argumento de função. Os pedidos terão a forma de uma lista delimitada por vírgula de coberturas desejadas. A ordem em que as coberturas são dadas determina a ordem em que aparecem no taco, com a primeira cobertura listada na parte inferior e a última na parte superior. Aqui está o que mantemos em estoque:
- Feijões
- Arroz
- Veggies
- Alface
- guacamole
- Nata
- salsa
Os clientes podem encomendar apenas 1 cobertura, mas não mais que 5 coberturas. Coberturas não precisam ser distintas.
Você pode supor que os clientes estejam familiarizados com o menu antes de fazer o pedido e, portanto, todos os pedidos conterão apenas os ingredientes que armazenamos. Ou seja, a entrada sempre será válida.
Servindo tacos
Os clientes exigem que suas tacos sejam impressas na STDOUT. Eles estão bem com alguns espaços em branco à esquerda ou à esquerda na comida.
Pesquisas de mercado mostram que todo mundo quer comer tacos como palavras, e as palavras em todas as letras são muito mais saborosas. Assim, listaremos coberturas em ALL CAPS sem espaços.
No interesse de apresentações artísticas, não podemos simplesmente colocar coisas em uma tortilha e chamar de bom, temos que colocar delicadamente coberturas da esquerda para a direita, embrulhando e repetindo conforme necessário. Cada cobertura recebe no mínimo 2 linhas. Tudo ficará mais claro quando inspecionarmos o prato de amostras.
Prato de amostras
Vamos dar uma olhada em alguns pedidos de amostra.
O cliente pede: Beans,Veggies,Rice,Lettuce,Sour Cream
Nós entregamos:
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
Parece bem gostoso, né? As coberturas quebram após 6 caracteres em uma nova linha e são repetidas para preencher 2 linhas cada, truncadas em 12 caracteres. O primeiro ingrediente recebe 6 caracteres na linha superior, mas apenas 4 na segunda linha. Isso garante que ele se encaixe na dobra da tortilha. Da mesma forma, o último ingrediente sempre obtém 4 caracteres na linha superior e 6 na segunda.
O que acontece se um cliente pedir duas da mesma cobertura consecutiva? Continue embrulhando esse ingrediente para todas as linhas consecutivas desse ingrediente.
O cliente pede: Lettuce,Lettuce,Lettuce,Salsa
Nós entregamos:
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
O cliente pede: Guacamole
T L
O I
R T
T R
I O
L GUAC T
L AMOLEG A
A UACA L
TORTIL
Apenas um ingrediente? Dê 4 caracteres extras no topo.
Funcionários do mês
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>
Cozinha feliz!
Python 3, 475 bytes
Provavelmente é muito longo, mas eu também posso postar algo!
fonte
r=(r+["TORTIL"])[::-1]
porr=["TORTIL"]+r[::-1]
.range(0,l)
também pode serrange(l)
.if l==2:q=s[0];s=[q,q,q];l=3
em uma única linha. 3.n(l)
faz o mesmo quen(0,l)
.Ruby,
376375368363362 bytesAinda um trabalho em andamento.
(Bônus: funciona com tantas coberturas quanto você quiser, não apenas com 5. Principalmente porque eu não vi essa regra no início> _ <)
Versão não destruída:
fonte