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 Code-Golf , 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.
code-golf
string
kolmogorov-complexity
Dariusz Woźniak
quelle
quelle
Antworten:
Jelly , 22 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Convert 15973600 to base ["Hare", "Rama", "Krishna"]
Gott sei Dank hast du das weiter erklärt, denn das ergab keinen Sinn.["Hare", "Rama", "Krishna"]
mehr verwenden.05AB1E , 38 Bytes
Kann um 2 Byte gekürzt werden, wenn nachfolgende Zeilenumbrüche in Ordnung sind.
Probieren Sie es online!
Erläuterung
quelle
drama share irish dna
, Ja wirklich? Woher kam diese Idee? +1 :)Python 2 , 60 Bytes
Probieren Sie es online!
Dies scheint Ansätze zum Ersetzen von Vorlagen wie diesen zu übertreffen .
quelle
Oktave,
7459 BytesÜberprüfen Sie die Ausgabe hier .
Erläuterung:
{'Hare ','Krishna ','Rama ',10}
Erstellt ein Zellenarray mit drei Strings, wobei der vierte10
(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 wir96
von der Zeichenfolge subtrahierenababd...
.Die umgebenden eckigen Klammern werden verwendet, um die Ergebnisse zu verketten, anstatt sie zu erhalten
ans = Hare; and = Krishna; ans = ...
quelle
Retina , 39 Bytes
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.quelle
PHP, 61 Bytes
Ersetzen Sie einfach die Ziffern als Schlüssel im Array durch die Werte strtr
Probieren Sie es online!
quelle
JavaScript,
75-70BytesProbieren Sie es online!
quelle
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.)C
154 Bytes, 124 Bytes,96 BytesProbieren Sie es online!
28 Bytes gespart dank Dennis
quelle
int
undi
global deklarieren, sodass der Standardwert Null ist. tio.run/nexus/…main(){for(char*t="BG@ESCB;:N8F6DIBA10Hare \0Krishna \0Rama \0\n";*t^72;printf(t+*t++-48));}
Spart 4 Bytes.V ,
40, 36 BytesProbieren Sie es online!
Hexdump:
Erläuterung:
Das
<C-n>
Befehl ist für solche Herausforderungen äußerst nützlich. :)quelle
C #, 109 Bytes
Ziemlich einfach,
Console.Write
formatiert die Zeichenfolge implizit und verwendetWrite
anstelle vonWriteLine
spart 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\n
in\r\n
Diese Methode wird direkt an die Konsole ausgegeben, wenn Sie eine Methode bevorzugen, die eine Zeichenfolge zurückgibt:
C #, 118 Bytes
Alternativ, wenn Sie ein vollständig eigenständiges und kompilierbares Programm benötigen:
C #, 135 Bytes
Dies sollte als kompiliertes Programm funktionieren, vorausgesetzt, Sie haben es
A
als Eintragsklasse festgelegt.quelle
var
undvar.Format()
ist definitiv keine SacheC 85 Bytes
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.
quelle
Python 2,
928874 BytesProbieren 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 (
8480 Bytes):quelle
Perl, 67 Bytes
Inspiriert von diesem JavaScript-Eintrag .
Perl, 67 Bytes
quelle
(Hare,Krishna,Rama)
Speichert zwei Bytes in Ihrem ersten Code.Matlab
139 136105 Bytes (danke an @ 2501 )Probieren Sie es online in Octave!
quelle
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]
ist 64 Bytes. : P (übersetzt @Stewie Griffins Oktav-Einreichung)MySQL,
115100 Bytes(Danke @manatwork!)
quelle
AS
.R
758583 BytesEs schafft einen Vektor mit
Hare
,Krishna
und das Newline, nimmt die , die benötigt wird , und dann wiederholt sie ersetztKrishna
durchRama
.Mußte das Leerzeichen in jedes Wort einfügen und würde
sep=""
sonstcat()
am Anfang jeder Zeile ein Leerzeichen setzen.quelle
print()
odercat()
brauchst. Das würde viel mehr Bytes erfordern. Ich werde dieses Wochenende eine Alternative mit ihnenobject 'h' not found
tio.run/nexus/…h=
mith<-
innerhalb der Anrufe zu ersetzenp
PowerShell,
735352 BytesAbsolut zerstört von Jeff Freeman - durch die Verwendung eines tatsächlichen Zeilenumbruchs anstatt eines
\n
weiteren Bytes wird ein weiteres Byte im Array-Format gespeichert. (von(1,2)
bis,1,2
)-1 Dank TesselatingHeckler kein Komma in der Array-Notation.
Meine alte Antwort - Ich habe ein paar andere Ersetzungsmethoden ausprobiert, aber alle waren irgendwie etwas länger.
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.
quelle
Sed, 72
Punktzahl beinhaltet +1 für die
-r
Flagge.Probieren Sie es online aus .
quelle
c
hange,a
ppend oder zu entferneni
nsert anstelle vons
ubstitute . Bearbeiten: nicht mehr so sicher; Bearbeiten Bearbeiten: Ja, nein, das funktioniert nicht, weil sie nicht im Musterbereich arbeiten, sondern direkt ausgebenRuby ,
6261 BytesWä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
Probieren Sie es online!
quelle
:Hare
ein Symbol.Bash,
93 bis90 Bytesquelle
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"
Pyth -
4541 BytesVersuch es
quelle
AHK ,
10792 BytesDas fühlt sich lächerlich an, aber ich kann kein kürzeres Mittel in der AHK finden, um dies zu tun:
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.
StringSplit erstellt ein Pseudo-Array mit 1 als erstem Index. So wird der erste Term mit
s1
, der zweite mits2
usw. bezeichnet. Ansonsten gibt es hier nichts Besonderes.quelle
Send Hare Krishna ...
?Batch, 75 Bytes
quelle
C 96 Bytes
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 ).
quelle
ksh / bash / sh, 66 Bytes
quelle
APL (Dyalog) , 47 Bytes
Benötigt,
⎕IO←0
was auf vielen Systemen Standard ist.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)quelle
Netzhaut, 60
Direkter Port meiner sed Antwort :
Probieren Sie es online aus .
quelle
Java 7,
104103 BytesErläuterung:
Probieren Sie es hier aus.
quelle
Batch,
117111103 BytesEs sind jetzt bis zu 103 Zeilenwechsel zulässig.
^\n\n
wird verwendet, um eine neue Zeile am Ende der ersten drei Zeilen einzufügen, und es folgt ein LeerzeichenRama
.quelle
Perl,
7674 Bytesquelle