BrainFuckで「A」を1000回印刷


11

'A'を1000回印刷するのに最適なBrainFuckコード(コードサイズの観点から)は?

私のアプローチは:

  • 「A」をp [0]に設定します
  • 255をp [1]に設定して255 'A'を3回表示する
  • 235をp [1]に設定して235 'A'を表示します

これは効果的ではありませんが、乗算のように同時に牽引カウンターを使用する方法を見つけることができません

乗算よりも良いアプローチはありますか?

より一般的な質問:可能な限り最小のコードで多数の乗算を行うルールはありますか?


4
これは開始するのに適した場所です。コードゴルフへようこそ!:)
FryAmTheEggman

3
ネストされたループだけを使用したいと思いますが、BFについてはよくわかりません。Brainfuckのヒントを見たことがありますか?また、Brainfuck定数に関するesolangsページもおそらく役に立つリソースです。
ジョナサンアラン

4
最高のBrainFuckコードを明確にする必要があると思います。最小限の+文字数で、または単に最高の簡潔さで、最も読みやすく、最もエレガントなものを探していますか?
ジョナサンフレッチ

@ジョナサンアラン:はい、それはこの質問の目的です:ネストループを使用する方法。それは魅力的な言語近いASMだが、私はいくつかの側面を理解していない
ネルソンG.

回答:


17

現在使用していると思われる方法は39バイトです。

>>+++[<-[-<.>]>-]++++[<----->-]<-[-<.>](の取得は含まれませんA)(オンラインで試してみてください!

(3回ループし、毎回カウンターを255に設定し、その回数印刷し、20を減算し、1を減算し、その回数印刷します)

ただし、250回ループして毎回4回印刷する方がはるかに短くなります(元のloop-4 loop-250 print-1ソリューションで最適化してくれたjimmy23013に感謝します)。

>------[<....>-] (16バイト)

セルが制限されていない場合(8ビットであると仮定します。そうでない場合、ゴルフに255を使用することはおそらくないでしょう):

>>++++++++++[<++++++++++[<..........>-]>-] (42バイト)。


いえ、これは...、8ビット・セルを想定しているようだ
ジョン・ドヴォルザーク

2
@JohnDvorak:質問では、OPが考えうる最も効果的なソリューションの一部としてセルを255に設定することに言及しました。これは、8ビットセルラッピングを使用する(ab)のかなり明確な兆候のようです。
randomdude999

@JohnDvorak randomdude999が言ったことですが、セルがバインドされていない場合に備えて10x10x10を使用するメソッドを追加しました。
ハイパーニュートリノ

250倍....は短くなります。
jimmy23013

... ありがとう!
ハイパーニュートリノ

1

47バイト(アンダーフローなし)

このソリューションを47バイトで実行しました。私は通常、2つの値の間でカウンターをジャグリングしてスペースを節約しようとするのとは異なる方法でそれを試しました。Aはp [4]にプリロードされていることを前提としています。

+++++[>++++>+++++<<-]>[>[>+>.<<-]>[->.<<+>]<<-]

説明した

Place 5 into p[0]
+++++
Loop 5 times to put p[1]=20, p[2]=25
[>++++>+++++<<-]>
Loop 20 times
[>
Move pointer to p[2] and loop 25 times.
Also move p[2] to p[3]

[
Increment p[3] from 0, effectively moving the value from p[2] to p[3]
>+
Print p[4]
>.
Decrement p[2]
<<-]
Shift over to p[3]
>
[
Decrement p[3]
->
Print p[4]
.<
Increment p[2]
<+>]
Move back to p[1] and decrement
<<-
Repeat until p[1] is 0
]

1

'A'の数値65を取得する最短の方法は>+[+[<]>>+<+]>であり、>------[<....>-]その最後にHyperNeutrinoを追加するだけです。したがって、完全なコードは>+[+[<]>>+<+]>>------[<....>-](30バイト)になります


その方法が最短であることをどのように知っていますか?確かに短いですが、誰も短いものを見つけられないことを確実に知っていますか?
ポストロックガーフハンター


@ SriotchilismO'Zaicええ、私はそれが最短の笑であることを本当に意味しませんでした
射手座
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.