Hase Krishna Hase Krishna Krishna Hase Hase


65

Kürzlich habe ich Hare-Krishna-Leute mit ihrem Mantra auf dem Emblem gesehen, und ich habe festgestellt, dass es sehr interessant sein kann, Golf zu codieren.

Die Herausforderung

Schreiben Sie das Hare Krishna Mantra , dh:

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

Gewinnkriterien

Das ist , also gewinnt der kürzeste Code in Bytes!

Regeln

  • Das Gehäuse muss erhalten bleiben.
  • Text sollte neue Zeilen enthalten.
  • Zeilen können abschließende Leerzeichen enthalten.
  • Zeilenumbruch ist erlaubt.
  • Das Parsen aus dem Web oder einer anderen externen Ressource ist nicht zulässig.

2
Vom Titel erwartete ich, dass etwas binäre Zeichenfolgen in ASCII-Zeichen decodieren würde. Der Titel steht für einen Backslash.
user253751

5
Das ganze Mantra hat 97 Bytes. Überraschenderweise gibt es Antworten mit mehr als so vielen Bytes.
Masclins

Hmm, warum sieht es überraschenderweise aus wie ein Rickroll-Betrüger?
Matthew Roh

Antworten:


58

Jelly , 22 Bytes

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

Probieren Sie es online!

Wie es funktioniert

“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"]Gott sei Dank hast du das weiter erklärt, denn das ergab keinen Sinn.
Nic Hartley

11
Ich muss Base ["Hare", "Rama", "Krishna"] mehr verwenden.
ATaco

63

05AB1E , 38 Bytes

Kann um 2 Byte gekürzt werden, wenn nachfolgende Zeilenumbrüche in Ordnung sind.

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

Probieren Sie es online!

Erläuterung

“«Î‡Ä¦í¥Â“                              # 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, Ja wirklich? Woher kam diese Idee? +1 :)
Stewie Griffin

14
Sag mal ehrlich, hast du einen Generator mit 05AB1E Golf Code gebaut?
YSC

1
@YSC Das ist keine schlechte Idee für die Wörterbuchkomprimierung. Ich arbeite daran.
Magic Octopus Urn



39

Oktave, 74 59 Bytes

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

Überprüfen Sie die Ausgabe hier .

Erläuterung:

{'Hare ','Krishna ','Rama ',10}Erstellt ein Zellenarray mit drei Strings, wobei der vierte 10(ASCII-Wert für Newline) ist.

{'ababdbbaadacacdccaa'-96}ist ein Vektor, der das obige Zellenarray indiziert. Der Vektor ist [1 2 1 2 4 ...]da wir 96von der Zeichenfolge subtrahieren ababd....

Die umgebenden eckigen Klammern werden verwendet, um die Ergebnisse zu verketten, anstatt sie zu erhalten ans = Hare; and = Krishna; ans = ...


Ich wusste nicht, dass man so eine Zelle in Octave indizieren kann (im Gegensatz zu MATLAB)!
Memming

19

Retina , 39 Bytes


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Probieren Sie es online!

Bei den meisten einfachen Substitutionen ist der einzige "Trick" der Modifikator, *der das Ergebnis der Substitution ausgibt und dann die Zeichenfolge auf den vorherigen Wert zurücksetzt.



12

JavaScript, 75-70 Bytes

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

Probieren Sie es online!

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


2
Verwenden Sie besser wörtliche Zeilenumbrüche in der Vorlagenzeichenfolge direkt anstelle von Ziffern 3. Die Vorlagenzeichenfolge hat dieselbe Länge, muss jedoch später nicht ersetzt werden. (Verursacht kein Array-Index-Problem, da es /./nicht mit Zeilenumbrüchen übereinstimmt.)
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);}

Probieren Sie es online!

28 Bytes gespart dank Dennis


1
Willkommen bei Programming Puzzles und Code Golf.
Rohan Jhunjhunwala

1
Es ist eine ziemlich übliche Abkürzung für das Programmieren von Rätseln und Codegolf, der Name dieses Stapelwechsels. Entschuldigung, ich hätte das klarstellen sollen. Willkommen auf unserer Seite, guter erster Beitrag.
Rohan Jhunjhunwala

1
Dies funktioniert nicht bei allen Compilern, aber für gcc ist die include-Anweisung nicht erforderlich. Wenn Sie Ihre Übermittlung auf C beschränken, können Sie das löschen intund iglobal deklarieren, sodass der Standardwert Null ist. tio.run/nexus/…
Dennis

2
@AnT Das stimmt, aber für Code-Golfwettbewerbe ist kein "richtiger" Code erforderlich. Hier bei PPCG definieren wir Sprachen durch ihre Implementierung. Solange es einen Compiler gibt, der eine funktionierende ausführbare Datei erzeugt, ist die Antwort gültig.
Dennis

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

11

V , 40 , 36 Bytes

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

Probieren Sie es 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

Erläuterung:

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

Das <C-n> Befehl ist für solche Herausforderungen äußerst nützlich. :)


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

Ziemlich einfach, Console.Writeformatiert die Zeichenfolge implizit und verwendetWrite anstelle von WriteLinespart nicht nur 4 Bytes, vermeidet aber ein Newline. Verwendet Zeilenumbrüche im Unix-Stil und funktioniert daher unter Windows möglicherweise nicht so gut. Zusätzliche 6 Byte für Windows durch Ändern von \nin\r\n

Diese Methode wird direkt an die Konsole ausgegeben, wenn Sie eine Methode bevorzugen, die eine Zeichenfolge zurückgibt:

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

Alternativ, wenn Sie ein vollständig eigenständiges und kompilierbares Programm benötigen:

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

Dies sollte als kompiliertes Programm funktionieren, vorausgesetzt, Sie haben es Aals Eintragsklasse festgelegt.


Sieht ein bisschen komisch aus, ohne Leerzeichen zwischen den Wörtern.
Manatwork

@ Manatwork guter Punkt, zum Glück Spec sagt, dass
nachfolgende

Könnte einen Flammenkrieg auslösen, aber Sie können var anstelle von string verwenden, um das zweite Beispiel noch weiter zu reduzieren.
John Baughman

@ JohnBaughman Der Rückgabewert einer Methode kann meines Wissens nicht sein varund var.Format()ist definitiv keine Sache
Skidsdev

Duh ... Daran habe ich nicht gedacht. Sie haben Recht, ich bin gerade in die Lamba-Welt gekommen und habe falsch interpretiert, was ich gelesen habe.
John Baughman

8

C 85 Bytes

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

Ich würde ein weltliches Mantra vorziehen, aber ich hoffe, dies ist eine dieser friedlichen Religionen.

Sehen Sie , wie es hier funktioniert .

Dies komprimiert eine naive Implementierung um 23 Bytes.


8

Python 2, 92 88 74 Bytes

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

Probieren Sie es online!

Nein , es ist nicht schlau, nein, es ist nicht die kürzeste, aber hey, ich bin neu darin und es funktioniert.

Eine andere Lösung ( 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

Vertausche die Nullen und Einsen zusammen mit 'Hare' und 'Krishna' in der Liste. Dies entfernt die führende Null. Konvertieren Sie dann die neue Zahl (1010300113121232211) in hexadezimal (0xe054e999f20c553), umgeben Sie sie mit Backticks, und stellen Sie schließlich fest, dass die Antwort von xnor immer noch 12 Byte vor Ihnen liegt! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 Bytes

Inspiriert von diesem JavaScript-Eintrag .

$_='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)Speichert zwei Bytes in Ihrem ersten Code.
Dada

5

Matlab 139 136 105 Bytes (danke an @ 2501 )

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

Probieren Sie es online in Octave!


oder 126 Bytes, wenn die
abschließende

@ 2501: haha ​​das ist toll. Eigentlich denke ich, dass es 105 Bytes sein können, sollten Sie es als Antwort
posten

5
Ich bin mir ziemlich sicher, dass weitere Verbesserungen möglich sind.
2501


1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]ist 64 Bytes. : P (übersetzt @Stewie Griffins Oktav-Einreichung)
Memming

5

MySQL, 115 100 Bytes

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

Sie können alle entfernen AS .
Manatwork

Guter Trick, ich werde diese Methode auf jeden Fall für einige Herausforderungen verwenden.
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="")

Es schafft einen Vektor mit Hare, Krishnaund das Newline, nimmt die , die benötigt wird , und dann wiederholt sie ersetzt Krishnadurch Rama.

Mußte das Leerzeichen in jedes Wort einfügen und würde sep=""sonst cat()am Anfang jeder Zeile ein Leerzeichen setzen.


Ich kann das nicht in TIO
Giuseppe

Benötigt wahrscheinlich ein print () oder so.
BLT

@ Giuseppe Ich benutze hier, dass R automatisch druckt. Aber je nachdem, wie du es nennst print()oder cat()brauchst. Das würde viel mehr Bytes erfordern. Ich werde dieses Wochenende eine Alternative mit ihnen
posten

1
@ AlbertMasclans Nein, ich erhalte eine Fehlermeldung mit der Aufschrift object 'h' not found tio.run/nexus/…
Giuseppe

2
Ich denke, Sie müssen die h=mit h<-innerhalb der Anrufe zu ersetzenp
Giuseppe

5

PowerShell, 73 53 52 Bytes

Absolut zerstört von Jeff Freeman - durch die Verwendung eines tatsächlichen Zeilenumbruchs anstatt eines \nweiteren Bytes wird ein weiteres Byte im Array-Format gespeichert. (von (1,2)bis,1,2 )

-1 Dank TesselatingHeckler kein Komma in der Array-Notation.

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

Meine alte Antwort - Ich habe ein paar andere Ersetzungsmethoden ausprobiert, aber alle waren irgendwie etwas länger.

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

Die Zeichenfolge enthält Zeilenumbrüche.

Verwendet die Tatsache, dass Powershell Variablen in doppelten Anführungszeichen erweitert, und eine kürzere Methode zum Zuweisen von Variablen, um einige Bytes zu sparen.


Gute Lösung, aber ich fordere Sie dazu auf, es besser zu machen, indem Sie ein Muster in der Ausgabe und im Pipelining bemerken. Ich habe es auf 55 Bytes reduziert. Ich weiß nicht, wie ich einen Kommentar verderben soll, also antworte einfach hier, wenn du ihn sehen möchtest (oder wenn du ein paar Tipps möchtest!).
Jeff Freeman

2
Anstelle eines Spoiler-Tags fand ich heraus, wie man über einen Link teilt. Probieren Sie es online!
Jeff Freeman

@ JeffFreeman Netter, rasierte zwei mehr aus dem auf der Newline und Array - bis zu 52, schlagen fast alle nicht-Golf-Sprachen.
colsw

4

Sed, 72

Punktzahl beinhaltet +1 für die -rFlagge.

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

Probieren Sie es online aus .


Ziemlich sicher, dass es eine Möglichkeit gibt, einige Bytes mit change, append oder zu entferneni nsert anstelle von substitute . Bearbeiten: nicht mehr so ​​sicher; Bearbeiten Bearbeiten: Ja, nein, das funktioniert nicht, weil sie nicht im Musterbereich arbeiten, sondern direkt ausgeben
Aaron

4

Ruby , 62 61 Bytes

Während ich daran arbeitete, wurde es schließlich fast identisch mit @ xnors Python-Antwort, außer dass Ruby keine Leerzeichen zwischen den Argumenten enthält print Funktion hat, was mich zwang, stattdessen Joins zu verwenden, und zu einer längeren Antwort führte ...

-1 Bytes von @manatwork

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

Probieren Sie es online!


Mach :Hareein Symbol.
Manatwork

4

Bash, 93 bis 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
Nizza ersten Versuch. Darf ich ein paar kleinere Verbesserungen vorschlagen? pastebin.com/0bYQF26n
Manatwork

@manatwork Sie sollten es als Ihre Antwort hinzufügen.
Pandya

1
Ohne die Variable ist s=es bis 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

Das fühlt sich lächerlich an, aber ich kann kein kürzeres Mittel in der AHK finden, um dies zu tun:

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

Hier ist, was ich zuerst versuchte, das war 107 Bytes und versuchte, schick zu sein. Wie Digital Trauma jedoch betonte , wäre es kürzer gewesen, nur den Rohtext zu senden.

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

StringSplit erstellt ein Pseudo-Array mit 1 als erstem Index. So wird der erste Term mit s1, der zweite mit s2usw. bezeichnet. Ansonsten gibt es hier nichts Besonderes.


13
Die gesamte Ausgabe beträgt nur 92 Bytes. Wäre es einfach besser zu Send Hare Krishna ...?
Digital Trauma

@DigitalTrauma HA! Ja wahrscheinlich dann. Ich nahm an, dass Phantasie besser war und überprüfte nicht einmal. Die AHK ist dafür keine gute Sprache.
Ingenieur Toast

3

Batch, 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]));}

Sie benötigen nur zwei Informationsbits, um herauszufinden, welches Wort aus dem Gebet als Nächstes benötigt wird. Anstatt eine Menge Speicher zu verwenden und es als Zeichenfolge zu codieren, können Sie es einfach als 40-Bit-Ganzzahl codieren (dh in einem langen Int ).


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 Danke. Wurde es in ein <CR> geändert, wird es noch kürzer. Ich kann es nicht selbst testen, aber das sollte funktionieren. Zumindest funktioniert es in bash und sogar (busybox) sh.
ULick

Anscheinend habe ich bei der Bearbeitung ein Leerzeichen hinzugefügt, aber aufgrund des Wechsels von '\ n' zu <CR>
ULick

3

APL (Dyalog) , 47 Bytes

Benötigt, ⎕IO←0was auf vielen Systemen Standard ist.

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

Probieren Sie es online!

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

(4⍴3)⊤ in 4-stellige Basis 3 konvertieren; Matrix [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] Index

 in eine Liste von Listen aufteilen

∊¨ eintragen (jeweils abflachen)

 in Matrix mischen (mit Leerzeichen auffüllen)



2

Java 7, 104 103 Bytes

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

Erläuterung:

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

Probieren Sie es hier aus.


2

Batch, 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%

Es sind jetzt bis zu 103 Zeilenwechsel zulässig.

^\n\nwird verwendet, um eine neue Zeile am Ende der ersten drei Zeilen einzufügen, und es folgt ein Leerzeichen Rama.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.