ẆQSḢ
オンラインでお試しください!
入力を0
sおよび1
sのリストとして受け取ります。
数字でオンラインで試してみてください!
説明:
ẆQSḢ Argument: B = list of bits, e.g. [1, 1, 0, 1]
Ẇ Get B's non-empty sublists (i.e. [[1], [1], [0], [1], [1, 1], [1, 0], [0, 1], [1, 1, 0], [1, 0, 1], [1, 1, 0, 1]])
Q Keep first occurrences (i.e. [[1], [0], [1, 1], [1, 0], [0, 1], [1, 1, 0], [1, 0, 1], [1, 1, 0, 1]])
S Reduce by vectorized addition (i.e. [6, 4, 1, 1])
Ḣ Pop first element (i.e. 6)
それが機能する証拠:
このプログラムは、入力番号Nを取得します。この製品が最初に行うことは、もちろん、N 2の部分文字列(基数2のN)を取得することです。これには、0または1で始まる重複部分文字列が含まれます。
その後、単純にサブストリングリスト内の各値の最初の出現のみを保持することにより、一意のサブストリングを取得します。
次に、このプログラムは、リストの最初の要素、次に2番目の要素、3番目、4番目などを合計し、リストの1つにそのような要素0
がない場合を想定します。課題が効果的に求めるのは、1から始まる一意の部分文字列がバイナリ形式でいくつあるかということです。。カウントされる最初の要素はすべてである1
ため、適切なサブストリングをフィルタリングする代わりに単純に合計することができます。
ここで、上記の合計の結果リストの最初の要素には、部分文字列の最初のビットのカウントが保持されるため、単純にポップして最終的にそれを返します。