क्रिसमस गीत के 12 दिन


17

मुझे लगा कि यह हर किसी के लिए एक मजेदार चुनौती होगी और लोगों के समाधानों को देखने के लिए उत्सुक हूं।

"क्रिसमस के 12 दिन" गीत प्रिंट करें

On the first day of Christmas, 
my true love gave to me,
A partridge in a pear tree. 

On the second day of Christmas, 
my true love gave to me,
Two turtle doves, 
And a partridge in a pear tree. 

...

On the twelfth day of Christmas,
My true love gave to me,
Twelve drummers drumming,
Eleven pipers piping,
Ten lords-a-leaping,
Nine ladies dancing,
Eight maids-a-milking,
Seven swans-a-swimming,
Six geese-a-laying,
Five golden rings,
Four calling birds,
Three french hens,
Two turtle doves,
And a partridge in a pear tree.

नियम

  • आपको पूंजीकरण के बारे में चिंता करने की ज़रूरत नहीं है; संपूर्ण पाठ असंवेदनशील हो सकता है
  • आप किसी भी विराम चिह्न को समझदारी से अनदेखा कर सकते हैं: हाइफ़न रिक्त स्थान हो सकते हैं, और अल्पविराम और अवधि को अनदेखा किया जा सकता है
  • प्रत्येक कविता के बीच एक रिक्त रेखा होनी चाहिए
  • आपको अपनी संख्याओं को क्रमबद्ध करना होगा: " क्रिसमस का पहला दिन", " चार बुला पक्षी", आदि

3
क्या आप प्रत्येक पंक्ति का पूर्ण संस्करण प्रदान कर सकते हैं? मुझे "मेरे सच्चे प्यार ने मुझे दिया " और विभिन्न संस्करणों के उपयोग से समाधान प्रभावित हो सकते हैं।
मैथ्यू पढ़ें

अद्यतन पूर्ण गीत।
20

क्या यह कि "आप वाक्य की राजधानियों को गिरा सकते हैं" या "पूरा पाठ असंवेदनशील है" इस तरह के पूंजीकरण की चिंता नहीं है?
जेबी

इसके अलावा, विराम चिह्नों को अनदेखा करने की पंक्ति में, क्या हम व्हाट्सएप (और पारस्परिक रूप से) के लिए विराम चिह्न को इंटरचेंज कर सकते हैं?
जेबी

1
@macek: बेहतर, लेकिन मेरे सवाल का अव्यक्त पक्ष यह था: क्या मैं रिक्त स्थान के बजाय हाइफ़न भी प्रिंट कर सकता हूं?
JB

जवाबों:


23

ब्रेनफक - 2,974

मुझे इस पर गर्व है। यह एक बहुत बड़ी संख्या की तरह लगता है, लेकिन ध्यान रखें, मैंने किसी भी बाहरी संपीड़न पुस्तकालयों का उपयोग नहीं किया, और मूल पाठ में से कोई भी मेरे कार्यक्रम में कहीं भी नहीं है। अन्य सबमिशन में से कोई भी ऐसा नहीं कह सकता। यह सब हाथ का कूट है। अधिक भोले पाठ जनरेटर इस पाठ के लिए 39k से अधिक देते हैं, इसलिए मैं कहूंगा कि यह एक महत्वपूर्ण सुधार है।

>--[<->+++++]<---[>+>+>+>+>+<<<<<-]++++++++++>>[+++++>]<<<[+++++>]<<[+
++++>]<+++++>>++++[<++++++++>-]++++++++++++>+>+>>>>>>>>>>>>>+<<<<<<<<<
<<<<<<[<<<<++.-.->>>.<<++.--<<.<++.-->>>>>.>>>>>>>>>>>>>>[<<<<<<<<<<<<
<<<<++.>.<<<<++.-->>-.+<--.++>>.--<<.>>>>.>>>>>>>>>>>>>>-]<[<<<<<<<<<<
<<<<<<<<++.>>-.<<.>>>>-.+<<<<.-->>++.>++.--<<.>->>>.>>>>>>>>>>>>>>+<-]
<[<<<<<<<<<<<<<<++.<<<++.-->>+.->.--<<.>>>>.>>>>>>>>>>>>>+<-]<[<<<<<<<
<<<<<<<+.<+.>.->++.--<<-.>>>>.>>>>>>>>>>>>+<-]<[<<<<<<<<<<<<<<<++.-->+
.--.+.>>++.--<<.>>>>.>>>>>>>>>>>+<-]<[<<<<<<<<<<<+.<<<++.>>>>-.+<<<<.-
->>+.->+.--<<.>>>>.>>>>>>>>>>+<-]<[<<<<<<<<<<+.<<+.>>>+.-<+.--<<-.>>>>
.>>>>>>>>>+<-]<[<<<<<<<<<<<--.+++.---.>>++.--<<++.>>>>.>>>>>>>>+<-]<[<
<<<<<<<<<--.>++.-->>--.++<.++.--<<++.>>>>.>>>>>>>+<-]<[<<<<<<<++.<<.+.
->>--.<<<+.->>>>>.>>>>>>+<-]<[<<<<<<+.-<<<++.--.>>++.-.-<<+.->>>>>.>>>
>>+<-]<[<<<<<<<--.+++.->>.+.+.-->>.>>>>+<-]<<<<<<<<+.---.>>>>++.>.<<<+
+.<--.>>>>.<<<<<++.>++.>>.<<+.>>+.+.<--.<<--.>>>-.>>.<<<.>>.>.<<+.--.>
----.<<<<++++.>>>>>.<<<-.+++.>>+.<<<<.>>>>>.<<<<--.<----.>>>>.<<<<++++
.>>>>>.<<++.<.>>>.<<<--.<<.>>>>>.<<<<<-->+>>-->+>>>>>>>>>>>>>>>>>>>>>>
>>>>>>[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<++.>.<<<<++.>>-.>>-.<<<<.->>>>>.<<
<<<.>>>--.>-.<<+..<<+.>>>.+.>>.<<<<<-.->>>-.>.<<..<+.>+.-<--.+>>>++>.>
>>>>>>>>>>>>>>>>>>>>>>>>>>-]<[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<++.>>-.<<
.>>>>-.+<<<<.>>++.>>>.<<--.<<+.>>.<<<.-->>>++.+.>>.<<---.<<.>>.++<<.>.
-<--.+>>>>.>>>>>>>>>>>>>>>>>>>>>>>>>>-]<[<<<<<<<<<<<<<<<<<<<<<<<<<<<++
.<<<++.>>+.>>>.<<<--.+++.>--.<<<-.>>>+.>>.<<<<<---.>>>>>.<<<---.<<++++
.----.++>>>---.++<<+.>++.-<--.+>>>>.>>>>>>>>>>>>>>>>>>>>>>>>>-]<[<<<<<
<<<<<<<<<<<<<<<<<<<<<<+.<+.>.<<++.>>>>>.<<<--.<<----.+++.>.<+.>>>+.->>
.<<<<<-.---.>>++.<<++.>.>.-<--.+>>>>.>>>>>>>>>>>>>>>>>>>>>>>>-]<[<<<<<
<<<<<<<<<<<<<<<<<<<<<<<++.>+.--.+.>>++.>>.<<<.<<----.>+.<+++.>>>-.->>.
<<<<<---.++>>>>>.<<<.<.>-.-.<.>+++.-<--.+>>>>.>>>>>>>>>>>>>>>>>>>>>>>-
]<[<<<<<<<<<<<<<<<<<<<<<<<<+.<<<++.>>>>-.<<<<.>>+.>>>.<<.>+.<<<<----.>
>.>.>>.<<<<<.++>>>>>.<<.->.<<<+.>-..<.>+.-<--.+>>>>.>>>>>>>>>>>>>>>>>>
>>>>-]<[<<<<<<<<<<<<<<<<<<<<<<<+.<<+.>>>+.>.<<<<--.<++..>>>.-<<<.>>>>>
.<<<<<----.>>>>>.<<<-.<<.++>>>>+.--<<<++.>++.-<--.+>>>>.>>>>>>>>>>>>>>
>>>>>>>-]<[<<<<<<<<<<<<<<<<<<<<<<<<--.+++.>>>-.+<<<<++.>>>>>.<<<<--.>+
+.---.<<-.+.-->>++.>>>.<<.<<++.>.-<--.+>>+.->>.>>>>>>>>>>>>>>>>>>>>-]<
[<<<<<<<<<<<<<<<<<<<<<<<--.>++.>>--.++<.>>.<<<<<.--.>>---..<+++.>++.-<
--.>>>>.<<<<<+.>++.->>.<<<++.->>>+.->>.>>>>>>>>>>>>>>>>>>>-]<[<<<<<<<<
<<<<<<<<<<<<++.<<.>>--.<<<++..>>>>>.<<<<--.>>.<<<.>>+.<<--.>++.>>>>.<<
<<.<++.-->>.->+.->>.>>>>>>>>>>>>>>>>>>-]<[<<<<<<<<<<<<<<<<<<<++.>.<<++
.>>>.<<.>--.<--.++.<---.<<++.>>>>>.<<<<<-.>>+++.>>+.<<<<+.>>>-.>>.<<<<
<----.>>-.-<<+++.->>>->+>.>>>>>>>>>>>>>>>>>-]<[<<<<<<<<<<<<<<<<<<<<<--
.>>>>>.<<--.<<<.>>>++.++.--.<<+.<+++.>--.<+.>>>>>.<<<<++.>+.>>>.<<<<<-
---.>>>>>.<<<++.<<++++.----.>>>.>>.<<++.--.<<<++++..>>>>>.<<<<<-->->--
->>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<<<<..>>>>>>>->+[>+>>>>>>>>>>>
>>[>]+[<]<<<<<<<<<<<<<-]>[<+>-]<<]

दुर्भाग्य से, यह लगभग 600 वर्ण अपने स्वयं के आउटपुट से अधिक लंबा है, लेकिन जो भी हो। यह वर्णों को c, h, m, r, w में एक सरणी में रखता है, और इसका उपयोग सभी पाठ को प्रिंट करने के लिए करता है। बारह रिक्त स्थान के दाईं ओर दो सरणियाँ गिनती के लिए हम किस दिन का ट्रैक रखते हैं, और किन वस्तुओं का हम आउटपुट कर सकते हैं। मैं स्मृति मैप का पुनर्गठन से यह थोड़ा अनुकूलन करने के लिए दो गणना सरणियों के बीच में मुद्रण पात्रों लाने के लिए इस तरह के लंबी श्रृंखला से बचने के लिए सक्षम हो सकता है <<<<<<<और>>>>>> है, लेकिन वह इस बिंदु पर बहुत काम किया जाएगा। मैं शायद इन्क्रिमेंटिंग / डेक्रिमेंटिंग को कम करने के लिए फ़्रीक्वेंसी एनालिसिस के साथ कुछ बेहतर सीड कैरेक्टर्स भी चुन सकता था, लेकिन जो भी हो।

यह ठीक से काम करने के लिए 8-बिट रैपिंग कोशिकाओं पर निर्भर करता है।

Ungolfed:

>--[<->+++++]<---

[>+>+>+>+>+<<<<<-]++++++++++
>>[+++++>]<<<[+++++>]<<[+++++>]<+++++>>
++++[<++++++++>-]
++++++++++++>+>+>>>>>>>>>>>>>+<<<<<<<<<<<<<<<
[ 
   <<<<++o.-n.->>>.<<++t.--<<h.<++e.-->>>>>.    
   >>>>>>>>>>>>>>
   12[<<<<<<<<<<<<<<<<++t.>w.<<<<++e.-->>-l.+<--f.++>>t.--<<h.>>>>.>>>>>>>>>>>>>>-]
   11<[<<<<<<<<<<<<<<<<<<++e.>>-l.<<e.>>>>-v.+<<<<e.-->>++n.>++t.--<<h.>->>>.>>>>>>>>>>>>>>+<-]
   10<[<<<<<<<<<<<<<<++t.<<<++e.-->>+n.->t.--<<h.>>>>.>>>>>>>>>>>>>+<-]
   9<[<<<<<<<<<<<< <<+n.<+i.>n.->++t.--<<-h.>>>> . >>>>>>>>>>>>+<-]
   8<[<<<<<<<<<<< <<<<++e.-->+i.--g.+h.>>++t.--<<h.>>>> . >>>>>>>>>>>+<-]
   7<[<<<<<<<<<< <+s.<<<++e.>>>>-v.+<<<<e.-->>+n.->+t.--<<h.>>>> . >>>>>>>>>>+<-]
   6<[<<<<<<<<< <+s.<<+i.>>>+x.-<+t.--<<-h.>>>> . >>>>>>>>>+<-]
   5<[<<<<<<<< <<<--f.+++i.---f.>>++t.--<<++h.>>>>. >>>>>>>>+<-]
   4<[<<<<<<< <<<--f.>++o.-->>--u.++<r.++t.--<<++h.>>>> . >>>>>>>+<-]
   3<[<<<<<< <++t.<<h.+i.->>--r.<<<+d.->>>>>.>>>>>>+<-]
   2<[<<<<<<+s.-<<<++e.--c.>>++o.-n.-<<+d.->>>>>.>>>>>+<-]
   1<[<<<<<<<--f.+++i.->>r.+s.+t.-->>.>>>>+<-]
   <<<<<<<<+d.---a.>>>>++y.>_.<<<++o.<--f.>>>>_.<<<<<++c.>++h.>>r.<<+i.>>+s.+t.
   <--m.<<--a.>>>-s.>>_.<<<m.>>y.>_.<<+t.--r.>----u.<<<<++++e.>>>>>_.
   <<<-l.+++o.>>+v.<<<<e.>>>>>_.   
   <<<<--g.<----a.>>>>v.<<<<++++e.>>>>>.
   <<++t.<o.>>>.
   <<<--m.<<e.>>>>>.
   <<<<<-->+>>-->+
   >>>>>>>>>>>>>>>>>>>>>>>>>>>>
   12[<<<<<<<<<<<<<<<<<<<<<<<<<<<<<++t.>w.<<<<++e.>>-l.>>-v.<<<<e.->>>>>.
   <<<<<d.>>>--r.>-u.<<+m.m.<<+e.>>>r.+s.>>.<<<<<-d.->>>-r.>u.<<m.m.<+i.>+n.-<--g.+>>>++>.
   >>>>>>>>>>>>>>>>>>>>>>>>>>>-]
   11<[<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<++e.>>-l.<<e.>>>>-v.+<<<<e.>>++n.>>>.
   <<--p.<<+i.>>p.<<<e.-->>>++r.+s.>>.<<---p.<<i.>>p.++<<i.>n.-<--g.+>>>>.>>>>>>>>>>>>>>>>>>>>>>>>>>-]
   10<[<<<<<<<<<<<<<<<<<<<<<<<<<< <++t.<<<++e.>>+n.>>> .<<<--
   .+++o.>--r.<<<-d.>>>+s.>>.<<<<<---a.>>>>>.<<<---l.<<++++e.----a.++>>>---p.++<<+
   i.>++n.-<--g.+>>>> .    >>>>>>>>>>>>>>>>>>>>>>>>>-]
   9< [<<<<<<<<<<<<<<<<<<<<<<<<< <<+n.<+i.>n.<<++e.>>>>> .<<<--l.<<----a.+++d.>
   i.<+e.>>>+s.->> .<<<<<-d.---a.>>++n.<<++c.>i.>n.-<--g.+>>>> . >>>>>>>>>>>>>>>>>>>>>>>>-]
   8< [<<<<<<<<<<<<<<<<<<<<<<<< <<<<++e.>+i.--g.+h.>>++t.>> .<<<m.<<----a.>+
   i.<+++d.>>>-s.->> .<<<<<---a.++>>>>> .<<<m.<i.>-l.-k.<i.>+++n.-<--g.+>>>> . >>>>>>>>>>>>>>>>>>>>>>>-]
   7< [<<<<<<<<<<<<<<<<<<<<<<< <+s.<<<++e.>>>>-v.<<<<e.>>+n.>>> .<<s.>+w.<<<<
   ----a.>>n.>s.>> .<<<<<a.++>>>>> .<<s.->w.<<<+i.>-m.m.<i.>+n.-<--g.+>>>>.  >>>>>>>>>>>>>>>>>>>>>>-]
   6< [<<<<<<<<<<<<<<<<<<<<<< <+s.<<+i.>>>+x.> .<<<<--g.<++e.e.>>>s.-<<<e.>>>>> 
   .<<<<<----a.>>>>> .<<<-l.<<a.++>>>>+y.--<<<++i.>++n.-<--g.+>>>> .  >>>>>>>>>>>>>>>>>>>>>-]
   5< [<<<<<<<<<<<<<<<<<<<<< <<<--f.+++i.>>>-v.+<<<<++e.>>>>> .<<<<--g.>++o.---
   l.<<-d.+e.-->>++n.>>> .<<r.<<++i.>n.-<--g.+>>+s.->> .   >>>>>>>>>>>>>>>>>>>>-]
   4< [<<<<<<<<<<<<<<<<<<<< <<<--f.>++o.>>--u.++<r.>> .<<<<<c.--a.>>---l.l.<+++
   i.>++n.-<--g.>>>> .<<<<<+b.>++i.->>r.<<<++d.->>>+s.->> .  >>>>>>>>>>>>>>>>>>>-]
   3< [<<<<<<<<<<<<<<<<<<< <++t.<<h.>>--r.<<<++e.e.>>>>> .<<<<--f.>>r.<<<e.>>+
   n.<<--c.>++h.>>>> .<<<<h.<++e.-->>n.->+s.->> .    >>>>>>>>>>>>>>>>>>-]
   2< [<<<<<<<<<<<<<<<<<<<++t.>w.<<++o.>>>.<<t.>--u.<--r.++t.<---l.<<++e.>>>>>.
   <<<<<-d.>>+++0.>>+v.<<<<+e.>>>-s.>>.<<<<<----a.>>-n.-<<+++d.->>>->+>.
   >>>>>>>>>>>>>>>>>-] 
   1<[<<<<<<<<<<<<<<<<<<<<<--a.>>>>>.<<p--.<<<a.>>>++r.++t.--r.<<+i.<+++d.>--g.<+
   e.>>>>>.<<<<++i.>+n.>>>.<<<<<----a.>>>>>.<<<++p.<<++++e.----a.>>>r.>>.<<++
   t.--r.<<<++++e..>>>>>.<<<<<-->->--->>>>>>>>>>>>>>>>>>>-]
   <<<<<<<<<<<<<<<<<<<<<<..>>>>>>>->+
   [>+>>>>>>>>>>>>>[>]+[<]<<<<<<<<<<<<<-]>[<+>-]<<
]

1
मैं उस आकार (गोल्फ स्कोर के लिए बेशुमार) के सबमिशन पर इनलाइन टिप्पणियाँ बर्दाश्त करूँगा। वैसे भी 1 +1।
जेबी

ज़रूर। जोड़ा गया ungolfed संस्करण। दिन की संख्या के लिए केवल एक बिट बारह में से सेट की जाती है, और आउटपुट करने के बाद अगले दिन बिट सेट होता है। मदों के लिए, अंतिम पंक्ति के बगल में n बिट्स को एक पंक्ति में उच्च और सभी सक्रिय आउटपुट प्राप्त होते हैं।
captncraig

10

पर्ल, 438 291 चार्ट

जेफ बर्गेज द्वारा DEFLATE कम्प्रेशन के प्रयोग से प्रेरित होकर , वेंटरो के कंप्रेस्ड रूबी कोड और JB के लिंगुआ का उपयोग :: EN :: नंबर , मैं डिक्रिप्ट कोड सहित 291 चार्ट (अच्छी तरह से, बाइट्स) में अपनी प्रविष्टि को कम करने में कामयाब रहा। चूंकि कार्यक्रम में कुछ गैर-मुद्रण योग्य वर्ण हैं, इसलिए मैंने इसे MIME Base64 प्रारूप में प्रदान किया है :

dXNlIENvbXByZXNzOjpabGliO2V2YWwgdW5jb21wcmVzcyAneNolkMFqAkEMhu8+RVgELdaIXmXB
S2/FFyhF4k7cHTqTsclMZd++M3pJvo+QH5JiDJ9exkKrj/PqXOKV1bod77qj9b2UeGBZ7w/bpd9s
3rCDruf3uWtwS3qS/vfROy0xsho+oWbB3d+b19YsJHWGhIHp5eQ8GzqSoWkk/xxHH36a24OkuT38
K21kNm77ND81BceCWtlgoBAq4NWrM7gpyzDhxGKQi+bA6NIfG5K4/mg0d0kgTwwdvi67JHVeKKyX
l3acoxnSDYZJveVIBnGGrIUh1BQYqZacIDKc5Gvpt1vEk3wT3EmzejcyeIGqTApZmRftR7BH3B8W
/5Aze7In

कार्यक्रम को अनएन्कोड करने के लिए, आप निम्न सहायक पर्ल स्क्रिप्ट का उपयोग कर सकते हैं:

use MIME::Base64;
print decode_base64 $_ while <>;

नाम से एक फ़ाइल में आउटपुट को सहेजें 12days.plऔर इसके साथ चलाएं perl -M5.01 12days.pl। जैसा कि कहा गया है, आपको लिंग :: EN :: नंबर मॉड्यूल काम करने के लिए कोड के लिए स्थापित करने की आवश्यकता है।

यदि आप सोच रहे हैं, तो कोड का पठनीय हिस्सा इस तरह दिखता है:

use Compress::Zlib;eval uncompress '...'

जहाँ RFC 1950 के... 254 बाइट्स के लिए पर्ल कोड संकुचित है। असम्बद्ध, कोड 361 वर्ण लंबा है और इस तरह दिखता है:

use Lingua'EN'Numbers"/e/";s==num2en(12-$i++)." "=e,y"." "for@n=qw=drummers.drumming pipers.piping lords.a.leaping ladies.dancing maids.a.milking swans.a.swimming geese.a.laying golden.rings calling.birds french.hens turtle.doves.and=;say"on the ".num2en_ordinal($_)." day of christmas my true love gave to me @n[$i--..@n]a partridge in a pear tree
"for 1..12

इस कोड को लिखना एक अजीब प्रकार का गोल्फ अभ्यास था: यह अधिकतम दोहराव को दर्शाता है और उपयोग किए जाने वाले विभिन्न वर्णों की संख्या को कम करने के लिए कच्चे वर्ण गणना को कम करने की तुलना में बहुत अधिक महत्वपूर्ण है जब संपीड़न के बाद प्रासंगिक मीट्रिक का आकार होता है ।

पिछले कुछ वर्णों को निचोड़ने के लिए, मैंने इस कोड के छोटे बदलावों को आज़माने के लिए एक सरल प्रोग्राम लिखा, जो सबसे अच्छा कंप्रेस करता है। संपीड़न के लिए, मैंने केन सिल्वरमैन की KZIP उपयोगिता का उपयोग किया , जो आमतौर पर अधिकतम संपीड़न सेटिंग्स पर भी मानक ज़ालिब की तुलना में बेहतर संपीड़न राशन (गति की लागत पर) प्राप्त करता है। बेशक, चूंकि KZIP केवल ज़िप अभिलेखागार बनाता है, मुझे तब संग्रह से कच्ची DEFLATE स्ट्रीम निकालनी थी और इसे RFC 1950 हेडर और चेकसम में लपेटना था। यहाँ मैं उस कोड का उपयोग कर रहा हूँ:

use Compress::Zlib;
use 5.010;

@c = qw(e i n s);
@q = qw( " );
@p = qw( = @ ; , );
@n = ('\n',"\n");

$best = 999;

for$A(qw(e n .)){ for$B(@q){ for$C(@q,@p){ for$D(@p){ for$E(@q,@p){ for$F(qw(- _ . N E)){ for$G("-","-"eq$F?():$F){ for$H(@c){ for$I(@c,@p){ for$N(@n){ for$X(11,"\@$I"){ for$Y('$"','" "',$F=~/\w/?$F:()){ for$Z('".num2en_ordinal($_)."'){
    $M="Lingua'EN'Numbers";
    $code = q!use MB/A/B;sDDnum2en(12-$H++).YDe,yCFC Cfor@I=qwEdrummersFdrumming pipersFpiping lordsGaGleaping ladiesFdancing maidsGaGmilking swansGaGswimming geeseGaGlaying goldenFrings callingFbirds frenchFhens turtleFdovesFandE;say"on the Z day of christmas my true love gave to me @I[$H--..X]a partridge in a pear treeN"for 1..12!.$/;
    $code =~ s/[A-Z]/${$&}/g;

    open PL, ">12days.pl" and print PL $code and close PL or die $!;
    $output = `kzipmix-20091108-linux/kzip -b0 -y 12days.pl.zip 12days.pl`;
    ($len) = ($output =~ /KSflating\s+(\d\d\d)/) or die $output;

    open ZIP, "<12days.pl.zip" and $zip = join("", <ZIP>) and close ZIP or die $!;
    ($dfl) = ($zip =~ /12days\.pl(.{$len})/s) or die "Z $len: $code";

    $dfl = "x\xDA$dfl" . pack N, adler32($code);
    $dfl =~ s/\\(?=[\\'])|'/\\$&/g;

    next if $best <= length $dfl;
    $best = length $dfl;
    $bestcode = $code;
    warn "$A$B$C$D$E$F$G$H$I $X $Y $best: $bestcode\n";

    open PL, ">12days_best.pl" and print PL "use Compress::Zlib;eval uncompress '$dfl'" and close PL or die $!;

}}}}}}
    print STDERR "$A$B$C$D$E$F\r";
}}}}}}}

यदि यह एक भयानक kluge की तरह दिखता है, तो यह इसलिए है क्योंकि यह वास्तव में यही है।


ऐतिहासिक रुचि के लिए, यहां मेरा मूल 438-चार समाधान है, जो लाइन ब्रेक और विराम चिह्न सहित अच्छे उत्पादन उत्पन्न करता है:

y/_/ /,s/G/ing/for@l=qw(twelve_drummers_drummG eleven_pipers_pipG ten_lords-a-leapG nine_ladies_dancG eight_maids-a-milkG seven_swans-a-swimmG six_geese-a-layG five_golden_rGs four_callG_birds three_french_hens two_turtle_doves);s/e?t? .*/th/,s/vt/ft/for@n=@l;@n[9..11]=qw(third second first);say map("\u$_,\n","\nOn the $n[11-$_] day of Christmas,\nMy true love gave to me",@l[-$_..-1]),$_?"And a":A," partridge in a pear tree."for 0..11

इस संस्करण की मुख्य विशेषताएं regexps की जोड़ी s/e?t? .*/th/,s/vt/ft/ , जो कार्डिनल्स से 4 से 12 के लिए उपहार लाइनों की शुरुआत में अध्यादेशों का निर्माण करती हैं।

यह कोड, निश्चित रूप से, ऊपर वर्णित Zlib चाल का उपयोग करके भी संपीड़ित किया जा सकता है, लेकिन यह पता चला है कि बस उत्पादन को संपीड़ित करना अधिक कुशल है, निम्नलिखित 338-बाइट प्रोग्राम (बेस 64 प्रारूप में, फिर से) उपज:

dXNlIENvbXByZXNzOjpabGliO3NheSB1bmNvbXByZXNzICd42uWTwU7DMAyG730KP8DGOyA0bsCB
vYBp3MYicSo7W9e3xx3ijCIQDHZIUjn683+/k3ZPAjUSDKxWIeACZYC7qGw1o226hwWqHghSORKM
6FMtkGnT3cKEWpXDSMACCBOhQlWim+7jUKO+SGg5dT8XqAetiSD4nrmPBMDPvXywtllF18OgJH2E
SGJfcR+Ky2KL/b0roMeUWEZ4cXb7biQeGol4LZQUSECdyn4A0vjUBvnMXCcYiYy2uE24ONcvgdOR
pBF9lYDNKObwNnPOTnc5kYjH2JZotyogI4c1Ueb06myXH1S48eYeWbyKgclcJr2D/dnwtfXZ7km8
qOeUiXBysP/VEUrt//LurIGJXCdSWxeHu4JW1ZnS0Ph8XOKloIecSe39w/murYdvbRU+Qyc=

मेरे पास लिरिक्स का 312-बाइट gzip आर्काइव भी है, जो उसी DEFLATE स्ट्रीम से निर्मित है। मुझे लगता है कि आप इसे "ज़कात स्क्रिप्ट" कह सकते हैं। :)


आप की तरह लग रहा जगह ले सकता है ringsके साथ rGsकरने के लिए सेव 2 वर्ण
Macek

@macek: मेरे मूल संस्करण क्योंकि मैं की जगह किया गया था मैं, नहीं कर सका में Gसाथ ing,है, लेकिन यह पता चला है कि अल्पविराम के जोड़ने बाद में वास्तव में कम है। धन्यवाद!
इल्मरी करोनें

आप '' केवल-पढ़ने के लिए मान '' त्रुटि के संशोधन से कैसे बचें?
जेफ बर्गज ने

@JeffBurdges: मूल संस्करण में? पहले एक सरणी में स्ट्रिंग्स को असाइन करके।
इल्मरी करोनें

"/ Read /local/lib/perl5/5.12.3/Compress/Zlib.pm लाइन 357 पर केवल-पढ़ने के लिए किए गए मान का संशोधन।" मैंने $_नीचे अपने अपडेट में असाइन करके इस मुद्दे को टाला ।
जेफ बर्गेज

10

आम लिस्प, 333 363

(dotimes(n 12)(format t"on-the-~:R-day-of-christmas
my-true-love-gave-to-me
~v*~@{~R-~A
~#[and-~]~}a-PARTRIDGE-IN-A-PEAR-TREE

"(1+ n)(- 22 n n)12'drummers-drumming 11'pipers-piping 10'lords-a-leaping 9'ladies-dancing 8'maids-a-milking 7'swans-a-swimming 6'geese-a-laying 5'golden-rings 4'calling-birds 3'french-hens 2'turtle-doves))

ऑर्डिनल्स को प्रारूपित करने के लिए अंतर्निहित सुविधाएं मददगार हैं, लेकिन अधिकांश संपीड़न प्रत्येक रन पर कम और कम तर्कों पर लंघन करते हुए एक ही तर्क सूची का उपयोग करने में सक्षम होते हैं।

जैसा कि टिप्पणियों में coredump ने साबित किया है , अभी भी कार्डिनल के लिए अच्छी सुविधाओं का उपयोग किया जा सकता है।


हो सकता है कि आप कुछ और बता सकें कि लाइनें "बारह", "ग्यारह", "दस" से शुरू होती हैं, ...
coredump

हो सकता है। आपका सुझाव क्या है?
जेबी

1
मुझे पहली बार उम्मीद थी कि शेष तर्कों का उपयोग किया जा सकता है, लेकिन मैंने युक्ति पढ़ी और मैं ऐसा नहीं कर सकता। मेरे पास जो शोर्ट्स हैं उनमें 333 चार्ट्स हैं:(dotimes(n 12)(format t"on-the-~:R-day-of-christmas my-true-love-gave-to-me ~v*~@{~R-~A ~#[AND-~]~}A-PARTRIDGE-IN-A-PEAR-TREE "(1+ n)(- 22 n n)12'drummers-drumming 11'pipers-piping 10'lords-a-leaping 9'ladies-dancing 8'maids-a-milking 7'swans-a-swimming 6'geese-a-laying 5'golden-rings 4'calling-birds 3'french-hens 2'turtle-doves))
coredump

अब हम बात करेंगे। मेरा सपना ऑर्डिनल के साथ स्किप काउंटर को साझा करना होगा, लेकिन मुझे ऐसा करने का कोई छोटा रास्ता नहीं मिला।
जेबी

7

जावास्क्रिप्ट 570

यह मेरी पहली बार गोल्फ है। जावास्क्रिप्ट 570

var l=["first","second","third","fourth","fifth","sixth","seventh","eigth","nineth","tenth","eleventh","twelth","Two turtle doves","Three french hens","Four calling birds","Five golden rings","Six geese-a-laying","Seven swans-a-swimming","Eight maids-a-milking","Nine ladies dancing","Ten lords-a-leaping","Eleven pipers piping","Twelve drummers drumming"];var b = "<br/>";for(var i=0;i<12;i++){var p="On the "+l[i]+"day of Christmas"+b+"My true love gave to me"+b;for(var x=i;x>0;x--)p+=l[13+x]+b;if(i>0)p+="and ";p+="a partridge in a pear tree"+b+b;document.write(p);}

6

पायथन 2.7 (465)

for k in range(12):
 print'On the %s day of Christmas\nMy true love gave to me'%'first^second^third^fourth^fifth^sixth^seventh^eighth^ninth^tenth^eleventh^twelfth'.split('^')[k]
 print'\n'.join('Twelve drummers drumm*Eleven pipers pip*Ten lords-a-leap*Nine ladies danc*Eight maids-a-milk*Seven swans-a-swimm*Six geese-a-lay*Five golden rings^Four calling birds^Three french hens^Two turtle doves and^a partridge in a pear tree^'.replace('*','ing^').split('^')[11-k:])

हालाँकि, मैंने 'और' को एक ही लाइन पर डाल दिया है जैसे कि पार्टीज के बजाय डव।


1
आपने मेरे जैसी ही वर्तनी की गलती की: यह "बारहवाँ" है
एंड्रयू शेफर्ड

खैर, कि मुझे एक और चरित्र तो बचाता है ... धन्यवाद!
दान

5

रूबी (474)

(0..11).each{|i|puts "On the #{"first^second^third^fourth^fifth^sixth^seventh^eighth^ninth^tenth^eleventh^twelfth".split("^")[i]} day of Christmas\nMy true love gave to me";puts "a partridge in a pear tree\n\n^two turtle doves and^three french hens^four calling birds^five golden rings^six geese-a-lay*Seven swans-a-swimm*Eight maids-a-milk*Nine ladies danc*Ten lords-a-leap*Eleven pipers pip*Twelve drummers drumming".gsub('*','ing^').split('^')[0..i].reverse.join("\n")}

या अधिक पठनीय रूप में (486):

(0..11).each do |i|
    puts "On the #{"first^second^third^fourth^fifth^sixth^seventh^eighth^ninth^tenth^eleventh^twelfth".split("^")[i]} day of Christmas\nMy true love gave to me"
    puts "a partridge in a pear tree\n\n^two turtle doves and^three french hens^four calling birds^five golden rings^six geese-a-lay*Seven swans-a-swimm*Eight maids-a-milk*Nine ladies danc*Ten lords-a-leap*Eleven pipers pip*Twelve drummers drumming".gsub('*','ing^').split('^')[0..i].reverse.join("\n")
end

किसी को भी एक विचार मिला कि कैसे। मैं एक समाधान के साथ नहीं आ सका


मुझे "आईएनजी" का प्रतिनिधित्व करने के लिए आपकी चाल पसंद है। आपको इसे लगभग 440 से नीचे लाने में सक्षम होना चाहिए: 12.timesइसके बजाय का उपयोग करें (0..11).each; एक एकल दो तर्कों के साथ दो पुट के साथ एक पुट के साथ करता है; क्रिसमस के दिनों के लिए% w () अंकन का उपयोग करें। अंत में, आप सूची को उल्टा करके, स्ट्रिंग के अंत में एक अतिरिक्त ^ जोड़कर, और फिर [-i..-1][0..i] के बजाय का उपयोग करके रिवर्स से छुटकारा पा सकते हैं ।
वेन कॉनराड

क्या आप "ड्रमिंग" को "ड्रम" * में नहीं बदल सकते थे?
अंडरग्राउंडोरेल

5

पर्ल, 500 485

@s=(first,second,third,fourth,fifth,sixth,seventh,eighth,ninth,tenth,eleventh,twelfth);
$;=ing;
@a=(
"Twelve drummers drumm$;",
"Eleven pipers pip$;",
"Ten lords-a-leap$;",
"Nine ladies danc$;",
"Eight maids-a-milk$;",
"Seven swans-a-swimm$;",
"Six geese-a-lay$;",
"Five golden r$;s",
"Four call$; birds",
"Three french hens",
"Two turtle doves\nAnd "
);
for(0..11){
print"\n\nOn the $s[$_] day of Christmas\nMy true love gave to me\n";
$"=$/;
print"@b";
unshift@b,pop@a;
print"A partridge in a pear tree"
}

यह मेरा पहला प्रयास है, और मुझे यकीन है कि इसे बहुत छोटा बनाया जा सकता है। लाइन ब्रेक पठनीयता के लिए हैं। इसकी तीन महत्वपूर्ण सरणियाँ हैं, जिनमें से एक प्रत्येक दिन के लिए नाम रखती है @s, जिनमें से एक उपहार की सूची (पहले एक को छोड़कर) @a, और एक वह सूची जो बंद उपहार पहले से दी गई है @b। मुख्य तंत्र यह है कि प्रत्येक दिन, यह प्रिंट करता है @bऔर फिर से एक अतिरिक्त उपहार को स्थानांतरित करता @aहै @b

500-> 485 के लिए एंड्रयू के लिए धन्यवाद


आप बदल सकते हैं ringsके साथ r$1s1 अधिक चार को बचाने के लिए
Macek

@macek मैं ऐसा नहीं कर सकता क्योंकि पर्ल sचर नाम के हिस्से के रूप में व्याख्या करेगा , और चर $isमौजूद नहीं है। (वे वास्तव में मैं लोगों के बजाय हैं, btw)
PhiNotPi

eigth->eighth
मैथ्यू

आप उस जगह को पाने के लिए $iकह सकते हैं $;। कोई भी कभी भी $;अपने इच्छित उद्देश्य के लिए उपयोग नहीं करता है।
इल्मरी करोनें

@ इल्मारिकारोन मैंने आपकी सलाह ली, लेकिन एक टाइपो तय किया, इसलिए चरित्र गिनती वही रही।
PhiNotPi

5

विम - 578 कीस्ट्रोक्स

मैंने यह कोशिश करने का फैसला किया और इसे गोल्फ करना है, क्योंकि यह इस तरह की चीज है जिसे विम-गोल्फ किया जा सकता है।

फ्रेमवर्क सम्मिलित करके प्रारंभ करें - "क्रिसमस का X दिन" कुल 12 बार लाइन (89 कीस्ट्रोक):

                                         KS   TL   GT
12iOn the X day of Christmas,<Enter>     30   30   30
my true love gave to me,<Enter>          25   55   55
and a partridge in a pear tree.<Enter>   32   87   87
<Enter><Esc>                              2   89   89

फिर, मैक्रोज़ की एक श्रृंखला का प्रदर्शन करें, जो संबंधित स्थानों में 12 के माध्यम से संख्या 2 को सम्मिलित करेगा जो उन्हें गीत (172 कीस्ट्रोक्स) के लिए होना चाहिए:

                                      KS   TL   GT
42kqmO2<Esc>9/a<Enter>q10@m           17   17  106
dw                                     2   19  108
6jqm/2<Enter>O3<Esc>jq9@m             14   33  122
/3<Enter>qm/3<Enter>O4<Esc>jq8@m      16   49  138
/4<Enter>qm/4<Enter>O5<Esc>jq7@m      16   65  154
/5<Enter>qm/5<Enter>O6<Esc>jq6@m      16   81  170
/6<Enter>qm/6<Enter>O7<Esc>jq5@m      16   97  186
/7<Enter>qm/7<Enter>O8<Esc>jq4@m      16  113  202
/8<Enter>qm/8<Enter>O9<Esc>jq3@m      16  129  218
/9<Enter>qm/9<Enter>O10<Esc>jq2@m     17  146  235
/10<Enter>qm/10<Enter>O11<Esc>jq@m    18  164  253
?11<Enter>O12<Esc>                     8  172  261

दूसरी पंक्ति पर "dw" पहली और "से छुटकारा पाने के लिए है, क्योंकि यह वहां नहीं जाता है।

फिर, सच्चा प्यार दी गई चीजों की संख्या (319 कीस्ट्रोक्स) के लिए प्रतिस्थापन की एक श्रृंखला करें:

                                       KS   TL   GT
:%s/12/twelve drummers drumming,/g     34   34  295
:%s/11/eleven pipers piping,/g         30   64  325
:%s/10/ten lords-a-leaping,/g          29   93  354
:%s/9/nine ladies dancing,/g           28  117  382
:%s/8/eight maids-a-milking,/g         30  147  412
:%s/7/seven swans-a-swimming,/g        31  178  443
:%s/6/six geese-a-laying,/g            27  205  366
:%s/5/five golden rings,/g             26  231  392
:%s/4/four calling birds,/g            27  268  419
:%s/3/three french hens,/g             26  294  445
:%s/2/two turtle doves,/g              25  319  470

और अंत में, Xक्रमिक संख्या के साथ प्रत्येक घटना की जगह :

                         KS   TL   GT
/X<Enter>sfirst<Esc>     10   10  480
nssecond<Esc>             9   18  488
nsthird<Esc>              8   27  497
nsfourth<Esc>             9   36  506
nsfifth<Esc>              8   44  514
nssixth<Esc>              8   52  522
nsseventh<Esc>           10   62  532
nseighth<Esc>             9   71  541
nsninth<Esc>              8   79  549
nstenth<Esc>              8   87  557
nseleventh<Esc>          11   98  568
nstwelfth<Esc>           10  108  578

और हम कर रहे हैं!


मुझे यकीन है कि मेरे द्वारा याद किए गए अन्य अनुकूलन हैं, लेकिन मुझे लगता है कि यह अपने आप में बहुत अच्छा है।


उह, मैं पलायन भूल गया।
जो जेड

आप प्रतिस्थापन के साथ / छ छोड़ सकते हैं, जैसे::%s/2/two turtle doves,
2xsaiko

4

सी (644)

गणना में व्हॉट्सएप का इस्तेमाल प्रस्तुतिकरण के लिए नहीं किया गया है।

#include <stdio.h>

void main() {
    char *e = "On the \0 day of Christmas my true love gave to me\0 Twelve drummers drumming Eleven pipers piping Ten lords-a-leaping Nine ladies dancing Eight maids-a-milking Seven swans-a-swimming Six geese-a-laying Five golden rings Four calling birds Three french hens Two turtle doves and A partridge in a pear tree\n\n";
    printf("%sfirst%s%s%ssecond%s%s%sthird%s%s%sfourth%s%s%sfifth%s%s%ssixth%s%s%sseventh%s%s%seighth%s%s%sninth%s%s%stenth%s%s%seleventh%s%s%stwelfth%s%s",
           e, e+8, e+276, e, e+8, e+255, e, e+8, e+237, e, e+8, e+218, e, e+8, e+200, e, e+8, e+181, e, e+8, e+158, e, e+8, e+136, e, e+8, e+116, e, e+8, e+96, e, e+8, e+75, e, e+8, e+50);
}

आउटपुट की तरह है:

On the first day of Christmas my true love gave to me A partridge in a pear tree

...

On the twelfth day of Christmas my true love gave to me Twelve drummers drumming Eleven pipers piping Ten lords-a-leaping Nine ladies dancing Eight maids-a-milking Seven swans-a-swimming Six geese-a-laying Five golden rings Four calling birds Three french hens Two turtle doves and A partridge in a pear tree

4

पॉवरशेल, 487 453

0..11 | % {
   'On the {0} day of christmas my true love gave to me {1}`n'-f
   (
        'first^second^third^fourth^fifth^sixth^seventh^eighth^ninth^tenth^eleventh^twelfth'.Split('^')[$_],
        (
            'a partridge in a pear tree^two turtle doves and^three french hens^four calling birds^five golden rings^six geese-a-laying^Seven swans-a-swimming^Eight maids-a-milking^Nine ladies dancing^Ten lords-a-leaping^Eleven pipers piping^Twelve drummers drumming'.Split('^')[$_..0]-join' '
        )
    )
 }

एक संक्षिप्त स्ट्रिंग को विभाजित करने के विचार के लिए दान के लिए धन्यवाद ।

मैंने मूल रूप से सभी के लिए पहले कविता पर "और" पाने के लिए एक स्विचिंग स्टेटमेंट शामिल किया था। लेकिन, क्योंकि सवाल हमें विराम चिह्नों से दूर करता है, हम सिर्फ और सिर्फ "कबूतर" को जोड़ सकते हैं।

यह लाइन फ़ीड में इस प्रकार है:

On the first day of christmas my true love gave to me a partridge in a pear tree

On the second day of christmas my true love gave to me two turtle doves and a partridge in a pear tree

On the third day of christmas my true love gave to me three french hens two turtle doves and a partridge in a pear tree

बारहवीं, बारहवीं नहीं।
जॉय एडम्स

@ जोए एडम्स - मुझे सही करने और मुझे एक कम चरित्र देने के लिए धन्यवाद :-)
एंड्रयू शेफर्ड

4

पर्ल, 368 389 (कोई यूनिकोड / संपीड़न नहीं)

use Lingua::EN::Numbers"/n/";@s=qw(A-partridge-in-a-pear-tree turtle-doves french-hens calling-birds golden-rings geese-a-laying swans-a-swimming maids-a-milking ladies-dancing lords-a-leaping pipers-piping drummers-drumming);$_=$s[0];for$m(1..12){$n=num2en_ordinal$m;say"On the $n day of christmas
my true love gave to me
$_
";s/A/and a/;$_=num2en($m+1)." $s[$m]
$_"}

हर्नेसस लिंगुआ :: एन :: नंबर , हालांकि मैं 100% आश्वस्त नहीं हूं कि यह एक अच्छा विचार है जब मैं मॉड्यूल और इसके पहचानकर्ता का नाम / लंबाई देखता हूं। पर्ल की जरूरत 5.10 या बाद के संस्करण के साथ कमांड लाइन से चलती है-E स्विच के ।

संपादित करें: मामूली सुधार: एक सरणी का उपयोग करना बंद करें $_, अनावश्यक उपयोग , व्हाट्सएप का बेहतर उपयोग करें ।


+1, कूल! किसी को एक गैर-मानक मॉड्यूल का उपयोग करने के बारे में शिकायत हो सकती है, लेकिन अगर हम किसी भी भाषा का उपयोग करने की अनुमति दे रहे हैं (गोल्फस्क्रिप्ट जैसे विशेष उद्देश्य वाले सहित), तो मैं यह नहीं देखता कि "पर्ल + लिंगुंग :: एन :: नंबर" क्यों नहीं होगा ' समाधान के लिए मान्य भाषा न हो। "Acme :: 12Days" मॉड्यूल लिखना और CPAN में सबमिट करना संभवतः धोखा है। :)
इल्मरी करोनें

@ इल्मारी करोनेन जब लोग शिकायत करते हैं, तो मैं आमतौर पर "CPAN" भाषा का नाम बदल देता हूं। अक्सर नहीं होता है।
JB

2
इल्मरी, गोल्फस्क्रिप्ट एक विशेष उद्देश्य वाली भाषा नहीं है।
जॉय

2
एक "गलती से सामान्य" की तरह अधिक -उपदेश भाषा: D
JB

1
प्रिय स्वामी, लोग अब अपने स्वयं के कोड को क्यों नहीं कर सकते हैं?
JB

4

पॉवरशेल, 440

-join('On the 1 day of Christmas
my true love gave to me
1a partridge in a pear tree

1first1second1third1fourth1fifth1sixth1seventh1eighth1ninth1tenth1eleventh1twelfth1Twelve drummers drumm7Eleven pipers pip7Ten lords-a-leap7Nine ladies danc7Eight maids-a-milk7Seven swans-a-swimm7Six geese-a-lay7Five golden rings
1Four calling birds
1Three french hens
1Two turtle doves
And '-replace7,'ing
1'-split1)[(26..15|%{0
29-$_
1
$_..26-le25
2})]

यह गीत को प्रति पंक्ति कई पंक्तियों के साथ प्रश्न में दिए गए अनुसार प्रिंट करता है। यदि आवश्यकता नहीं है तो हम कुछ वर्णों को सहेज सकते हैं।


+1 होलिका बकवास। आपको यह कार्य लाइन फीड्स के साथ-साथ अंतिम पंक्ति में प्रदर्शित होने वाले "और" के साथ मिला।
एंड्रयू शेफर्ड

खैर, एक अलग पाठ को प्रिंट करना कभी भी एक विकल्प नहीं था, और अंतिम पंक्ति में "और" सभी की तरह एक ही चाल का उपयोग करता है। फिर भी, मैं लाइन ब्रेक को संरक्षित करना चाहता था जो अन्य समाधान नहीं करता है (जबकि लंबे समय तक, भी)।
जॉय

3

C # (528)

class P{static void Main(){for(int i=1;i<12;i++){Console.WriteLine("On the "+"^first^second^third^fourth^fifth^sixth^seventh^eighth^ninth^tenth^eleventh^twelfth".Split('^')[i]+" day of christmas my true love gave to me "+"a partridge in a pear tree^two turtle doves and^three french hens^four calling birds^five golden rings^six geese-a-laying^Seven swans-a-swimming^Eight maids-a-milking^Nine ladies dancing^Ten lords-a-leaping^Eleven pipers piping^Twelve drummers drumming".Split('^').Take(i).Aggregate("",(t,s)=>s+' '+t));}}}

2

जावा, 2062

मुझे पता है कि यह कुछ समय पहले पोस्ट किया गया था, लेकिन मुझे लगा कि मैं कोशिश करूंगा। मैं एक छात्र हूं और अभी भी इसके लिए नया हूं लेकिन इसका काम करना प्रतीत होता है।

public class TwelveDaysOfChristmas 
{

    public static void main(String[] args) 
    {
        String[] days = new String[12];
        days[0] = "and a partriage in a pear tree.";
        days[1] = "Two turtle doves, ";
        days[2] = "Three french hens, ";
        days[3] = "Four callings birds, ";
        days[4] = "Five diamond rings, ";
        days[5] = "Six geese a-laying, ";
        days[6] = "Seven swans a-swimming, ";
        days[7] = "Eight maids a-milking, ";
        days[8] = "Nine ladies dancing, ";
        days[9] = "Ten lords a-leaping, ";
        days[10] = "Eleven pipers piping, ";
        days[11] = "Twelve twelve drummers drumming, ";


        System.out.println(chorus(0));
        System.out.println("a partriage in a pear tree");

        for(int i = 1; i<days.length; i++)
        {
            System.out.println(chorus(i));

            for(int x = i; x>=0; x--)
            {
                System.out.println(days[x]);
            }
            System.out.println();
        }
    }

    public static String chorus(int line)
    {
        String chorus = "On the " + getLine(line) + " day of Christmas my true " +
                "love gave to me, ";

        return chorus;
    }

    public static String getLine(int line)
    {
        int num = line;
        String result = "first";
        switch (num)
        {
        case 1:  result = "second";
                 break;
        case 2:  result = "third";
                 break;
        case 3:  result = "fourth";
                 break;
        case 4:  result = "fifth";
                 break;
        case 5:  result = "sixth";
                 break;
        case 6:  result = "seventh";
                 break;
        case 7:  result = "eighth";
                 break;
        case 8:  result = "ninth";
                 break;
        case 9: result = "tenth";
                 break;
        case 10: result = "eleventh";
                 break;
        case 11: result = "twelfth";
                 break;
        }

        return result;
    }

}

हाय जीना, साइट पर आपका स्वागत है!
डायनामिक्स

3
पहले समाधान पर बधाई; ठीक काम करता है। कोड गोल्फ के साथ प्रतियोगिता 'सबसे छोटा कोड संभव' है, इसलिए इस साइट पर यह मानक है कि आप सामान्य कोड में कुछ चीजें नहीं करेंगे: चर और फ़ंक्शन नामों को एक वर्ण में काटें, व्हॉट्सएप और कुछ अन्य चीजों को काटें। (यह ठीक है, और उम्मीद है, इसमें पूर्ण लंबाई संस्करण भी शामिल है जैसा कि आपने दृष्टिकोण को स्पष्ट करने के लिए यहां किया था।) ऐसा करने के बाद, आप तब खुद से पूछ सकते हैं: "मैं इसे छोटा कैसे बना सकता हूं?"
डायनामिक्स

2

स्विफ्ट, 577

import UIKit
let f=NSNumberFormatter()
f.numberStyle = .SpellOutStyle
for i in 0...11{
let w = split("first-second-third-four-fif-six-seven-eigh-nin-ten-eleven-twelf"){$0=="-"}[i]+(i<3 ?"":"th")
println("On the \(w) day of Christmas\nmy true love gave to me")
for m in reverse(0...i){
if m==0{break}
let v = split("turtle doves and*french hens*calling birds*golden rings*geese-a-lay*swans-a-swimm*maids-a-milk*ladies danc*lords-a-leap*pipers pip*drummers drumm"){$0=="*"}[m-1]+(m<5 ?"":"ing")
println("\(f.stringFromNumber(m+1)!) \(v)")}
println("a partridge in a pear tree.")}

आप इसे खेल के मैदान में चिपका सकते हैं।

मैंने vप्रिंट कमांड में जाने की कोशिश की और मिला:

Playground execution failed: <EXPR>:20:1: error: expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

1

रूबी 1.9.3, संपीड़ित, 321 वर्ण

चूंकि कोड में गैर-मुद्रण योग्य वर्ण हैं, इसलिए मैं कोड का एक हेक्सडंप पोस्ट करूंगा:

0000000: 2363 6f64 696e 673a 6269 6e61 7279 0a72  #coding:binary.r
0000010: 6571 7569 7265 277a 6c69 6227 3b65 7661  equire'zlib';eva
0000020: 6c20 5a6c 6962 2e69 6e66 6c61 7465 2778  l Zlib.inflate'x
0000030: da2d 90db 6ac3 300c 86ef f714 a163 b042  .-..j.0......c.B
0000040: 15e8 5ea7 f442 8be5 58cc 8720 39cd 42db  ..^..B..X.. 9.B.
0000050: 3dfb e4a4 3792 f559 c7ff fcd5 574e a4f7  =...7..Y....WN..
0000060: 073f a6b9 eaa1 64a8 81e0 fdfe b17c 7a16  .?....d......|z.
0000070: ad9d d250 b2eb 6a60 719d 2fb3 d4d0 79f6  ...P..j`q./...y.
0000080: 6695 7f9b a51b 65f3 c463 3097 b905 7547  f.....e..c0...uG
0000090: f1f5 5717 8a56 71bc f0f5 090e 5728 1e86  ..W..Vq.....W(..
00000a0: 20ac 35a1 bea5 15aa cc04 b1dc 0846 3453   .5..........F4S
00000b0: 0b24 3a9c 6c87 5669 c0c9 9c12 89ee 0fce  .$:.l.Vi........
00000c0: e3ab 374c 3c35 6cae 411b 6b5d c429 2044  ..7L<5l.A.k].) D
00000d0: c28d d942 d61a 1d93 5563 1eb6 e2b6 2b24  ...B....Uc....+$
00000e0: e42d 3371 fc69 74bb 0474 c1dc a82e bc4f  .-3q.it..t.....O
00000f0: b233 6124 526a 4d71 6dc8 73db b444 67f9  .3a$RjMqm.s..Dg.
0000100: 6240 3761 60c0 182d 826f 934a 4d31 2102  b@7a`..-.o.JM1!.
0000110: 2f94 8700 81b2 91a5 4035 01a3 1d64 b7da  /.......@5...d..
0000120: 1413 1661 42a9 c26e 24e0 6c33 2642 3141  ...aB..n$.l3&B1A
0000130: 888e 973f ee7b 385f 4fd3 f31f be35 9d6f  ...?.{8_O....5.o
0000140: 27                                       '

हेक्सडंप से वास्तविक कोड बनाने के लिए, इसे एक फ़ाइल में डालें और चलाएं xxd -r hexdump > 12days.rb। फिर निष्पादित ruby1.9.3 12.days.rbकोड को चलाएगा और गीत प्रिंट करेगा। ध्यान दें कि इस कोड के लिए रूबी 1.9.3 की आवश्यकता है (क्योंकि यह उपयोग करता हैZlib.inflate ), इसलिए यह रूबी 1.8.x, 1.9.1 और 1.9.2 के साथ काम नहीं करेगा।

असम्पीडित कोड 425 वर्ण लंबा है:

12.times{|i|puts"on-the-#{%w(first second third fourth fifth sixth seventh eighth ninth tenth eleventh twelfth)[i]}-day-of-christmas
my-true-love-gave-to-me",%w(twelve-drummers-drumming eleven-pipers-piping ten-lords-a-leaping nine-ladies-dancing eight-maids-a-milking seven-swans-a-swimming six-geese-a-laying five-golden-rings four-calling-birds three-french-hens two-turtle-doves-and a-partridge-in-a-pear-tree)[~i..-1],p}

1

पर्ल, 319/313

आइडिया: अनकंप्रेस करें और जेबी के लिंगुआ का मूल्यांकन करें :: EN :: नंबर समाधान।

सबसे पहले, इस टेक्स्ट ब्लॉक को कमांड में पेस्ट करें perl -e 'use MIME::Base64; print decode_base64 $_ while <>;' >12days.pl। इसके बाद, कमांड चलाएँ perl -M5.01 12days.pl

dXNlIENvbXByZXNzOjpabGliOyRfPSd4nCWOwW7CMAyG730K
q8oBNIUOjq2QxmG3iT3AhJBpTBsRu12cgqpp776UXWx/v63/96QEH166Cev6/VjXx4kvFLWspCqb
N91/P1YHO2JM0buOrBeLdiSMNkUiSFNMgawb7qRwjSRtb3sShRZDyK724qNT6IbgSGzMSgYipewS
cM4M+kDRjPrwzIvA6N0isA+3hQM6T2odSvvEIT7XgXBcePRj/tfmtpCLE/PCzyEr68ac90a/Xk/N
dYiGV9vNZrtb/xjZy8Q7knP284LBcKM4l58CqVwnMAIOZxiu0PbRa2LUgmdIcaL8wZ2gw1zSAEyF
ORdlo9WhQnGA1RL4b70y/LJdb0rI+YZP+bD8Lf4A5ut+sic7ZXZhbCB1bmNvbXByZXNzJF87Cg==

इस कमांड के साथ कंप्रेस होने और बचने के बाद JB का 368 char सॉल्यूशन use Compress::Zlib;$_='...';eval uncompress$_;कहां ...है , इसकी स्क्रिप्ट खुद लेती है '

perl -M5.01 -e 'use Compress::Zlib; $_ .= <> while !eof; say compress($_);' <12days_JB.pl

इल्मरी की पटकथा में अतिरिक्त $_=...;पात्रों के बिना केवल रीड वैल्यू को संशोधित करने के बारे में शिकायत की गई है , लेकिन संभवतः वह इस 313 को बनाएंगे । आप कई अतिरिक्त बाइट्स को मैन्युअल रूप से संपीड़न से जोड़कर बचा सकते हैं जैसे कि इल्मरी ने पहले किया था, शायद 310 या तो प्राप्त करना , लेकिन मैंने परेशान नहीं किया।


पर्ल, 376 (एक और सबमिशन को धोखा देना) [मेरा मूल सबमिशन]

सबसे पहले, एक पर्ल स्क्रिप्ट बनाएं, 12days.plजिसमें कहा गया है :

use IO::Uncompress::Inflate qw(inflate);inflate\*DATA=>'-';
__DATA__

इसके बाद, किसी भी अन्य सबमिशन से आउटपुट को पाइप करें 12days.txtऔर कमांड निष्पादित करें:

perl -e 'use IO::Compress::Deflate qw(deflate); deflate "-" => "-";' <12days.txt >>12days.pl

Vola 12days.pl लगभग 376 बाइट्स है और गाने को प्रिंट करता है। ;) रॉमिनिलेट का उपयोग करते हुए, इल्मरी के आउटपुट से शुरू होने वाले कोड में डेटा डॉक से ठीक छह बाइट्स चलता है।

मैं मूल रूप से एक हफ़मैन कोडिंग मॉड्यूल की तलाश में सीधे सेट होता हूं, जो लगभग इतना बेईमान नहीं है। फिर भी, दुख की बात है कि CPAN के पास अंग्रेजी के पत्र एन्ट्रापी टेबल के साथ कोई मॉड्यूल नहीं है, जो कि आप वास्तव में चाहते हैं जब बहुत कम तारों को संपीड़ित किया जाता है।

मैंने पाया कि fortune -m Days\ of\ Christmasया तो काम नहीं करता है, अफसोस।


1

PHP, 548

$n=explode('|','first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth');$w=explode('|','and a partridge in a pear tree.|two turtle doves|three french hens|four calling birds|five golden rings|six geese a-laying|seven swans a-swimming|eight maids a-milking|nine ladies dancing|ten lords a-leaping|eleven pipers piping|twelve drummers drumming');foreach($n as $i=>$j)echo "on the $n[$i] day of christmas,\nmy true love sent to me\n".str_replace($i?'':'and ','',implode(",\n",array_reverse(array_slice($w,0,$i+1))))."\n\n";

संपीड़न के साथ कम लंबाई, 502

eval(gzuncompress(base64_decode('eNpVkE1u3DAMhfc+BWEI8AzqDtJtg7QHCYKCsWiLrX4MUjPOAD58KE829UIyP5Hge8/lF/pYY/F0GvZhHGYWrbvSVLLfa2Dx+1yuUsM+82yn8kc76UbZbuIl2JW5FfWB4tdb3SjaxHB+dtv/OzB7QFhRqrBfCDi3klCgCtHFJgtU2xkJfLmRmg7jMAvlKUCgrIcmmDBGzgu8m0pDfCNYSvSUQQxr0woLkRLg94h3Yw/hoBtmNagbp9Tw4QMSsm84cfzXqNkiiOiZFDzmqTEzCbHI0RcJ12P6sAwrryTarqPR7JsgL9eUGj5+7MHymIsQTuHkzLeC45df7u+ZplCgLxlqIHD51fGbLb1DmWEKwloT6tilu2V0NVWWC6jlDLVAoq6/aJU/QmvEiU6Ofw/DzyNni3sYOT3S78euH1EE79Z6M1V0elQauY1t49Po+NuPs32Xvuv650+BSMT/')));

इस तरह के समाधान को मैं पढ़ना पसंद नहीं करता (फिर भी एक और आधार -64 / gzip, सिर्फ महान), लेकिन मुझे वास्तव में कोई कारण नहीं दिखता कि आप अकेले इसके साथ नकारात्मक उत्तर देने के लायक क्यों हैं। कुछ संतुलन लाने के लिए तैयार; जिस किसी को भी उकसाया गया है, वह हमें इसकी सूचना देने का अनुरोध करता है।
JB

कई लोगों ने एक संपीड़ित समाधान प्रदान किया है, बस इसके मज़े के लिए मैंने एक को भी रखने का फैसला किया। लेकिन मेरा मूल कोड भी पोस्ट किया गया है, इसलिए मुझे नहीं दिखता कि समस्या क्या है। बस gzipped एक को अनदेखा करें। मैं यह भी जानना चाहूंगा कि मुझे क्यों अपमानित किया जा रहा है।
व्लादिमीर

1

वैल, 584 , 574

void main(){int i=0;string[] d={"first","second","thrid","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth"};string[] p={"Twelve drummers drumming","Eleven pipers piping","Ten lords-a-leaping","Nine ladies dancing","Eight maids-a-milking","Seven swans-a-swimming","Six geese-a-laying","Five golden rings","Four calling birds","Three french hens","Two turtle doves","A"};while(i<12){stdout.printf("On the %s day of Christmas,\nmy true love gave to me,\n%s partridge in a pear tree.\n\n",d[i],string.joinv(",\n",p[11-i:12]));p[11]="And a";i++;}}

संकलन पर अधिक चेतावनी नहीं।


1

जावा, ६० 60

स्टैक एक्सचेंज में पहली पोस्ट, इस समस्या पर दूसरा प्रयास।

class T{public static void main(String[]args){String Z=" partridge in a pear tree.\n";String[] B=(" day of Christmas,\nMy true love gave to me0first0second0third0fourth0fifth0sixth0seventh0eighth0ninth0tenth0eleventh0twelfth0A"+Z+"0Two turtle doves,0Three french hens,0Four calling birds,0Five golden rings,0Six geese-a-laying,0Seven swans-a-swimming,0Eight maids-a-milking,0Nine ladies dancing,0Ten lords-a-leaping,0Eleven pipers piping,0Twelve drummers drumming,").split("0");for(int i=1;i<13;i++){System.out.println("On the "+B[i]+B[0]);for(int j=i+12;j>12;j--)System.out.println(B[j]);B[13]="And a"+Z;}}}

जावा इस तरह के कार्यों के लिए थोड़ा बोझिल है, लेकिन विभाजन के उपयोग से स्ट्रिंग ओवरहेड को कम करने में मदद मिली।


1

/// , 439 बाइट्स

/|/\/\///^/on the |%/ day of christmas
my true love gave to me
|=/-a-|&/ing|*/even|+/th%|:/

^|A/el* pipers pip&
B|B/ten lords=leap&
C|C/nine ladies danc&
D|D/eight maids=milk&
E|E/s* swans=swimm&
F|F/six geese=lay&
G|G/five golden r&s
H|H/four call& birds
I|I/three french hens
J|J/two turtle doves
and K|K/a partridge in a pear tree/^first%K:second%J:+ird%I:four+H:fif+G:six+F:s*+E:eigh+D:nin+C:ten+B:el*+A:twelf+twelve drummers drumm&
A

इसे ऑनलाइन आज़माएं!

यदि अनुगामी नई सूचियों की अनुमति है, तो आप चार बाइट्स बचा सकते हैं:

/|/\/\///^/on the |%/ day of christmas
my true love gave to me
|=/-a-|&/ing|*/even|+/th%|A/el* pipers pip&
B|B/ten lords=leap&
C|C/nine ladies danc&
D|D/eight maids=milk&
E|E/s* swans=swimm&
F|F/six geese=lay&
G|G/five golden r&s
H|H/four call& birds
I|I/three french hens
J|J/two turtle doves
and K|K/a partridge in a pear tree

/^first%K^second%J^+ird%I^four+H^fif+G^six+F^s*+E^eigh+D^nin+C^ten+B^el*+A^twelf+twelve drummers drumm&
A

इसे ऑनलाइन आज़माएं!

व्याख्या

/// एक ऐसी भाषा है जहाँ एकमात्र ऑपरेशन एक आत्म-संशोधन प्रतिस्थापन है। विशेष रूप से, अनुदेश /abc/xyz/के सभी उदाहरणों की जगह abcके साथxyz अन्य स्रोत कोड , जिसमें अन्य प्रतिस्थापन भी शामिल हैं .. कोई अन्य वर्ण केवल STDOUT में आउटपुट हैं।

जबकि यह ट्यूरिंग-पूर्णता के लिए पर्याप्त है, आमतौर पर /// में गोल्फिंग का इरादा आउटपुट के साथ शुरू करना और बार-बार होने वाले सबस्ट्रिंग की पहचान करना है जो एकल-चरित्र शॉर्टकट के साथ प्रतिस्थापित किया जा सकता है।

\ पैटर्न, प्रतिस्थापन और शाब्दिक वर्णों में एक भागने चरित्र के रूप में इस्तेमाल किया जा सकता है जिसका अर्थ शाब्दिक है / या \


सामने आया पहला निर्देश है /|/\/\// । इसका मतलब है " बाकी कार्यक्रम के |साथ सभी को बदलें //।" इस कार्यक्रम में हर बाद प्रतिस्थापन के लिए एक बाइट बचाता है।


इसके बाद, पाठ को संपीड़ित करने के लिए प्रतिस्थापन का एक सेट बनाया जाता है:

  • on the हो जाता है ^
  • day of christmas \n my true love gave to me \n हो जाता है %
  • -a- हो जाता है =
  • ing हो जाता है &
  • even हो जाता है *
  • th% हो जाता है +
  • ^ दो नई कहानियों से पहले (जो हर कविता में दिखाई देती है लेकिन पहले) बन जाती है :

इसके बाद, हम खुद गीत लिखते हैं। यह के Aमाध्यम से प्रतिस्थापन का उपयोग करके किया जाता है K। प्रत्येक अक्षर प्रतिस्थापन इसके बाद प्रतिस्थापन के लिए एक पंक्ति जोड़ता है। उदाहरण के लिए, Kप्रतिनिधित्व करता हैa partridge in a pear tree और Jप्रतिनिधित्व करता है two turtle doves \n and K

इस तरह, गीत के प्रत्येक छंद से बना है:

  • ^ या :
  • सही ऑर्डिनल का प्रतिनिधित्व करने वाला एक स्ट्रिंग (कहते हैं, el*th)
  • %
  • के Aमाध्यम से एक पत्रK सही गीत का प्रतिनिधित्व करता है।

हालाँकि, क्योंकि अधिकांश अध्यादेश समाप्त हो जाते हैं th, हम कुछ बाइट्स को बचाने के लिए प्रतिस्थापन th%+का उपयोग करते हैं ।


0

ऐसे समय होते हैं जब सबसे स्पष्ट समाधान भी सबसे छोटा होता है, यानी मैं अब इस आग्रह का विरोध नहीं कर सकता।

मैक ओएस एक्स, 26 पर बैश

open http://tiny.cc/kavxf

पर्ल, 111

use LWP::Simple;get("http://tiny.cc/n230t")=~/On.*tree!/;
$_=$&;s/<br>/\n/g;s/(<.+?>)|(&\w+;)/ /g;print "$_\n";

पठनीयता के लिए एक नई पंक्ति जोड़ी गई।


3
यदि यह एक वैध समाधान है, तो मेरे पास HQ9 + C में लिखा गया एक छोटा भी है। (यह HQ9 + एक अतिरिक्त कमांड के साथ है। आप अनुमान लगा सकते हैं कि यह क्या करता है।)
Ilmari Karonen

1
मुझे लगता eval compressहै कि मैं एक regex कि वास्तव में अच्छी तरह से compresses पाया दावा करने के लिए चाल का उपयोग कर perluscating एक माना जाता है , लेकिन यह लगभग 200 वर्णों को फूला हुआ है। योग्य
जेफ बर्गेज

वीडियो काम नहीं करता है ... इसके अलावा, x.co का उपयोग करें , यह सबसे छोटा यूआरएल शॉर्टनर है जिसके बारे में मुझे पता है

0

जावा - 1329 वर्ण

class x{public static void main(String[] args){for(int i=1;i<=12;i++){System.out.print("On the ");switch(i){case 1:System.out.print("first");break;case 2:System.out.print("second");break;case 3:System.out.print("third");break;case 4:System.out.print("fourth");break;case 5:System.out.print("fifth");break;case 6:System.out.print("sixth");break;case 7:System.out.print("seventh");break;case 8:System.out.print("eighth");break;case 9:System.out.print("ninth");break;case 10:System.out.print("tenth");break;case 11:System.out.print("eleventh");break;case 12:System.out.print("twelfth");break;}System.out.println(" day of Christmas\nmy true love gave to me");switch(i){case 12:System.out.println("Twelve drummers drumming");case 11:System.out.println("Eleven pipers piping");case 10:System.out.println("Ten lords-a-leaping");case 9:System.out.println("Nine ladies dancing");case 8:System.out.println("Eight maids-a-milking");case 7:System.out.println("Seven swans-a-swimming");case 6:System.out.println("Six geese-a-laying");case 5:System.out.println("Five golden rings");case 4:System.out.println("Four calling birds");case 3:System.out.println("Three french hens");default:if(i>=2)System.out.print("Two turtle doves\nAnd a");else System.out.print("A");System.out.println(" partridge in a pear tree");break;}System.out.println();}}}

मैं इसे ungolf करने के लिए बहुत आलसी हूँ, लेकिन यह यहाँ है: http://ideone.com/MU9IcP


-2

SIMPLE , 1 बाइट

a

ध्यान दें :

भाषा को चुनौती के बाद डिजाइन किया गया था और अभी भी एक WIP है।

किस तरह :

कोई भी चार क्रिसमस के 12 दिनों का उत्पादन करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.