Hare Krishna Hare Krishna Krishna Hare


65

Gần đây, tôi đã thấy người Hare Krishna với câu thần chú của họ trên biểu tượng và tôi thấy nó có thể khá thú vị khi viết mã golf.

Các thách thức

Viết thần chú Hare Krishna , tức là:

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

Tiêu chí chiến thắng

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!

Quy tắc

  • Vỏ phải được bảo quản.
  • Văn bản nên chứa dòng mới.
  • Các dòng có thể có dấu cách (s).
  • Trailing newline được cho phép.
  • Phân tích cú pháp từ web hoặc bất kỳ tài nguyên bên ngoài nào khác không được phép.

2
Từ tiêu đề, tôi đã mong đợi một cái gì đó để giải mã các chuỗi nhị phân thành các ký tự ASCII. Tiêu đề đại diện cho một dấu gạch chéo ngược.
user253751

5
Tất cả các câu thần chú có 97 byte. Đáng ngạc nhiên là có nhiều câu trả lời với nhiều byte hơn.
Masclins

Hmm, tại sao nó đáng ngạc nhiên trông giống như một bản dupe của Rickroll?
Matthew Roh

Câu trả lời:


58

Thạch , 22 byte

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

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

“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"]Cảm ơn lòng tốt bạn đã giải thích thêm, bởi vì điều đó không có ý nghĩa.
Nic Hartley

11
Tôi cần sử dụng cơ sở ["Hare", "Rama", "Krishna"] nhiều hơn.
ATaco

63

05AB1E , 38 byte

Có thể rút ngắn 2 byte nếu theo dõi dòng mới là ổn.

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

Hãy thử trực tuyến!

Giải trình

“«Î‡Ä¦í¥Â“                              # 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, có thật không? Ý tưởng đó đến từ đâu? +1 :)
Stewie Griffin

14
Nói thật với tôi, bạn đã xây dựng một trình tạo mã golf 05AB1E chưa?
YSC

1
@YSC đó không phải là một ý tưởng tồi để nén từ điển. Tôi đang ở trên đó.
Bạch tuộc ma thuật Urn



39

Octave, 74 59 byte

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

Xác nhận đầu ra ở đây .

Giải trình:

{'Hare ','Krishna ','Rama ',10}tạo một mảng ô có ba chuỗi, trong đó chuỗi thứ tư là 10(giá trị ASCII cho dòng mới).

{'ababdbbaadacacdccaa'-96}là một vectơ chỉ mục mảng ô ở trên. Các vectơ là [1 2 1 2 4 ...]vì chúng tôi trừ 96khỏi chuỗi ababd....

Dấu ngoặc vuông xung quanh được sử dụng để nối các kết quả, thay vì nhận ans = Hare; and = Krishna; ans = ...


Tôi không biết bạn có thể lập chỉ mục ô như thế trong Octave (không giống như MATLAB)!
Ghi nhớ

19

Võng mạc , 39 byte


hkhk¶kkhh
h
Hare 
*`k
Krishna 
k
Rama 

Hãy thử trực tuyến!

Chủ yếu là sự thay thế đơn giản, "mẹo" duy nhất là công cụ sửa đổi *in kết quả của sự thay thế và sau đó hoàn nguyên chuỗi trở lại như trước đây.



12

JavaScript, 75 70 byte

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

Hãy thử trực tuyến!

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


2
Sử dụng tốt hơn các ký tự dòng mới theo nghĩa đen trong chuỗi mẫu trực tiếp thay vì chữ số 3. Chuỗi mẫu sẽ có cùng độ dài, nhưng bạn sẽ không phải thay thế chúng sau này. (Sẽ không gây ra sự cố chỉ mục mảng, vì /./không khớp với các ký tự dòng mới.)
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);}

Hãy thử trực tuyến!

Đã lưu 28 byte, nhờ Dennis


1
Chào mừng bạn đến với Câu đố lập trình và Code Golf.
Rohan Jhunjhunwala

1
Đó là một từ viết tắt tiêu chuẩn khá cho các câu đố lập trình và mã golf, tên của trao đổi ngăn xếp này. Xin lỗi, tôi nên đã làm rõ điều này. Chào mừng đến với trang web của chúng tôi, bài viết đầu tiên tốt.
Rohan Jhunjhunwala

1
Điều này sẽ không hoạt động với tất cả các trình biên dịch, nhưng gcc không yêu cầu câu lệnh bao gồm. Ngoài ra, nếu bạn hạn chế gửi của mình đến C, bạn có thể bỏ intvà khai báo itrên toàn cầu để nó mặc định là 0. tio.run/nexus/ Kẻ
Dennis

2
@AnT Điều đó đúng, nhưng các cuộc thi golf mã không yêu cầu mã "đúng". Ở đây trên PPCG, chúng tôi xác định ngôn ngữ bằng cách thực hiện chúng. Miễn là có một trình biên dịch tạo ra một tệp thực thi hoạt động, câu trả lời là hợp lệ.
Dennis

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

11

V , 40 , 36 byte

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

Hãy thử trực tuyến!

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

Giải trình:

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ác <C-n>lệnh là cực kỳ hữu ích cho những thách thức như thế này. :)


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

Khá đơn giản, Console.Writeđịnh dạng ngầm định chuỗi và sử dụng Writethay vì WriteLinekhông chỉ tiết kiệm 4 byte, mà còn tránh một dòng mới. Sử dụng các dòng mới theo kiểu Unix nên có thể không hoạt động tốt trên windows, thêm 6 byte cho windows bằng cách thay đổi \nthành\r\n

Phương thức này sẽ xuất trực tiếp ra bàn điều khiển, nếu bạn thích một phương thức trả về một chuỗi:

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

Ngoài ra, nếu bạn cần một chương trình hoàn toàn độc lập và có thể biên dịch được:

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

Điều này sẽ hoạt động như một chương trình được biên dịch với điều kiện bạn đặt Alàm lớp nhập cảnh.


Trông hơi lạ khi không có khoảng cách giữa các từ.
manatwork

@manatwork điểm tốt, rất may thông số kỹ thuật nói rằng không gian dấu là ổn, vì vậy chỉ tốn 3 byte
Skidsdev

Có thể bắt đầu một cuộc chiến rực lửa, nhưng bạn có thể sử dụng var thay vì chuỗi để giảm ví dụ thứ hai thậm chí nhiều hơn.
John Baughman

@JohnBaughman Giá trị trả về của phương thức không thể varxa như tôi biết, và var.Format()chắc chắn không phải là một điều
Skidsdev

Duh ... Không nghĩ về điều đó. Bạn nói đúng, tôi vừa bước vào thế giới lamba và hiểu sai những gì tôi đang đọc.
John Baughman

8

C, 85 byte

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

Tôi thích một câu thần chú thế tục, nhưng tôi hy vọng đây là một trong những tôn giáo hòa bình.

Xem nó hoạt động ở đây .

Điều này bắt buộc một triển khai ngây thơ bằng 23 byte.


8

Python 2, 92 88 74 byte

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

Hãy thử trực tuyến!

Không , nó không thông minh, không, nó không phải là ngắn nhất nhưng hey, tôi mới làm điều này và nó hoạt động.

Một giải pháp khác ( 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

Hoán đổi các số 0 và số 0, cùng với 'Hare' và 'Krishna' trong danh sách. Điều này loại bỏ số không hàng đầu. Sau đó chuyển đổi số mới (1010300113121232211) thành hex (0xe054e999f20c553), bao quanh nó bằng backticks và cuối cùng nhận ra câu trả lời của xnor vẫn ở phía trước 12 byte! tio.run/##K6gsycjPM/r/Py2/ từ
vroomfondel

6

Perl, 67 byte

Lấy cảm hứng từ mục JavaScript này .

$_='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)lưu hai byte trong mã đầu tiên của bạn.
Dada

5

Matlab 139 136 105 byte (nhờ @ 2501 )

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

Hãy thử trực tuyến trên Octave!


hoặc 126 byte nếu dòng mới được cho phép
user13267

@ 2501: haha ​​thật tuyệt Trên thực tế tôi nghĩ rằng 105 byte có thể là bạn nên đăng nó dưới dạng câu trả lời
user13267

5
Tôi khá chắc chắn những cải tiến hơn nữa là có thể.
2501

1
FYI, TIO hỗ trợ Octave :) tio.run/nexus/ từ
Beta Decay

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]là 64 byte. : P (dịch bài nộp quãng tám của @Stewie Griffin)
Ghi nhớ

5

MySQL, 115 100 byte

(Cảm ơn @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

Bạn có thể loại bỏ tất cả AS .
manatwork

Thủ thuật hay, chắc chắn tôi sẽ sử dụng phương pháp này cho một số thử thách.
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="")

Nó tạo ra một vectơ với Hare, Krishnavà dòng mới, lấy những cái cần thiết, và sau đó lặp lại thay thế nó Krishnabằng Rama.

Cần bao gồm khoảng trắng trên mỗi từ và sep=""vì nếu không cat()sẽ đặt một khoảng trắng ở đầu mỗi dòng.


Tôi không thể làm việc này trong TIO
Giuseppe

Có lẽ cần một bản in () hoặc một cái gì đó.
BLT

@Giuseppe Tôi đang sử dụng ở đây R tự động in. Nhưng tùy thuộc vào cách bạn gọi nó, print()hoặc cat()sẽ cần thiết. Điều đó sẽ đòi hỏi nhiều byte hơn. Tôi sẽ đăng một thay thế với họ vào cuối tuần này :)
Masclins

1
@AlbertMasclans không Tôi gặp lỗi khi nói object 'h' not found tio.run/nexus/ Kẻ
Giuseppe

2
Tôi nghĩ bạn cần thay thế h=bằng h<-bên trong các cuộc gọi đếnp
Giuseppe

5

PowerShell, 73 53 52 byte

hoàn toàn bị phá hủy bởi Jeff Freeman - sử dụng một dòng mới thực tế thay vì \nlưu một byte khác, và cũng lưu thêm một định dạng trên định dạng mảng. (từ (1,2)đến ,1,2)

-1 nhờ vào TesselatingHeckler, không có dấu phẩy trong ký hiệu mảng.

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

Câu trả lời cũ của tôi - Đã thử một vài phương pháp thay thế khác nhưng cuối cùng tất cả đều dài hơn một chút.

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

có những dòng mới trong chuỗi.

khá đơn giản, sử dụng thực tế là powershell sẽ mở rộng các biến trong doublequote và một phương pháp gán biến ngắn hơn để lưu một số byte.


Giải pháp tốt, nhưng tôi thách bạn giảm nó xuống bằng cách nhận thấy một mô hình trong đầu ra và đường ống. Tôi đã giảm xuống còn 55 Byte. Tôi không biết cách làm hỏng một nhận xét, vì vậy chỉ cần trả lời ở đây nếu bạn muốn xem nó (hoặc nếu bạn muốn một số gợi ý!).
Jeff Freeman

2
Thay vì thẻ spoiler, tôi đã tìm ra cách chia sẻ thông qua một liên kết. Hãy thử trực tuyến!
Jeff Freeman

@JeffFreeman đẹp một, đã loại bỏ hai thứ nữa trên dòng mới và mảng - xuống còn 52, đánh bại hầu hết tất cả các ngôn ngữ không chơi gôn.
colsw

4

Trầm tích, 72

Điểm bao gồm +1 cho -rcờ.

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

Hãy thử trực tuyến .


Khá chắc chắn rằng có một cách để loại bỏ một số byte bằng cách sử dụng change, ppend ahoặc insert thay vì substolarship. Chỉnh sửa: không còn chắc chắn nữa; Chỉnh sửa chỉnh sửa: vâng không, điều đó không hoạt động vì chúng không hoạt động trên không gian mẫu mà thay vào đó là đầu ra trực tiếp
Aaron

4

Ruby , 62 61 byte

Khi tôi làm việc này, cuối cùng nó trở nên gần giống với câu trả lời Python của @ xnor, ngoại trừ Ruby không có khoảng cách giữa các đối số trong printchức năng của nó , buộc tôi phải sử dụng các phép nối thay thế và dẫn đến câu trả lời dài hơn ...

-1 byte từ @manatwork

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

Hãy thử trực tuyến!


Tạo :Haremột biểu tượng.
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
Đẹp đầu tiên thử. Tôi có thể đề xuất một vài cải tiến nhỏ không? pastebin.com/0bYQF26n
manatwork

@manatwork bạn nên thêm nó làm câu trả lời của bạn.
Pandya

1
Không có biến, s=nó giảm xuống 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

Điều này cảm thấy vô lý nhưng tôi không thể tìm thấy một phương tiện ngắn hơn trong AHK để làm điều này:

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

Đây là những gì tôi đã thử đầu tiên là 107 byte và đã cố gắng để được ưa thích. Như Digital Trauma đã chỉ ra , tuy nhiên, nó sẽ ngắn hơn nếu chỉ gửi văn bản thô.

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

StringSplit tạo ra một mảng giả với 1 là chỉ mục đầu tiên. Vì vậy, thuật ngữ đầu tiên được tham chiếu với s1, thuật ngữ thứ hai với s2, v.v. Nếu không, không có gì lạ mắt ở đây.


13
Toàn bộ đầu ra chỉ có 92 byte. Nó sẽ tốt hơn chỉ đơn giản là Send Hare Krishna ...?
Chấn thương kỹ thuật số

@DigitalTrauma HA! Vâng, có lẽ, sau đó. Tôi cho rằng ưa thích là tốt hơn và thậm chí không kiểm tra. AHK không phải là một ngôn ngữ tốt cho việc này.
Kỹ sư Toast

3

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

Bạn chỉ cần hai bit thông tin để tìm ra từ nào từ lời cầu nguyện là cần thiết tiếp theo, vì vậy thay vì sử dụng một loạt bộ nhớ và mã hóa nó thành một chuỗi, bạn chỉ có thể mã hóa nó thành một số nguyên 40 bit (tức là bên trong một int dài ).


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 Cảm ơn. Thay đổi nó thành <CR>, làm cho nó thậm chí còn ngắn hơn. Không thể tự kiểm tra, nhưng điều này sẽ làm việc. Ít nhất là nó hoạt động trong bash và thậm chí (busybox) sh.
ULick

có vẻ như tôi đã thêm một khoảng trống trong chỉnh sửa, nhưng đã trừ đi một phần, do sự thay đổi từ '\ n' thành <CR>
ULick

3

APL (Dyalog) , 47 byte

Yêu cầu ⎕IO←0mặc định trên nhiều hệ thống.

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

Hãy thử trực tuyến!

8×4 1 5 2 nhân; [32,8,40,16]

(4⍴3)⊤ chuyển đổi sang cơ sở 4 chữ số 3; ma trận [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] chỉ số

 chia thành danh sách

∊¨ tranh thủ (làm phẳng từng cái)

 trộn vào ma trận (đệm với khoảng trắng)



2

Java 7, 104 103 byte

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

Giải trình:

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

Hãy thử nó ở đây.


2

Hàng loạt, 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%

Bây giờ xuống 103 mà dòng mới được cho phép.

^\n\nđược sử dụng để chèn một dòng mới vào cuối ba dòng đầu tiên và có một khoảng trắng sau Rama.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.