Shakespeare Komut Dosyasını Böl


13

Bay William Shakespeare oyunlar yazdı. Bir sürü oyun. Eserlerinin her birini içeren bu tarballda , oyunlarının her biri uzun bir dosyadır.
Bir sahne prodüksiyonu için Sahnelere bölünmesi gerekiyor. Aktörler sabırsız olduğu için, kodunuzun mümkün olduğunca kısa olması gerekir.

Görev:

Göreviniz, bu dosyada bulunan oyunları 1, her birinin bir sahne içerdiği, sırayla başlayarak sıralanan ayrı dosyalara bölmek için bir program veya işlev yazmaktır . Tüm boşlukları ve başlıkları korumalısınız.

Giriş:

Girdi, üzerinden tek bir oynatma stdinveya parametre olarak dosya adı olacaktır. Seçebilirsiniz. Oyun şöyle görünecektir:

 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
[...]

Çıktı:

Çıktı şöyle görünmelidir:

ACT I



SAHNE I Roma. Capitol'den önce.


    [ANDRONICI Türbesi ortaya çıkıyor; Tribünler
    ve Senatörler yukarıda. Aşağıya bir taraftan girin,
    SATURNINUS ve Takipçileri; ve diğerinden
    side, BASSIANUS ve Takipçileri; davul ve renklerle]

SATURNINUS Noble patricians ...
ACT I



SAHNE II Roma yakınlarındaki bir orman. Kornalar ve av köpekleri duyuldu.


    [Avcılar ve C, MARCUS ile TITUS ANDRONICUS girin,
    LUCIUS, QUINTUS ve MARTIUS]

TITUS ANDRONICUS Av yukarı, sabah parlak ve gri,
    Alanlar ...
ACT II



SAHNE I Roma. Saraydan önce.


    [AARON'u girin]

AARON Şimdi climbeth Tamora ...

vb.

stdoutİstediğiniz bir ayırıcıyla numaralandırılmış dosyalara veya akışa (işlevler için dönen) çıktı alın.

Bonuslar:

  • 10% Bit 1'den önceki biti dosyaya kaydederseniz 0. Not: Act 1'den önceki bit boşsa kırılmamalıdır.
  • % 15 Her ikisini stdinve bir dosya yolu parametre girişini alabiliyorsanız
  • % 20 Hem dosyalara hem de stdout/ to dönüşü yapabiliyorsanız.
  • 200 itibar eğer en küçük SPL programını yapabilirsiniz. Bu ödül verildi.

Liderler

İşte hem düzenli bir skor tablosu hem de kazananları dile göre gözden geçirmek için bir Yığın Parçacığı .

Yanıtınızın göründüğünden emin olmak için lütfen aşağıdaki Markdown şablonunu kullanarak yanıtınızı bir başlıkla başlatın:

# Language Name, N bytes

Ngönderiminizin büyüklüğü nerede . Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğu veya yorumlayıcı bayrak cezalarını ayrı olarak listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

# Perl, 43 + 2 (-p flag) = 45 bytes

Dil adını, daha sonra skor tablosu snippet'inde görünecek bir bağlantı da yapabilirsiniz:

# [><>](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>


16
İlk geçerli Shakespeare Programlama Dili sunumuna +200 bir ödül vereceğim.
kedi

3
Hadi, herkes biliyor ki CodeGolfs hızlı değil. Neden "Tarball zaten oldukça dolu, yani kodunuz mümkün olduğunca kısa olmalı" demiyorsunuz?
J_F_B_M

1
@trichoplax Ürünler. Herkesin böyle yaptığını düşündüm! defterde haçlar
wizzwizz4 10:16


2
@cat - Açık bırakın; Eminim benimkinden daha küçük Shakespeare çözümleri vardır. Benimki büyük bir büyük kedinin ve bir kedinin toplamı kadar şişman.
Robert Fraser

Yanıtlar:


38

Dil 1.2.1 Programlama Shakespeare , 930 895 % 10 = 798,3 bayt - 887

G.Ajax,a.Puck,a.Page,a.Ford,a.Act I:a.Scene I:a.[Enter Ajax and Puck]Puck:Open thy mind.Ajax:Open thy mind.[Exit Puck][Enter Page]Ajax:Open thy mind.SCENE II:b.[Exeunt][Enter Puck and Ajax]Ajax:Am I as fat as the sum of the cube of a big big cat and a cat?Puck:If not,let us return to scene III.Am I as fat as the sum of you and a big cat?[Exit Puck][Enter Page]Page:If not,let us return to scene III.Am I as fat as the sum of the sum of the cube of a big big cat and a big big big big cat and a big big cat?[Exit Page][Enter Ford]Ajax:If not,let us return to scene III.You is a big big big big big big cat.Speak thy mind.Scene III:c.[Exeunt][Enter Ajax and Puck]Puck:Speak thy mind.You is as fat as I.[Exit Ajax][Enter Page]Page:You is as fat as I.Puck:Open thy mind.Is you as fat as a hog?[Exit Page][Enter Ajax]Puck:If not,let us return to Scene II.Speak thy mind.Ajax:Speak thy mind.

Sharkspearean dilinde yazılmamış ve yeniden yazılmış:

Four Gentlemen of Verona.

Ajax, a master code-golfer with years of experience.
Puck, a young Java programmer and a strong believer in object-oriented design patterns.
Page, a rapscallion of ill repute.
Ford, a car manufacturer.

Act I: A one-act masterpiece.

Scene I: In which many minds are opened, possibly via the consumption of psychadelic drugs.
[Enter Ajax and Puck]
Puck: Open thy mind.
Ajax: Open thy mind.
[Exit Puck]
[Enter Page]
Ajax: Open thy mind.

SCENE II: In which things are compared.
[Exeunt]
[Enter Puck and Ajax]
Ajax: Am I as hairy as the sum of the cube of a furry purple chihuahua and a summer's day?
Puck: If not, let us proceed to scene III. Am I as half-witted as the sum of you and a cunning squirrel?
[Exit Puck]
[Enter Page]
Page: If not,let us proceed to scene III. Am I as delicious as the sum of the sum of the cube of a warm healthy hamster and a proud handsome charming noble nose and a big old aunt?
[Exit Page]
[Enter Ford]
Ajax: If not, let us proceed to scene III. You are the cube of a tiny small pony. Speak thy mind.

Scene III: In which minds are spoken.
[Exeunt]
[Enter Ajax and Puck]
Puck: Speak thy mind. You are as smelly as I.
[Exit Ajax]
[Enter Page]
Page: You are as oozing as I.
Puck: Open thy mind. Are you as disgusting as a Microsoft?
[Exit Page]
[Enter Ajax]
Puck: If not,let us return to Scene II. Speak thy mind.
Ajax:Speak thy mind.

C benzeri psuedo kodunda:

Scene_I:
    Ajax = getchar()
    Puck = getchar()
    Page = getchar()
Scene_II:
    if(Ajax != 'A')
        goto Scene_III
    if(Puck != 'C')
        goto Scene_III
    if(Page != 'T')
        goto Scene_III
    Ford = '@'
    putchar(Ford)
Scene_III:
    putchar(Ajax)
    Ajax = Puck
    Puck = Page
    Page = getchar()
    if(Page != -1)
        goto Scene_II
    putchar(Ajax)
    putchar(Puck)

Giriş dosyasının en az 3 karakter içermesi gerekir. "@" Öğesini sınırlayıcı olarak kullanır ve sonuçları stdout'a bildirir. İlk sahneden önceki bölüm, Martin Büttner'in yukarıdaki çözümü gibi ilk "@" den önce olacağından% 10 bonus alıyorum.

Çalışma şekli, arka arkaya üç karakter "ACT" görürse "@" koymaktır. Bunun "ENACTED" i "EN @ ACTED" e dönüştüreceği anlamına gelir. Bu birkaç yüz bayt pahasına sabitlenebilir, ancak neyse ki verilen oyunlardaki her "ACT" (en azından kontrol ettiğim birkaç tane) bir sahnenin başlangıcı gibi görünüyor.

Yukarıda bağlı 1.2.1 SPL ile test edilmiştir. Web tercümanı üzerinde çalışıp çalışmayacağından emin değilim. Test için kullanılan komut dosyası:

#!/bin/bash
set -e
SCRIPT_DIR=`dirname "$0"`
cd "$SCRIPT_DIR"
spl/bin/spl2c <splits.spl >splits.c
gcc -O2 -Wall -Wno-unused -I./spl/include -L./spl/lib -lm -lspl -o splits splits.c
./splits <measureforemeasure >measure.split.txt

Sözdizimini geçtikten sonra SPL'nin "ezoterik" bölümleri, değişkenlerin "sahne" üzerinde karıştırılmasıdır (genellikle, bir seferde yalnızca iki karakter olmasını istersiniz) ve sabit sayıların gösterimi. Dağıtımla birlikte gelen 6 kelime içe aktarma listesi vardır: pozitif sıfatlar, nötr sıfatlar, negatif sıfatlar, pozitif isimler, nötr isimler ve negatif isimler. Pozitif / nötr bir isim (yani erik veya taş duvar) 1 ve negatif bir isim (yani flört-solungaç veya Microsoft) -1'dir. Pozitif / nötr sıfatlar (yani işlemeli veya dipsiz) sayıyı 2 ile, negatif sıfatlar (yani yağ böbrekli veya babasız) -2 ile çarpar. Kelime listeleri ne yazık ki oldukça sınırlıdır ve her biri sadece 10-20 girişten oluşur.

Bir sonraki toplantımda, tüm üretim kodumuzu Shakespeare'e taşımamızı önereceğim çünkü Scala'dan çok daha etkileyici.


2
Golf bu mümkün olduğunca. Lütfen!
wizzwizz4

1
Kutsal kediler, kimsenin gerçekten yapamayacağını sanmıyordum! Bunu 24 saat içinde ödüllendireceğim, en kısa zamanda :)
kedi

2
@ wizzwizz4 - kesinlikle; Gerçek bir işim yokken denerim :-). Ozan tarafından yazılmış gibi kısa ve öz olacaktır
Robert Fraser

2
Şimdi, bunu sahnede yapmak için kim kiralayabilirim?
kedi

3
@cat - Sadece kiloları konusunda güvensiz olan üç kişiyi alın ve onlara bir kedi resmi gösterin.
Robert Fraser

12

Retina ,% 9 - 10 = 8.1 bayt

Bayt sayımı ISO 8859-1 kodlamasını varsayar.

¶ACT 
=$0

=Her ACTbirinin önüne bir satır besleme ve ardından bir boşluk gelen a (ayırıcı olarak) ekler .

Çevrimiçi deneyin! (Ancak boyutu nedeniyle girişi kendiniz kopyalamanız gerekir.)


69000 yanıtını tebrik ediyoruz (paylaşım bağlantısına göre).
J_F_B_M

@J_F_B_M Post 69000. Bu sorular ve cevaplar.
wizzwizz4

4

awk, 51 * .9 * .85 * .8 = 31,2

Birden çok dosyaya böler. Çıkışlar a ile stdoutayrılmış =.

/^ACT/{f++;$0="="$0}{system("echo \""$0"\">>"f*1)}1

+1 Şimdi tek yapmanız gereken, stdoutbelirli bir karakterle ayrılmış tüm dosyaların çıktısını almaktır.
wizzwizz4

Bitti. Bonus ile neredeyse aynı uzunluktadır.
Rainer P.

+2 ... +2 ........ +2 ............ Hayır. Sistem buna izin vermiyor :-( Ancak onları bir karakterle ayırmanızı tavsiye ederim yani daha az . | ortak gibi ¬ ya
wizzwizz4

3

JavaScript ES6,% 28 - 10 = 25,2 bayt

s=>s.replace(/\nACT/g,"=$&")

JS kabuğunda bile dosya G / Ç'si bulunmadığından, bu% -20 bonus kazanamaz

Buradan çevrimiçi deneyin (girişi kendinize yapıştırmanız gerekir)


Sanırım Tkaydedilen bir bayt'ı çıkarabilirsin .
Mama Fun Roll

Değiştirilen ACT hattını çıkarmıyor mu?
wizzwizz4

@ wizzwizz4 çünkü $&olmayacak
Downgoat

@ Doᴡɴɢᴏᴀᴛ Her gün yeni bir şeyler öğreniyorsun!
wizzwizz4

3

Perl,% 66-10 -% 20 = 47.52 bayt

BEGIN{open(S,">0");}++$?,open(S,">$?"),print"=\n"if/^ACT/;print S

-pSeçenek için bir tane eklendi .


1

Yakut,% 30 -% 10 -% 15 = 23.715 22,95 bayt

Girişi ayırır $. % 15 bonus uygulanır çünkü Ruby , sağlanmışsa veya verilmemişse varsayılan olarak $<aktarılan dosyayı işaret eder .ARGVSTDIN

gsub@Downgoat ES6 çözümüne benzer şekilde kaldırarak -1 bayt, ancak yine de ACTbaşka bir kelimenin içinde değil, sadece ACT etiketlerinde görünen umudu kullanıyorum , çünkü

$><<$<.read.gsub("ACT","$ACT")

Ayrıca, benim 41.004 (aslında 67) bayt çözümü de dosya çıkışı yapar. Muhtemelen eachkomutun mapRuby'de bayt kaydettiği tek zamanın yıldızı, çünkü eachbloğu çalıştırdıktan sonra bloke edilmeden geçirilen diziyi döndürür map.

i=-1;$><<$<.read.split(/(?=ACT)/).each{|s|open("#{i+=1}",?w)<<s}*?$
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.