Canta buon compleanno al tuo linguaggio di programmazione preferito


119

Il tuo linguaggio di programmazione preferito ha appena avuto un compleanno. Sii gentile e canta la canzone di Happy Birthday .

Ovviamente dovresti farlo scrivendo un programma in quella lingua. Il programma non accetta input e scrive il seguente testo nell'output standard o in un file arbitrario:

Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear [your favourite programming language]
Happy Birthday to You

È necessario sostituire la parte tra parentesi (e omettere le parentesi).

Questo è un codice golf: vince il codice più corto.

AGGIORNARE

Sono contento che la domanda abbia suscitato grande interesse. Vorrei aggiungere alcune informazioni extra sul punteggio. Come affermato in origine, questa domanda è un codice golf, quindi il codice più corto vincerà. Il vincitore verrà scelto alla fine di questa settimana (19 ottobre).

Tuttavia, sto anche premiando altre osservazioni argute con voti positivi (e incoraggio anche tutti a farlo). Pertanto, sebbene si tratti di una gara di code-golf, sono gradite anche risposte non così brevi.

risultati

Congratulazioni a Optimizer , il vincitore di questo concorso con la sua presentazione CJam lunga 42 byte .


2
Possiamo contare il nome del linguaggio di programmazione come un byte perché sembrerebbe giusto per le persone che codificano in un linguaggio prolisso come JavaScript rispetto a qualcuno che lo fa in C. Stiamo davvero cercando la maggior parte della logica creativa, giusto?
MonkeyZeus,

14
Perché tutti i voti positivi per questo nonostante tutti i voti negativi per la canzone Bonbon ? Questa è una sfida altrettanto noiosa.
xnor

10
Dovrei probabilmente menzionare che la canzone è protetta da copyright e la distribuzione di questi programmi può causare un DMCA
maniaco del cricchetto


4
Almeno una delle risposte stampa una nuova riga principale . È permesso?
Dennis,

Risposte:


47

CJam, 46 42 byte

"Happy Birthday to You
"___F<"Dear CJam
"@

Come funziona:

"Happy Birthday to You
"___                          "Push "Happy Birthday to You\n" string to stack 4 times";
    F<                        "From the last string, take only first 15 characters. F is a";
      "Dear CJam              "preinitialized variable whose value is 15";
"                             "Push "Dear CJam\n" to stack";
 @                            "Take the third string from end and put it to end";

Questo lascia lo stack come segue alla fine del codice:

["Happy Birthday to You
" "Happy Birthday to You
" "Happy Birthday " "Dear CJam
" "Happy Birthday to You
"]

che vengono stampati automaticamente per essere stampati come

Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear CJam
Happy Birthday to You

Provalo qui (copia il codice ed eseguilo)


1
la cosa dei "primi 15 caratteri" viene dalla F? è così che conosce il numero 15?
Vijrox,

1
Sì, af sono 10-15.
Jacob

122

LOLCODE: 109 (105 con ortografia "corretta")

LOLCODE non è un linguaggio eccezionale per giocare a golf, soprattutto perché si perde tutta la bellezza e l'espressività quando si accorcia il codice.

HAI
H R "HAPPY BIRTHDAY "
T R SMOOSH H "TO YOU"
VISIBLE T
VISIBLE T
VISIBLE SMOOSH H "DEAR LOLCODE"
VISIBLE T

Provalo usando loljs

Questa è la mia interpretazione preferita, con un peso di 187 caratteri (spazi aggiunti per maggiore chiarezza):

HAI
H R "HAPPY BERFDAY "
IM IN YR LOOP UPPIN YR N TIL BOTH SAEM N AN 4
  VISIBLE H!
  BOTH SAEM N AN 2, O RLY?
    YA RLY
      VISIBLE "DEER LOLCODE"
    NO WAI
      VISIBLE "2U"
    OIC
IM OUTTA YR LOOP
KTHXBAI

15
Sapevo solo che ci sarebbe stata una risposta LOLCODE a questo. A proposito, non hai mai scritto niente di simile a Kwotez? KTHXBYE.
Level River St

2
Ho provato a scrivere una risposta LOLCODE a un'altra sfida qualche tempo fa, ma è troppo prolisso per il golf del codice e manca strutture di dati decenti e la capacità di creare funzioni complesse, quindi questo ha limitato i miei sforzi!
Ho allarmato l'alieno il

3
Questa risposta mi ha spinto a scaricare LOCODE e ad impararlo correttamente.
Pharap,

2
Questo è fantastico !!
Dopo il

89

Mathematica - auguri di compleanno con codice a barre - troppi byte

Questo stampa i versi e li legge ad alta voce.

happy birthday

Tanti auguri a te
Tanti auguri a te
Buon compleanno Caro Mathematica,
tanti auguri a te

StringReplacesostituisce ogni virgola con una NewLine. I codici a barre non possono contenere caratteri di controllo.


13
Non riesco a vedere un pulsante con codice a barre sulla mia tastiera! Come posso provarlo?
matsjoyce,

17
Adoro 10il codice a barre (angolo in basso a destra), visto che è BarcodeRecognizestato introdotto in Mathematica 10. ^^
Martin Ender,

Sì! Non me ne ero accorto.
DavidC,

11
In realtà l'ho scannerizzato con un lettore di codici QR. Ha spazi extra dopo ogni virgola, non potresti salvare byte se ... oh, aspetti. Non importa.
Timwi

55

TI-Basic, 53 byte

Bene, dal momento che tutti stanno mettendo a punto il loro linguaggio di programmazione preferito, potrei anche aggiungere uno dei miei vecchi preferiti. Nel corso degli anni ho trascorso molto tempo (prima di passare ai linguaggi di programmazione reali) digitando i comandi in una finestra grande la metà di uno smartphone.

"HAPPY BIRTHDAY TO YOU
Disp Ans,Ans,sub(Ans,1,15)+"DEAR TI-BASIC
Ans

La mia calcolatrice non supporta lettere minuscole e le uniche variabili che possono essere stringhe sono Str1, Str2 ecc.


Quale sapore di TI-Basic? L'ho familiarizzato con la TI-84.
Jesan Fafon,

7
Sempre bello vedere TI-Basic. Questo sembra essere 8x TI-Basic standard, in cui qualsiasi espressione viene automaticamente memorizzata in Ans, che può essere utilizzata una strategia di ottimizzazione strana e difficile da seguire. Ho anche iniziato a programmare con questo fantastico linguaggio.
codebreaker

4
Nota per i redattori: è possibile pubblicare eventuali modifiche (in questo caso perdita di 8 caratteri) nei commenti anziché modificarle? Questo mi farebbe sentire come se questa fosse ancora la mia risposta.
Stretch Maniac,

2
+1 !! è così che ho imparato anche a programmare. Ho costruito Tron per la TI-83: ​​D è stato piuttosto lento, quindi non è divertente.
Nacht,

2
Haha è fantastico. Ho realizzato un gioco del Blackjack per la TI-83. Nel processo ho imparato tutte le regole del Blackjack abbastanza intimamente.
thomasrutter,

44

Sed, 60 55 byte

(1 carattere aggiunto perché non c'è modo di far sedfunzionare senza input.)

s/^/Happy Birthday To You/
h
G
G
G
s/To You/Dear sed/3

Certamente non un vincitore, pubblicato per dimostrare la sedrara 's s///caratteristica di sostituire solo il n ° verificarsi.

bash-4.3$ sed 's/^/Happy Birthday To You/;h;G;G;G;s/To You/Dear sed/3' <<< ''
Happy Birthday To You
Happy Birthday To You
Happy Birthday Dear sed
Happy Birthday To You

Sed (più breve ma non interessante): 52 personaggi

s/^/Happy Birthday To You/
h
G
p
s/To You/Dear sed/

Esecuzione di esempio:

bash-4.3$ sed 's/^/Happy Birthday To You/;h;G;p;s/To You/Dear sed/' <<< ''
Happy Birthday To You
Happy Birthday To You
Happy Birthday Dear sed
Happy Birthday To You

7
sedle risposte sono sempre vincenti IMO :)
Digital Trauma,

La risposta più breve sembra essere di 51 byte, anziché i 52 che hai elencato
Taylor Scott,

1
@TaylorScott, la spiegazione in alto si applicava anche lì: "(1 carattere aggiunto perché non c'è modo di far sedfunzionare senza input.)".
arte

Ahh, ha senso :)
Taylor Scott,

30

C, 73 byte

main(c){for(;c-5;)printf("Happy Birthday %s\n",++c-4?"To You":"Dear C");}

Insetto insignificante: dovrebbe essere i++-3. (Attualmente la "Cara c" appare nella seconda riga.) (Mentre uso una singola variabile, la
chiamerei

costante fissa, variabile modificata. Qualche idea per abbreviare il codice?
VX,

Spiacente, non ho idea di accorciarlo. C non è la mia forza. (Ho trovato il bug perché anche il tuo punteggio attuale è così incredibile per me che ho dovuto provarlo.;))
manatwork

12
Non dovrebbe essere "Dear C" (maiuscolo)?
TRiG

Mi mancano anche i personaggi dell'interpunzione lì ...
VX

27

Python, 61 60 59

H="\nHappy Birthday to You"
print(H*3)[:60]+"Dear Python"+H

1
Puoi salvare 1 byte - H="\nHappy Birthday to You"eprint(H*3)[:59]+" Dear Python"+H
Stretch Maniac il

1
Questo python è 2.7 o 3?
George,

2
@George: Python 2.7, poiché non ha parentesi attorno printall'argomento.
Falko,

1
Conta l'output di un interprete interattivo? h="\nHappy Birthday to You";(h*3)[:60]+"Dear Python"+h
Threed

1
Puoi salvarne uno in più rimuovendo lo spazio prima Deare cambiando 59in 60.
Threed

26

sh, 52

H()(echo Happy Birthday ${@-to You});H;H;H Dear sh;H

3
Con l'espansione di parametro valore di default solo 53 caratteri: H()(echo Happy Birthday ${@:-to You});H;H;H Dear sh;H.
arte

Ooh bravissimo @manatwork!
Trauma digitale

2
È possibile omettere i due punti nell'espansione del parametro - che funziona se il parametro non è mai stato impostato, mentre :-copre anche i casi quando è impostato ma vuoto

@professorfish Nice - grazie, non lo sapevo!
Trauma digitale,

@DigitalTrauma Un buon posto dove cercare se devi salvare i personaggi è wiki.bash-hackers.org/syntax/pe - c'è un elenco di tutta la sintassi di espansione dei parametri

22

ArnoldC , 228 byte

Facciamo cantare Arnold Schwarzenegger ...

IT'S SHOWTIME
TALK TO THE HAND "Happy Birthday to You"
TALK TO THE HAND "Happy Birthday to You"
TALK TO THE HAND "Happy Birthday Dear ArnoldC"
TALK TO THE HAND "Happy Birthday to You"
YOU HAVE BEEN TERMINATED

produzione:

Happy Birthday to You
Happy Birthday to You
Happy Birthday Dear ArnoldC
Happy Birthday to you


@squeamishossifrage lol, risolto.
Wasi,

16
Forse puoi aggiungere un lisp di Ahnold! Hahpy Birfdayriduce il conteggio dei personaggi di 4.
Bussola


19

Shakespeare Programming Language , 3429 byte

nessuno sarà abbastanza demenziale per partecipare a una sfida di con SPL, quindi ...

Le mie stesse parole, qualche tempo fa. Eppure, qualcuno è stato demente abbastanza per farlo. Si si lo so. Troppi byte. Ma SPL merita di essere incluso qui, credo. E credimi , ho fatto uno sforzo gigantesco per "giocare a golf" questo programma, motivo per cui è un po 'ripetitivo e usa principalmente le stesse parole (avrei sempre potuto seguire il suggerimento di DLosc , ma sarebbe troppo estremo anche per me) .

A Happy Birth Day

Ajax, a hero
Ford, a man

          Act I: 1

          Scene I: 1

[Enter Ajax and Ford]

Ajax:
 You are nothing!

          Scene II: 2

Ford:
 Am I nicer than the sum of a big cow and a son?

Ajax:
 If so, we shall go to Scene V. You are as big as the sum of thyself and a cat!

          Scene III: 3

Ford:
 You are as red as the sum of a big red warm rich bold fair cat and a big rich fine son.
 Speak thy mind! You are as big as the sum of thyself and the sum of a cute fair fine
 rich cat and a hog! Speak thy mind! You are as big as the sum of thyself and the sum
 of a cute fair fine rich cat and a hog. Speak thy mind. Speak thy mind! You are as bold as
 the sum of thyself and the sum of a big fine fair cat and a cow. Speak thy mind! You are
 as big as a red old fair fine tiny cow. Speak thy mind! You are as old as the sum of
 thyself and the sum of a red old fair fine tiny cow and a big joy. Speak thy mind.
 You are as red as the sum of thyself and the sum of the sum of a red old fair fine
 tiny cow and a rich old red sky and a pig. Speak thy mind! You are as old as the sum
 of thyself and the sum of a big fine fair joy and a son. Speak thy mind. You are as
 red as the sum of thyself and a cute son. Speak thy mind! You are as cute as the sum
 of thyself and the sum of a bad fat vile pig and a fat bad lie. Speak thy mind! You are
 as fat as the sum of thyself and a vile evil war. Speak thy mind! You are as vile as the
 sum of thyself and the sum of a pig and a toad. Speak thy mind! You are as fair as the
 sum of thyself and the sum of a big fair hard fine son and a red fine fair joy. Speak
 thy mind! Are you as old as a big cow?

Ajax:
 If so, we shall go to Scene IV.

Ford:
 You are as big as a red old fair fine tiny cow. Speak thy mind! You are as old as the sum
 of thyself and the sum of the sum of a big red warm rich bold fair cat and a red old fair
 fine tiny cow and a bad hog. Speak thy mind! You are as big as the sum of thyself and the
 sum of a fat bad hog and a war. Speak thy mind! You are as big as a red old fair fine tiny
 cow. Speak thy mind! You are as old as the sum of thyself and the sum of a big red warm
 rich bold fair cat and a fat foul bad hog and a son. Speak thy mind. You are as fat as
 the sum of thyself and the sum of the sum of a big fair hard fine son and a big fine
 fair joy and a bad pig. Speak thy mind. 

Ajax:
 Let us return to Scene II.

          Scene IV: 4

Ford:
 You are as big as a red old fair fine tiny cow. Speak thy mind! You are as old as the
 sum of thyself and a big red warm rich bold fair cat and a warm sky. Speak thy mind.
 You are as fat as the sum of thyself and the sum of a red old fair fine tiny cow and a
 cat. Speak thy mind. You are as fat as the sum of thyself and a bad foul hog. Speak
 thy mind. You are as cute as the sum of thyself and the sum of a big fair hard fine
 son and a sky. Speak thy mind. You are as big as a red old fair fine tiny cow. Speak thy
 mind! You are as old as the sum of thyself and the sum of thyself and the sum of the sum
 of the sum of a red old fair fine tiny cow and a big fair hard fine son and a big joy and
 a son. Speak thy mind. You are as bad as the sum of thyself and the sum of a fat pig and a
 hog. Speak thy mind. You are as fat as the sum of thyself and a lazy pig. Speak thy mind.

Ajax:
 Let us return to Scene II.

          Scene V: 5

[Exeunt]

Il significato di tutto questo?

OK, se sei curioso di sapere come dovrebbe funzionare tutto ciò, lasciami provare a spiegare il mio ragionamento. Innanzitutto, le variabili. Devono provenire da commedie shakesperiane e, poiché il conteggio dei caratteri è importante, dobbiamo scegliere quelli piccoli; così, AjaxeFord apparire. Hanno bisogno di una descrizione dopo essere stati dichiarati (che è ignorato, ma comunque); Avrei potuto usare una sola lettera, ma eh.

Atto I, scena I

var Ajax, Ford; Ford = 0;

Portiamo le variabili sul palco e facciamo Ajaxcapire Fordche il suo valore sarà 0.

Atto I, scena II

if (Ford > 2*1+1) goto Scene V; Ford = Ford + 1;

OK, se il valore memorizzato Fordè maggiore di 3, il programma passa alla scena V; altrimenti, il suo valore viene incrementato.

Atto 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;

Carichi e carichi di linee. L'idea è quella di giocherellare con il valore archiviato Ford, facendo un sacco di operazioni aritmetiche al fine di ottenere il numero ASCII delle lettere desiderate, quindi diciamo al compilatore di produrre il numero in forma di carattere. È così che scrivi Happy Birthday. C'e 'unif dentro scena: l'idea è di verificare se questa è la terza frase della canzone; se lo è, passiamo alla scena IV; altrimenti continuiamo a scrivereto You . Dopodiché, torniamo alla scena II.

Atto 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;

Il modo in cui funziona è simile alla scena sopra: l'idea è quella di scrivere Dear SPL .

Atto I, scena V

End.

Proprio così.

Non ho ancora trovato un posto dove questo può essere testato, sfortunatamente ...


Penso che dovresti essere in grado di ripetere le parole, come fat fat fat fat cat. Inoltre, utilizzo github.com/drsam94/Spl/blob/master/splc.py per compilare il mio codice spl.
clamchowder314

16

Rubino, 54 byte

Ho solo pensato "Ehi, non c'è ancora una risposta di Ruby", ma poi ne è comparso uno pochi secondi prima di questo. Oh bene...

puts h="Happy Birthday to You",h,h[0,15]+"Dear Ruby",h

16

Qualche amore per PHP? 61 59 58 byte

$s="
Happy Birthday";echo$t="$s to You","$t$s Dear PHP$t";

Guardalo in azione @ http://sandbox.onlinephpfunctions.com/


1
Combina l'incarico in $ t con il suo primo output:$s="\nHappy Birthday";echo$t="$s to You","$t$s Dear PHP$t";
manatwork

@manatwork ottimo suggerimento, grazie!
MonkeyZeus,

58
No. Non c'è amore per PHP. Mai.
Nome falso

Stesso numero di byte con tag brevi:<?=$t=($s="\nHappy Birthday")." to You","$t$s Dear PHP$t"?>
AmadeusDrZaius,

1
Sostituisci \ncon un'interruzione di riga effettiva per salvare un carattere.
Christoph,

15

Non riesco proprio a decidere su una sola lingua: /

BrainBack: 68

4 ["Happy birthday ">2 ->![<0 "to You
"]<[<0 "Dear BrainBack
"]<1 -]

BrainBack è un mix tra BrainFuck e Forth, creato per a sfida PCG il 7 marzo 2014

BrainFuck esteso : 79

{h|"Happy Birthday ">}{t|"to You
">}&h&t&h&t&h|"Dear Extended BrainFuck
">&h&t

Il compleanno di EBF è 16 luglio 2010

Schema: 96

(R5RS, Racchetta, R6RS REPL)

(map(lambda(e)(display"Happy Birthday ")(display(if e "to You\n" "Dear Scheme\n")))'(1 1 #f 1))

Scheme è nata nel dicembre 1975 (NB: PDF)

Zozotez : 96

((:'R(\(l)(p'|Happy birthday |())(p(?(a l)'|to You|'|Dear Zozotez|))(?(d l)(R(d l)))))'(t t()t))

Tuttavia, sembra più giusto farlo in francese (86):

((:'A(\(l)(p'|Joyeux anniversaire|())(p(a l))(?(d l)(A(d l)))))'(, , | Zozotez,| |.|))

Produzione:

Joyeux anniversaire,
Joyeux anniversaire,
Joyeux anniversaire Zozotez,
Joyeux anniversaire.

Il compleanno di Zozotez è il 19 luglio 2011


4
+1 per "Buon compleanno caro Extended Brainfuck", probabilmente il nome della lingua più laborioso qui. Eppure il programma è una frazione della dimensione dell'equivalente per la lingua madre. E per Zozotez, che in effetti suona meglio in francese, anche se in generale non mi piace molto il modo in cui i francesi comprimono il nome della persona in una linea identica per questa canzone.
Level River St

Nella tua risposta Zozotez, dovrebbe essere Joyeux anniversaire à Zozotez.
Decadimento beta

2
@BetaDecay Secondo la mia moglie (francese) dovrebbe essere senza tale preposizione. Wikipedia francese è d' accordo.
Sylwester,

14

Pesce morto ( 2610 2391 caratteri)

Che cos'è questo? Un'uscita unica sfida? Sembra che sia un lavoro per Deadfish !

iiisdsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddsdddddodddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiioiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddsdddddodddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiioiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioddddoiiiiiiiiiiiiiiiiioddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioddddoiiioiioiiioiiiiiiiiiiodddddddddddoddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddsdddddodddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiioiiiiiio

Sfortunatamente, poiché Deadfish emette solo numeri interi, il codice sopra emette le rappresentazioni ASCII di ogni carattere della canzone.

Se usiamo le specifiche che

Gli errori non vengono riconosciuti: la shell aggiunge semplicemente un carattere di nuova riga!

allora possiamo giocare a golf fino a 2391 caratteri:

iiisdsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddsdddddodddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiioiiiiiiofdddddddddddddddddddddddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddsdddddodddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiioiiiiiiofdddddddddddddddddddddddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioddddoiiiiiiiiiiiiiiiiioddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiiiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioddddoiiioiioiiioiiiiiiiiiiodddddddddddofddddddddddddddddddddddddddddddddoiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiiiiiiiiooiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddoddddddddddddddddddddddddsiioiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiioiiiiiiiiioiioddddddddddddoddddodddoiiiiiiiiiiiiiiiiiiiiiiiiodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddsdddddodddddodddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddodddddddddddddddddddddddsiiiiiiiioiiiiiiiiiiiiiiiiiiiiiioiiiiiio 

Nota: Deadfish non è in realtà la mia lingua preferita, ma non ho potuto resistere: P. Anche giocare a golf in Deadfish è un puzzle divertente da solo.


19
Per certi valori di "divertimento".
Charles Wood,

13

JS, 83 byte

h="Happy Birthday to You\n",console.log(h,h,h.replace("to You\n","Dear")+" JS\n",h)

o 79 byte di @Ingo Bürk

h="Happy Birthday ",t="to You\n",console.log(h+t,h+t,h+"Dear Javascript\n",h+t)

o 71 byte di @kapep

console.log(a=(b="Happy Birthday ")+"to You\n",a,b+"Dear Javascript\n",a)

o esegui sulla console questa pagina (42 byte)

eval($("#answer-39759 code:first").text())

4
Inoltre, questo è più breve: h='Happy Birthday ',t='to You\n';console.log(h+t,h+t,h+'Dear Javascript\n',h+t)(puoi ancora usare promptper risparmiare ancora di più)
Ingo Bürk,

11
LOL all'ultimo pezzo di codice ..: D
Ottimizzatore

1
76:t='to you\n';console.log(h='Happy birthday',t+h,t+h,'dear JavaScript\n'+h,t)
NinjaBearMonkey,

1
71:console.log(a=(b="Happy Birthday ")+"to You\n",a,b+"Dear Javascript\n",a)
kapex,

3
alert invece console.log, necessita di altre 2 parentesi ma più breve: alert((t=(h="Happy Birthday ")+'to You\n')+t+h+'dear EcmaScript\n'+t)69
edc65

11

R: 70 byte

Sfrutta pastee ricicla il vettore.

writeLines(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R")))

cat(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R"),'\n'))
germcd,

@germcd Non funziona del tutto, poiché cataggiunge spazi tra le stringhe. Quindi finisci con uno spazio all'inizio di ogni riga tranne la prima.
bdzimmer,

write(x,"")-> write(paste(rep("Happy Birthday",4),c(rep("to You",2),"Dear R")),"")68 byte. Ecco la mia soluzione originale con il p=paste;write(c(i<-p(h<-"Happy Birthday","to You"),i,p(h,"Dear R"),i),"")riciclaggio Vector 73 mi batte di nuovo.
Vlo,

Ridotto a 66 byte `~`=rep;write(paste("Happy Birthday"~4,c("to You"~2,"Dear R")),"") tio.run/##K/r/…
Nick Kennedy il

11

T-SQL, 89 87 byte

Modifica: Probabilmente non dovrei trascinare queste vecchie cose, ma ho appena notato un evidente cambiamento a questo per recuperare un paio di byte.

Utilizzando STUFF per rimuovere parti indesiderate della stringa, l'indice iniziale viene fornito dai valori nella FROMclausola moltiplicati per 3

SELECT STUFF('Happy Birthday to You  Dear SQL',N,8,'')FROM(VALUES(24),(24),(15),(24))S(N)

Questo è carino!
TLama,

Questa è una brillante soluzione SQL e un trucco molto bello!
BradC

9

GNU cc, 51

[Happy Birthday to You]d[Happy Birthday Dear dc]rdf

3
Ci ho anche provato dc, ma anche la versione quasi raw è più corta: [Happy Birthday To You]d[Happy Birthday Dear dc]rdf51 caratteri.
arte

Oggi, @manatwork :)
Digital Trauma,

3
Ho saputo dell'esistenza di DC oggi grazie a questo post ed è eccellente.
Caleb Paul,

9

Perl - 58

say"Happy Birthday ".($_?"Dear Perl":"To You")for(0,0,1,0)

Corri con:

perl -E'say"Happy Birthday ".($_?"Dear Perl":"To You")for(0,0,1,0)'

Solo per divertimento:

perl -E'for(<HappyBirthday{0,1,2,3}>){s/B/ B/;s/2/ Dear Perl\n/;print s/\d/ To You\n/r}'

6
Che ne dici say"Happy Birthday $_"for("to You","Dear Perl")[0,0,1,0]?
core1024

@ core1024 Non sapevo che avresti potuto farlo con gli array, è fantastico. Sentiti libero di pubblicare come risposta personale!
hmatt1,

8

Python 507 byte

Stampa """
H ap py- Bir th day -to-Y ou = Happy - B irt hday
- a - Y ou = H appy - B irthday - D e
ar-P ython = Ha ppy - Bir t hda y -to- Y o uHapp y -
B oggi - a - Y ou = H app
y - B irth day -to-Y ou = H a ppy - B ir
"" ".replace (" \ n "," "). replace (" "," "). replace (" - "," ") .replace (" = "," \ n ") [: 92]

Non vincere alcun premio ... ma se lo guardi attentamente, c'è qualche arte ASCII:

# # # ### ### # # ### ##### ### ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # # # #
#### ##### ### ### # ### # ### # #### # # ##### # #
# # # # # # # # # # # # # # # # # # #
# # # # # # # ### ##### # # # # # ### # # # #

Questo non è un serio contendente.
Esolanging Fruit,

3
@ Challenger5 Sì, "Tuttavia, sto anche premiando altre osservazioni argute con voti positivi (e incoraggio anche tutti a farlo). Pertanto, sebbene si tratti di una gara di code-golf, sono gradite anche risposte non così brevi ".
Alex

7

PowerShell - 69 64 59

1,1,0,1|%{"Happy Birthday "+("Dear $ShellId","To You")[$_]}

e 91

$a,$b,$c="Happy Birthday.To You.Dear PowerShell".Split(".");1..2|%{"$a $b"};"$a $c";"$a $b"

e 108

$a=@();$b,$c="To You.Dear PowerShell".Split(".");1..4|%{$a+="Happy Birthday $b"};$a[2]=$a[2]-replace$b,$c;$a

6

Ruby, 56

x="Happy Birthday To You
"*4
x[59,6]="Dear Ruby"
puts x

Non puoi incorporare le cose?
Ottimizzatore

2
Un metodo che termina in =restituisce sempre il risultato dell'espressione dopo il segno di uguale. Se lo sottolineassi, verrebbe solo stampato "Dear Ruby"( String#[]=è un metodo).
britishtea,

1
> Newline in stringhe. Ok, ora sono completamente convinto che il rubino sia solo magia voodoo e come contadino dovrei invece attenermi al pitone.
sagiksp,

6

Marbelous , 151

Stampa Happy Birthdayogni volta che hbviene chiamato, con to youo Dear Marbelousaggiunto, a seconda che l'input sia 0o 1. Il marmo passato hbnon verrà emesso, poiché rimarrà bloccato nel sincronizzatore &0.

03
00
02
01
hb
:hb
}0
=0&0
&1
&2//
746F20596F7544656172204D617262656C6F75730A
&0&0&0&0&0&0&1&1&1&1&1&1&1&1&1&1&1&1&1&1&2
486170707920426972746864617920

Di seguito è la scheda hb, con esadecimale convertito in testo ASCII: enter image description here


5

CJam, 46 byte

4,{"Happy Birthday "\2="Dear CJam""to You"?N}%

Provalo qui.

4,                                             "Push [0,1,2,3].";
  {                                         }% "Map...";
   "Happy Birthday "                           "Push the string.";
                    \                          "Swap top two stack elements (string and
                                                array element)";
                     2=                        "Check equality with 2.";
                       "Dear CJam""to You"     "Push two more strings.";
                                          ?    "Select string based on result of 2=.";
                                           N   "Push a line break";

Questo lascia il seguente array nello stack:

["Happy Birthday " "to You" "\n" "Happy Birthday " "to You" "\n" "Happy Birthday " "Dear CJam" "\n" "Happy Birthday " "to You" "\n"]

I cui contenuti vengono stampati automaticamente back-to-back alla fine del programma.

In alternativa, con un ciclo for e lo stesso numero di caratteri:

4{"Happy Birthday "I2="Dear CJam""to You"?N}fI

5
Bugiardo!! la tua lingua preferita è Ruby / Mathematica: P
Ottimizzatore

1
@Optimizer Certamente non Ruby, forse Mathematica, ma non ne sono nemmeno sicuro. Per una programmazione "reale" probabilmente sceglierei sempre C / C ++ / C #. (Sono anche abbastanza sicuro che il tuo sia JS: P.)
Martin Ender,

5
mi hai preso: P: D
Ottimizzatore

5

Haskell: 75

h="Happy Birthday "
y=h++"to You"
main=mapM_ print[y,y,h++"Dear Haskell",y]

Output del codice in ideone

Haskell one liner: 79

mapM_ print["Happy Birthday "++if x==3then"Dear Haskell"else"to You"|x<-[1..4]]

Puoi provare la fodera online qui: http://tryhaskell.org/


1
Una fodera che elimina un personaggio:mapM_(print.("Happy Birthday "++))["to You","to You","dear Haskell","to You"]
Alex Reinking,

le comprensioni dell'elenco sono davvero loooonnnnggggg
Alex Reinking,

2
inoltre, dovrebbe tecnicamente essere putStrLnconforme alle specifiche (si ottengono doppie virgolette con print)
Alex Reinking,

2
Non _è necessario perché il valore di ritorno di main viene eliminato - lo vedi solo in GHCi
orgoglioso haskeller il

5

Var'aQ - 121

"Happy Birthday " ~ a cher "to you\n" tlheghrar ~ b cher b tlheghrar a "dear Var'aQ" tlheghrar tlheghrar b tlheghrar cha'

1
Qapla '! +1 per l'utilizzo di Var'aQ di tutte le lingue!
WallyWest,

5

GolfScript: 54 caratteri

4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%

Esecuzione di esempio:

bash-4.3$ golfscript.rb <<< '4,{"Happy Birthday "["To You""Dear GolfScript"]@2==n}%'
Happy Birthday To You
Happy Birthday To You
Happy Birthday Dear GolfScript
Happy Birthday To You

L'ho appena notato. (Piccolo effetto collaterale del tentativo di scrivere quel codice GolfScript per circa 5 ~ 6 ore). Grazie, @ MartinBüttner.
arte

1
Buon compleanno Caro CodeGolf ?
Dennis,

Grr. Ero stanco non solo quando l'ho scritto, ma anche quando l'ho risolto. Grazie @Dennis.
arte

5

T-SQL (conforme MS): 75

print stuff(replicate('Happy Birthday to You '+char(10),4),62,6,'Dear SQL')

Bello ... vorrei
averci

Grande idea! Salva altri 9 byte sostituendoli +char(10)con un'interruzione di riga all'interno della virgoletta, basta fare la parte di ritorno della stringa.
BradC,

5

C # (75) (73)

utilizzando System.Diagnostics allo scopo diDebug.Print

Esegui l'upgrade al codice di @Abbas

string x="\nHappy Birthday ",y=x+"to You";Debug.Print(y+y+x+"Dear C#"+y);

Aggiorna al codice @Tyress (83) (76)

for(int i=0;i++<4;)Debug.Print("Happy Birthday "+(i!=3?"to You":"Dear C#"));

Produzione:

Happy Birthday To You
Happy Birthday To You
Happy Birthday Dear C#
Happy Birthday To You

2
Puoi salvare un paio di personaggi usando String.Formate l'operatore ternario. Puoi anche renderlo molto meno simile a un programma C # e usarlo i++<3; p
FryAmTheEggman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.