Liebre Krishna Liebre Krishna Krishna Krishna Liebre Liebre


65

Recientemente, he visto personas Hare Krishna con su mantra en el emblema y he descubierto que puede ser bastante interesante codificar el golf.

El reto

Escribe el mantra Hare Krishna , es decir:

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

Criterios ganadores

Este es el , por lo que gana el código más corto en bytes.

Reglas

  • La carcasa debe conservarse.
  • El texto debe contener nuevas líneas.
  • Las líneas pueden tener espacios finales.
  • La nueva línea final está permitida.
  • El análisis desde la web o cualquier otro recurso externo no está permitido.

2
Del título esperaba algo para decodificar cadenas binarias en caracteres ASCII. El título representa una barra invertida.
user253751

55
Todo el mantra tiene 97 bytes. Sorprendentemente, hay respuestas con más de esa cantidad de bytes.
Masclins

Hmm, ¿por qué sorprendentemente parece un engañado Rickroll?
Matthew Roh

Respuestas:


58

Jalea , 22 bytes

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

Pruébalo en línea!

Cómo funciona

“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"]Gracias a Dios que lo explicaste más, porque eso no tenía sentido.
Nic Hartley

11
Necesito usar base ["Hare", "Rama", "Krishna"] más.
ATaco

63

05AB1E , 38 bytes

Se puede acortar en 2 bytes si las nuevas líneas finales están bien.

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

Pruébalo en línea!

Explicación

“«Î‡Ä¦í¥Â“                              # 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, ¿De Verdad? ¿De dónde vino esa idea? +1 :)
Stewie Griffin

14
Dígame francamente, ¿construyó un generador de código golfizado 05AB1E?
YSC

1
@YSC no es una mala idea para la compresión del diccionario. Estoy en ello.
Magic Octopus Urn



39

Octava, 74 59 bytes

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

Verifique la salida aquí .

Explicación:

{'Hare ','Krishna ','Rama ',10}crea una matriz de celdas con tres cadenas, donde la cuarta es 10(valor ASCII para nueva línea).

{'ababdbbaadacacdccaa'-96}es un vector que indexa la matriz de celdas de arriba. El vector es [1 2 1 2 4 ...]ya que restamos 96de la cadena ababd....

Los corchetes circundantes se utilizan para concatenar los resultados, en lugar de obtener ans = Hare; and = Krishna; ans = ...


¡No sabía que puedes indexar celdas como esa en Octave (a diferencia de MATLAB)!
Memming

19

Retina , 39 bytes


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Pruébalo en línea!

En su mayoría sustituciones simples, el único "truco" es el modificador *que imprime el resultado de la sustitución y luego revierte la cadena a lo que era antes.



12

JavaScript, 75 70 bytes

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

Pruébalo en línea!

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


2
Mejor use caracteres de nueva línea literales en la cadena de plantilla directamente en lugar de dígitos 3. La cadena de plantilla tendrá la misma longitud, pero no tendrá que reemplazarla más tarde. (No causará problemas con el índice de matriz, porque /./no coincide con los caracteres de nueva línea)
Manatwork

12

C

154 bytes, 124 bytes, 96 bytes

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

Pruébalo en línea!

28 bytes guardados, gracias a Dennis


1
Bienvenido a Programming Puzzles y Code Golf.
Rohan Jhunjhunwala

1
Es un acrónimo bastante estándar para programar rompecabezas y golf de código, el nombre de este intercambio de pila. Lo siento, debería haber dejado esto claro. Bienvenido a nuestro sitio, buena primera publicación.
Rohan Jhunjhunwala

1
Esto no funcionará con todos los compiladores, pero gcc no requiere la declaración de inclusión. Además, si restringe su envío a C, puede descartar inty declarar iglobalmente para que su valor predeterminado sea cero. tio.run/nexus/…
Dennis

2
@AnT Eso es correcto, pero las competiciones de golf de código no requieren un código "adecuado". Aquí en PPCG, definimos idiomas por su implementación. Mientras haya un compilador que produzca un ejecutable que funcione, la respuesta es válida.
Dennis

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

11

V , 40 , 36 bytes

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

Pruébalo en línea!

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

Explicación:

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

El <C-n>comando es extremadamente útil para desafíos como este. :)


10

C #, 109 bytes

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

Bastante sencillo, Console.Writeformatea implícitamente la cadena, y el uso en Writelugar de WriteLineno solo guarda 4 bytes, sino que evita una nueva línea final. Utiliza líneas nuevas de estilo Unix, por lo que podría no funcionar tan bien en Windows, 6 bytes adicionales para Windows cambiando \na\r\n

Este método se enviará directamente a la consola, si prefiere un método que devuelva una cadena:

C #, 118 bytes

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

Alternativamente, si necesita un programa totalmente independiente y compilable:

C #, 135 bytes

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

Esto debería funcionar como un programa compilado siempre que lo establezca Acomo la clase de entrada.


Parece un poco raro sin espacios entre las palabras.
manatwork

@manatwork buen punto, afortunadamente las especificaciones dicen que los espacios finales están bien, por lo que solo cuesta 3 bytes
Skidsdev

Podría comenzar una guerra de llamas, pero puede usar var en lugar de cadena para reducir el segundo ejemplo aún más.
John Baughman

@JohnBaughman El valor de retorno de un método no puede ser varhasta donde yo sé, y var.Format()definitivamente no es una cosa
Skidsdev

Duh ... No pensé en eso. Tienes razón, me metí en el mundo de la lamba y malinterpreté lo que estaba leyendo.
John Baughman

8

C, 85 bytes

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

Preferiría un mantra secular, pero espero que esta sea una de esas religiones pacíficas.

Véalo funcionar aquí .

Esto compacta una implementación ingenua en 23 bytes.


8

Python 2, 92 88 74 bytes

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

Pruébalo en línea!

No , no es inteligente, no, no es el más corto, pero bueno, soy nuevo en esto y funciona.

Otra solución ( 84 80 bytes):

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

Cambie los ceros y unos, junto con 'Hare' y 'Krishna' en la lista. Esto elimina el cero inicial. Luego, convierta el nuevo número (1010300113121232211) a hexadecimal (0xe054e999f20c553), envuélvalo con comillas inversas y finalmente se dé cuenta de que la respuesta de xnor aún tiene 12 bytes. tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 bytes

Inspirado en esta entrada de JavaScript .

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

Perl, 67 bytes

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

2
(Hare,Krishna,Rama)guarda dos bytes en su primer código.
Dada

5

Matlab 139136105 bytes (gracias a @ 2501 )

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

¡Pruébelo en línea en Octave!


o 126 bytes si se permite la nueva línea final
usuario13267

@ 2501: jaja, eso es genial. En realidad, creo que son 105 bytes, deberías publicarlo como respuesta
user13267

55
Estoy bastante seguro de que son posibles nuevas mejoras.
2501

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

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]es de 64 bytes. : P (traduciendo la presentación de octava de @Stewie Griffin)
Memming

5

MySQL, 115100 bytes

(¡Gracias @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

Puedes eliminar todo AS .
manatwork

Buen truco, definitivamente usaré este método para algunos desafíos.
BradC

5

R, 75 85 83 bytes

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

Crea un vector con Hare, Krishnay la nueva línea, toma los necesarios y luego lo repite reemplazando Krishnapor Rama.

Necesitaba incluir el espacio en cada palabra y sep=""porque de lo contrario cat()pondría un espacio al comienzo de cada línea.


No puedo hacer que esto funcione en TIO
Giuseppe

Probablemente necesita una impresión () o algo así.
BLT

@Giuseppe estoy usando aquí que R imprime automáticamente. Pero dependiendo de cómo lo llames, print()o cat()sería necesario. Eso requeriría muchos más bytes. Publicaré una alternativa con ellos este fin de semana :)
Masclins

1
@AlbertMasclans no, recibo un error que dice object 'h' not found tio.run/nexus/…
Giuseppe

2
Creo que debe reemplazarlo h=con h<-dentro de las llamadas ap
Giuseppe

5

PowerShell, 73 53 52 bytes

absolutamente demolido por Jeff Freeman : usando una nueva línea real en lugar de \nguardar otro byte, y también guardó uno más en el formato de matriz. (de (1,2)a ,1,2)

-1 gracias a TesselatingHeckler, no hay coma en la notación de matriz.

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

Mi vieja respuesta: probé algunos otros métodos de reemplazo, pero todos terminaron siendo un poco más largos de alguna manera.

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

Hay nuevas líneas en la cadena.

bastante sencillo, utiliza el hecho de que powershell expandirá las variables dentro de comillas dobles, y un método más corto de asignación de variables para guardar algunos bytes.


Buena solución, pero lo desafío a que lo baje más al notar un patrón en la salida y la canalización. Lo tengo reducido a 55 Bytes. No sé cómo estropear un comentario, así que solo responda aquí si desea verlo (¡o si desea algunas sugerencias!).
Jeff Freeman

2
En lugar de una etiqueta de spoiler, descubrí cómo compartir a través de un enlace. Pruébalo en línea!
Jeff Freeman

@JeffFreeman, uno agradable, eliminó dos más de eso en la nueva línea y la matriz, hasta 52, superando a casi todos los idiomas que no son de golf.
colsw

4

Sed, 72

La puntuación incluye +1 para la -rbandera.

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

Pruébalo en línea .


cEstoy bastante seguro de que hay una manera de eliminar algunos bytes usando hange, append o nsert en ilugar de substitute. Editar: ya no estoy tan seguro; Editar editar: sí, no, eso no funciona porque no funcionan en el espacio del patrón, sino que se imprimen directamente
Aaron

4

Ruby , 62 61 bytes

Mientras trabajaba en esto, eventualmente se volvió casi idéntico a la respuesta de Python de @xnor, excepto que Ruby no tiene espacios entre argumentos en su printfunción, lo que me obligó a usar combinaciones en su lugar y resultó en una respuesta más larga ...

-1 bytes de @manatwork

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

Pruébalo en línea!


Hacer :Hareun símbolo
manatwork

4

Bash, 93 90 bytes

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
Buen primer intento. ¿Puedo sugerir algunas mejoras menores? pastebin.com/0bYQF26n
manatwork

@manatwork deberías agregarlo como tu respuesta.
Pandya

1
Sin la variable s=se reduce 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 bytes

Esto se siente ridículo, pero no puedo encontrar un medio más corto en AHK para hacer esto:

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

Esto es lo que probé primero que era 107 bytes y traté de ser elegante. Sin embargo, como señaló Digital Trauma , hubiera sido más corto enviar el texto sin formato.

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

StringSplit crea una pseudo-matriz con 1 como primer índice. Entonces, el primer término está referenciado con s1, el segundo con s2, etc. De lo contrario, aquí no hay nada lujoso.


13
La salida completa es de solo 92 bytes. ¿Sería mejor simplemente Send Hare Krishna ...?
Trauma digital

@DigitalTrauma HA! Sí, probablemente, entonces. Supuse que la fantasía era mejor y ni siquiera lo comprobé. AHK no es un buen lenguaje para esto.
Engineer Toast

3

Lote, 75 bytes.

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

3

C 96 bytes

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

Solo necesita dos bits de información para determinar qué palabra de la oración se necesita a continuación, por lo que en lugar de usar un montón de memoria y codificarla como una cadena, puede codificarla como un entero de 40 bits (es decir, dentro de un int largo )


3

ksh / bash / sh, 66 bytes

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

@nimi Gracias. Lo cambió a un <CR>, lo hace aún más corto. No puedo probarlo yo mismo, pero esto debería funcionar. Al menos funciona en bash e incluso (busybox) sh.
ULick

parece que agregué un espacio en blanco en la edición, pero resté uno, debido al cambio de '\ n' a <CR>
ULick

3

APL (Dyalog) , 47 bytes

Requiere ⎕IO←0cuál es el predeterminado en muchos sistemas.

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

Pruébalo en línea!

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

(4⍴3)⊤ convertir a base de 4 dígitos 3; matriz [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] índice

 dividido en una lista de listas

∊¨ alistarse (aplanar cada uno)

 mezclar en matriz (relleno con espacios)



2

Java 7, 104 103 bytes

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

Explicación:

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

Pruébalo aquí


2

Lotes, 117 111 103 bytes

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

Hasta 103 ahora que las nuevas líneas finales están permitidas.

^\n\nse usa para insertar una nueva línea al final de las primeras tres líneas y hay un espacio después Rama.


2

Perl, 76 74 bytes

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

1
2 bytes más cortos: ¡ Pruébelo en línea! (Estoy bastante seguro de que la salida es la correcta)
Dada
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.