William Shakespeare escribió obras de teatro. Muchas jugadas. En este tarball que contiene cada una de sus obras, cada una de sus jugadas es un archivo largo.
Debe dividirse en escenas para una producción en el escenario. Debido a que los actores son impacientes, su código debe ser lo más breve posible.
Tarea:
Su tarea es escribir un programa o función para dividir las obras contenidas en este archivo en archivos separados, numerados secuencialmente desde 1
donde cada uno contiene una escena. Debe conservar todos los espacios en blanco y títulos.
Entrada:
La entrada será una sola reproducción vía stdin
, o el nombre de archivo como parámetro. Tu puedes elegir. La obra se verá algo así como:
TITUS ANDRONICUS
DRAMATIS PERSONAE
SATURNINUS son to the late Emperor of Rome, and afterwards
declared Emperor.
BASSIANUS brother to Saturninus; in love with Lavinia.
TITUS ANDRONICUS a noble Roman, general against the Goths.
MARCUS ANDRONICUS tribune of the people, and brother to Titus.
LUCIUS |
|
QUINTUS |
| sons to Titus Andronicus.
MARTIUS |
|
MUTIUS |
Young LUCIUS a boy,
[...]
ACT I
SCENE I Rome. Before the Capitol.
[The Tomb of the ANDRONICI appearing; the Tribunes
and Senators aloft. Enter, below, from one side,
SATURNINUS and his Followers; and, from the other
side, BASSIANUS and his Followers; with drum and colours]
SATURNINUS Noble patricians
[...]
ACT I
SCENE II A forest near Rome. Horns and cry of hounds heard.
[Enter TITUS ANDRONICUS, with Hunters, &c., MARCUS,
LUCIUS, QUINTUS, and MARTIUS]
TITUS ANDRONICUS The hunt is up, the morn is bright and grey,
The fields are
[...]
ACT II
SCENE I Rome. Before the Palace.
[Enter AARON]
AARON Now climbeth Tamora
[...]
Salida:
La salida debería verse así:
ACTO I ESCENA I Roma. Ante el capitolio. [Aparece la tumba de ANDRONICI; los Tribunas y senadores en alto. Ingrese, abajo, desde un lado, SATURNINO y sus seguidores; y del otro BASSIANUS y sus seguidores; con tambor y colores] SATURNINO Patricios nobles ...
ACTO I ESCENA II Un bosque cerca de Roma. Se escuchan cuernos y gritos de sabuesos. [Ingrese TITUS ANDRONICUS, con Hunters, & c., MARCUS, LUCIUS, QUINTUS y MARTIUS] TITUS ANDRONICUS La caza ha terminado, la mañana es brillante y gris, Los campos son ...
ACTO II ESCENA I Roma. Antes del palacio. [Entra AARON] AARON Ahora Climbeth Tamora ...
etc.
Salida ya sea en archivos numerados o en la stdout
secuencia (volviendo para funciones) con un deliminador de su elección.
Bonificaciones:
- 10% Si guarda el bit antes del Acto 1 en el archivo
0
. Nota: No debe romperse si el bit anterior al Acto 1 está vacío. - 15% Si puede tomar ambas
stdin
entradas de parámetros y una ruta de archivo - 20% Si puede enviar tanto a archivos como a
stdout
/ return. 200 reputación si puedes hacer el programa SPL más pequeño.Esta recompensa ha sido otorgada.
Tablas de clasificación
Aquí hay un fragmento de pila para generar una tabla de clasificación regular y una descripción general de los ganadores por idioma.
Para asegurarse de que su respuesta se muestre, comience con un título, usando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
# Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento de la tabla de clasificación:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
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><script>var QUESTION_ID=68997,OVERRIDE_USER=43394;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;</script>
Respuestas:
Lenguaje de programación Shakespeare 1.2.1 ,
930895887 - 10% = 798,3 bytesDesengañado y reescrito en lengua de tiburón:
En el psuedocódigo tipo C:
Requiere que el archivo de entrada contenga al menos 3 caracteres. Utiliza "@" como delimitador e informa los resultados a stdout. Estoy tomando el 10% de bonificación ya que la parte anterior a la primera escena será antes de la primera "@", al igual que la solución de Martin Büttner anterior.
La forma en que funciona es poner una "@" si ve tres caracteres "ACT" en una fila. Tenga en cuenta que esto significa que transformaría "ENACTED" en "EN @ ACTED". Esto se puede arreglar al costo de unos pocos cientos de bytes, pero afortunadamente parece que cada "ACT" en las jugadas dadas (al menos las pocas que verifiqué) fue el comienzo de una escena.
Probado con el 1.2.1 SPL vinculado anteriormente. No estoy seguro de si funcionará en el intérprete web. El script utilizado para las pruebas fue:
Las partes "esotéricas" del SPL una vez que pasa la sintaxis son la combinación aleatoria de variables en el "escenario" (generalmente, solo desea tener dos caracteres en el escenario a la vez) y la representación de números constantes. Hay 6 listas de palabras de importación que vienen con la distribución: adjetivos positivos, adjetivos neutros, adjetivos negativos, sustantivos positivos, sustantivos neutros y sustantivos negativos. Un sustantivo positivo / neutro (es decir, ciruela o muro de piedra) es 1, y un sustantivo negativo (es decir, flirt-gill o Microsoft) es -1. Los adjetivos positivos / neutrales (es decir, bordados o sin fondo) multiplican el número por 2, y los adjetivos negativos (es decir, sin grasa o sin padre) se multiplican por -2. Las listas de palabras son lamentablemente bastante limitadas, con solo 10-20 entradas cada una.
En mi próxima reunión, sugeriré que traslademos todo nuestro código de producción a Shakespeare porque es mucho más expresivo que Scala.
fuente
Retina , % = 8.1 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Inserta un
=
(como delimitador) delante de cadaACT
precedido por un salto de línea y seguido por un espacio.Pruébalo en línea! (Pero tendrá que copiar la entrada usted mismo debido a su tamaño).
fuente
awk, 51 * .9 * .85 * .8 = 31.2
Se divide en múltiples archivos. Salidas en
stdout
separadas por a=
.fuente
stdout
separados por un carácter específico, y listo!JavaScript ES6, 28-10% = 25.2 bytes
Ni siquiera el shell JS tiene E / S de archivo, por lo que esto no puede calificar para el bono de -20%
Pruébelo en línea aquí (tendrá que pegar la entrada en usted mismo)
fuente
T
byte guardado por un byte.$&
no lo haráPerl, 66-10% - 20% = 47.52 bytes
Se agregó uno para la
-p
opción.fuente
Rubí, 30 - 10% - 15% =
23.71522.95 bytesDivide la entrada en
$
. Se aplica un 15% de bonificación porque Ruby redirige$<
para apuntar al archivo pasadoARGV
por defecto si se proporciona, oSTDIN
si no.-1 byte aprovechando
gsub
una solución similar a @Downgoat ES6 pero todavía estoy aprovechando la esperanza de queACT
solo aparezca en las etiquetas de ACT y no dentro de ninguna otra palabra, solo porqueAdemás, mi solución de 41.004 (originalmente 67) bytes que también genera salida de archivos. Probablemente, la única vez que el
each
comando guarda bytesmap
en Ruby es la función de estrella, porqueeach
devuelve la matriz pasada sin adulterar después de ejecutar su bloque, a diferenciamap
.fuente