M. William Shakespeare a écrit des pièces de théâtre. Beaucoup de jeux. Dans ce tarball contenant chacune de ses œuvres, chacune de ses pièces est un long fichier.
Il doit être divisé en scènes pour une production scénique. Parce que les acteurs sont impatients, votre code doit être aussi court que possible.
Tâche:
Votre tâche consiste à écrire un programme ou une fonction pour diviser les jeux contenus dans ce fichier en fichiers séparés, numérotés séquentiellement à partir de 1
, où chacun contient une scène. Vous devez conserver tous les espaces et titres.
Contribution:
L'entrée sera une lecture unique via stdin
ou le nom de fichier comme paramètre. Tu peux choisir. Le jeu ressemblera à quelque chose comme:
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
[...]
Production:
La sortie devrait ressembler à ceci:
ACTE I SCÈNE I Rome. Devant le Capitole. [Le tombeau de l'ANDRONICI apparaissant; les Tribunes et les sénateurs en haut. Entrez, ci-dessous, d'un côté, SATURNINUS et ses disciples; et, de l'autre côté, BASSIANUS et ses partisans; avec tambour et couleurs] SATURNINUS Nobles patriciens ...
ACTE I SCÈNE II Une forêt près de Rome. Des cornes et des cris de chiens entendus. [Entrez TITUS ANDRONICUS, avec Hunters, & c., MARCUS, LUCIUS, QUINTUS et MARTIUS] TITUS ANDRONICUS La chasse est terminée, le matin est vif et gris, Les champs sont ...
ACTE II SCÈNE I Rome. Devant le palais. [Entrez AARON] AARON Grimpe maintenant Tamora ...
etc.
Sortie soit dans des fichiers numérotés, soit dans le stdout
flux (retour pour les fonctions) avec un suppresseur de votre choix.
Bonus:
- 10% Si vous enregistrez le bit avant l'Acte 1 dans un fichier
0
. Remarque: Il ne doit pas se casser si le bit avant l'Acte 1 est vide. - 15% Si vous pouvez prendre les deux
stdin
et un paramètre de chemin d'accès au fichier - 20% Si vous pouvez sortir à la fois dans des fichiers et vers
stdout
/ retourner. 200 points de réputation si vous pouvez créer le plus petit programme SPL.Cette prime a été décernée.
Classements
Voici un extrait de pile pour générer à la fois un classement régulier et un aperçu des gagnants par langue.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle de démarque suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
# Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
# [><>](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>
Réponses:
Langage de programmation Shakespeare 1.2.1 ,
930895887 - 10% = 798,3 octetsNon golfé et réécrit en langue Sharkspearean:
En pseudo-code de type C:
Nécessite que le fichier d'entrée contienne au moins 3 caractères. Utilise "@" comme délimiteur et transmet les résultats à stdout. Je profite du bonus de 10% car la partie avant la première scène sera avant le premier "@", un peu comme la solution de Martin Büttner ci-dessus.
La façon dont cela fonctionne est de mettre un "@" s'il voit trois caractères "ACT" dans une rangée. Notez que cela signifie qu'il transformerait "ENACTED" en "EN @ ACTED". Cela peut être corrigé au prix de quelques centaines d'octets, mais heureusement, il semble que chaque "ACT" dans les pièces données (du moins les quelques que j'ai vérifiées) était le début d'une scène.
Testé avec le SPL 1.2.1 lié ci-dessus. Je ne sais pas si cela fonctionnera sur l'interpréteur Web. Le script utilisé pour les tests était:
Les parties "ésotériques" de la SPL une fois que vous avez dépassé la syntaxe sont le brassage des variables sur "scène" (généralement, vous ne voulez avoir que deux caractères sur scène à la fois) et la représentation des nombres constants. Il y a 6 listes de mots d'importation fournies avec la distribution: adjectifs positifs, adjectifs neutres, adjectifs négatifs, noms positifs, noms neutres et noms négatifs. Un nom positif / neutre (c'est-à-dire un mur de prune ou de pierre) est 1, et un nom négatif (c'est-à-dire flirt-gill ou Microsoft) est -1. Les adjectifs positifs / neutres (c.-à-d. Brodés ou sans fond) multiplient le nombre par 2, et les adjectifs négatifs (c.-à-d. Le rein graisseux ou sans père) se multiplient par -2. Les listes de mots sont malheureusement assez limitées, avec seulement 10-20 entrées chacune.
Lors de ma prochaine réunion, je proposerai de déplacer tout notre code de production vers Shakespeare car il est beaucoup plus expressif que Scala.
la source
Rétine , 9 à 10% = 8,1 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Insère un
=
(comme délimiteur) devant tout ceACT
qui est précédé d'un saut de ligne et suivi d'un espace.Essayez-le en ligne! (Mais vous devrez copier vous-même l'entrée en raison de sa taille.)
la source
awk, 51 * .9 * .85 * .8 = 31.2
Se divise en plusieurs fichiers. Sorties sur
stdout
séparées par un=
.la source
stdout
séparés par un caractère spécifique, et vous avez terminé!JavaScript ES6, 28 - 10% = 25,2 octets
Même le shell JS n'a pas d'E / S sur les fichiers, donc cela ne peut pas bénéficier du bonus de -20%
Essayez-le en ligne ici (vous devrez coller l'entrée en vous-même)
la source
T
pour un octet enregistré.$&
pasPerl, 66 - 10% - 20% = 47,52 octets
Ajout d'un pour l'
-p
option.la source
Rubis, 30 - 10% - 15% =
23 71522,95 octetsRépartit l'entrée sur
$
. Un bonus de 15% s'applique car Ruby redirige$<
vers le fichier transmisARGV
par défaut s'il est fourni ouSTDIN
non.-1 octet en tirant parti
gsub
de la solution @Downgoat ES6, mais je profite toujours de l'espoir quiACT
n'apparaît que sur les étiquettes ACT et pas dans un autre mot, simplement parce queEn outre, ma solution de 41,004 (à l'origine 67) octets qui fait également la sortie de fichier. En vedette probablement la seule fois où la
each
commande enregistre des octetsmap
dans Ruby, careach
retourne le tableau passé sans altération après avoir exécuté son bloc, contrairement àmap
.la source