13
4
Mr. William Shakespeare wrote plays. A lot of plays. In this tarball containing every single one of his works, each one of his plays is one long file.
It needs to be split into Scenes for a stage production. Because actors are impatient, your code needs to be as short as possible.
Task:
Your task is to write a program or function to split the plays contained in this file into separate files, numbered sequentially starting from 1
, where each one contains a scene. You should retain all whitespace and titles.
Input:
Input will be a single play via stdin
, or the filename as a parameter. You can choose. The play will look something like:
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
[...]
Output:
The output should look something like this:
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 ...
etc.
Output either into numbered files, or to the stdout
stream (returning for functions) with a deliminator of your choice.
Bonuses:
- 10% If you save the bit before Act 1 into file
0
. Note: It must not break if the bit before Act 1 is empty. - 15% If you can take both
stdin
and a file path parameter inputs - 20% If you can output both into files and to
stdout
/ return. 200 reputation if you can make the smallest SPL program.This bounty has been awarded.
Leaderboards
Here is a Stack Snippet to generate both a regular leaderboard and an overview of winners by language.
To make sure that your answer shows up, please start your answer with a headline, using the following Markdown template:
# Language Name, N bytes
where N
is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:
# Ruby, <s>104</s> <s>101</s> 96 bytes
If there you want to include multiple numbers in your header (e.g. because your score is the sum of two files or you want to list interpreter flag penalties separately), make sure that the actual score is the last number in the header:
# Perl, 43 + 2 (-p flag) = 45 bytes
You can also make the language name a link which will then show up in the leaderboard snippet:
# [><>](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>
16I will give out a +200 bounty to the first valid Shakespeare Programming Language submission. – cat – 2016-01-09T14:28:05.040
3Come on, everyone knows that CodeGolfs aren't fast. Why not say that "The tarball is already pretty full, so your code should be as short as possible"? – J_F_B_M – 2016-01-09T14:30:38.943
@LegionMammal978 "With a deliminator of your choice". – J_F_B_M – 2016-01-09T14:31:18.180
Could you include some contents of the relevant file in the question instead of just giving a link? – nicael – 2016-01-09T14:54:06.210
The output was quite clear though, I was primarily asking to include some key parts of the input file – nicael – 2016-01-09T15:03:05.970
Are functions allowed? – Downgoat – 2016-01-09T16:44:53.330
Do the bonuses combine as sums or products? That is, does achieving all 3 bonuses result in 10 + 15 + 20 = 45% reduction or 90% of 85% of 80% = 61.2% (a 38.8% reduction)? – trichoplax – 2016-01-10T19:05:14.377
1@trichoplax Products. I thought that was how everybody did it! crosses out in notebook – wizzwizz4 – 2016-01-10T19:32:56.037
The leaderboard stack snippet is broken, and I can't fix it because it's only 4 characters. Can someone with 2k+ rep change
(\d+)
to([\d\.]+)
inSCORE_REG
please? – Shelvacu – 2016-01-10T20:34:46.703@shelvacu I would ask on the Meta page, linked to in the question. That is where the leaderboard is maintained. – wizzwizz4 – 2016-01-10T21:08:01.800
1
@cat Here you go! http://codegolf.stackexchange.com/a/69360/43394
– wizzwizz4 – 2016-01-13T19:46:49.817@wizzwizz4 I have to wait 24 hours to award it :( – cat – 2016-01-13T19:49:27.023
@cat Could you wait 7 days? The question won't go anywhere, and neither will the answer... (Or maybe Robert deserves it ASAP. d:-D ) – wizzwizz4 – 2016-01-13T20:24:42.820
@wizzwizz4 sure, I'll wait 7 days and accept the shortest next wednesday. – cat – 2016-01-13T20:35:50.970
2@cat -- Leave it open; I'm sure there are smaller Shakespeare solutions than mine. Mine is as fat as the sum of a big big big cat and a cat. – Robert Fraser – 2016-01-15T22:59:44.280
1@RobertFraser I can't stop giggling at that -- I think you've invented William Suess ;) – cat – 2016-01-16T02:15:26.980