William Shakespeare menulis drama. Banyak permainan. Dalam tarball ini yang berisi setiap karya-karyanya, setiap permainannya adalah satu file yang panjang.
Itu perlu dibagi menjadi Adegan untuk produksi panggung. Karena aktor tidak sabar, kode Anda harus sesingkat mungkin.
Tugas:
Tugas Anda adalah menulis sebuah program atau fungsi untuk membagi permainan yang terkandung dalam file ini menjadi file-file terpisah, diberi nomor mulai dari 1
mana, masing-masing berisi adegan. Anda harus mempertahankan semua spasi dan judul.
Memasukkan:
Input akan berupa pemutaran tunggal stdin
, atau nama file sebagai parameter. Kamu bisa memilih. Drama akan terlihat seperti:
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
[...]
Keluaran:
Outputnya akan terlihat seperti ini:
ACT I ADEGAN I Roma. Sebelum Capitol. [Makam ANDRONICI muncul; Tribunes dan Senator tinggi-tinggi. Masukkan, di bawah, dari satu sisi, SATURNINUS dan Pengikutnya; dan, dari yang lain sisi, BASSIANUS dan para Pengikutnya; dengan drum dan warna] SATURNINUS Ahli ningrat yang mulia ...
ACT I SCENE II Hutan di dekat Roma. Klakson dan teriakan anjing terdengar. [Masukkan TITUS ANDRONICUS, dengan Hunters, & c., MARCUS, LUCIUS, QUINTUS, dan MARTIUS] TITUS ANDRONICUS Perburuan habis, pagi cerah dan abu-abu, Lapangan adalah ...
ACT II ADEGAN I Roma. Sebelum Istana. [Masukkan AARON] AARON Sekarang naik Tamora ...
dll.
Keluaran baik ke file bernomor, atau ke stdout
aliran (kembali untuk fungsi) dengan pembatas pilihan Anda.
Bonus:
- 10% Jika Anda menyimpan bit sebelum Babak 1 ke dalam file
0
. Catatan: Tidak boleh rusak jika bit sebelum Act 1 kosong. - 15% Jika Anda dapat mengambil keduanya
stdin
dan input parameter path file - 20% Jika Anda dapat menampilkan file dan
stdout
/ kembali. 200 reputasi jika Anda dapat membuat program SPL terkecil.Karunia ini telah diberikan.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](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>
Jawaban:
Bahasa Pemrograman Shakespeare 1.2.1 ,
930895887 - 10% = 798,3 byteTidak disatukan dan ditulis ulang dalam bahasa Sharkspearean:
Dalam psuedocode mirip C:
Membutuhkan file input minimal mengandung 3 karakter. Menggunakan "@" sebagai pembatas dan melaporkan hasil ke stdout. Saya mengambil bonus 10% karena bagian sebelum adegan pertama akan sebelum "@" pertama, seperti solusi Martin Büttner di atas.
Cara kerjanya adalah dengan meletakkan "@" jika ia melihat tiga karakter "ACT" berturut-turut. Perhatikan ini berarti akan mengubah "ENACTED" menjadi "EN @ ACTED". Ini dapat diperbaiki dengan biaya beberapa ratus byte, tetapi untungnya tampaknya setiap "ACT" dalam drama yang diberikan (setidaknya beberapa yang saya periksa) adalah awal dari sebuah adegan.
Diuji dengan 1.2.1 SPL yang ditautkan di atas. Saya tidak yakin apakah itu akan berfungsi pada juru bahasa web. Script yang digunakan untuk pengujian adalah:
Bagian "esoterik" dari SPL setelah Anda melewati sintaks adalah pengocokan variabel pada "panggung" (umumnya, Anda hanya ingin memiliki dua karakter di atas panggung pada suatu waktu) dan representasi angka konstan. Ada 6 daftar kata impor yang disertakan dengan distribusi: kata sifat positif, kata sifat netral, kata sifat negatif, kata benda positif, kata benda netral, dan kata benda negatif. Kata benda positif / netral (yaitu prem atau dinding batu) adalah 1, dan kata benda negatif (yaitu flirt-gill atau Microsoft) adalah -1. Kata sifat positif / netral (yaitu sulaman atau jurang) mengalikan angka dengan 2, dan kata sifat negatif (yaitu lemak-ginjal atau tanpa ayah) dikalikan dengan -2. Sedih kata daftar agak terbatas, dengan hanya 10-20 entri masing-masing.
Pada pertemuan saya berikutnya, saya akan menyarankan agar kami memindahkan semua kode produksi kami ke Shakespeare karena jauh lebih ekspresif daripada Scala.
sumber
Retina , 9 - 10% = 8,1 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Menyisipkan a
=
(sebagai pembatas) di depan setiapACT
yang didahului oleh linefeed dan diikuti oleh spasi.Cobalah online! (Tetapi Anda harus menyalin sendiri input karena ukurannya.)
sumber
awk, 51 * .9 * .85 * .8 = 31.2
Membagi menjadi beberapa file. Output pada
stdout
dipisahkan oleh a=
.sumber
stdout
dipisahkan oleh karakter tertentu, dan Anda selesai!JavaScript ES6, 28 - 10% = 25,2 byte
Bahkan shell JS tidak memiliki file I / O sehingga ini tidak memenuhi syarat untuk bonus -20%
Coba online di sini (Anda harus menempelkan input ke diri Anda sendiri)
sumber
T
untuk satu byte yang disimpan.$&
tidak akanPerl, 66 - 10% - 20% = 47,52 byte
Menambahkan satu untuk
-p
opsi.sumber
Ruby, 30 - 10% - 15% =
23.71522,95 byteMembagi input aktif
$
. Bonus 15% berlaku karena Ruby mengalihkan$<
ke file yang diteruskanARGV
secara default jika disediakan, atauSTDIN
jika tidak.-1 byte dengan memanfaatkan
gsub
mirip dengan solusi @Downgoat ES6 tapi saya masih memanfaatkan harapan yangACT
hanya pernah muncul di label ACT dan tidak di dalam kata lain, hanya karenaJuga, solusi byte 41,004 saya (awalnya 67) yang juga melakukan output file. Dibintangi mungkin satu-satunya saat
each
perintah menyimpan byte dimap
dalam Ruby, karenaeach
mengembalikan array yang dilewatkan secara tidak murni setelah menjalankan bloknya, tidak sepertimap
.sumber