ロシアのネスティングクイン


18

より一般的として知られているロシアのネスト人形、マトリョーシカ人形は、自身の小さいバージョンを含む人形、あるその後自体の別のより小さなバージョンを含む、自身の小さいバージョンを含む、それ自体の小型版が含まれ、これそれ自体の小さなバージョンが含まれています...-最後まで、最後のものは空です。例:

マトリョーシカ人形<3

今日、あなたの目標は、それ自体がN回含まれるとき、それ自体のN-1個のコピーを含む自身を印刷するプログラムまたは関数を書くことにより、このロシアの伝統をエミュレートすることです。

たとえば、人形プログラムabcdのN = 3プログラムabababcdcdcdは、N = 2プログラムababcdcdを印刷し、元のN = 1プログラムを印刷し、abcd最終的にN = 0(空)を印刷します。これは、Nの合理的な値に対して理論的に機能するはずです。

ルール:

  • プログラムに基づいて人形プログラムを生成するのに役立つTIOプログラムを次に示します。
  • 標準クインルールが適用されます
  • 標準の抜け穴が適用されます
  • 「含む」とは、前のバージョンの中心に直接あることを意味するため、ソリューションには正の偶数バイトが必要です。長さ10のプログラムでは、5バイト目の後に元のコピーが挿入され、10バイト目の後に別のコピーが挿入されます。
  • 単一の末尾の空白が出力で許可されます
  • これはなので、目標はN = 1プログラムをできるだけ短くすることです。
  • コードの説明をいただければ幸いです


Nコードサイズは何のために測定されますか?
flawr

N = 1 @flawr .....
ジョー・キング


12
そのアニメーションは本当に必要ですか?!
シャギー

回答:


9

アンダーロード、4バイト

N = 1:オンラインで試してください。

 ()S

N = 2:オンラインで試してください。

 ( ()S)S

N = 3:オンラインで試してください。

 ( ( ()S)S)S

説明:

自明ですが、とにかく追加します。

  • (...)S かっこからSTDOUTまでの間に何かを出力します
  • その前のスペースは、バイトカウントを均等にし、チャレンジのルールに準拠するための操作なしです。

9

JavaScript、36 32バイト

Function.prototype.toString()引数をとらないという事実を利用して、それに渡されるものを無視します。

user202729のソリューションに一部影響を受けています

f=_=>f.toString( ).slice(14,-16)

それを試してみてください

o.innerHTML=["<span>Five</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Four</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Three</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Two</span>",(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16))(),"<span>One</span>",(f=_=>f.toString( ).slice(14,-16))(),"<span>Thunderbirds Are Go!</span>"].join`\n`
span{font-weight:bold;font-size:16px;line-height:1.5em;text-transform:uppercase;}span:last-child{font-size:8px;}
<pre id=o></pre>


7

JavaScript(Node.js)、46バイト

完全なプログラム。そうconsole.log必要です。

この回答のアイデアを使用して、いくつかのバイトを節約します。

l=console.log;   g=_=>{};l((''+g).slice(4,-1))

オンラインでお試しください! オンラインで2回お試しください! オンラインで3回試してください!


私のアプローチは、Kevin Cruijssenの答えで使用されているアプローチと似ています。ネスト可能な構造(この場合は関数)を見つけます。


5

ゼリー、16バイト

Ṿḣ-9Ḋð}“““““““““

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

2倍:オンラインで試してみてください!

トリプル:オンラインでお試しください!


Jellyにはネスト可能な構造はありませんが、その文字列リテラルは自動的に終了します。


Ṿḣ-9Ḋ    First chain. (monadic)
Ṿ        Uneal. (to string)
 ḣ-9     Take the ead, ends at the -9'th character.
    Ḋ    equeue, remove the first character.

     ð             Terminate the first chain, start a new one.
      }            Convert the last monadic chain to a dyadic one.
       “““““““““   String literal.
                   This matches the pattern <dyad> <nilad>, so applies
                   the the corresponding rules. This way a link can take data
                   to the right of it.

それらを短くできるかどうかを確認するために、さまざまなアプローチを試みます。




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