ヘアクリシュナヘアクリシュナクリシュナクリシュナヘアヘアヘア


65

最近、エンブレムにマントラを掲げたヘアクリシュナの人々を見てきましたが、ゴルフをコーディングすることは非常に興味深いかもしれません。

挑戦

ヘアクリシュナマントラを書く、すなわち:

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

受賞基準

これはなので、バイト単位の最短コードが勝ちです!

ルール

  • ケーシングは保存する必要があります。
  • テキストには改行を含める必要があります。
  • 行には末尾にスペースが含まれる場合があります。
  • 末尾の改行が許可されます。
  • Webまたはその他の外部リソースからの解析は許可されていません。

2
タイトルから、バイナリ文字列をASCII文字にデコードするものを期待していました。タイトルはバックスラッシュを表します。
user253751

5
すべてのマントラは97バイトです。驚いたことに、そのバイト数を超える回答があります。
マスクリン

うーん、なぜそれは驚くほどRickrollのだましのように見えるのですか?
マシュー

回答:


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"]それが意味をなさないので、あなたがそれをさらに説明した善に感謝します。
ニックハートリー

11
["Hare", "Rama", "Krishna"] さらにベースを使用する必要があります。
アタコ

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 :)
スティーヴィーグリフィン

14
率直に言って、05AB1Eゴルフコードのジェネレーターを構築しましたか?
YSC

1
@YSCは、辞書の圧縮にとって悪い考えではありません。やってる。
魔法のタコUr



39

オクターブ、74 59バイト

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

ここで出力を確認します

説明:

{'Hare ','Krishna ','Rama ',10}3番目の文字列でセル配列を作成10します。4 番目は(改行のASCII値)です。

{'ababdbbaadacacdccaa'-96}上記のセル配列にインデックスを付けるベクトルです。ベクトルは、文字列から[1 2 1 2 4 ...]減算96するためababd...です。

結果を連結するために、取得する代わりに、周囲の角括弧が使用されます ans = Hare; and = Krishna; ans = ...


Octaveでそのようなセルにインデックスを付けることができるとは知りませんでした(MATLABとは異なります)。
Memming



12

JavaScript、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
テンプレート文字列では、digitではなくリテラルの改行文字を直接使用する方が適切3です。テンプレート文字列の長さは同じですが、後で置き換える必要はありません。(/./改行文字と一致しないため、配列インデックスの問題は発生しません。)
manatwork

12

C

154バイト、124バイト、 96バイト

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

オンラインでお試しください!

デニスのおかげで28バイト節約


1
プログラミングパズルとコードゴルフへようこそ。
ローハンジュンジュンワラ

1
このスタック交換の名前であるプログラミングパズルとコードゴルフのかなり標準的な頭字語です。申し訳ありませんが、これを明確にすべきでした。私たちのサイトへようこそ、良い最初の投稿。
ローハンジュンジュンワラ

1
これはすべてのコンパイラで機能するわけではありませんが、gccはincludeステートメントを必要としません。また、サブミットをCに制限する場合、をドロップintしてiグローバルに宣言できるため、デフォルトはゼロになります。tio.run/nexus/…–
デニス

2
@AnTそれは正しいですが、コードのゴルフ大会は「適切な」コードを必要としません。ここでPPCGでは、実装によって言語を定義します。実行可能な実行可能ファイルを生成するコンパイラがある限り、答えは有効です。
デニス

1
main(){for(char*t="BG@ESCB;:N8F6DIBA10Hare \0Krishna \0Rama \0\n";*t^72;printf(t+*t++-48));}4バイト節約します。
ヨハンデュトワ

11

V40、36のバイト

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

オンラインでお試しください!

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

説明:

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バイトを節約するだけでなく、末尾の改行を回避します。Unix形式の改行を使用していますので、変更することにより、窓、窓のための余分な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の良い点、ありがたいことにspecは末尾のスペースは大丈夫だと言っているので、3バイトしかかかり
ません-Skidsdev

火炎戦争を開始できますが、文字列の代わりにvarを使用して、2番目の例をさらに減らすことができます。
ジョン・ボーマン

@JohnBaughmanメソッドの戻り値はvar私の知る限りでvar.Format()はなく、間違いではありません
-Skidsdev

ああ...考えなかった。あなたは正しいです、私はランバの​​世界に自分自身を入れて、私が読んでいたものを誤解しました。
ジョン・ボーマン

8

C、85バイト

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

私は世俗的なマントラを好むでしょうが、これが平和な宗教の一つであることを望みます。

ここ動作することを確認してください

これにより、単純な実装が23バイト圧縮されます。


8

Python 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

リスト内の「ハレ」と「クリシュナ」とともに、ゼロと1を交換します。これにより、先頭のゼロが削除されます。次に、新しい番号(1010300113121232211)を16進数(0xe054e999f20c553)に変換し、バックティックで囲み、最終的にxnorの答えが12バイト先んじていることに気付きます!tio.run/##K6gsycjPM/r/Py2/...
vroomfondel

6

Perl、67バイト

このJavaScriptエントリに触発されました。

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

Perl、67バイト

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

2
(Hare,Krishna,Rama)最初のコードで2バイトを節約します。
ダダ

5

Matlabの139 136 105バイト(@のおかげで2501

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

Octaveでオンラインでお試しください!


または末尾の改行が許可されている場合は126バイト
-user13267

@ 2501:それは素晴らしいです。実際には、回答として投稿する必要があるかもしれない105バイトだと思う
-user13267

5
さらなる改善が可能であると確信しています。
2501年

1
FYI、TIOはオクターブ:)サポートtio.run/nexus/...
ベータ崩壊

1
x={'Hare ','Krishna ','Rama ',10};[x{'ababdbbaadacacdccaa'-96}]64バイトです。:P(@Stewieグリフィンのオクターブの提出を翻訳)
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="")

これは、とのベクトルを作成しHareKrishnaし、改行は、必要なものを取り、それが繰り返される置き換えるKrishnaことでRama

すべての単語にスペースを含める必要があります。sep=""そうしないcat()と、各行の先頭にスペースが挿入されます。



おそらくprint()か何かが必要です。
BLT

@Giuseppeここで使用しているのは、Rが自動的に印刷することです。しかし、あなたがそれを呼び出す方法に応じて、print()またはcat()必要になります。それにはもっと多くのバイトが必要です。私は今週末、彼らと代替案を投稿します:)
Masclins

1
@AlbertMasclansいいえtio.run/nexus/…というエラーが表示されますobject 'h' not found
ジュゼッペ

2
呼び出しの内部でh=with を置き換える必要があると思うh<-p
ジュゼッペ

5

PowerShell、73 53 52バイト

ジェフ・フリーマンによって完全に破壊されました- \n別のバイトを保存する代わりに実際の改行を使用すると、配列形式でもう1つ保存されます。((1,2),1,2

-1 TesselatingHecklerのおかげで、配列表記にコンマはありません。

$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バイトに下げました。コメントをネタバレする方法がわからないので、それを見たい場合は(またはヒントが必要な場合は)ここに返信してください。
ジェフフリーマン

2
スポイラータグの代わりに、リンクを介して共有する方法を見つけました。 オンラインでお試しください!
ジェフフリーマン

@JeffFreemanのすてきなものは、改行と配列でそれをさらに2つ削りました-52まで、ほとんどすべての非ゴルフ言語を破りました。
colsw

4

セッド、72

スコアには-rフラグの+1が含まれます。

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

オンラインでお試しください


ubstituteの代わりにhange cappend、またはinsert を使用していくつかのバイトを削除する方法があることを確認してsください。編集:もうわかりません。編集編集:彼らはパターンスペース上で動作ではなく、直接出力されないため動作しませんええなし
アーロン

4

ルビー62 61バイト

私がこれに取り組んだとき、Rubyのprint関数内の引数間にスペースがないことを除いて、@ xnorのPythonの答えと最終的にほぼ同じになりました。代わりに結合を使用することを余儀なくされ、より長い答えが得られます...

@manatworkから-1バイト

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

オンラインでお試しください!


作り:Hareシンボルを。
マナトワーク

4

Bash、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を回答として追加する必要があります。
パンディア

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"
ULick


3

AHK107 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バイトで、空想にしようとしました。しかし、デジタルトラウマが指摘したように、生のテキストを送信する方が短いでしょう。

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

StringSplitは、最初のインデックスとして1を持つ擬似配列を作成します。したがって、最初の用語はで参照されs1、2番目の用語はなどで参照され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>への変更のために1を減算しました
-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

Java 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は、最初の3行の最後に改行を挿入するために使用され、の後にスペースがありRamaます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.