コンピューターサイエンティストとして、おそらくpopとpushの基本的なリスト操作に慣れているでしょう。これらは、要素のリストを変更する簡単な操作です。しかし、操作フロップについて聞いたことがありますか?(フリップフロップのように)?とても簡単です。番号nを指定すると、リストの最初のn要素を逆にします。以下に例を示します。
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
フロップ操作のクールな点は、ソートなど、リストに対してクールなことを実行できることです。フロップでも同様のことを行います。
整数のリストを指定すると、「Neighbor it」。つまり、重複する要素がすべて連続して表示されるように並べ替えます。
これはフロップで行えます!たとえば、次のリストをご覧ください。
>>> a = [3, 2, 1, 4, 3, 3, 2]
>>> a.flop(4)
[4, 1, 2, 3, 3, 3, 2]
>>> a.flop(3)
[2, 1, 4, 3, 3, 3, 2]
>>> a.flop(6)
[3, 3, 3, 4, 1, 2, 2]
これは、今日の課題の定義につながります。
整数のリストが与えられると、リストが隣接する結果となるフロップのセットを出力します。
例として最後のリストを使用して、次を出力する必要があります。
4
3
6
リストを4、3、6の順にフロップすると、隣接リストになります。リストに隣接するフロップの最短リストを印刷する必要はないことに注意してください。印刷した場合:
4
4
4
3
1
1
6
2
2
代わりに、これはまだ有効な出力です。ただし、リストの長さを超える数値を出力することはできません。これは、listのa = [1, 2, 3]
場合、呼び出しa.flop(4)
は無意味だからです。
ここではいくつかの例を示します。
#Input:
[2, 6, 0, 3, 1, 5, 5, 0, 5, 1]
#Output
[3, 7, 8, 6, 9]
#Input
[1, 2]
#Output
<any list of integers under 3, including an empty list>
#Input
[2, 6, 0, 2, 1, 4, 5, 1, 3, 2, 1, 5, 6, 4, 4, 1, 4, 6, 6, 0]
#Output
[3, 19, 17, 7, 2, 4, 11, 15, 2, 7, 13, 4, 14, 2]
#Input
[1, 1, 1, 1, 2, 2, 2, -1, 4]
#Output
[]
#Input
[4, 4, 8, 8, 15, 16, 16, 23, 23, 42, 42, 15]
#Output
[12, 7]
これらの各例では、与えられた出力は有効な出力の1つにすぎないことに注意してください。前に言ったように、与えられたリストに隣接するフロップのセットはすべて有効な出力です。このpythonスクリプトを使用して、特定のフロップリストがリストに正しく隣接しているかどうかを確認できます。
合理的な形式で入出力を行うことができます。たとえば、関数の引数/戻り値、STDIN / STDOUT、ファイルの読み取り/書き込みなどはすべて有効です。いつものように、これはcode-golfなので、できるだけ短いプログラムを作成し、楽しんでください!:)