Код Гольф: распечатайте & ldquo; 12 Дней Рождества & rdquo; песня в наименьшем количестве строк кода

Эта проблема возникла для меня после установки модуля под Podfile и pod install. Попробовав кучу разных исправлений, я, наконец, просто импортировал Pod вручную (перетащив необходимые файлы в мой проект), и это решило проблему.

25
задан 8 revs, 5 users 74% 4 May 2012 в 03:35
поделиться

45 ответов

26 байтов!..

, Поскольку URL подразумевает, это можно рассмотреть.. обман:

http://github.com/dbr/so_scripts/tree/master/golf_tdoc/cheating.bash

3
ответ дан dbr 4 May 2012 в 03:35
поделиться
  • 1
    Я думаю, что изменение необходимо. Учитывая, что idx1 вектор (doesn' t имеют значение, если строка или столбец), если vec1 вектор - строка тогда vec1(idx1), также будет вектор - строка. То же идет для vec2. – Eitan T 10 April 2013 в 18:12

Используя Шаблонный Инструментарий

perl -MTemplate -e 'Template->new()->process("12dayxmas.tt")'

12dayxmas.tt

[%
  list = [
    { day => 'first',    item => 'A partridge in a pear tree.'},
    { day => 'second',   item => 'Two turtle doves, and '},
    { day => 'third',    item => 'Three french hens, '},
    { day => 'fourth',   item => 'Four calling birds, '},
    { day => 'fifth',    item => 'Five gold rings, '},
    { day => 'sixth',    item => 'Six geese a-laying, '},
    { day => 'seventh',  item => 'Seven swans a-swimming, '},
    { day => 'eighth',   item => 'Eight maids a-milking, '},
    { day => 'nineth',   item => 'Nine ladies dancing, '},
    { day => 'tenth',    item => 'Ten lords a-leaping, '},
    { day => 'eleventh', item => 'Eleven pipers piping, '},
    { day => 'twelfth',  item => 'Twelve drummers drumming, '}
  ];
-%]
[%
  FOREACH list;
  present = item _ present;
-%]
On the [% day %] day of Christmas my true love gave me [% present %]

[% END %]
4
ответ дан Brad Gilbert 4 May 2012 в 03:35
поделиться
  • 1
    Спасибо. но x элемент все еще остается, я не уверен, чем точно это называют, таким образом, я don' t действительно знают, что искать, так найдите соответствующее название WebKit его. – Paulius Dragunas 30 July 2013 в 19:13

Я не могу победить версию Lisp, но это все еще забавно.

версия Дельфи:

procedure TheTwelfDaysOfChristmas(const AVerse: TStrings);
const 
  cPresentList : array[1..12] of string = (
    '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, '
  );
  cTime : array[1..12] of string = (
    'first',
    'second',
    'third',
    'fourth',
    'fifth',
    'sixth',
    'seventh',
    'eighth',
    'nineth',
    'tenth',
    'eleventh',
    'twelfth'
  );
var
  present : string;
  i       : Integer;

begin
  present := '';
  for i := 1 to 12 do begin
    present := cPresentList[i] + present;
    AVerse.Add(Format('On the %s day of Christmas my true love gave me %s.',
      [cTime[i], present]));
  end;
end;

Между прочим, для всех Вас, С праздниками и большого программирования в 2009.

3
ответ дан Toon Krijthe 4 May 2012 в 03:35
поделиться
  • 1
    Я могу разработать ::-webkit-calendar-picker-indicator класс для использования моего собственного изображения вместо треугольника? – Ilan Biala 29 March 2015 в 14:12

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";
}
6
ответ дан 4 revs 4 May 2012 в 03:35
поделиться

PHP

$g = array("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,"
);
$d = array("first", "second", "third", "fourth", "fifth", "sixth",
 "seventh", "eighth", "nineth", "tenth", "eleventh", "twelfth");
foreach($d as $i=>$v){
    echo "On the $v day of Christmas my true love gave to me";
    for($j=$i;$j>=0;$j--) echo " ",$g[$j];
}
3
ответ дан Chris Bartow 4 May 2012 в 03:35
поделиться

Вот решение PHP:

$day = Array('first','second','third','fourth','fifth','sixth','seventh',
             'eighth','ninth','tenth','eleventh','twelfth');
$gifts = Array('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');

for ($i = 0; $i < 12; ++$i) {
    printf("On the $day[$i] of Christmas my true love gave to me\n" . 
         implode("\n", array_slice($gifts,-($i+1))) . "\n\n");
}
4
ответ дан jmucchiello 4 May 2012 в 03:35
поделиться
  • 1
    Добавьте required="required" к входному элементу – saluce 30 July 2013 в 19:22

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));
7
ответ дан Daniel Earwicker 4 May 2012 в 03:35
поделиться
  • 1
    @EitanT: Никакая потребность измениться. Индексы от find всегда должны быть векторами - столбцами, а также vec1(idx1) и т.д. – yuk 10 April 2013 в 17:51

Довольно простое решение в C++:

#include <iostream.h>
char*a[]={"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,"};
char*b[]={"first","second","third","fourth","fifth","sixth","seventh","eighth","nineth","tenth","eleventh", "twelfth"};
int main(){for(int i=0;i<12;i++){std::cout<<"On the "<<b[i]<<" day of Christmas my true love gave to me, \n";for(int j=i;j>=0;j--)std::cout<<a[j]<<" \n";}}

595 символов, хотя это могло быть уменьшено до 513 символов, если Вы позволяете "1-й, 2-й, 3-й" и т.д. нотация, которую некоторые использовали.

0
ответ дан Aistina 4 May 2012 в 03:35
поделиться
  • 1
    очень хорошо! должен быть QCoreApplication снова в частном выполненном слоте... – relascope 26 May 2015 в 19:47

Версия C/C++ с помощью единственной буферной и адресной арифметики с указателями. Сингл включает, одно объявление и технически только две строки кода в основном, чтобы сделать печать:

#include <stdio.h>

char *days =
    "twelve drummers drumming,  \n"
    "eleven pipers piping,      \n"
    "ten lords a-leaping,       \n"
    "nine ladies dancing,       \n"
    "eight maids a-milking,     \n"
    "seven swans a-swimming,    \n"
    "six geese a-laying,        \n"
    "five gold rings,           \n"
    "four calling birds,        \n"
    "three french hens,         \n"
    "two turtle doves, and      \n"
    "a partridge in a pear tree.\n\n";

void main()
{
    for (int i = 1; i <= 12; i++)
        printf("On the %d%s day of Christmas, my true love gave to me:\n%s",
                i,i == 1 ? "st" : (i == 2 ? "nd" : "th"), days + (12-i)*28);
}
0
ответ дан shf301 4 May 2012 в 03:35
поделиться
  • 1
    qExec нельзя назвать несколько раз: потому что это повреждает поддержку командной строки. Когда Вы пишете тест с QtTest, можно перечислить все функции теста с -functions опция и выполнить отдельную функцию путем передачи его командной строке. Это повреждается, если qExec назовут несколько раз, то так как только первый вызов обработает параметры командной строки. – Aurélien Gâteau 13 July 2016 в 07:47

C#: 395 символов (не включая пробел...)

for (var x = 0; x++ < 12; )
    Console.Write(
        "On the {0} day of Christmas,\nMy true love gave to me\n{1}\n\n",
        x + (x < 2 ? "st" : x < 3 ? "nd" : x < 4 ? "rd" : "th"),
        String.Join(
            "\n",
            "a partridge in a pear tree.|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"
                .Split('|').Take(x).Select((y, i) => (i > 0 ? (i + 1) + " " : "") + y).Reverse().ToArray()
        )
    );
2
ответ дан 5 revs 4 May 2012 в 03:35
поделиться

Вот erlang версия (~586 символов):

-module (xmas).
-export ([xmas/0]).
xmas() ->
    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 gold rings, ",
    "four calling birds, ",
    "three french hens, ",
    "two turtle doves, and ",
    "a partridge in a pear tree."],
    io:format(lists:foldl(
    fun(X,Acc) -> Acc ++ X ++ "~n" end, "",
    ["On the " ++ day_str(Q) ++ 
    " day of Christmas, my true love gave me " ++ 
    lists:foldl(
        fun(X,Acc)-> Acc++X end,
        "", lists:nthtail(12-Q,W)) || 
        Q <- lists:seq(1,12)]),[]).
day_str(Q) ->
    case Q of
        1 -> "1st";
        2 -> "2nd";
        3 -> "3rd";
        N -> erlang:integer_to_list(N,10) ++ "th"
    end.
2
ответ дан cheng81 4 May 2012 в 03:35
поделиться

LUA 540 (без вкладок & возвраты)

t={"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."} 

f=function(i) 
    r=i.."th" 
    if (i==1) then r=i.."st" 
    elseif (i==2) then r=i.."nd" 
    elseif (i==3) then r=i.."rd" 
    end 
    return r 
end 

for i=1,12 do 
    s="On the "..f(i).." day of Christmas my true love gave to me" 
    for j=13-i,12 do 
        s=s.." "..t[j] 
    end 
    print(s) 
end

, К сожалению, у нас нет строки к функции массива или способу сделать "сначала" через библиотеку даты. Достигает правильно телефона http://www.lua.org/cgi-bin/demo

0
ответ дан Nick Van Brunt 4 May 2012 в 03:35
поделиться
  • 1
    Спасибо, зафиксированное! Не протестированный все же, но скоро будет (поскольку я использую изменение этого кода каждый раз, когда мне нужны тесты:)) – mlvljr 26 May 2015 в 20:26

Python, 436 символов

(443 включая дополнительные новые строки)

print """
eJzlk91xxCAMhN9TxRZwSRMp4GpQjGw04ccDunOu+wjcgMkkk8vlxRjQst9q4JygnjFLqQpHN+QZ
r75I1UgV8QYtF0bIV8ZC9tGMyCCsVLSIWxiS2pSpWCnzy9N5P7HylJM7fqRuGXopGhjOtuoJZPID
RuqljPh4E2MunCYPz8mMvmw9Z1P5496tHhOFIGnBm2E38+/kkXkIR9o8B4diQGbz03xVPkb4rBwL
c7X79hzoZlCnX2DmK6ch6iZA3ShV466bxNjJ7yINy6J+JE0XIJK4liZKeN/D3HPIJIlHMrZ6BHLC
1URp6tR/MbiO3VQrt7XSAwamtUM/TDM4jL7cXYFVVi61DR38sbukG4fr0GvZFXDlEmPrU//Z8/+j
/n0CsHRGTA==
""".decode("base64").decode("zlib")
2
ответ дан Markus Jarderot 4 May 2012 в 14:35
поделиться
  • 1
    'статический func round_pow_2 (значение: CGFloat, decimalPlaces: CGFloat)-> CGFloat {позволяют decimalValue = голова (2.0, decimalPlaces) возврат вокруг (значение * decimalValue) / decimalValue}' – Bobjt 1 March 2016 в 08:00

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))
6
ответ дан 28 November 2019 в 17:33
поделиться

Это не победит, но вот моя версия Java (компилируемая и запускаемая) в 576 символов.

class T{enum D{first,second,third,fourth,fifth,sixth,seventh,eighth,ninth,tenth,eleventh,twelfth}public static void main(String[] args){String o="",s="s, ",i="ing, ";String t[]={"a partridge in a pear tree","two turtle doves, and ","three french hen"+s,"four calling bird"+s,"five gold ring"+s,"six geese a-lay"+i,"seven swans a-swimm"+i,"eight maids a-milk"+i,"nine ladies danc"+i,"ten lords a-leap"+i,"eleven pipers pip"+i,"twelve drummers drumm"+i};int j=0;while(j<12)System.out.println("On the "+D.values()[j]+" day of Christmas my true love gave to me "+(o=t[j++]+o));}}
1
ответ дан 28 November 2019 в 17:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: