Twój ulubiony język programowania właśnie miał urodziny. Bądź miły i zaśpiewaj piosenkę Happy Birthday .
Oczywiście powinieneś to osiągnąć, pisząc program w tym języku. Program nie pobiera danych i zapisuje następujący tekst na standardowym wyjściu lub dowolnym pliku:
Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear [your favourite programming language]
Happy Birthday to You
Powinieneś zastąpić nawias kwadratowy (i pominąć nawiasy kwadratowe).
To jest golfowy kod - wygrywa najkrótszy kod.
AKTUALIZACJA
Cieszę się, że pytanie wzbudziło duże zainteresowanie. Pozwól mi dodać kilka dodatkowych informacji na temat punktacji. Jak wspomniano pierwotnie, to pytanie dotyczy kodu golfowego, więc wygra najkrótszy kod. Zwycięzca zostanie wybrany pod koniec tego tygodnia (19 października).
Jednak nagradzam również inne dowcipne opinie dodatkowymi głosami (i zachęcam wszystkich, aby tak zrobili). Dlatego chociaż jest to konkurs golfowy, mile widziane są również niezbyt krótkie odpowiedzi.
Wyniki
Gratulacje dla Optimizera , zwycięzcy tego konkursu z jego 42-bajtowym przesłaniem CJam .
źródło
Odpowiedzi:
CJam,
4642 bajtówJak to działa:
Spowoduje to pozostawienie stosu na końcu kodu:
które są drukowane automatycznie w celu wydrukowania jako
Wypróbuj tutaj (Skopiuj kod i uruchom go)
źródło
LOLCODE: 109 (105 z „poprawną” pisownią)
LOLCODE nie jest świetnym językiem do gry w golfa, zwłaszcza, że tracisz całe piękno i ekspresję podczas skracania kodu.
Przetestuj za pomocą Loljs
To jest moje preferowane wykonanie, ważące 187 znaków (dodano spacje dla zachowania przejrzystości):
źródło
Mathematica - życzenia urodzinowe z kodem kreskowym - zdecydowanie za dużo bajtów
To drukuje wiersze i czyta je na głos.
StringReplace
zamienia każdy przecinek na NewLine. Kody kreskowe nie mogą zawierać znaków kontrolnych.źródło
10
kod kreskowy (prawy dolny róg), ponieważBarcodeRecognize
wprowadzono go w Mathematica 10. ^^TI-Basic, 53 bajty
Ponieważ wszyscy wprowadzają swój ulubiony język programowania, równie dobrze mogę dodać jeden z moich ulubionych. Spędziłem dużo czasu przez lata (zanim ukończyłem język programowania), wpisując polecenia w oknie o wielkości połowy smartfona.
Mój kalkulator nie obsługuje małych liter, a jedynymi zmiennymi, które mogą być łańcuchami, są Str1, Str2 itp.
źródło
Sed,
6055 bajtów(Dodano 1 znak, ponieważ nie ma sposobu, aby
sed
pracować bez wkładu).Z pewnością nie jest zwycięzcą, opublikowanym w celu wykazania
sed
rzadkiejs///
cechy zastępowania tylko n- tego wystąpienia.Sed (krótszy, ale nie interesujący): 52 znaki
Przykładowy przebieg:
źródło
sed
odpowiedzi zawsze wygrywają IMO :)sed
pracować bez wkładu.)”.C, 73 bajty
źródło
i++-3
. (Obecnie „Drogi c” pojawia się w 2. linii.) (Używając jednej zmiennej nazwałbym ją „c”.)Python,
616059źródło
H="\nHappy Birthday to You"
iprint(H*3)[:59]+" Dear Python"+H
print
argumentu.h="\nHappy Birthday to You";(h*3)[:60]+"Dear Python"+h
Dear
i zmieniając59
na60
.sh, 52
źródło
H()(echo Happy Birthday ${@:-to You});H;H;H Dear sh;H
.:-
także obejmuje przypadki, gdy jest ustawiony, ale pustyArnoldC , 228 bajtów
Niech Arnold Schwarzenegger śpiewa ...
wynik:
źródło
Invalid input '\', expected '"' (line 2, pos 40)
Hahpy Birfday
zmniejsza liczbę znaków o 4.APL (48)
źródło
↑'Happy birthday '∘,¨⌽4⍴3⍴'to you' 'dear APL'
Język programowania Szekspira , 3429 bajtów
Moje własne słowa, jakiś czas temu. A jednak ktoś był na tyle szalony, żeby to zrobić. Tak tak wiem. Za dużo bajtów. Ale myślę, że SPL zasługuje na uwzględnienie tutaj. I uwierzcie mi, zrobiłem olbrzymi wysiłek, aby „golfować” ten program, dlatego jest nieco powtarzalny i używa głównie tych samych słów (zawsze mogłem zastosować się do sugestii DLosc , ale byłoby to zbyt ekstremalne nawet dla mnie) .
Znaczenie tego wszystkiego?
OK, jeśli jesteś ciekawy, jak to wszystko ma działać, pozwól mi wyjaśnić swoje rozumowanie. Po pierwsze zmienne. Muszą pochodzić ze sztuk Shakespera, a ponieważ liczba znaków jest ważna, musimy wybierać te małe; w ten sposób,
Ajax
iFord
pojawiają się. Potrzebują opisu po zadeklarowaniu (który jest ignorowany, ale nadal); Mógłbym użyć jednej litery, ale heh.Akt I, Scena I
var Ajax, Ford; Ford = 0;
Wprowadzamy zmienne na scenę i
Ajax
informujemy,Ford
że jego wartość wyniesie 0.Akt I, Scena II
if (Ford > 2*1+1) goto Scene V; Ford = Ford + 1;
OK, jeśli zapisana wartość
Ford
jest większa niż 3, program przejdzie do sceny V; w przeciwnym razie jego wartość jest zwiększana.Akt I, Scena III
Ford = 2*2*2*2*2*2*1+2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*1-1; print((char) Ford); Ford = Ford+2*2*2*2*1-1; print((char) Ford); print((char) Ford); Ford = Ford+2*2*2*1+1; print((char) Ford); Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*1+2*2*2*1+(-1); print((char) Ford); Ford = Ford+2*2*2*1+1; print((char) Ford); Ford = Ford+2*1; print((char) Ford); Ford = Ford+2*2*2*(-1)+2*2*(-1); print((char) Ford); Ford = Ford+2*2*(-1); print((char) Ford); Ford = Ford+2*(-1)+(-1); print((char) Ford); Ford = Ford+2*2*2*2*1+2*2*2*1; print((char) Ford); if (Ajax == 2*1) goto Scene IV; Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*2*1+2*2*2*2*2*1+2*(-1); print((char) Ford); Ford = Ford+2*2*(-1)+(-1); print((char) Ford); Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*2*1+2*2*2*(-1)+1; print((char) Ford); Ford = Ford+2*2*2*2*1+2*2*2*1+2*(-1); print((char) Ford); Ford = Ford+2*2*2*1+2*-1; print((char) Ford); goto Scene II;
Obciążenia i obciążenia linii. Chodzi o to, aby manipulować zapisaną wartością
Ford
, wykonywać mnóstwo operacji arytmetycznych w celu uzyskania liczby ASCII żądanych liter, a następnie mówimy kompilatorowi, aby wypisał liczbę w postaci znakowej. Tak piszeszHappy Birthday
. Jest wif
tej scenie: chodzi o sprawdzenie, czy to jest trzecie zdanie piosenki; jeśli tak, przeskakujemy do Sceny IV; w przeciwnym razie będziemy pisać dalejto You
. Następnie wracamy do sceny II.Akt I, Scena IV
Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*2*1+2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*1+1; print((char) Ford); Ford = Ford+2*2*(-1); print((char) Ford); Ford = Ford+2*2*2*2*1+1; print((char) Ford); Ford = 2*2*2*2*2*1; print((char) Ford); Ford = Ford+2*2*2*2*2*1+2*2*2*2*1+2*1+1; print((char) Ford); Ford = Ford+2*(-1)+(-1); print((char) Ford); Ford = Ford+2*2*(-1); print((char) Ford); goto Scene II;
Sposób, w jaki to działa, jest podobny do powyższej Sceny: chodzi o pisanie
Dear SPL
.Akt I, Scena V.
End.
Właśnie tak.
Wciąż nie znalazłem miejsca, w którym można by to przetestować, niestety ...
źródło
fat fat fat fat cat
. Ponadto używam github.com/drsam94/Spl/blob/master/splc.py do kompilacji mojego kodu spl.Rubinowy, 54 bajty
Pomyślałem tylko: „Hej, nie ma jeszcze odpowiedzi Ruby”, ale potem pojawiła się kilka sekund przed tą. No cóż...
źródło
Jakaś miłość do PHP?
615958 bajtówZobacz to w akcji @ http://sandbox.onlinephpfunctions.com/
źródło
$s="\nHappy Birthday";echo$t="$s to You","$t$s Dear PHP$t";
<?=$t=($s="\nHappy Birthday")." to You","$t$s Dear PHP$t"?>
\n
rzeczywisty podział linii, aby zapisać znak.Po prostu nie mogę zdecydować się na tylko jeden język: /
BrainBack: 68
BrainBack to połączenie BrainFuck i Forth, stworzone na wyzwanie PCG 7 marca 2014
Extended BrainFuck : 79
Urodziny EBF przypadają na 16 lipca 2010 r
Schemat: 96
(R5RS, rakieta, R6RS REPL)
Program powstał w grudniu 1975 r. (NB: PDF)
Zozotez : 96
Jednak wydaje się bardziej słuszne, robiąc to po francusku (86):
Wynik:
Urodziny Zozoteza to 19 lipca 2011 r
źródło
Joyeux anniversaire à Zozotez
.Deadfish (
26102391 znaków)Co to jest? Wyzwanie tylko wyjściowe? Wygląda na to, że to praca dla Deadfish !
Niestety, ponieważ Deadfish generuje tylko liczby całkowite, powyższy kod generuje reprezentacje ASCII każdego znaku w utworze.
Jeśli użyjemy specyfikacji, że
możemy zagrać w golfa do 2391 znaków:
Uwaga: Deadfish nie jest tak naprawdę moim ulubionym językiem, ale nie mogłem się oprzeć: P. Gra w golfa w Deadfish jest sama w sobie zabawną łamigłówką.
źródło
JS, 83 bajty
lub 79 bajtów @Ingo Bürk
lub 71 bajtów przez @kapep
lub uruchom na konsoli tę stronę (42 bajty)
źródło
h='Happy Birthday ',t='to You\n';console.log(h+t,h+t,h+'Dear Javascript\n',h+t)
(nadal możesz użyć,prompt
aby zaoszczędzić jeszcze więcej)t='to you\n';console.log(h='Happy birthday',t+h,t+h,'dear JavaScript\n'+h,t)
console.log(a=(b="Happy Birthday ")+"to You\n",a,b+"Dear Javascript\n",a)
alert((t=(h="Happy Birthday ")+'to You\n')+t+h+'dear EcmaScript\n'+t)
69R: 70 bajtów
Korzysta z
paste
recyklingu wektorowego.źródło
cat(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R"),'\n'))
cat
dodaje spacje między łańcuchami. Tak więc kończysz spacją na początku każdej linii oprócz pierwszej.write(x,"")
->write(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R")),"")
68 bajtów. Oto moje oryginalne rozwiązanie z 73p=paste;write(c(i<-p(h<-"Happy Birthday","to You"),i,p(h,"Dear R"),i),"")
recyklingiem Vector bije mnie ponownie.`~`=rep;write(paste("Happy Birthday"~4,c("to You"~2,"Dear R")),"")
tio.run/##K/r/…T-SQL,
8987 bajtówEdycja: Prawdopodobnie nie powinienem pogłębiać tych starych rzeczy, ale zauważyłem oczywistą zmianę w tym, by odzyskać kilka bajtów.
Używając STUFF do usuwania niechcianych części ciągu, indeks początkowy jest zapewniany przez wartości w
FROM
klauzuli pomnożone przez 3źródło
GNU dc, 51
źródło
dc
, ale nawet prawie surowa wersja jest krótsza:[Happy Birthday To You]d[Happy Birthday Dear dc]rdf
51 znaków.Perl - 58
Biegnij z:
Dla żartu:
źródło
say"Happy Birthday $_"for("to You","Dear Perl")[0,0,1,0]
?Python 507 bajtów
Nie wygrywając żadnych nagród ... ale jeśli przyjrzysz się temu uważnie, znajdziesz trochę grafiki ASCII:
źródło
PowerShell -
696459i 91
i 108
źródło
Ruby, 56
źródło
=
zawsze zwraca wynik wyrażenia po znaku równości. Gdybym to podkreślił, wydrukowałoby to tylko"Dear Ruby"
(String#[]=
jest to metoda).Cudowny , 151
Drukuje za
Happy Birthday
każdym razem, gdyhb
jest wywoływane, z jednymto you
lubDear Marbelous
dołączonym, w zależności od tego, czy wejście jest0
lub1
. Przekazany marmurhb
nie zostanie wyprowadzony, ponieważ utknie w synchronizatorze&0
.Poniżej znajduje się plansza
hb
z heksami przekonwertowanymi na tekst ascii:źródło
CJam, 46 bajtów
Wypróbuj tutaj.
Pozostawia to następującą tablicę na stosie:
Które treści są automatycznie drukowane jeden po drugim na końcu programu.
Alternatywnie, z pętlą for i tą samą liczbą znaków:
źródło
Haskell: 75
Kod wyjściowy w ideone
Haskell one liner: 79
Możesz wypróbować jeden liner online tutaj: http://tryhaskell.org/
źródło
mapM_(print.("Happy Birthday "++))["to You","to You","dear Haskell","to You"]
putStrLn
zgodne ze specyfikacją (otrzymujesz podwójne cudzysłowyprint
)_
jest to konieczne, ponieważ wartość zwrotna main jest wyrzucana - widać to tylko w GHCiVar'aQ - 121
źródło
GolfScript: 54 znaki
Przykładowy przebieg:
źródło
T-SQL (zgodny z MS): 75
źródło
+char(10)
je znakiem podziału w cudzysłowie, po prostu utwórz część zwracaną ciągu.C #
(75)(73)Używanie
System.Diagnostics
do celówDebug.Print
Zaktualizuj do kodu @Abbas
Uaktualnij do kodu @Tyress '
(83)(76)Wynik:
źródło
String.Format
i operatora trójskładnikowego. Możesz także sprawić, że będzie to wyglądać znacznie mniej jak program w języku C # i użyji++<3
; p