एक शेक्सपियर स्क्रिप्ट को विभाजित करें


13

श्री विलियम शेक्सपियर ने नाटक लिखे। ढेर सारे नाटक। इस टारबॉल में उनके हर एक काम, उनके हर एक नाटक की एक लंबी फाइल है।
इसे एक मंच निर्माण के लिए दृश्यों में विभाजित किया जाना चाहिए। क्योंकि अभिनेता अधीर हैं, आपके कोड को यथासंभव छोटा होना चाहिए।

कार्य:

आपका कार्य इस फाइल में निहित नाटकों को अलग-अलग फाइलों में विभाजित करने के लिए एक प्रोग्राम या फ़ंक्शन लिखना है , क्रमिक रूप से शुरू की गई 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
[...]

आउटपुट:

आउटपुट कुछ इस तरह दिखना चाहिए:

अधिनियम मैं



SCENE I रोम। कैपिटल से पहले।


    [ANDRONICI दिखने का मकबरा; द ट्रिब्यून
    और सीनेटरों को अलग। एक ओर से, नीचे, दर्ज करें
    SATURNINUS और उनके अनुयायी; और, दूसरे से
    पक्ष, बासबांस और उनके अनुयायी; ड्रम और रंगों के साथ]

सत्यानुश महानुभावों ...
अधिनियम मैं



SCENE II रोम के पास एक जंगल। सींग और रोने की आवाज सुनी।


    [शिकारी, और सी।, मार्कस के साथ TITUS ANDRONICUS दर्ज करें,
    LUCIUS, QUINTUS, और MARTIUS]

TITUS ANDRONICUS शिकार ऊपर है, सुबह उज्ज्वल और ग्रे है,
    खेत हैं ...
अधिनियम II



SCENE I रोम। पैलेस से पहले।


    [AARON दर्ज करें]

AARON अब चढ़ाई तमोरा ...

आदि।

stdoutअपनी पसंद के अपराधी के साथ या तो क्रमांकित फ़ाइलों में, या स्ट्रीम (कार्यों के लिए वापस) में आउटपुट करें।

बोनस:

  • 10% यदि आप फ़ाइल में अधिनियम 1 से पहले थोड़ा बचाते हैं 0। नोट: यदि अधिनियम 1 से पहले बिट खाली है तो उसे नहीं तोड़ना चाहिए।
  • 15% यदि आप दोनों stdinऔर फ़ाइल पथ पैरामीटर इनपुट ले सकते हैं
  • 20% यदि आप दोनों फाइलों में और stdout/ वापस करने के लिए उत्पादन कर सकते हैं।
  • 200 प्रतिष्ठा यदि आप सबसे छोटा एसपीएल कार्यक्रम बना सकते हैं। इस इनाम से सम्मानित किया गया है।

लीडरबोर्ड

यहां एक नियमित लीडरबोर्ड और भाषा के अनुसार विजेताओं का अवलोकन करने के लिए एक स्टैक स्निपेट है।

यह सुनिश्चित करने के लिए कि आपका उत्तर दिखाई दे रहा है, कृपया अपना उत्तर शीर्षक मार्कडाउन टेम्पलेट का उपयोग करके शीर्षक के साथ शुरू करें:

# 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>


16
मैं पहले मान्य शेक्सपियर प्रोग्रामिंग लैंग्वेज सबमिशन के लिए +200 का इनाम दूंगा।
बिल्ली

3
चलो, सब जानते हैं कि कोडगुल्फ़ तेज़ नहीं हैं। यह क्यों नहीं कहा कि "टारबॉल पहले से ही बहुत भरा हुआ है, इसलिए आपका कोड जितना संभव हो उतना कम होना चाहिए"?
J_F_B_M

1
@trichoplax उत्पाद। मैंने सोचा था कि हर कोई इसे कैसे करता है! नोटबुक में पार कर गया
wizzwizz4

1
@ आप यहाँ जाओ! codegolf.stackexchange.com/a/69360/43394
wizzwizz4

2
@ कैट - इसे खुला छोड़ दें; मुझे यकीन है कि मेरे मुकाबले छोटे शेक्सपियर समाधान हैं। खान एक मोटी बड़ी बिल्ली और एक बिल्ली के योग के रूप में मोटी है।
राबर्ट फ्रेजर

जवाबों:


38

शेक्सपियर प्रोग्रामिंग लैंग्वेज 1.2.1 , 930 895 887 - 10% = 798.3 बाइट्स

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.

Ungolfed और Sharkspearean भाषा में फिर से लिखा गया:

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.

सी-लाइक प्यूसेकोड में:

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)

इनपुट फ़ाइल में कम से कम 3 वर्णों की आवश्यकता होती है। "@" को एक सीमांकक के रूप में उपयोग करता है और परिणाम को रोक देता है। मैं पहले दृश्य "@" से पहले वाले भाग के बाद से 10% बोनस ले रहा हूं, जो मार्टिन बर्टनर के ऊपर दिए गए समाधान की तरह है।

जिस तरह से यह काम करता है वह एक "@" डालना है अगर यह एक पंक्ति में तीन वर्ण "एसीटी" देखता है। ध्यान दें कि इसका अर्थ है "ENACTED" को "EN @ ACTED" में बदलना। यह कुछ सौ बाइट्स की कीमत पर तय किया जा सकता है, लेकिन सौभाग्य से ऐसा लगता है कि दिए गए नाटकों में हर "एसीटी" (कम से कम मैंने कुछ की जाँच की) एक दृश्य की शुरुआत थी।

ऊपर दिए गए 1.2.1 एसपीएल के साथ परीक्षण किया गया। मुझे यकीन नहीं है कि यह वेब दुभाषिया पर काम करेगा। परीक्षण के लिए इस्तेमाल की गई स्क्रिप्ट थी:

#!/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

एसपीएल के "गूढ़" भागों को एक बार जब आप सिंटैक्स से निकालते हैं, तो "स्टेज" पर वेरिएबल्स का फेरबदल होता है (आम तौर पर, आप केवल एक समय में स्टेज पर दो वर्ण चाहते हैं) और निरंतर संख्याओं का प्रतिनिधित्व करते हैं। आयात के साथ 6 शब्द सूची हैं जो वितरण के साथ आते हैं: सकारात्मक विशेषण, तटस्थ विशेषण, नकारात्मक विशेषण, सकारात्मक संज्ञा, तटस्थ संज्ञा और नकारात्मक संज्ञा। एक सकारात्मक / तटस्थ संज्ञा (यानी बेर या पत्थर की दीवार) 1 है, और एक नकारात्मक संज्ञा (यानी फ्लर्ट-गिल या माइक्रोसॉफ्ट) -1 है। सकारात्मक / तटस्थ विशेषण (यानी कशीदाकारी या अथाह) संख्या को 2 से गुणा करें, और नकारात्मक विशेषण (यानी वसा-गुर्दे या पिता रहित) को 2 से गुणा करें। शब्द सूचियाँ केवल 10-20 प्रविष्टियों के साथ दु: खद रूप से सीमित हैं।

मेरी अगली बैठक में, मैं सुझाव दूंगा कि हम अपने सभी उत्पादन कोड शेक्सपियर में स्थानांतरित करें क्योंकि यह स्काला की तुलना में कहीं अधिक अभिव्यंजक है।


2
इसे जितना हो सके उतना गोल्फ करें। कृप्या!
wizzwizz4

1
पवित्र बिल्लियों, मुझे नहीं लगता था कि कोई भी वास्तव में होगा! मैं इसे 24 घंटे में पुरस्कृत करूंगा, जो जल्द से जल्द होगा :)
बिल्ली

2
@ wizzwizz4 - निश्चित रूप से; जब मैं असली काम करने के लिए नहीं है मैं इसे एक शॉट दूँगा :-)। यह उतना ही सफल होगा जितना कि खुद बार्ड द्वारा लिखा गया था
रॉबर्ट फ्रेजर

2
अब, मैं इसे मंच पर प्रदर्शन करने के लिए कौन रख सकता हूं?
बिल्ली

3
@ कोट - बस तीन लोग मिलें जो अपने वजन को लेकर असुरक्षित हैं और उन्हें बिल्ली की तस्वीर दिखाते हैं।
रॉबर्ट फ्रेजर

12

रेटिना , 9 - 10% = 8.1 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

¶ACT 
=$0

=प्रत्येक के सामने एक (एक सीमांकक के रूप में) सम्मिलित करता है जो ACTएक लाइनफीड से पहले होता है और उसके बाद एक स्थान होता है।

इसे ऑनलाइन आज़माएं! (लेकिन आपको इसके आकार के कारण इनपुट में खुद को कॉपी करना होगा।)


69000 (शेयर-लिंक के अनुसार) जवाब देने के लिए बधाई।
J_F_B_M 1

@J_F_B_M पोस्ट 69000। यह सवाल और जवाब है।
wizzwizz4

4

awk, 51 * .9 * .85 * .8 = 31.2

कई फाइलों में बंट जाता है। stdoutएक पर अलग से आउटपुट =

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

+1 अब आपको केवल stdoutएक विशिष्ट वर्ण द्वारा अलग की गई सभी फ़ाइलों को आउटपुट करने की आवश्यकता है , और आप कर रहे हैं!
wizzwizz4

किया हुआ। बोनस के साथ यह लगभग समान लंबाई है।
रेनर पी।

+2 ... +2 ........ +2 ............ नहीं। प्रणाली इसकी अनुमति नहीं देती है :-( लेकिन मैं उन्हें एक चरित्र के साथ अलग करने की सिफारिश करूंगा वह भी कम सामान्य है, जैसे कि ¬ या -।
wizzwizz4

3

जावास्क्रिप्ट ईएस 6, 28 - 10% = 25.2 बाइट्स

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

जेएस शेल में फ़ाइल I / O भी नहीं है, इसलिए यह -20% बोनस के लिए अर्हता प्राप्त नहीं कर सकता है

इसे यहाँ ऑनलाइन आज़माएँ (आपको अपने आप में इनपुट पेस्ट करना होगा)


मुझे लगता है कि आप Tबचाए गए एक बाइट के लिए बाहर ले जा सकते हैं ।
मामा फन रोल

एसीटी लाइन को हटाने की जगह नहीं है?
wizzwizz4

@ wizzwizz4 क्योंकि मेरे पास $&यह नहीं है
डाउनगेट

@ Do @ आप हर दिन कुछ नया सीखते हैं!
wizzwizz4

3

पर्ल, 66 - 10% - 20% = 47.52 बाइट्स

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

-pविकल्प के लिए एक जोड़ा गया ।


1

रूबी, 30 - 10% - 15% = 23.715 22.95 बाइट्स

इनपुट पर विभाजन करता है $। 15% बोनस लागू होता है क्योंकि रूबी पुनर्निर्देशित $<करता है कि फ़ाइल ARGVको डिफ़ॉल्ट रूप से पारित किया गया है यदि यह आपूर्ति की जाती है, या STDINयदि नहीं।

-1 बाइट gsub@Downgoat ES6 सॉल्यूशन के समान है लेकिन मैं अभी भी इस आशा का लाभ उठा रहा हूं कि ACTकेवल एक्ट लेबल पर दिखाई देता है और किसी अन्य शब्द के अंदर नहीं, सिर्फ इसलिए

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

इसके अलावा, मेरा 41.004 (मूल रूप से 67) बाइट समाधान जो फ़ाइल आउटपुट भी करता है। अभिनीत संभवतया केवल एक ही समय में रूबी में eachकमांड बाइट्स बचाता है map, क्योंकि eachइसके ब्लॉक को चलाने के बाद, असंबद्ध में पारित सरणी को इसके विपरीत देता है map

i=-1;$><<$<.read.split(/(?=ACT)/).each{|s|open("#{i+=1}",?w)<<s}*?$
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.