Krişna Hare Krişna Krişna Krişna Hare


65

Son zamanlarda, Hare Krishna insanlarını amblemdeki mantralarıyla gördüm ve golf kodlamanın oldukça ilginç olabileceğini gördüm.

Meydan okuma

Hare Krishna mantrasını yazın , yani:

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

Kazanan kriterler

Bu , bayt cinsinden en kısa kod kazanır!

kurallar

  • Muhafaza korunmalıdır.
  • Metin yeni satırlar içermelidir.
  • Satırların sonunda boşluk olabilir.
  • İzleyen newline izin verilir.
  • Web'den veya başka herhangi bir dış kaynaktan ayrıştırma izin verilmez.

2
Başlıktan, ikili dizeleri ASCII karakterlerine kodlayacak bir şey bekliyordum. Başlık bir ters eğik çizgiyi temsil eder.
kullanıcı253751

5
Tüm mantranın 97 baytı vardır. Şaşırtıcı bir şekilde, bu kadar çok bayttan daha fazlası olan cevaplar var.
Masclins

Hmm, Neden şaşırtıcı bir Rickroll dupe'ye benziyor?
Matthew Roh

Yanıtlar:


58

Jöle , 22 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

“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"]Tanrıya şükür ki bunu daha fazla açıkladın, çünkü bunun anlamı yoktu.
Nic Hartley

11
Daha ["Hare", "Rama", "Krishna"] fazla taban kullanmalıyım .
ATaco

63

05AB1E , 38 bayt

İzleyen yeni satırlar tamamsa 2 byte kısaltılabilir.

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

Çevrimiçi deneyin!

açıklama

“«Î‡Ä¦í¥Â“                              # 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, Gerçekten mi? Bu fikir nereden geldi? +1 :)
Stewie Griffin,

14
Açıkçası söyle, bir 05AB1E golf kodu üretti mi?
YSC

1
@YSC bu sözlük sıkıştırma için kötü bir fikir değil. İş üstündeyim.
Magic Octopus Urn,



39

Octave, 74 59 bayt

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

Çıkışı buradan doğrulayın .

Açıklama:

{'Hare ','Krishna ','Rama ',10}dördüncü 10olanın (newline için ASCII değeri) olduğu üç dizeli bir hücre dizisi oluşturur .

{'ababdbbaadacacdccaa'-96}yukarıdaki hücre dizisini endeksleyen bir vektördür. Vektör, dizgeden çıkardığımızdan [1 2 1 2 4 ...]beri .96ababd...

Çevreleyen köşeli parantezler, sonuçları almak yerine birleştirmek için kullanılır ans = Hare; and = Krishna; ans = ...


Böyle bir hücreyi Octave'da indeksleyebileceğinizi bilmiyordum (MATLAB'ın aksine)!
17'de Memming'i

19

Retina , 39 bayt


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Çevrimiçi deneyin!

Çoğunlukla sade ikameler, sadece "püf noktası", *ikame sonucunu basan ve daha sonra ipi daha önce olduğu gibi geri döndüren değiştiricidir.



12

JavaScript, 75 70 bayt

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

Çevrimiçi deneyin!

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


2
Değişken newline karakterlerini şablon dizesinde basamak yerine doğrudan kullanmak daha iyidir 3. Şablon dizgisinin uzunluğu aynıdır, ancak daha sonra değiştirmeniz gerekmeyecektir. (Dizi dizini sorununa neden olmayacak, çünkü /./yeni satır karakterleriyle
eşleşmiyor

12

C

154 bayt, 124 bayt, 96 bayt

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

Çevrimiçi deneyin!

Dennis sayesinde 28 byte kurtarıldı


1
Programming Puzzles ve Code Golf'a hoş geldiniz.
Rohan Jhunjhunwala

1
Bu yığın borsasının adı bulmaca programlaması ve kod golfü için oldukça standart bir kısaltmadır. Üzgünüm, bunu açıkça söylemeliydim. Sitemize Hoşgeldiniz, ilk mesajınız iyi.
Rohan Jhunjhunwala

1
Bu, tüm derleyicilerle çalışmaz, ancak gcc include ifadesini gerektirmez. Ayrıca, gönderinizi C ile sınırlandırırsanız, varsayılan olarak sıfıra düşürmek için global olarak intbeyan ve beyan edebilirsiniz i. tio.run/nexus/…
Dennis

2
@ ANT Bu doğru, ancak kod golf yarışmaları "uygun" kod gerektirmez. Burada PPCG'de, dilleri onların uygulanmasına göre tanımlarız. Çalışan bir yürütülebilir dosya üreten bir derleyici olduğu sürece, cevap geçerlidir.
Dennis,

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

11

V , 40 , 36 bayt

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

Çevrimiçi deneyin!

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

Açıklama:

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

<C-n>Komut böyle zorluklar için son derece yararlıdır. :)


10

C #, 109 bayt

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

Oldukça basit, Console.Writedizgiyi dolaylı olarak biçimlendirir ve Writebunun yerine WriteLinesadece 4 baytlık tasarruf sağlamakla kalmaz, takip eden bir yeni satırdan da kaçınır. Unix tarzı yeni satırlar kullanır, böylece pencerelerde çok iyi çalışmayabilir \n;\r\n

Bir dize döndüren bir yöntemi tercih ederseniz, bu yöntem doğrudan konsola çıkacaktır:

C #, 118 bayt

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

Alternatif olarak, tamamen bağımsız ve derlenebilir bir programa ihtiyacınız varsa:

C #, 135 bayt

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

Bu A, giriş sınıfı olarak ayarladığınız takdirde derlenmiş bir program olarak çalışmalıdır .


Kelimeler arasında boşluk olmadan biraz tuhaf görünüyor.
Manatwork

@ manatwork iyi nokta, neyse ki spec diyor ki sondaki boşluklar iyidir, bu yüzden sadece 3 byte eder
Skidsdev

Bir alev savaşı başlatabilir, ancak ikinci örneği daha da azaltmak için string yerine var kullanabilirsiniz.
John Baughman

@JohnBaughman Bir yöntemin dönüş değeri varbildiğim kadarıyla olamaz ve var.Format()kesinlikle bir şey değildir
Skidsdev

Duh ... Bunu düşünmedim. Haklısın, kendimi lamba dünyasına soktum ve okuduğum şeyi yanlış yorumladım.
John Baughman

8

C, 85 bayt

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

Laik bir mantrayı tercih ederdim, ama umarım bu barışçıl dinlerden biridir.

O bkz burada çalışmak .

Bu, saf bir uygulamayı 23 bayt ile sıkıştırır.


8

Python 2, 92 88 74 bayt

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

Çevrimiçi deneyin!

Hayır , zekice değil, hayır, en kısa değil ama hey, bu konuda yeniyim ve işe yarıyor.

Başka bir çözüm ( 84 80 bayt):

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

Listedeki 'Hare' ve 'Krishna' ile birlikte sıfırları ve olanlarını değiştirin. Bu, öncü sıfırı kaldırır. Ardından yeni sayıyı (1010300113121232211) hex (0xe054e999f20c553) 'e dönüştürün, backticks ile kuşatın ve nihayet xnor'ın cevabının hala 12 byte önde olduğunu fark edin! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

Perl, 67 bayt

Bu JavaScript girişinden ilham alındı .

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

Perl, 67 bayt

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

2
(Hare,Krishna,Rama)ilk kodunuzda iki byte kaydeder.
Dada

5

Matlab 139 136 105 bayt (@ 2501 sayesinde )

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

Octave'de Çevrimiçi Deneyin!


veya takip eden yeni satıra izin verilirse 126 bayt
user13267

@ 2501: haha ​​bu harika. Aslında 105 bayt olabilir sanırım cevap olarak göndermelisiniz
user13267

5
Daha fazla iyileştirmenin mümkün olacağından eminim.
2501

1
Bilginize, TIO Octave'ın :) destekler tio.run/nexus/...
Beta Değer Kaybı

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]64 bayttır. : P (@Stewie Griffin'nin oktav gönderimini
çevirerek

5

MySQL, 115 100 bayt

(Teşekkürler @ 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

Hepsini kaldırabilirsiniz AS .
Manatwork

İyi numara, kesinlikle bu yöntemi bazı zorluklar için kullanacağım.
BradC

5

R, 75 85 83 bayt

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

Bu bir vektör oluşturur Hare, Krishnave yeni satır, gerekli olanları alır ve daha sonra yerine tekrarlar Krishnatarafından Rama.

Her kelimeye boşluk koymak gerekiyordu ve sep=""aksi halde cat()her satırın başına boşluk koyacaktı.


Bunun TIO'da
Giuseppe

Muhtemelen bir baskıya () ya da bir şeye ihtiyacı vardır.
BLT

@Giuseppe Burada R otomatik olarak yazdırır kullanıyorum. Ama nasıl çağırdığına bağlı olarak, print()ya cat()da gerekli olacaktı. Bu çok daha fazla bayt gerektirir. Bu haftasonu onlarla bir alternatif
göndereceğim

1
@AlbertMasclans no object 'h' not found tio.run/nexus/…
Giuseppe

2
Ben değiştirmek gerektiğini düşünüyorum h=ile h<-çağrıları içinep
Giuseppe

5

PowerShell, 73 53 52 Bayt

Jeff Freeman tarafından kesinlikle yıkıldı - \nbaşka bir bayt yerine gerçek bir yeni satır kullanarak ve aynı zamanda dizi biçiminde bir tane daha kaydetti. ( (1,2)ila ,1,2)

-1 TesselatingHeckler sayesinde, dizi gösteriminde virgül yok.

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

Eski cevabım - Başka bir kaç yöntem değiştirmeye çalıştım ama hepsi bir şekilde biraz daha uzadı.

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

dizgede yeni satırlar var.

Oldukça basit, powershell'in çift tırnak içindeki değişkenleri genişleteceği gerçeğini ve bazı baytları kaydetmek için değişkenleri atamanın daha kısa bir yöntemini kullanır.


İyi bir çözüm, ancak çıktı ve boru hattında bir model fark ederek sizi daha da aşağı indirmenize meydan okuyorum. 55 byte'a indirdim. Bir yorumu nasıl mahvedeceğimi bilmiyorum, bu yüzden eğer görmek isterseniz (ya da bazı ipuçları istiyorsanız!)
Jeff Freeman,

2
Bir spoiler etiketi yerine, nasıl link paylaşılacağını öğrendim. Çevrimiçi deneyin!
Jeff Freeman

@JeffFreeman güzel olanı, yeni hattın ve dizininkinden iki kat daha fazla tıraş etti - 52'ye kadar golf oynamayan hemen hemen tüm dilleri attı.
colsw

4

Sed, 72

Puan, -rbayrak için +1'i içerir .

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

Çevrimiçi deneyin .


Elbette c, aubstitute iyerine hange , ppend veya nsert kullanarak bazı baytları silmenin bir yolu olduğuna emin olun s. Düzenleme: artık emin değil; Düzenleme düzenleme: evet hayır bu işe yaramaz çünkü kalıp uzayda çalışmazlar, bunun yerine doğrudan çıkış yaparlar
Aaron

4

Ruby , 62 61 bayt

Bu konuda çalıştıkça, sonunda @ xnor'ın Python cevabıyla neredeyse aynı hale geldi, ancak Ruby'nin printişlevindeki argümanlar arasında boşluk bırakmadığı , beni birleştirme yerine kullanmaya zorlayan ve daha uzun bir cevapla sonuçlanan ...

@Manatwork gelen -1 bayt

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

Çevrimiçi deneyin!


:HareBir Sembol Yap .
Manatwork

4

Bash, 93 90 bayt

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
İlk önce denemek güzel. Birkaç küçük iyileştirme önerebilir miyim? pastebin.com/0bYQF26n
manatwork

@manatwork cevabınız olarak eklemelisiniz.
Pandya

1
Değişken olmadan s=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 bayt

Bu çok saçma geliyor ama bunu yapmak için AHK'da daha kısa bir yol bulamıyorum:

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

İşte ilk denediğim şey 107 bayt ve süslü olmaya çalıştı. Dijital Travmanın da belirttiği gibi , sadece ham metni göndermek daha kısa olurdu.

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

StringSplit , ilk dizin olarak 1 olan bir sözde dizi oluşturur. Böylece ilk terime, s1ikincisi s2vb. İle atıfta bulunulur .


13
Tüm çıktı sadece 92 bayttır. Basitçe daha iyi olur Send Hare Krishna ...mu?
Dijital Travma

@ DigitalTrauma HA! Evet, muhtemelen o zaman. Fantezi daha iyi olduğunu ve hatta kontrol etmedi sanıyordum. AHK bunun için iyi bir dil değil.
Mühendis Toast,

3

Toplu iş, 75 bayt

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

3

C 96 bayt

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

Duadan sonra hangi sözcüğün gerekli olduğunu bulmak için sadece iki bilgi parçasına ihtiyacınız vardır, bu nedenle bir grup bellek kullanmak ve onu bir dize olarak kodlamak yerine, sadece 40 bitlik bir tamsayı olarak kodlayabilirsiniz (yani, uzun bir int içinde). ).


3

ksh / bash / sh, 66 bayt

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

@ nimi Teşekkürler. Bir <CR> olarak değiştirildi, onu daha da kısalttı. Kendim test edemiyorum, ama bu işe yaramalı. En azından bash ve hatta (meşgul kutusu) sh ile çalışır.
ULick

Görünüşe göre düzenleme için boşluk ekledim, ancak '\ n' ile <CR>
ULick

3

APL (Dyalog) , 47 bayt

⎕IO←0Birçok sistemde varsayılan olanı gerektirir .

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

Çevrimiçi deneyin!

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

(4⍴3)⊤ 4 basamaklı tabana 3 dönüştürmek; matris [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] endeks

 listeler listesine bölün

∊¨ enlist (her birini düzleştir)

 matriks içine karıştırın (boşluklarla doldurun)



2

Java 7, 104 103 bayt

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

Açıklama:

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

Burada dene.


2

Toplu, 117 111 103 bayt

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

Şimdi 103'e kadar takip eden yeni hatlara izin veriliyor.

^\n\nilk üç satırın sonuna yeni bir satır eklemek için kullanılır ve sonrasında bir boşluk olur Rama.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.