헤어 크리슈나 헤어 크리슈나 크리슈나 크리슈나 헤어


65

최근에 나는 엠블럼에 그들의 진언을 가진 Hare Krishna 사람들을 보았고 골프를 코딩하는 것이 꽤 흥미로울 수 있다는 것을 알았습니다.

도전

Hare Krishna 만트라를 작성하십시오 .

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

우승 기준

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

규칙

  • 케이싱은 보존해야합니다.
  • 텍스트는 줄 바꾸기를 포함해야합니다.
  • 줄 뒤에 공백이있을 수 있습니다.
  • 후행 줄 바꿈이 허용됩니다.
  • 웹 또는 기타 외부 리소스에서 구문 분석 할 수 없습니다.

2
제목에서 바이너리 문자열을 ASCII 문자로 디코딩 할 것으로 예상되었습니다. 제목은 백 슬래시를 나타냅니다.
user253751 2016 년

5
모든 만트라에는 97 바이트가 있습니다. 놀랍게도 충분한 바이트 수 이상의 응답이 있습니다.
Masclins

흠, 왜 놀랍게도 Rickroll 속임수처럼 보입니까?
Matthew Roh

답변:


58

젤리 , 22 바이트

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

온라인으로 사용해보십시오!

작동 원리

“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"]이해가되지 않기 때문에 더 설명해 주셔서 감사합니다.
Nic Hartley

11
베이스를 ["Hare", "Rama", "Krishna"] 더 사용해야합니다 .
ATaco

63

05AB1E , 38 바이트

후행 줄 바꿈이 올 바르면 2 바이트 단축 될 수 있습니다.

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

온라인으로 사용해보십시오!

설명

“«Î‡Ä¦í¥Â“                              # 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, 정말? 그 아이디어는 어디에서 왔습니까? +1 :)
Stewie Griffin

14
솔직히 말해, 당신은 05AB1E 골프 코드 생성기를 만들었습니까?
YSC

1
@YSC 그것은 사전 압축에 나쁜 생각이 아닙니다. 알겠습니다.
매직 문어 Urn



39

옥타브, 74 59 바이트

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

여기서 출력을 확인하십시오 .

설명:

{'Hare ','Krishna ','Rama ',10}세 번째 문자열로 셀형 배열을 작성합니다. 네 번째는 10(줄 바꿈의 ASCII 값)입니다.

{'ababdbbaadacacdccaa'-96}위의 셀형 배열을 인덱싱하는 벡터입니다. 벡터는 문자열에서 [1 2 1 2 4 ...]빼기 때문 입니다.96ababd...

주변 대괄호는 결과를 연결하는 데 사용됩니다. ans = Hare; and = Krishna; ans = ...


MATLAB과 달리 옥타브에서와 같은 셀을 색인 할 수 있다는 것을 몰랐습니다!
Memming



12

자바 스크립트, 75 70 바이트

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

온라인으로 사용해보십시오!

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


2
숫자 대신 직접 문자열에서 리터럴 개행 문자를 사용하는 것이 좋습니다 3. 템플릿 문자열의 길이는 동일하지만 나중에 교체하지 않아도됩니다. ( /./개행 문자와 일치하지 않기 때문에 배열 인덱스 문제가 발생 하지 않습니다.)
manatwork

12

154 바이트, 124 바이트, 96 바이트

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

온라인으로 사용해보십시오!

Dennis 덕분에 28 바이트 절약


1
프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다.
Rohan Jhunjhunwala

1
이 스택 교환의 이름 인 퍼즐과 코드 골프를 프로그래밍하는 데 사용되는 표준 약어입니다. 죄송합니다. 분명히해야합니다. 우리의 사이트에 오신 것을 환영합니다, 좋은 첫 번째 게시물.
Rohan Jhunjhunwala

1
모든 컴파일러에서 작동하지는 않지만 gcc에는 include 문이 필요하지 않습니다. 또한 제출을 C로 제한하면 전역을 삭제하고 전역 적으로 int선언 i하여 기본값을 0으로 설정할 수 있습니다 . tio.run/nexus/…
Dennis

2
@AnT 맞습니다. 그러나 코드 골프 대회에는 "적절한"코드가 필요하지 않습니다. 여기서는 PPCG에서 구현에 따라 언어를 정의합니다. 작동하는 실행 파일을 생성하는 컴파일러가 있으면 그 대답이 유효합니다.
Dennis

1
main(){for(char*t="BG@ESCB;:N8F6DIBA10Hare \0Krishna \0Rama \0\n";*t^72;printf(t+*t++-48));}4 바이트를 저장합니다.
Johan du Toit

11

V , 40 , 36 바이트

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

온라인으로 사용해보십시오!

16 진 덤프 :

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

설명:

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>명령은 이와 같은 문제에 매우 유용합니다. :)


10

C #, 109 바이트

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

상당히 간단 Console.Write하고 문자열을 암시 적으로 형식화하고 Write대신 WriteLine4 바이트를 사용하는 대신 줄 바꿈을 피합니다. 유닉스 스타일의 줄 바꿈을 사용하므로 변경하여 창에 잘 창에 대한 추가 6 바이트를 작동하지 않을 수 있습니다 \n\r\n

이 메소드는 문자열을 리턴하는 메소드를 선호하는 경우 콘솔에 직접 출력됩니다.

C #, 118 바이트

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

또는 완전히 독립되고 컴파일 가능한 프로그램이 필요한 경우 :

C #, 135 바이트

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

A엔트리 클래스로 설정 한 경우 컴파일 된 프로그램으로 작동해야합니다 .


단어 사이에 공백이 없으면 조금 이상하게 보입니다.
manatwork

좋은 점을 @manatwork, 다행히도 사양은 후행 공백이 좋아, 만 3 바이트 비용 있다고 말했습니다
Skidsdev을

불꽃 전쟁을 시작할 수는 있지만 문자열 대신 var를 사용하여 두 번째 예를 훨씬 줄일 수 있습니다.
John Baughman

@JohnBaughman 메소드의 반환 값은 var내가 아는 한 결코 될 수 없으며 var.Format()확실히 문제가되지 않습니다
Skidsdev

어 ... 생각하지 않았다. 당신은 맞습니다, 나는 방금 람바 세계에 들어갔고 내가 읽은 것을 잘못 해석했습니다.
John Baughman 17

8

C, 85 바이트

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

나는 세속적 인 만트라를 선호하지만 이것이 평화로운 종교 중 하나이기를 바랍니다.

여기에서 작동 하는지 확인 하십시오 .

이것은 순진한 구현을 23 바이트로 압축합니다.


8

파이썬 2, 92 88 74 바이트

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

온라인으로 사용해보십시오!

아니 , 그것은 영리하지 않다, 아니, 가장 짧지는 않지만 이봐, 나는 이것에 익숙하지 않으며 작동한다.

다른 솔루션 ( 84 80 바이트) :

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

목록에서 'Hare'및 'Krishna'와 함께 0과 1을 바꿉니다. 이것은 선행 0을 제거합니다. 그런 다음 새 숫자 (1010300113121232211)를 16 진수 (0xe054e999f20c553)로 변환하고 백틱으로 묶고 xnor의 답이 여전히 12 바이트 앞선다는 것을 깨달으십시오! tio.run/##K6gsycjPM/r/Py2/…
vroomfondel

6

펄, 67 바이트

JavaScript 항목에서 영감을 얻었습니다 .

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

펄, 67 바이트

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

2
(Hare,Krishna,Rama)첫 번째 코드에서 2 바이트를 저장합니다.
Dada

5

Matlab 139136105 바이트 (@ 2501 덕분에 )

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

옥타브에서 온라인으로 사용해보십시오!


또는 후행 줄 바꿈이 허용되는 경우 126 바이트
user13267

@ 2501 : 하하. 실제로 나는 그것이 당신이 대답으로 게시해야 105 바이트라고 생각합니다
user13267

5
추가 개선이 가능하다고 확신합니다.
2501

1
참고로, TIO는 Octave를 지원합니다 :) tio.run/nexus/…
Beta Decay

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]64 바이트입니다. : P (@Stewie Griffin의 옥타브 제출 번역)
Memming

5

MySQL, 115100 바이트

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

모두 제거 할 수 있습니다 AS .
manatwork

좋은 트릭입니다. 저는이 방법을 몇 가지 도전에 확실히 사용합니다.
BradC

5

R, 75 85 83 바이트

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

이 갖는 벡터를 생성 Hare, Krishna및 개행가 필요한 사람을 얻어, 후 교체 반복 Krishna하여 Rama.

모든 단어에 공백을 포함해야합니다. sep=""그렇지 않으면 cat()각 줄의 시작 부분에 공백이 있어야합니다.



아마도 print () 또는 무언가가 필요할 것입니다.
BLT

@Giuseppe 여기서 R을 자동으로 인쇄합니다. 그러나 당신이 그것을 부르는 방법에 따라 print()또는 cat()필요할 것입니다. 더 많은 바이트가 필요합니다. 나는 이번 주말에 그들과 함께 대안을 게시 할 것이다 :)
Masclins

1
@AlbertMasclans 아니오 tio.run/nexus/…라는 오류가 발생 object 'h' not found 했습니다
Giuseppe

2
난 당신이를 교체 할 필요가 있다고 생각 h=h<-에 전화 내부p
주세페

5

PowerShell, 73 53 52 바이트

Jeff Freeman에 의해 완전히 철거되었습니다. 대신 실제 줄 바꿈을 사용 \n하면 다른 바이트 가 저장되고 배열 형식으로 하나 더 저장됩니다. (에서 (1,2)까지 ,1,2)

배열 표기법에 쉼표가없는 TesselatingHeckler 덕분에 -1입니다.

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

내 오래된 대답-몇 가지 다른 교체 방법을 시도했지만 결국 다소 길어졌습니다.

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

문자열에 줄 바꿈이 있습니다.

매우 간단합니다 .Powershell이 ​​큰 따옴표 안에 변수를 확장한다는 사실과 일부 바이트를 절약하기 위해 변수를 할당하는 더 짧은 방법을 사용합니다.


좋은 해결책이지만 출력 및 파이프 라이닝의 패턴을 알아 내면 더 많이 다운받을 수 있습니다. 나는 55 바이트로 줄였습니다. 댓글을 스포일러로 만드는 방법을 모르므로 여기를보고 싶다면 (또는 힌트를 원하는 경우) 여기에 회신하십시오.
Jeff Freeman

2
스포일러 태그 대신 링크를 통해 공유하는 방법을 알아 냈습니다. 온라인으로 사용해보십시오!
Jeff Freeman

@JeffFreeman은 하나의 개행과 배열에서 두 개 이상을 줄였습니다.
colsw

4

시드, 72

점수는 -r깃발에 대해 +1을 포함합니다 .

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

온라인으로 사용해보십시오 .


ubstitute 대신 change, append 또는 nsert를 사용하여 일부 바이트를 제거하는 방법이 있는지 확인하십시오 . 편집 : 더 이상 확실하지 않다; 편집 편집 : 예 아니오 패턴 공간에서 작동하지 않고 직접 출력되기 때문에 작동하지 않습니다.is
Aaron

4

루비 , 62 61 바이트

이 작업을 수행하면서 루비는 print함수에 인수 사이에 공백이 없어서 대신 조인을 사용하고 더 긴 응답을 얻는 것을 제외하고는 @xnor의 Python 답변과 거의 동일하게되었습니다 .

@manatwork에서 -1 바이트

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

온라인으로 사용해보십시오!


:Hare상징을 만드십시오 .
manatwork

4

배쉬, 93 90 바이트

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
좋은 첫 시도. 몇 가지 사소한 개선을 제안해도 될까요? pastebin.com/0bYQF26n
manatwork

@manatwork 당신은 당신의 답변으로 추가해야합니다.
Pandya

1
변수가 없으면 s=79로 h="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"
줄어 듭니다


3

AHK , 107 92 바이트

이것은 어리석게 느껴지지만 AHK에서이를 수행하는 더 짧은 수단을 찾을 수 없습니다.

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

여기에 내가 처음 시도한 것은 107 바이트 였고 멋지려고했습니다. 그러나 Digital Trauma가 지적했듯이 원시 텍스트를 보내는 것이 더 짧을 것입니다.

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

StringSplit 은 첫 번째 인덱스가 1 인 의사 배열을 만듭니다. 따라서 첫 번째 용어는로 s1, 두 번째 용어는 등으로 참조됩니다 s2. 그렇지 않으면 여기에는 멋진 것이 없습니다.


13
전체 출력은 92 바이트입니다. 단순히 더 나을까요 Send Hare Krishna ...?
디지털 외상

@DigitalTrauma HA! 네, 아마도 요. 나는 공상이 더 낫다고 생각했고 심지어 확인조차하지 않았다. AHK는 이것에 대한 좋은 언어가 아닙니다.
엔지니어 토스트

3

배치, 75 바이트

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

3

C 96 바이트

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

다음에기도에서 어떤 단어가 필요한지 알아 내기 위해서는 2 비트의 정보 만 필요합니다. 따라서 많은 메모리를 사용하고 문자열로 인코딩하는 대신 40 비트 정수로 인코딩 할 수 있습니다 (예 : long int 내부). ).


3

ksh / bash / sh, 66 바이트

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

@nimi 감사합니다. <CR>로 변경하면 더 짧아집니다. 직접 테스트 할 수는 없지만 작동합니다. 적어도 그것은 bash 및 심지어 (busybox) sh에서 작동합니다.
ULick

편집에 공백을 추가 한 것으로 보이지만 '\ n'에서 <CR>로 변경되어 하나를 뺍니다.
ULick

3

APL (Dyalog) , 47 바이트

⎕IO←0많은 시스템에서 기본값이 필요합니다 .

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

온라인으로 사용해보십시오!

8×4 1 5 2 곱하다; [32,8,40,16]

(4⍴3)⊤ 4 자리 기본 3으로 변환; 행렬 [[1,0,1,0], [0,0,1,1], [1,2,1,2], [2,2,1,1]]

... [... ] 지수

 목록으로 나누기

∊¨ 입대 (각 평평)

 행렬로 혼합 (공백으로 채워짐)



2

자바 (7), (104) 103 바이트

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

설명:

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

여기에서 시도하십시오.


2

배치, 117 (111) 103 바이트

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

이제 줄 바꿈 개행이 허용되는 103까지.

^\n\n는 처음 세 줄의 끝에 줄 바꿈을 삽입하는 데 사용되며 뒤에 공백이 Rama있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.