William Shakespeare napisał sztuki. Dużo sztuk. W tym archiwum zawierającym każdy jego utwór, każda jego sztuka jest jednym długim plikiem.
Musi być podzielony na Sceny do produkcji scenicznej. Ponieważ aktorzy są niecierpliwi, Twój kod musi być jak najkrótszy.
Zadanie:
Twoim zadaniem jest napisanie programu lub funkcji do podzielenia odtworzeń zawartych w tym pliku na osobne pliki, ponumerowane kolejno począwszy od 1
, z których każda zawiera scenę. Powinieneś zachować wszystkie białe znaki i tytuły.
Wejście:
Wejście będzie pojedynczym odtwarzaniem za pomocą stdin
lub nazwą pliku jako parametrem. Możesz wybrać. Sztuka będzie wyglądać mniej więcej tak:
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
[...]
Wynik:
Dane wyjściowe powinny wyglądać mniej więcej tak:
AKT I SCENA I Rzym. Przed Kapitolem. [Pojawia się grób ANDRONICI; Trybuny i senatorzy w górze. Wpisz poniżej z jednej strony, SATURNINUS i jego wyznawcy; i z drugiej po stronie, BASSIANUS i jego wyznawcy; z bębnem i kolorami] SATURNINUS Szlachetni patrycjusze ...
AKT I SCENA II Las pod Rzymem. Usłyszeli rogi i płacz psów. [Wpisz TITUS ANDRONICUS, z Hunters, i c., MARCUS, LUCIUS, QUINTUS i MARTIUS] TITUS ANDRONICUS Polowanie się skończyło, poranek jest jasny i szary, Pola są ...
AKT II SCENA I Rzym. Przed pałacem. [Wpisz AARON] AARON Teraz wspina się na Tamorę ...
itp.
Wyjście albo do plików ponumerowanych, albo do stdout
strumienia (powrót do funkcji) z wybranym przez siebie ogranicznikiem.
Bonusy:
- 10% Jeśli zapiszesz bit przed Aktem 1 do pliku
0
. Uwaga: nie może się złamać, jeśli bit przed Aktem 1 jest pusty. - 15% Jeśli możesz wziąć oba
stdin
parametry wejściowe i parametr ścieżki pliku - 20% Jeśli możesz wyprowadzać zarówno do plików, jak i do
stdout
/ return. 200 reputacji, jeśli możesz zrobić najmniejszy program SPL.Ta nagroda została przyznana.
Liderów
Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](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>
Odpowiedzi:
Język programowania Szekspira 1.2.1 ,
930895887 - 10% = 798,3 bajtówNiepolecane i przepisane w języku Sharkspearean:
W psuedocode podobnym do C:
Wymaga, aby plik wejściowy zawierał co najmniej 3 znaki. Używa „@” jako separatora i zgłasza wyniki na standardowe wyjście. Biorę bonus 10%, ponieważ część przed pierwszą sceną będzie przed pierwszym „@”, podobnie jak powyższe rozwiązanie Martina Büttnera.
Działa to tak, aby wstawić „@”, jeśli widzi trzy znaki „ACT” z rzędu. Uwaga: oznacza to, że przekształciłby „ENACTED” w „EN @ ACTED”. Można to naprawić kosztem kilkuset bajtów, ale na szczęście wydaje się, że każda „AKCJA” w danej grze (przynajmniej kilka, które sprawdziłem) była początkiem sceny.
Testowane z SPL 1.2.1 połączonym powyżej. Nie jestem pewien, czy to zadziała w tłumaczu internetowym. Skrypt użyty do testowania to:
„Ezoteryczne” części SPL po przekroczeniu składni to tasowanie zmiennych na „scenie” (na ogół chcesz mieć na scenie tylko dwa znaki na raz) i reprezentacja liczb stałych. Istnieje 6 list słów importowych, które pochodzą z dystrybucji: przymiotniki pozytywne, przymiotniki neutralne, przymiotniki przeczące, rzeczowniki dodatnie, rzeczowniki neutralne i rzeczowniki przeczące. Rzeczownik dodatni / neutralny (tj. Śliwka lub kamienna ściana) wynosi 1, a rzeczownik negatywny (tj. Flirt-blaszka lub Microsoft) wynosi -1. Pozytywne / neutralne przymiotniki (tj. Haftowane lub bez dna) mnożą liczbę przez 2, a przymiotniki przeczące (tj. Nerki tłuszczowe lub bez ojca) mnożą przez -2. Listy słów są niestety dość ograniczone, każda zawiera tylko 10-20 wpisów.
Na następnym spotkaniu zasugeruję przeniesienie całego naszego kodu produkcyjnego do Szekspira, ponieważ jest on o wiele bardziej wyrazisty niż Scala.
źródło
Siatkówka , 9–10% = 8,1 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wstawia
=
(jako ogranicznik) przed każdym,ACT
który jest poprzedzony linią, a po nim spacją.Wypróbuj online! (Ale musisz sam skopiować dane wejściowe ze względu na ich rozmiar).
źródło
awk, 51 * .9 * .85 * .8 = 31,2
Dzieli się na wiele plików. Wyjścia są
stdout
oddzielone znakiem a=
.źródło
stdout
osobnych znaków i gotowe!JavaScript ES6, 28–10% = 25,2 bajtów
Nawet powłoka JS nie ma plików I / O, więc nie może się kwalifikować do premii -20%
Wypróbuj online tutaj (musisz wkleić dane wejściowe w sobie)
źródło
T
zapisany jeden bajt.$&
nie będziePerl, 66 - 10% - 20% = 47,52 bajtów
Dodano jeden dla
-p
opcji.źródło
Rubinowy,
30–10% - 15% =23,71522,95 bajtówDzieli wejście
$
. Bonus 15% obowiązuje, ponieważ Ruby przekierowuje w$<
celu wskazania pliku przekazanegoARGV
domyślnie, jeśli jest dostarczony, lubSTDIN
jeśli nie.-1 bajt, wykorzystując
gsub
podobne do rozwiązania @Downgoat ES6, ale wciąż mam nadzieję, żeACT
kiedykolwiek pojawia się tylko na etykietach ACT, a nie w żadnym innym słowie, tylko dlatego, żePonadto moje 41.004 (pierwotnie 67) bajtowe rozwiązanie, które również generuje dane wyjściowe pliku. Występuje prawdopodobnie tylko raz, gdy
each
komenda oszczędza bajtymap
w Rubim, ponieważeach
zwraca tablicę przekazaną w niezmienionej postaci po uruchomieniu bloku, w przeciwieństwie do tegomap
.źródło