Мистер Уильям Шекспир написал пьесы. Много пьес. В этом архиве, содержащем все его работы, каждая его пьеса представляет собой один длинный файл.
Это должно быть разделено на Сцены для сценического производства. Поскольку актеры нетерпеливы, ваш код должен быть максимально коротким.
Задача:
Ваша задача - написать программу или функцию для разделения пьес, содержащихся в этом файле, на отдельные файлы, пронумерованные последовательно, начиная с 1
каждого, где каждый содержит сцену. Вы должны сохранить все пробелы и названия.
Входные данные:
Вводом будет одиночное воспроизведение stdin
или имя файла в качестве параметра. Ты можешь выбрать. Игра будет выглядеть примерно так:
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
[...]
Выход:
Вывод должен выглядеть примерно так:
ACT I СЦЕНА I Рим. До Капитолия. [Могила АНДРОНИКИ появляется; трибуны и сенаторы наверху. Введите ниже, с одной стороны, САТУРНИН и его последователи; а с другой сторона, BASSIANUS и его последователи; с барабаном и цветами] Сатурнин Благородные патриции ...
ACT I СЦЕНА II Лес под Римом. Рожки и крик гончих слышны. [Введите TITUS ANDRONICUS, с Охотниками и т. Д., Маркус, ЛЮЦИЙ, КВИНТ и МАРТИЙ] TITUS ANDRONICUS Охота закончена, утро яркое и серое, Поля ...
ACT II СЦЕНА I Рим. Перед дворцом. [Введите AARON] Аарон Теперь поднимается на Тамору ...
и т.п.
Выведите либо в пронумерованные файлы, либо в stdout
поток (возвращая для функций) с разделителем по вашему выбору.
Бонусы:
- 10% Если вы сохраните бит перед Актом 1 в файл
0
. Примечание: оно не должно прерываться, если бит перед действием 1 пуст. - 15% Если вы можете принять оба параметра
stdin
и путь к файлу ввода параметров - 20% Если вы можете выводить как в файлы, так и в
stdout
/ возврат. 200 репутации, если вы можете сделать самую маленькую программу SPL.Эта награда была присуждена.
Leaderboards
Вот фрагмент стека, который генерирует как регулярную таблицу лидеров, так и обзор победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в свой заголовок несколько чисел (например, потому что ваш счет равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
# Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать название языка ссылкой, которая затем будет отображаться в фрагменте списка лидеров:
# [><>](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>
Ответы:
Язык программирования Шекспира 1.2.1 ,
930895887 - 10% = 798,3 байтаРазоблаченный и переписанный на Sharkspearean языке:
В C-подобном psuedocode:
Требуется, чтобы входной файл содержал не менее 3 символов. Использует "@" в качестве разделителя и сообщает о результатах на стандартный вывод. Я беру 10% бонуса, так как часть до первой сцены будет перед первым «@», очень похоже на решение Мартина Бюттнера, описанное выше.
Как это работает, это поставить «@», если он видит три символа «ACT» подряд. Обратите внимание, что это означает, что он преобразует «ENACTED» в «EN @ ACTED». Это можно исправить стоимостью в несколько сотен байт, но, к счастью, каждый «ACT» в данных пьесах (по крайней мере, те немногие, которые я проверил) был началом сцены.
Протестировано с 1.2.1 SPL, указанным выше. Я не уверен, будет ли это работать на веб-переводчике. Скрипт, использованный для тестирования, был:
«Эзотерические» части SPL после прохождения синтаксиса - это перетасовка переменных на «сцене» (как правило, вы хотите иметь только два символа на сцене за раз) и представление постоянных чисел. Имеется 6 списков слов, которые идут вместе с распределением: положительные прилагательные, нейтральные прилагательные, отрицательные прилагательные, положительные существительные, нейтральные существительные и отрицательные существительные. Положительное / нейтральное существительное (например, сливовая или каменная стена) равно 1, а отрицательное существительное (например, flirt-gill или Microsoft) равно -1. Положительные / нейтральные прилагательные (т. Е. Вышитые или бездонные) умножают число на 2, а отрицательные прилагательные (т. Е. Толстые или без отца) умножают на -2. Списки слов, к сожалению, довольно ограничены, всего 10-20 записей в каждом.
На моей следующей встрече я предлагаю перенести весь наш производственный код в Шекспир, потому что он гораздо более выразителен, чем Scala.
источник
Сетчатка , 9 - 10% = 8,1 байта
Количество байтов предполагает кодировку ISO 8859-1.
Вставляет
=
(как разделитель) перед каждымACT
, которому предшествует перевод строки, а затем пробел.Попробуйте онлайн! (Но вам придется копировать входные данные из-за его размера.)
источник
awk, 51 * .9 * .85 * .8 = 31.2
Разбивает на несколько файлов. Выходы
stdout
разделены на=
.источник
stdout
разделенные определенным символом, и все готово!JavaScript ES6, 28 - 10% = 25,2 байта
Даже в оболочке JS нет файлового ввода-вывода, так что это не может претендовать на бонус -20%
Попробуйте онлайн здесь (вам придется вставить данные в себя)
источник
T
за один сохраненный байт.$&
его не будетPerl 66 - 10% - 20% = 47,52 байта
Добавлен один для
-p
варианта.источник
Рубин, 30 - 10% - 15% =
23,71522,95 байтРазделение ввода включено
$
. Бонус 15% применяется, потому что Ruby перенаправляет,$<
чтобы указать на файл, переданныйARGV
по умолчанию, если он предоставлен, илиSTDIN
если нет.-1 байт, используя
gsub
аналогично решению @Downgoat ES6, но я все еще использую надежду, котораяACT
появляется только на ярлыках ACT, а не внутри какого-либо другого слова, просто потому, чтоКроме того, мое 41.004 (первоначально 67) байтовое решение, которое также делает вывод файла. В главной роли, вероятно, единственный раз, когда
each
команда сохраняет байтыmap
в Ruby, потому чтоeach
, в отличие от этого возвращает массив, переданный без изменений после запуска блокаmap
.источник