Lièvre le lièvre le lièvre le lièvre le lièvre


65

Récemment, j'ai vu des gens de Hare Krishna avec leur mantra sur l'emblème et j'ai trouvé qu'il serait peut-être intéressant de coder le golf.

Le défi

Écrivez le mantra de Hare Krishna , à savoir:

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

Critères gagnants

C'est du , donc le code le plus court en octets gagne!

Règles

  • L'enveloppe doit être préservée.
  • Le texte doit contenir de nouvelles lignes.
  • Les lignes peuvent avoir des espaces de fuite.
  • Le retour à la ligne est autorisé.
  • Analyse depuis le Web ou toute autre ressource externe non autorisée.

2
D'après le titre, je m'attendais à ce que quelque chose décode les chaînes binaires en caractères ASCII. Le titre représente une barre oblique inverse.
user253751

5
Tout le mantra a 97 octets. Curieusement, il y a des réponses avec plus que cela beaucoup d'octets.
Masclins

Hmm, pourquoi ça ressemble étonnamment à une dupe Rickroll?
Matthew Roh

Réponses:


58

Gelée , 22 octets

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

Essayez-le en ligne!

Comment ça fonctionne

“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"]Dieu merci, vous avez expliqué cela davantage, car cela n'avait aucun sens.
Nic Hartley

11
J'ai besoin d'utiliser ["Hare", "Rama", "Krishna"] plus de base .
ATaco

63

05AB1E , 38 octets

Peut être raccourci de 2 octets si les retours à la ligne sont corrects.

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

Essayez-le en ligne!

Explication

“«Î‡Ä¦í¥Â“                              # 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, vraiment? D'où est venue cette idée? +1 :)
Stewie Griffin

14
Dites-moi franchement, avez-vous construit un générateur de code de golf 05AB1E?
YSC

1
@YSC ce n'est pas une mauvaise idée pour la compression de dictionnaire. Je suis dessus.
Urne Magique Octopus



39

Octave, 74 59 octets

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

Vérifiez la sortie ici .

Explication:

{'Hare ','Krishna ','Rama ',10}crée un tableau de cellules avec trois chaînes, où la quatrième est 10(valeur ASCII pour la nouvelle ligne).

{'ababdbbaadacacdccaa'-96}est un vecteur qui indexe le tableau de cellules ci-dessus. Le vecteur est [1 2 1 2 4 ...]puisque nous soustrayons 96de la chaîne ababd....

Les crochets sont utilisés pour concaténer les résultats, au lieu d’obtenir ans = Hare; and = Krishna; ans = ...


Je ne savais pas que vous pouviez indexer une cellule comme celle-là dans Octave (contrairement à MATLAB)!
Memming

19

Retina , 39 octets


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Essayez-le en ligne!

Dans la plupart des substitutions simples, le seul "truc" est le modificateur *qui affiche le résultat de la substitution puis ramène la chaîne à ce qu’elle était auparavant.



12

JavaScript, 75 70 octets

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

Essayez-le en ligne!

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


2
Mieux vaut utiliser les caractères de nouvelle ligne littéraux dans la chaîne de modèle directement au lieu de digit 3. La chaîne de modèle aura la même longueur, mais vous ne devrez pas les remplacer plus tard. (Ne causera pas de problème d'index de tableau, car /./ne correspond pas aux caractères de nouvelle ligne.)
manatwork

12

C

154 octets, 124 octets, 96 octets

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

Essayez-le en ligne!

28 octets sauvés, grâce à Dennis


1
Bienvenue dans Programmation Puzzles et Code Golf.
Rohan Jhunjhunwala

1
C'est un acronyme assez courant pour programmer des énigmes et du code golf, nom de cet échange de pile. Désolé, j'aurais dû le préciser. Bienvenue sur notre site, bon premier post.
Rohan Jhunjhunwala

1
Cela ne fonctionnera pas avec tous les compilateurs, mais gcc ne nécessite pas l’instruction include. De plus, si vous limitez votre soumission à C, vous pouvez supprimer le intet déclarer iglobalement afin que la valeur par défaut soit zéro. tio.run/nexus/…
Dennis

2
@AnT C'est exact, mais les compétitions de golf de code ne nécessitent pas de code "correct". Ici, sur PPCG, nous définissons les langues par leur implémentation. Tant qu'il existe un compilateur qui produit un exécutable fonctionnel, la réponse est valide.
Dennis

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

11

V , 40 , 36 octets

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

Essayez-le en ligne!

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

Explication:

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

La <C-n>commande est extrêmement utile pour des défis comme celui-ci. :)


10

C #, 109 octets

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 ");}

De manière assez simple, Console.Writeformate implicitement la chaîne, et utiliser Writeau lieu de WriteLinenon seulement enregistre 4 octets, mais évite une nouvelle ligne. Utilise les nouvelles lignes de style Unix, donc peut-être pas si bien sur Windows, 6 octets supplémentaires pour Windows en passant \nà\r\n

Cette méthode sera affichée directement sur la console, si vous préférez une méthode qui retourne une chaîne:

C #, 118 octets

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 ");}

Sinon, si vous avez besoin d'un programme entièrement autonome et compilable:

C #, 135 octets

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 ");}}

Cela devrait fonctionner comme un programme compilé à condition que vous définissiez Acomme classe d'entrée.


Ça fait un peu bizarre sans espaces entre les mots.
manatwork

@manatwork bon point, heureusement les spécifications disent que les espaces de fin sont acceptables, donc ne coûtent que 3 octets
Skidsdev Le

Peut déclencher une guerre des flammes, mais vous pouvez utiliser var au lieu de chaîne pour réduire encore plus le deuxième exemple.
John Baughman

@JohnBaughman La valeur de retour d'une méthode ne peut pas être varaussi loin que je sache et var.Format()n'est certainement pas une chose
Skidsdev

Duh ... Je n'ai pas pensé à ça. Vous avez raison, je viens de me retrouver dans le monde de la lamba et de mal interpréter ce que je lisais.
John Baughman

8

C, 85 octets

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

Je préférerais un mantra laïque, mais j'espère que c'est l'une de ces religions pacifiques.

Voir le travail ici .

Cela compacte une implémentation naïve de 23 octets.


8

Python 2, 92 88 74 octets

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

Essayez-le en ligne!

Non , ce n'est pas intelligent, non, ce n'est pas le plus court mais bon, je suis novice dans ce domaine et ça marche.

Une autre solution ( 84 à 80 octets):

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

Échangez les zéros et les uns, ainsi que «Lièvre» et «Krishna» dans la liste. Cela supprime le zéro initial. Puis convertissez le nouveau numéro (1010300113121232211) en hex (0xe054e999f20c553), entourez-le de backticks et réalisez enfin que la réponse de xnor est toujours en avance de 12 octets! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 octets

Inspiré par cette entrée JavaScript .

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

Perl, 67 octets

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

2
(Hare,Krishna,Rama)enregistre deux octets dans votre premier code.
Dada

5

Matlab 139 136 105 octets (merci à @ 2501 )

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

Essayez-le en ligne dans Octave!


ou 126 octets si la nouvelle ligne de fin est autorisée
user13267 le

@ 2501: haha ​​c'est génial. En fait, je pense que c'est 105 octets que vous devriez peut-être poster comme réponse
user13267 Le

5
Je suis sûr que d'autres améliorations sont possibles.
2501

1
FYI, TIO soutient Octave :) tio.run/nexus/…
Beta Decay

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]est 64 octets. : P (traduction de la soumission octave de @Stewie Griffin)
Memming le

5

MySQL, 115 à 100 octets

(Merci @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

Vous pouvez tout enlever AS .
manatwork

Bon truc, je vais certainement utiliser cette méthode pour certains défis.
BradC

5

R, 75 85 83 octets

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

Il crée un vecteur avec Hare, Krishnaet la nouvelle ligne, prend ceux qui sont nécessaires, puis répète son remplacement Krishnapar Rama.

Nécessaire pour inclure l'espace sur chaque mot et sep=""parce que sinon cat()mettrait un espace au début de chaque ligne.


Je n'arrive pas à faire fonctionner ça à TIO
Giuseppe

Probablement besoin d'un print () ou quelque chose comme ça.
BLT

@ Giuseppe J'utilise ici que R imprime automatiquement. Mais selon comment vous l'appelez, print()ou cat()serait nécessaire. Cela nécessiterait beaucoup plus d'octets. Je
posterai

1
@AlbertMasclans non, je reçois une erreur en disant object 'h' not found tio.run/nexus/…
Giuseppe

2
Je pense que vous avez besoin de remplacer le h=avec h<-à l'intérieur des appels àp
Giuseppe

5

PowerShell, 73 53 52 octets

absolument démoli par Jeff Freeman - utiliser une nouvelle ligne au lieu d' \nenregistrer un autre octet et en enregistrer un de plus sur le format tableau. (de (1,2)à ,1,2)

-1 grâce à TesselatingHeckler, pas de virgule dans la notation de tableau.

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

Ma vieille réponse - J'ai essayé quelques méthodes de remplacement, mais toutes ont été légèrement plus longues.

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

il y a des nouvelles lignes dans la chaîne.

assez simple, utilise le fait que powershell développera les variables entre guillemets doubles, et une méthode plus courte d’attribution de variables pour économiser des octets.


Bonne solution, mais je vous défie de la réduire davantage en remarquant un motif dans la sortie et en pipeline. Je l'ai réduit à 55 octets. Je ne sais pas comment annoncer un commentaire, alors répondez ici si vous souhaitez le voir (ou si vous souhaitez des astuces!).
Jeff Freeman

2
Au lieu d'une balise spoiler, j'ai découvert comment partager via un lien. Essayez-le en ligne!
Jeff Freeman

@JeffFreeman nice one, en a coupé deux de plus sur la nouvelle ligne et le tableau - jusqu'à 52, battant presque toutes les langues autres que le golf.
Colsw

4

Sed, 72

Le score inclut +1 pour le -rdrapeau.

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

Essayez-le en ligne .


Je suis sûr qu'il existe un moyen de supprimer certains octets en utilisant change, append ou nsert iau lieu de substitute. Edit: pas si sûr que ça; Edit edit: ouais non, ça ne marche pas parce qu'ils ne fonctionnent pas sur l'espace des motifs, mais directement à la sortie
Aaron

4

Ruby , 62 61 octets

Au fur et à mesure que je travaillais sur cette question, elle devint presque identique à la réponse Python de @ xnor, sauf que Ruby n'a pas d'espaces entre les arguments dans sa printfonction, ce qui m'oblige à utiliser des jointures, ce qui entraîne une réponse plus longue ...

-1 octets de @manatwork

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

Essayez-le en ligne!


Faire :Hareun symbole.
manatwork

4

Bash, 93 90 octets

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
Bon premier essai. Puis-je suggérer quelques améliorations mineures? pastebin.com/0bYQF26n
manatwork

@manatwork, vous devriez l'ajouter comme réponse.
Pandya

1
Sans la variable, s=il est descendu à 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 octets

Cela semble ridicule, mais je ne trouve pas de moyen plus court dans AHK de le faire:

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

Voici ce que j'ai d'abord essayé, soit 107 octets, et j'ai essayé d'être sophistiqué. Comme l'a souligné Digital Trauma , l'envoi du texte brut aurait été plus court.

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

StringSplit crée un pseudo-tableau avec 1 comme premier index. Donc, le premier terme est référencé avec s1, le second avec s2, etc. Sinon, il n’ya rien d’extraordinaire ici.


13
La sortie entière n'est que de 92 octets. Serait-il préférable de simplement Send Hare Krishna ...?
Digital Trauma

@ DigitalTrauma HA! Oui, probablement alors. J'ai supposé que la fantaisie était meilleure et n'a même pas vérifié. AHK n’est pas un bon langage pour cela.
Ingénieur Toast

3

Lot, 75 octets

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

3

C 96 octets

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

Deux mots d’information sont nécessaires pour déterminer quel mot de la prière est nécessaire ensuite. Ainsi, au lieu d’utiliser un tas de mémoire et de le coder sous forme de chaîne, vous pouvez simplement le coder sous la forme d’un entier 40 bits (c.-à-d. À l'intérieur ).


3

ksh / bash / sh, 66 octets

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

@nimi Merci. Changé en un <CR>, le rend encore plus court. Je ne peux pas le tester moi-même, mais cela devrait fonctionner. Au moins, ça marche en bash et même (busybox) sh.
ULick

Il semble que j'ai ajouté un blanc dans l'édition, mais que j'en ai soustrait un, en raison du passage de '\ n' à <CR>
ULick

3

APL (Dyalog) , 47 octets

Nécessite ⎕IO←0ce qui est la valeur par défaut sur de nombreux systèmes.

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

Essayez-le en ligne!

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

(4⍴3)⊤ convertir en base 3 à 4 chiffres; matrice [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] index

 scinder en liste de listes

∊¨ enrôler (aplatir chaque)

 mélanger dans la matrice (remplissage avec des espaces)



2

Java 7, 104 103 octets

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

Explication:

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

Essayez-le ici.


2

Lot, 117 111 103 octets

@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%

Jusqu'à 103 maintenant, les retours à la ligne sont autorisés.

^\n\nest utilisé pour insérer une nouvelle ligne à la fin des trois premières lignes et il y a un espace après Rama.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.