Hare Krishna Hare Krishna Krishna Krishna Hare Hare


65

Baru-baru ini, saya telah melihat orang-orang Hare Krishna dengan mantra mereka di lambang dan saya menemukan itu mungkin cukup menarik untuk kode golf.

Tantangan

Tulis mantra Hare Krishna , yaitu:

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

Kriteria menang

Ini adalah , jadi kode terpendek dalam byte menang!

Aturan

  • Casing harus dilestarikan.
  • Teks harus berisi baris baru.
  • Garis mungkin memiliki spasi tambahan.
  • Trailing newline diizinkan.
  • Parsing dari web atau sumber daya eksternal lainnya tidak diizinkan.

2
Dari judulnya saya mengharapkan sesuatu untuk memecahkan kode string biner menjadi karakter ASCII. Judul mewakili garis miring terbalik.
user253751

5
Semua mantra memiliki 97 byte. Cukup mengejutkan, ada jawaban dengan byte lebih dari itu.
Masclins

Hmm, Mengapa ini tampak seperti duplikat Rickroll?
Matthew Roh

Jawaban:


58

Jelly , 22 byte

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

Cobalah online!

Bagaimana itu bekerja

“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"]Syukurlah Anda menjelaskan lebih lanjut, karena itu tidak masuk akal.
Nic Hartley

11
Saya perlu menggunakan basis ["Hare", "Rama", "Krishna"] lebih banyak.
ATaco

63

05AB1E , 38 byte

Dapat dipersingkat 2 byte jika mengikuti baris baru tidak apa-apa.

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

Cobalah online!

Penjelasan

“«Î‡Ä¦í¥Â“                              # 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, Benarkah? Dari mana ide itu berasal? +1 :)
Stewie Griffin

14
Katakan sejujurnya, apakah Anda membuat generator kode golf 05AB1E?
YSC

1
@YSC itu bukan ide yang buruk untuk kompresi kamus. Saya ikut.
Magic Octopus Urn



39

Oktaf, 74 59 byte

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

Verifikasi output di sini .

Penjelasan:

{'Hare ','Krishna ','Rama ',10}menciptakan array sel dengan tiga string, di mana yang keempat adalah 10(nilai ASCII untuk baris baru).

{'ababdbbaadacacdccaa'-96}adalah vektor yang mengindeks array sel di atas. Vektor ini [1 2 1 2 4 ...]karena kita kurangi 96dari string ababd....

Kurung kotak di sekitarnya digunakan untuk menggabungkan hasil, bukan mendapatkan ans = Hare; and = Krishna; ans = ...


Saya tidak tahu Anda dapat mengindeks sel seperti itu di Oktaf (tidak seperti MATLAB)!
Memming

19

Retina , 39 byte


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Cobalah online!

Sebagian besar penggantian sederhana, satu-satunya "trik" adalah pengubah *yang mencetak hasil substitusi dan kemudian mengembalikan string kembali ke apa yang sebelumnya.



12

JavaScript, 75 70 byte

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

Cobalah online!

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


2
Lebih baik menggunakan karakter baris baru literal dalam string template langsung daripada digit 3. String template akan memiliki panjang yang sama, tetapi Anda tidak perlu menggantinya nanti. (Tidak akan menyebabkan masalah indeks array, karena /./tidak cocok dengan karakter baris baru.)
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);}

Cobalah online!

28 byte disimpan, terima kasih kepada Dennis


1
Selamat datang di Programming Puzzles and Code Golf.
Rohan Jhunjhunwala

1
Ini adalah akronim yang cukup standar untuk teka-teki pemrograman dan golf kode, nama pertukaran tumpukan ini. Maaf, saya seharusnya menjelaskan ini. Selamat datang di situs kami, posting pertama yang bagus.
Rohan Jhunjhunwala

1
Ini tidak akan bekerja dengan semua kompiler, tetapi gcc tidak memerlukan pernyataan penyertaan. Selain itu, jika Anda membatasi pengiriman ke C, Anda dapat menjatuhkan intdan mendeklarasikan isecara global sehingga defaultnya adalah nol. tio.run/nexus/…
Dennis

2
@ ANT Itu benar, tetapi kompetisi kode golf tidak memerlukan kode "tepat". Di sini, di PPCG, kami mendefinisikan bahasa dengan implementasinya. Selama ada kompiler yang menghasilkan executable yang berfungsi, jawabannya valid.
Dennis

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

11

V , 40 , 36 byte

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

Cobalah 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

Penjelasan:

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

The <C-n>Perintah ini sangat berguna untuk tantangan seperti ini. :)


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

Cukup mudah, Console.Writesecara implisit memformat string, dan menggunakan Writebukan WriteLinehanya menghemat 4 byte, tetapi juga menghindari baris baru. Menggunakan baris Unix-style sehingga mungkin tidak bekerja dengan baik pada windows, tambahan 6 byte untuk jendela dengan mengubah \nke\r\n

Metode ini akan menampilkan langsung ke konsol, jika Anda lebih suka metode yang mengembalikan string:

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

Atau jika Anda membutuhkan program yang sepenuhnya berdiri sendiri dan dapat dikompilasi:

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

Ini harus berfungsi sebagai program yang dikompilasi asalkan Anda menetapkan Asebagai kelas entri.


Terlihat agak aneh tanpa spasi di antara kata-kata.
manatwork

@manatwork poin bagus, untungnya spec mengatakan spasi tambahan oke, jadi hanya biaya 3 byte
Skidsdev

Bisa memulai perang api, tetapi Anda bisa menggunakan var alih-alih string untuk mengurangi contoh kedua lebih banyak lagi.
John Baughman

@JohnBaughman Nilai pengembalian metode tidak bisa varsejauh yang saya tahu, dan var.Format()jelas bukan apa
Skidsdev

Duh ... Tidak memikirkan itu. Anda benar, saya baru saja masuk ke dunia lamba dan salah menafsirkan apa yang saya baca.
John Baughman

8

C, 85 byte

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

Saya lebih suka mantra sekuler, tetapi saya harap ini adalah salah satu dari agama-agama yang damai itu.

Lihat berhasil di sini .

Ini memadatkan implementasi yang naif sebesar 23 byte.


8

Python 2, 92 88 74 byte

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

Cobalah online!

Tidak , ini tidak pintar, tidak, ini bukan yang terpendek tapi hei, saya baru dalam hal ini dan itu berhasil.

Solusi lain ( 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

Tukar angka nol dan satu, bersama dengan 'Hare' dan 'Krishna' dalam daftar. Ini menghilangkan nol di depannya. Kemudian konversi nomor baru (1010300113121232211) menjadi hex (0xe054e999f20c553), kelilingi dengan backticks, dan akhirnya menyadari jawaban xnor masih unggul 12 byte! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 byte

Terinspirasi oleh entri JavaScript ini .

$_='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)menyimpan dua byte dalam kode pertama Anda.
Dada

5

Matlab 139 136 105 byte (terima kasih kepada @ 2501 )

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

Cobalah Online dalam Oktaf!


atau 126 byte jika baris baru tambahan diizinkan
user13267

@ 2501: haha ​​itu bagus. Sebenarnya saya pikir itu 105 byte mungkin Anda harus mempostingnya sebagai jawaban
user13267

5
Saya cukup yakin perbaikan lebih lanjut dimungkinkan.
2501

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

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]adalah 64 byte. : P (menerjemahkan pengajuan oktaf @Stewie Griffin)
Memming

5

MySQL, 115 100 byte

(Terima kasih @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

Anda bisa menghapus semua AS .
manatwork

Trik yang bagus, saya pasti akan menggunakan metode ini untuk beberapa tantangan.
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="")

Ini membuat vektor dengan Hare,, Krishnadan baris baru, mengambil yang diperlukan, dan kemudian mengulanginya Krishnadengan Rama.

Diperlukan untuk memasukkan spasi pada setiap kata dan sep=""karena jika tidak cat()akan memberi spasi pada awal setiap baris.


Saya tidak bisa mengaktifkan ini
Giuseppe

Mungkin perlu cetak () atau sesuatu.
BLT

@ Giuseppe Saya menggunakan di sini bahwa R secara otomatis mencetak. Tetapi tergantung bagaimana Anda menyebutnya, print()atau cat()akan dibutuhkan. Itu akan membutuhkan byte lebih banyak. Saya akan memposting alternatif dengan mereka akhir pekan ini :)
Masclins

1
@AlbertMasclans tidak, saya mendapatkan pesan kesalahan mengatakan object 'h' not found tio.run/nexus/…
Giuseppe

2
Saya pikir Anda perlu mengganti h=dengan h<-di dalam panggilan kep
Giuseppe

5

PowerShell, 73 53 52 Bytes

benar-benar dihancurkan oleh Jeff Freeman - menggunakan baris baru yang sebenarnya daripada \nmenyimpan byte lain, dan juga menyimpan satu lagi pada format array. (dari (1,2)ke ,1,2)

-1 terima kasih kepada TesselatingHeckler, tidak ada koma dalam notasi array.

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

Jawaban lama saya - Mencoba beberapa metode pengganti lain tetapi entah bagaimana akhirnya sedikit lebih lama.

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

ada baris baru di string.

cukup mudah, menggunakan fakta bahwa PowerShell akan memperluas variabel dalam tanda kutip ganda, dan metode yang lebih pendek untuk menetapkan variabel untuk menghemat beberapa byte.


Solusi yang bagus, tetapi saya menantang Anda untuk menurunkannya dengan memperhatikan pola dalam output dan pipelining. Saya mendapatkannya hingga 55 Bytes. Saya tidak tahu cara spoiler komentar, jadi balas di sini jika Anda ingin melihatnya (atau jika Anda ingin beberapa petunjuk!).
Jeff Freeman

2
Alih-alih tag spoiler, saya menemukan cara untuk berbagi melalui tautan. Cobalah online!
Jeff Freeman

@JeffFreeman bagus, mencukur dua lagi pada baris baru dan array - turun ke 52, mengalahkan hampir semua bahasa non-golf.
colsw

4

Sed, 72

Skor termasuk +1 untuk -rbendera.

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

Cobalah online .


Cukup yakin ada cara untuk menghapus beberapa byte menggunakan change, append atau insert, bukan substitute. Sunting: tidak yakin lagi; Sunting sunting: ya tidak itu tidak berhasil karena mereka tidak bekerja pada ruang pola tetapi langsung menghasilkan
Aaron

4

Ruby , 62 61 byte

Ketika saya mengerjakan ini, akhirnya menjadi hampir identik dengan jawaban Python @ xnor, kecuali Ruby tidak memiliki spasi di antara argumen dalam printfungsinya, memaksa saya untuk menggunakan gabungan sebagai gantinya dan menghasilkan jawaban yang lebih panjang ...

-1 byte dari @manatwork

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

Cobalah online!


Buat :HareSimbol.
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
Usaha pertama yang bagus. Bolehkah saya menyarankan beberapa perbaikan kecil? pastebin.com/0bYQF26n
manatwork

@manatwork Anda harus menambahkannya sebagai jawaban Anda.
Pandya

1
Tanpa variabel s=itu turun ke 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

Ini terasa konyol tetapi saya tidak dapat menemukan cara yang lebih pendek di AHK untuk melakukan ini:

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

Inilah yang saya coba pertama yaitu 107 byte dan mencoba menjadi mewah. Seperti yang ditunjukkan oleh Digital Trauma , akan lebih singkat jika hanya mengirim teks mentah.

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

StringSplit membuat pseudo-array dengan 1 sebagai indeks pertama. Jadi istilah pertama direferensikan dengan s1, yang kedua dengan s2, dll. Jika tidak, tidak ada yang mewah di sini.


13
Seluruh output hanya 92 byte. Akankah lebih baik melakukannya Send Hare Krishna ...?
Digital Trauma

@DigitalTrauma HA! Ya, mungkin, kalau begitu. Saya pikir mewah lebih baik dan bahkan tidak memeriksa. AHK bukan bahasa yang baik untuk ini.
Engineer Toast

3

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

Anda hanya perlu dua bit informasi untuk mencari tahu kata mana dari doa yang diperlukan selanjutnya, jadi alih-alih menggunakan banyak memori dan menyandikannya sebagai string, Anda bisa menyandikannya sebagai integer 40 bit (mis. Di dalam sebuah int panjang ).


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 Terima kasih. Mengubahnya menjadi <CR>, membuatnya lebih pendek. Tidak dapat mengujinya sendiri, tetapi ini harus berhasil. Setidaknya itu berfungsi di bash dan bahkan (busybox) sh.
ULick

tampaknya saya menambahkan kosong dalam pengeditan, tetapi mengurangi satu, karena perubahan dari '\ n' ke <CR>
ULick

3

APL (Dyalog) , 47 byte

Membutuhkan ⎕IO←0yang default pada banyak sistem.

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

Cobalah online!

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

(4⍴3)⊤ dikonversi ke basis 4 digit 3; matriks [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] indeks

 dipecah menjadi daftar daftar

∊¨ minta (ratakan masing-masing)

 campur menjadi matriks (padding dengan spasi)



2

Java 7, 104 103 byte

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

Penjelasan:

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

Coba di sini.


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%

Turun ke 103 sekarang setelah mengikuti baris baru diizinkan.

^\n\ndigunakan untuk menyisipkan baris baru di akhir tiga baris pertama dan ada spasi setelahnya Rama.


2

Perl, 76 74 byte

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

1
2 byte lebih pendek: Coba online! (Saya cukup yakin hasilnya adalah yang benar)
Dada
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.