打印流行节日歌曲的所有12节经文.
在12 节经文中,我的意思是在歌曲中演唱的每一行的重复,即
第一节:在圣诞节的第一天,我的真爱给了我一棵梨树上的鹧..
第二节在圣诞节的第二天,我的真爱给了我两只斑鸠和一棵梨树上的鹧..
...
N:在圣诞节的第n天,我的真爱给了我(没有第一行的第N-1节)(第N行增加了一行)
Common Lisp:
(mapc #'princ (reverse (maplist #'(lambda(l) (format nil "On the ~:R day of Christmas my true love gave to me~%~{~a~%~}~%" (length l) l)) '("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 gold rings," "four calling birds," "three french hens," "two turtle doves, and" "a partridge in a pear tree."))))
编辑:
如果你取出空白,上面是412个字符.
这个:
(let ((g)) (dotimes (i 12) (format t "On the ~:R day of Christmas my true love gave to me~%~{~R ~:*~ ~[~;~;turtle doves and~;french hens,~;calling birds,~;gold rings,~ ~;geese a-laying,~;swans a-swimming,~;maids a-milking,~ ~;ladies dancing,~;lords a-leaping,~;pipers piping,~ ~;drummers drumming,~]~%~}a partridge in a pear tree~2%" (1+ i) g) (push (+ i 2) g)))
如果你在格式字符串中取出空格和〜引用的换行符,则为344个字符:
(let((g))(dotimes(i 12)(format t"On the ~:R day of Christmas my true love gave to me~%~{~R ~:*~[~;~;turtle doves and~;french hens,~;calling birds,~;gold rings,~;geese a-laying,~;swans a-swimming,~;maids a-milking,~;ladies dancing,~;lords a-leaping,~;pipers piping,~;drummers drumming,~]~%~}a partridge in a pear tree~2%"(1+ i)g)(push(+ i 2)g)))
编辑:
看起来这个问题已经过去了,网站正在唠叨我接受一个答案.据我所知,这个是最短的.如果我接受自己的答案,我有点害怕该网站会做什么 - 可能会给我一个自恋者或自慰者徽章.
你无法接受自己的答案.很公平.我会把它打开.感谢大家的回应.
使用F#:
#light open System.Net; open System.Text.RegularExpressions printf "%s" ((new WebClient()).DownloadString("http://www.textfiles.com/holiday/12-bugs") |> (fun x -> (new Regex("Lines: \d+\s+([\s\S]+)--")).Match(x).Groups.[1].Value))
第二天产出:
For the twelfth bug of Christmas, my manager said to me Tell them it's a feature Say it's not supported Change the documentation Blame it on the hardware Find a way around it Say they need an upgrade Reinstall the software Ask for a dump Run with the debugger Try to reproduce it Ask them how they did it and See if they can do it again.
不是我的,但很有趣......
这是http://en.wikipedia.org/wiki/Obfuscated_code(作者:James O. Coplien)的一个着名例子:
#includemain(t,_,a)char *a;{return!0 "虽然乍一看是难以理解的,但它是一个合法的C程序,在编译和运行时将生成12个圣诞节的12节经文.它包含了代码中内联编码形式的诗所需的所有字符串.迭代12天,显示它需要的东西."
虽然它不会赢得高尔夫,但它大约是830个字节.
@BoltBait:不,在我看来,同行评审会很短,很容易开始;-)
main的递归使用在某种程度上很酷.之前从未见过.
4> annakata..:class TrueLove: ITrueLove { Listgive(int day) { List lovesLabourLost = new List (); //if this was C++ could you replace this with a Figgy Duff Device? for (int i=1; i<=day; i++) { if(day > 1 && i<=2) {lovesLabourLost .Add(new TurtleDove());} if(day > 2 && i<=3) {lovesLabourLost .Add(new FrenchHen());} if(day > 3 && i<=4) {lovesLabourLost .Add(new CallingBird());} if(day > 4 && i<=5) {lovesLabourLost .Add(new GOLDRING());} if(day > 5 && i<=6) {lovesLabourLost .Add(new LayingGeese());} if(day > 6 && i<=7) {lovesLabourLost .Add(new SwimmingSwan());} if(day > 7 && i<=8) {lovesLabourLost .Add(new MilikingMaid());} if(day > 8 && i<=9) {lovesLabourLost .Add(new DancingLady());} if(day > 9 && i<=10) {lovesLabourLost .Add(new LeapingLord());} if(day > 10 && i<=11) {lovesLabourLost .Add(new PipingPiper());} if(day > 11 && i<=12) {lovesLabourLost .Add(new DrummingDrummer());} } return lovesLabourLost && (new PartridgeInPearTree()); } } static class Me: IDemanding { static ITrueLove myTrueLove = new TrueLove(); static List myPresents = new List (); static void demandPresents() { for (int i=1; i<=daysOfChristmas; i++) { List MOAR = myTrueLove.give(i); foreach (IPresent another in MOAR) { myPresents.Add(another); } } } } const int daysOfChristmas = 12; Me.demandPresents();
无论是关于C#的笑话,还是有人不知道如何打代码高尔夫:)
我已经投了票,因为我直接开玩笑看着假设女性和(失去的劳动之爱)喜欢Me.demandPresents()
5> dsimcha..:在D编程语言中,使用switch语句落实:
import std.stdio; void main() { for(uint i = 1; i < 13; i++) { writeln("On the ", i, " day of Christmas, my true love gave to me:"); switch(i) { case 12: writeln("twelve drummers drumming,"); case 11: writeln("eleven pipers piping,"); case 10: writeln("ten lords a-leaping,"); case 9: writeln("nine ladies dancing,"); case 8: writeln("eight maids a-milking,"); case 7: writeln("seven swans a-swimming,"); case 6: writeln("six geese a-laying,"); case 5: writeln("five gold rings,"); case 4: writeln("four calling birds,"); case 3: writeln("three french hens,"); case 2: writeln("two turtle doves, and"); case 1: writeln("a partridge in a pear tree.\n"); } } }
6> strager..:击:
wget -qO- http://tinyurl.com/a3xw8b我使用frizzer.myopenid.com的CLisp实现的输出作为开始.
7> Jasper Bekke..:在C++中你是
std::cout << boost::12_days_of_christmas;
我讨厌挑选这样一个可爱的解决方案,但我很确定C++标识符不能以数字开头.
8> Mindaugas Mo..:
C#,421个字符var t="";for(int i=0;i++<12;)Console.Write("On the {0}{1} day of Christmas, my true love gave to me: {2}\n",i,i<2?"st":i<3?"nd":i<4?"rd":"th",t="|a partridge in a pear tree.|two turtle doves, and |three french hens,|four calling birds,|five gold 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 drumm@".Replace("@","ing,|").Split('|')[i]+t);间隔版本:
var t=""; for(int i = 0; i++ < 12;) Console.Write("On the {0}{1} day of Christmas, my true love gave to me: {2}\n", i, i < 2 ? "st" : i < 3 ? "nd" : i < 4 ? "rd" : "th", t="|a partridge in a pear tree. |two turtle doves, and |three french hens, |four calling birds, |five gold 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 drumm@" .Replace("@","ing,|") .Split('|')[i]+t);
9> Jasper Bekke..:PHP:375个字符
$v=split(":",":a partridge in a pear tree.\n:two turtle doves, and:three french hens:four calling birds:five gold rings:six geese a-lay:seven swans a-swimm:eigth maids a-milk:nine ladies danc:ten lords a-leap:eleven pipers pip:twelve drummers drumm");while($i<12){?>On the =date(jS,$i*86400)," day of Christmas my true love gave to me",$s=", ".$v[++$i].($i>5?'ing':'').$s;}编辑:更新的可运行版本(377)字符
$v=split(":",":a partridge in a pear tree.\n:two turtle doves, and:three french hens:four calling birds:five gold rings:six geese a-lay:seven swans a-swimm:eigth maids a-milk:nine ladies danc:ten lords a-leap:eleven pipers pip:twelve drummers drumm");while($i<12){?>On the =date(jS,$i*86400)," day of Christmas my true love gave to me",$s=", ".$v[++$i].($i>5?'ing':'').$s;}
10> jrcs3..:VB.Net - 530个字符(无空格),634(空格)
Module ChristmasSong Sub Main() Dim i&, f$ : Dim d$() = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth"}, g$() = {"a partridge in a pear tree.", "two turtle doves, and ", "three french hens, ", "four calling birds, ", "five gold rings, ", "six geese a-laying, ", "seven swans a-swimming, ", "eigth maids a-milking, ", "nine ladies dancing, ", "ten lords a-leaping, ", "eleven pipers piping, ", "twelve drummers drumming, "} For i = 0 To 11 : f = g(i) & f : Console.WriteLine("On the {0} day of Christmas, my true love gave to me {1}", d(i), f) : Next End Sub End Module
11> Daniel Earwi..:Linq到对象,580个字符(没有空格)
Console.WriteLine(Enumerable.Range(1, 13).SelectMany(day => Enumerable.Repeat("\nOn the " + day + (day == 1 ? "st" : (day == 2 ? "nd" : (day == 3 ? "rd" : "th"))) + " day of Christmas my true love gave to me ", 1) .Concat((new [] { "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 gold rings,", "four calling birds,", "three french hens,", "two turtle doves, and", "a partridge in a pear tree." }).Reverse().Take(day).Reverse())) .Aggregate((a, b) => a + "\n" + b));
12> Kent Fredric..:Perl的.
use Lingua::EN::Numbers qw(num2en_ordinal); print 'On the ', num2en_ordinal($_+1),' day of Christmas my true love gave to me, ', reverse(( split /\|/, "a partridge in a pear tree.\n|two turtle doves, and |three french hens, |four calling birds, |five gold 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, ")[ 0 .. $_ ]) for 0 .. 11;(459个字符)
我想让它变得更好,更富有表现力,但这是一场高尔夫挑战.
这种风格有些违反了正确的编码标准.但那对你来说是高尔夫.
通用EN ::数量::
这是不太紧凑的版本,没有偷偷摸摸的技巧.
use Lingua::EN::Numbers qw(num2en_ordinal); my @gifts = ( 'a partridge in a pear tree.', 'two turtle doves, and ', 'three french hens, ', 'four calling birds, ', 'five gold 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, ' ); for my $verse_id ( 0 .. $#gifts ) { printf 'On the %s day of Christmas my true love gave to me, ', num2en_ordinal($verse_id +1); print reverse @verse[ 0 .. $verse_id ]; print "\n"; }
13> bd808..:for d in range(12):print"On the %s day of Christmas, my true love gave to me\n\t%s\n"%("first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth".split("|")[d],"\n\t".join("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 gold rings|four calling birds|three french hens|two turtle doves and|a partridge in a pear tree.".split("|")[11-d:]))Python,422个字符
14> KirarinSnow..:
LilyPond,340个字符(比Common Lisp短)"这是赛季!(而且非常合适,因为LilyPond主要用于排版音乐......除了歌词之外,人们可以轻松地调整此代码以生成乐曲的乐谱.)
改编自fizzer的解决方案.
#(map(lambda(x)(format #t"On the ~:R day of Christmas my true love gave to me~{ ~R~:*~[~;~;turtle doves and~;French hens,~;calling birds,~;gold rings,~;geese a-laying,~;swans a-swimming,~;maids a-milking,~;ladies dancing,~;lords a-leaping,~;pipers piping,~;drummers drumming,~]~} a partridge in a pear tree. "x(iota(1- x)x -1)))(iota 12 1))用法:
$ lilypond thisfile.ly
这个版本用341个字符完全匹配fizzer的输出,但缩短了三个字节:
#(map(lambda(x)(format #t"On the ~:R day of Christmas my true love gave to me~{ ~R ~:*~[~;~;turtle doves and~;french hens,~;calling birds,~;gold rings,~;geese a-laying,~;swans a-swimming,~;maids a-milking,~;ladies dancing,~;lords a-leaping,~;pipers piping,~;drummers drumming,~]~} a partridge in a pear tree "x(iota(1- x)x -1)))(iota 12 1))
15> DanSingerman..:红宝石.我认为这非常简洁(努力工作全部在一条线上):
days = %w{First Second Third Fourth Fifth Sixth Seventh Eighth Ninth Tenth Eleventh Twelfth} presents = [ "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 gold rings", "four calling birds", "three french hens", "two turtle doves, and", "a partridge in a pear tree" ] 0.upto(11) { |i| puts "On the #{days[i]} of Christmas my true love gave to me " + presents.last(i+1).join(", ") }