入力として個別の整数のリストを受け取り、次の逆さまのピラミッドで入力番号の出現回数を出力または返すプログラムまたは関数を作成する必要があります。
すべてのステップで元のリストから開始して、隣接する番号のすべてのペアの最大値を持つ新しいリストを作成します(たとえばに5 1 2 6
なります5 2 6
)。リストに番号が1つしかない場合は停止します。
完全なピラミッド5 1 2 6
は
5 1 2 6
5 2 6
5 6
6
結果の発生回数は3 1 2 4
(5 1 2 6
それぞれ)です。
入力
- 繰り返しのない1つ以上の整数のリスト。(たとえば
1 5 1 6
無効です。)
出力
- 正の整数のリスト。
i
リストのth番目の要素はi
、ピラミッド内のth番目の入力番号の出現回数です。
例
入力=>出力
-5 => 1
8 4 => 2 1
5 9 7 => 1 4 1
1 2 3 9 8 6 7 => 1 2 3 16 3 1 2
6 4 2 1 3 5 => 6 4 2 1 3 5
5 2 9 1 6 0 => 2 1 12 1 4 1
120 5 -60 9 12 1 3 0 1200 => 8 2 1 3 16 1 4 1 9
68 61 92 58 19 84 75 71 46 69 25 56 78 10 89 => 2 1 39 2 1 27 6 5 1 6 1 2 14 1 12
これはコードゴルフなので、最短のエントリが優先されます。
ボーナスパズル:問題をO(n*log n)
時間内に解決できますか?