¡Programming Puzzles & Code Golf ha abierto un camión de tacos ! Se corrió la voz y ahora los usuarios de toda la red de Stack Exchange vienen a probar nuestros sabrosos y auténticos tacos ASCII . Necesitamos su ayuda para garantizar que todos reciban sus pedidos de manera oportuna. No hay mucho espacio dentro de los camiones de comida, por lo que necesitará que su código sea lo más breve posible.
Ahora para un poco de capacitación en el trabajo.
Tu trabajo
Escriba un programa completo que lea un pedido de STDIN o una función que obtenga un solo orden de cadena como entrada. Los tacos están impresos en STDOUT, hechos a pedido.
Tomando pedidos
Los clientes le darán sus pedidos a través de STDIN o argumento de función. Los pedidos serán en forma de una lista delimitada por comas de ingredientes deseados. El orden en que se dan las coberturas dicta el orden en que aparecen en el taco, con la primera cobertura en la parte inferior y la última en la parte superior. Esto es lo que tenemos en stock:
- Frijoles
- Arroz
- Verduras
- Lechuga
- Guacamole
- CCrea agria
- Salsa
Los clientes pueden pedir tan solo 1 cobertor pero no más de 5 coberturas. Los ingredientes no necesitan ser distintos.
Puede suponer que los clientes están familiarizados con el menú antes de ordenar y, por lo tanto, todos los pedidos solo contendrán ingredientes que almacenamos. Es decir, la entrada siempre será válida.
Sirviendo tacos
Los clientes exigen que sus tacos se impriman en STDOUT. Están bien con algunos espacios en blanco iniciales o finales en su comida.
La investigación de mercado muestra que todos quieren comer tacos como palabras, y las palabras en mayúsculas son mucho más sabrosas. Por lo tanto, enumeraremos los ingredientes en TODAS LAS MAYÚSCULAS sin espacios.
En aras de la presentación artística, no podemos simplemente colocar cosas en una tortilla y llamarla buena, tenemos que colocar suavemente los ingredientes de izquierda a derecha, envolviendo y repitiendo según sea necesario. Cada relleno obtiene un mínimo de 2 líneas para sí mismo. Todo esto se aclarará una vez que inspeccionemos el plato de muestra.
Plato de muestra
Echemos un vistazo a algunos pedidos de muestra.
El cliente ordena: Beans,Veggies,Rice,Lettuce,Sour Cream
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
Se ve muy sabroso, ¿verdad? Los ingredientes se envuelven después de 6 caracteres en una nueva línea y se repiten para llenar 2 líneas cada uno, truncados a 12 caracteres. El primer ingrediente obtiene 6 caracteres en su línea superior pero solo 4 en su segunda línea. Esto asegura que encaje en el pliegue de la tortilla. Del mismo modo, el último ingrediente siempre obtiene 4 caracteres en su línea superior y 6 en su segundo.
¿Qué sucede si un cliente ordena dos de la misma cobertura en una fila? Siga envolviendo ese ingrediente para todas las líneas consecutivas de ese ingrediente.
El cliente ordena: Lettuce,Lettuce,Lettuce,Salsa
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
El cliente ordena: Guacamole
T L
O I
R T
T R
I O
L GUAC T
L AMOLEG A
A UACA L
TORTIL
¿Solo un ingrediente? Otorga el valor de 4 personajes adicionales en la parte superior.
Empleados del mes
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>
¡Feliz cocina!
Python 3, 475 bytes
Probablemente sea demasiado tiempo, ¡pero también puedo publicar algo!
fuente
r=(r+["TORTIL"])[::-1]
conr=["TORTIL"]+r[::-1]
.range(0,l)
También puede serrange(l)
.if l==2:q=s[0];s=[q,q,q];l=3
en una sola línea. 3.n(l)
hace lo mismo quen(0,l)
.Rubí,
376375368363362 bytesTodavía un trabajo en progreso.
(Bonificación: funciona con tantos ingredientes como desee, no solo 5. Principalmente porque no vi esa regla al principio> _ <)
Versión sin golf:
fuente