Lepre Krishna Lepre Krishna Krishna Krishna Lepre Lepre


65

Di recente, ho visto le persone di Hare Krishna con il loro mantra sull'emblema e ho scoperto che potrebbe essere abbastanza interessante programmare il golf.

La sfida

Scrivi il mantra Hare Krishna , ovvero:

Hare Krishna Hare Krishna
Krishna Krishna Hare Hare
Hare Rama Hare Rama
Rama Rama Hare Hare

Criteri vincenti

Questo è , quindi vince il codice più breve in byte!

Regole

  • L'involucro deve essere conservato.
  • Il testo dovrebbe contenere nuove righe.
  • Le linee possono avere spazi finali.
  • È consentito il trascinamento di newline.
  • L'analisi dal Web o da qualsiasi altra risorsa esterna non è consentita.

2
Dal titolo mi aspettavo che qualcosa decodificasse le stringhe binarie in caratteri ASCII. Il titolo rappresenta una barra rovesciata.
user253751

5
Tutto il mantra ha 97 byte. Abbastanza sorprendentemente, ci sono risposte con più di tanti byte.
Masclins,

Hmm, perché sembra sorprendentemente un duplicato di Rickroll?
Matthew Roh,

Risposte:


58

Gelatina , 22 byte

“t,ȧṫÞċḅ»Ḳ“¡¥Ɓc’ṃs4K€Y

Provalo online!

Come funziona

“t,ȧṫÞċḅ»Ḳ“¡¥Ɓc’ṃs4K€Y  Main link. No arguments.

“t,ȧṫÞċḅ»               Use Jelly's dictionary to yield the string
                        "Hare Rama Krishna". Fortunately, the words Rama, Krishna,
                        and hare (lowercase H) are in the dictionary.
         Ḳ              Split at spaces, yielding ["Hare", "Rama", "Krishna"].
          “¡¥Ɓc’        Base-250 literal; yielding 15973600.
                ṃ       Convert 15973600 to base ["Hare", "Rama", "Krishna"]
                        (ternary), where "Krishna" = 0, "Hare" = 1, and "Rama" = 2.
                 s4     Split the resulting string array into chunks of length 4.
                   K€   Join each of the four chunks by spaces.
                     Y  Join the resulting strings by linefeeds.

43
Convert 15973600 to base ["Hare", "Rama", "Krishna"]Per fortuna l'hai spiegato ulteriormente, perché non aveva senso.
Nic Hartley,

11
Devo usare di ["Hare", "Rama", "Krishna"] più la base .
ATaco,

63

05AB1E , 38 byte

Può essere ridotto di 2 byte se le nuove righe finali sono a posto.

“«Î‡Ä¦í¥Â“#€¦`«'kì)™ð«•2ÍZì•3BSè#4ô¨»?

Provalo online!

Spiegazione

“«Î‡Ä¦í¥Â“                              # push the string "drama share irish dna"
          #                             # split on spaces
           €¦                           # remove the first character of each word
             `                          # split to stack as separate words 
              «'kì                      # concatenate the last 2 and prepend "k"
                  )™                    # wrap in list and title-case
                    ð«                  # append a space to each
                      •2ÍZì•            # push 27073120
                            3B          # convert to base-3: 1212221110100011
                              Sè        # index into the list with each
                                #       # split on spaces
                                 4ô     # split into pieces of 4
                                   ¨    # remove the last
                                    »   # join on spaces and newlines
                                     ?  # print without newline

58
drama share irish dna, veramente? Da dove viene l'idea? +1 :)
Stewie Griffin,

14
Dimmi francamente, hai costruito un generatore di codice golf 05AB1E?
YSC,

1
@YSC non è una cattiva idea per la compressione del dizionario. Ci sto lavorando.
Magic Octopus Urn,



39

Ottava, 74 59 byte

[{'Hare ','Krishna ','Rama ',10}{'ababdbbaadacacdccaa'-96}]

Verifica qui l'output .

Spiegazione:

{'Hare ','Krishna ','Rama ',10}crea una matrice di celle con tre stringhe, dove la quarta è 10(valore ASCII per newline).

{'ababdbbaadacacdccaa'-96}è un vettore che indicizza l'array di celle sopra. Il vettore è [1 2 1 2 4 ...]poiché sottraggiamo 96dalla stringa ababd....

Le parentesi quadre circostanti vengono utilizzate per concatenare i risultati, invece di ottenere ans = Hare; and = Krishna; ans = ...


Non sapevo che puoi indicizzare una cella del genere in Octave (a differenza di MATLAB)!
Memming

19

Retina , 39 byte


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Provalo online!

Soprattutto sostituzioni semplici, l'unico "trucco" è il modificatore *che stampa il risultato della sostituzione e quindi riporta la stringa a quella precedente.



12

JavaScript, 75 70 byte

`0101
1100
0202
2200`.replace(/./g,n=>['Hare ','Krishna ','Rama '][n])

Provalo online!

console.log(`0101
1100
0202
2200`.replace(/./g,n=>['Hare ','Krishna ','Rama '][n]))


2
Meglio usare i caratteri letterali di nuova riga nella stringa del modello direttamente anziché in cifre 3. La stringa del modello avrà la stessa lunghezza, ma non dovrai sostituirli in un secondo momento. (Non causerà il problema dell'indice di array, perché /./non corrisponde ai caratteri di nuova riga.)
manatwork

12

C

154 byte, 124 byte, 96 byte

i;main(){char*c="agagvggaavapapvppaaHare \0Krishna \0Rama \0\n";while(i<19)printf(c+c[i++]-78);}

Provalo online!

28 byte salvati, grazie a Dennis


1
Benvenuti in Programming Puzzle and Code Golf.
Rohan Jhunjhunwala,

1
È un acronimo piuttosto standard per la programmazione di puzzle e code golf, il nome di questo scambio di stack. Mi dispiace, avrei dovuto chiarirlo. Benvenuti sul nostro sito, buon primo post.
Rohan Jhunjhunwala,

1
Questo non funzionerà con tutti i compilatori, ma gcc non richiede l'istruzione include. Inoltre, se si limita l'invio a C, è possibile eliminare inte dichiarare a ilivello globale in modo che l'impostazione predefinita sia zero. tio.run/nexus/…
Dennis

2
@AnT È corretto, ma le competizioni di golf di codice non richiedono un codice "corretto". Qui su PPCG, definiamo le lingue in base alla loro implementazione. Finché esiste un compilatore che produce un eseguibile funzionante, la risposta è valida.
Dennis,

1
main(){for(char*t="BG@ESCB;:N8F6DIBA10Hare \0Krishna \0Rama \0\n";*t^72;printf(t+*t++-48));}Salva 4 byte.
Johan du Toit,

11

V , 40 , 36 byte

iHare Krishna 
 Rama ç^/ä$Ùdww.$2p

Provalo online!

hexdump:

00000000: 6948 6172 6520 4b72 6973 686e 6120 0a0e  iHare Krishna ..
00000010: 2052 616d 6120 1be7 5e2f e424 d964 7777   Rama ..^/.$.dww
00000020: 2e24 3270                                .$2p

Spiegazione:

iHare Krishna   " Enter 'Hare Krishna' on line 1
<C-n> Rama      " Enter 'Hare Rama' on line 2. This works because <C-n>
                " autocompletes alphabetically, and 'Hare' comes before 'Krishna'
<esc>           " Return to normal mode
ç^/             " On every line:
   ä$           "   Duplicate the text on the line horizontally
     Ù          "   Make a new copy of the line
      dw        "   Delete a word
        w       "   Move forward a word
         .      "   Delete a word again
          $     "   Move to the end of the line
           2p   "   And paste what we've deleted twice

Il <C-n>comando è estremamente utile per sfide come questa. :)


10

C #, 109 byte

void a(){Console.Write("{0}{1}{0}{1}\n{1}{1}{0}{0}\n{0}{2}{0}{2}\n{2}{2}{0}{0}","Hare ","Krishna ","Rama ");}

Abbastanza semplice, Console.Writeformatta in modo implicito la stringa e usando Writeinvece di WriteLinenon solo salva 4 byte, ma evita una nuova riga finale. Utilizza newline in stile Unix, quindi potrebbe non funzionare così bene su Windows, 6 byte extra per Windows cambiando \nin\r\n

Questo metodo verrà generato direttamente sulla console, se si preferisce un metodo che restituisce una stringa:

C #, 118 byte

string a(){return string.Format("{0}{1}{0}{1}\n{1}{1}{0}{0}\n{0}{2}{0}{2}\n{2}{2}{0}{0}","Hare ","Krishna ","Rama ");}

In alternativa, se hai bisogno di un programma completamente autonomo e compilabile:

C #, 135 byte

class A{static void main(){System.Console.Write("{0}{1}{0}{1}\n{1}{1}{0}{0}\n{0}{2}{0}{2}\n{2}{2}{0}{0}","Hare ","Krishna ","Rama ");}}

Questo dovrebbe funzionare come un programma compilato a condizione che sia impostato Acome classe di accesso.


Sembra un po 'strano senza spazi tra le parole.
arte

@manatwork buon punto, per fortuna le specifiche dicono che gli spazi finali sono ok, quindi costano solo 3 byte
Skidsdev

Potrebbe iniziare una guerra di fiamma, ma puoi usare var invece di stringa per ridurre ancora di più il secondo esempio.
John Baughman,

@JohnBaughman Il valore di ritorno di un metodo non può essere varper quanto ne so, e var.Format()sicuramente non è una cosa
Skidsdev

Duh ... Non ci ho pensato. Hai ragione, mi sono appena immerso nel mondo della lamba e ho interpretato male quello che stavo leggendo.
John Baughman,

8

C, 85 byte

i;f(){for(i=0;printf("$0$0900$$9$*$*9**$$)"[i++]-36+"Hare \0Rama \0Krishna \0\n"););}

Preferirei un mantra secolare, ma spero che questa sia una di quelle religioni pacifiche.

Guarda che funziona qui .

Questo compatta un'implementazione ingenua di 23 byte.


8

Python 2, 92 88 74 byte

for i in'0101311003020232200':print['Hare','Krishna','Rama','\n'][int(i)],

Provalo online!

No , non è intelligente, no, non è il più breve ma ehi, sono nuovo e funziona.

Un'altra soluzione ( 84 80 byte):

h='Hare'
k='Krishna'
r='Rama'
n='\n'
print h,k,h,k,n+k,k,h,h,n+h,r,h,r,n+r,r,h,h

Scambia gli zero e quelli, insieme a "Lepre" e "Krishna" nell'elenco. Questo rimuove lo zero iniziale. Quindi converti il ​​nuovo numero (1010300113121232211) in esadecimale (0xe054e999f20c553), circondalo con i backtick e finalmente realizza che la risposta di xnor è ancora avanti di 12 byte! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 byte

Ispirato da questa voce JavaScript .

$_='0101
1100
0202
2200
';s/./qw'Hare Krishna Rama'[$&].$"/ge;print

Perl, 67 byte

@_=<Hare Krishna Rama>;print"@_[split//]\n"for<0101 1100 0202 2200>

2
(Hare,Krishna,Rama)salva due byte nel tuo primo codice.
Dada,

5

Matlab 139136 105 byte (grazie a @ 2501 )

fprintf('Hare Krishna Hare Krishna\nKrishna Krishna Hare Hare\nHare Rama Hare Rama\nRama Rama Hare Hare')

Provalo online in Octave!


o 126 byte se è consentita la nuova riga finale
user13267,

@ 2501: ahah è fantastico. In realtà penso che siano 105 byte, dovresti pubblicarlo come risposta
user13267,

5
Sono abbastanza sicuro che siano possibili ulteriori miglioramenti.
2501

1
Cordiali saluti, TIO supporta Octave :) tio.run/nexus/…
Decadimento beta

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]è 64 byte. : P (traduzione della presentazione dell'ottava di @Stewie Griffin)
Memming

5

MySQL, 115 100 byte

(Grazie @manatwork!)

SELECT CONCAT(a,b,a,b,d,b,b,a,a,d,a,c,a,c,d,c,c,a,a)FROM(SELECT'Hare 'a,'Krishna 'b,'Rama 'c,'\n'd)t

Puoi rimuovere tutto AS .
arte

Buon trucco, userò sicuramente questo metodo per alcune sfide.
BradC,

5

R, 75 85 83 byte

cat(x<-c("Hare ","Krishna ","\n")[c(1,2,1:3,2,2,1,1,3)],sub(x[2],"Rama ",x),sep="")

Crea un vettore con Hare, Krishnae la nuova riga, prende quelli necessari e quindi lo ripete sostituendolo Krishnacon Rama.

Necessario includere lo spazio su ogni parola e sep=""perché altrimenti cat()metterebbe uno spazio all'inizio di ogni riga.


Non riesco a farlo funzionare in TIO
Giuseppe,

Probabilmente ha bisogno di una stampa () o qualcosa del genere.
BLT,

@Giuseppe Sto usando qui che R stampa automaticamente. Ma a seconda di come lo chiami, print()o cat()sarebbe necessario. Ciò richiederebbe molti più byte.
Pubblicherò

1
@AlbertMasclans no Ricevo un errore dicendo object 'h' not found tio.run/nexus/…
Giuseppe

2
Penso che devi sostituire il h=con h<-dentro le chiamate ap
Giuseppe,

5

PowerShell, 73 53 52 byte

completamente demolito da Jeff Freeman - usando una nuova riga reale invece di \nsalvare un altro byte, e anche salvato un altro nel formato array. (da (1,2)a ,1,2)

-1 grazie a TesselatingHeckler, nessuna virgola nella notazione dell'array.

$a="Hare ";"Krishna ","Rama "|%{"$a$_$a$_
$_$_$a$a"}

La mia vecchia risposta - Ho provato alcuni altri metodi di sostituzione, ma alla fine tutti sono stati leggermente più lunghi.

$a,$b,$c="Hare ","Krishna ","Rama ";"$a$b$a$b
$b$b$a$a
$a$c$a$c
$c$c$a$a"

ci sono newline nella stringa.

piuttosto semplice, usa il fatto che PowerShell espanderà le variabili tra virgolette doppie e un metodo più breve di assegnazione delle variabili per salvare alcuni byte.


Buona soluzione, ma ti sfido a sminuire di più notando uno schema nell'output e nella pipeline. Sono arrivato a 55 byte. Non so come rovinare un commento, quindi rispondi qui se desideri vederlo (o se desideri alcuni suggerimenti!).
Jeff Freeman,

2
Invece di un tag spoiler, ho capito come condividere tramite un link. Provalo online!
Jeff Freeman,

@JeffFreeman, bello, ne ho rasati altri due rispetto a quelli della newline e dell'array - fino a 52, battendo quasi tutte le lingue non golfistiche.
Colsw,

4

Sed, 72

Il punteggio include +1 per la -rbandiera.

s/^/Hari Krishna/
s/.*/& &/
s/(\S+)(.*)\b(.+)/&\n\3\2\1/p
s/K\S+/Rama/g

Provalo online .


Abbastanza sicuro che ci sia un modo per rimuovere alcuni byte usando ca hange , ppend o nsert iinvece di substitute. Modifica: non più sicuro; Modifica modifica: sì no che non funziona perché non funzionano nello spazio modello ma invece vengono emessi direttamente
Aaron,

4

Rubino , 62 61 byte

Mentre lavoravo su questo alla fine è diventato quasi identico alla risposta Python di @ xnor, tranne che Ruby non ha spazi tra gli argomenti nella sua printfunzione, costringendomi a usare i join invece e risultando in una risposta più lunga ...

-1 byte da @manatwork

%w"Krishna Rama".map{|i|puts [h=:Hare,i]*2*' ',[i,i,h,h]*' '}

Provalo online!


Crea :Hareun simbolo.
manatwork

4

bash, 93 90 byte

h="Hare " k="Krishna " r="Rama " s="$h$k$h$k\n$k$k$h$h\n$h$r$h$r\n$r$r$h$h"
echo -e "${s}"

1
Bel primo tentativo. Posso suggerire un paio di piccoli miglioramenti? pastebin.com/0bYQF26n
arte

@manatwork dovresti aggiungerlo come risposta.
Pandya,

1
Senza la variabile s=è fino a 79h="Hare " k="Krishna " r="Rama ";echo -e "$h$k$h$k\n$k$k$h$h\n$h$r$h$r\n$r$r$h$h"
ULick


3

AHK , 107 92 byte

Sembra ridicolo ma non riesco a trovare un mezzo più corto in AHK per fare questo:

h=Hare
k=Krishna
Send %h% %k% %h% %k%`n%k% %k% %h% %h%`n%h% Rama %h% Rama`nRama Rama %h% %h%

Ecco cosa ho provato prima che fosse 107 byte e ho cercato di essere sofisticato. Come ha sottolineato Digital Trauma , tuttavia, sarebbe stato più breve inviare il testo non elaborato .

n=1212422114131343311
a=Hare |Krishna |Rama |`n
StringSplit,s,a,|
Loop,Parse,n
r:=r s%A_LoopField%
Send %r%

StringSplit crea uno pseudo-array con 1 come primo indice. Quindi si fa riferimento al primo termine s1, al secondo a s2, ecc. Altrimenti, qui non c'è niente di speciale.


13
L'intero output è di soli 92 byte. Sarebbe meglio semplicemente Send Hare Krishna ...?
Trauma digitale

@DigitalTrauma HA! Sì, probabilmente, allora. Ho pensato che la fantasia fosse migliore e non ho nemmeno controllato. AHK non è un buon linguaggio per questo.
Ingegnere Toast,

3

Lotto, 75 byte

@for %%h in (Krishna Rama)do @echo Hare %%h Hare %%h&echo %%h %%h Hare Hare

3

C 96 byte

*v[]={"Hare ","Krishna ","Rama ","\n"};
main(){for(long a=0x30ae2305d10;a/=4;printf(v[a&3]));}

Hai solo bisogno di due bit di informazioni per capire quale parola della preghiera è necessaria in seguito, quindi invece di usare un mucchio di memoria e codificarla come una stringa, puoi semplicemente codificarla come un numero intero a 40 bit (cioè all'interno di un lungo int ).


3

ksh / bash / sh, 66 byte

h=Hare;for j in Krishna Rama;do echo $h $j $h $j"
"$j $j $h $h;done

@nimi Grazie. Modificato in un <CR>, lo rende ancora più breve. Non posso provarlo da solo, ma dovrebbe funzionare. Almeno funziona in bash e anche (busybox) sh.
ULick

sembra che ho aggiunto uno spazio vuoto nella modifica, ma ne ho sottratto uno, a causa del passaggio da '\ n' a <CR>
ULick

3

APL (Dyalog) , 47 byte

Richiede il ⎕IO←0valore predefinito su molti sistemi.

↑∊¨↓'Krishna ' 'Hare ' 'Rama '[(43)⊤8×4 1 5 2]

Provalo online!

8×4 1 5 2 moltiplicare; [32,8,40,16]

(4⍴3)⊤ converti in base 3 a 4 cifre; matrice [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] indice

 diviso in un elenco di elenchi

∊¨ arruolarsi (appiattire ciascuno)

 mescolare in matrice (imbottitura con spazi)



2

Java 7, 104 103 byte

String c(){return"xyxy\nyyxx\nxRama xRama\nRama Rama xx".replace("x","Hare ").replace("y","Krishna ");}

Spiegazione:

String c(){                                      // Method without parameters and String return-type
  return"xyxy\nyyxx\nxRama xRama\nRama Rama xx"  //  Return this String
    .replace("x","Hare ")                        //  after we've replaced all "x" with "Hare "
    .replace("y","Krishna ");                    //  and all "y" with "Krishna "
}                                                // End of method

Provalo qui.


2

Batch 117 111 103 byte

@set a=Hare &set b=Krishna &set c=Rama 
@echo %a%%b%%a%%b%^

%b%%b%%a%%a%^

%a%%c%%a%%c%^

%c%%c%%a%%a%

Fino a 103 ora che sono consentite nuove righe finali.

^\n\nè usato per inserire una nuova riga alla fine delle prime tre righe e dopo c'è uno spazio Rama.


2

Perl, 76 74 byte

$_=121202211;$_.=0 .y/2/3/r;print$_?(0,Hare,Krishna,Rama)[$_].$":$/for/./g

1
2 byte più brevi: provalo online! (Sono abbastanza sicuro che l'uscita sia quella giusta)
Dada,
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.