この課題でのタスクは、一連のディレクティブから無向グラフを作成することです。負でない整数ごとに1つのディレクティブがあり、それぞれが特定のグラフを新しいグラフに変換します。
- ディレクティブ
0
:新しい切断されたノードを追加します。 - 指令
1
:新しいノードを追加し、既存のすべてのノードに接続します。 - ディレクティブ
m > 1
:次数(隣接数)がで割り切れるすべてのノードを削除しm
ます。注0
すべてで割り切れるm
切断ノードは常に削除されますので、。
ディレクティブは、空のグラフから左から右に1つずつ適用されます。たとえば、シーケンス[0,1,0,1,0,1,3]
は次のように処理され、素晴らしいASCIIアートを使用して説明されます。空のグラフから始め、次の指示に従って単一の頂点を追加し0
ます。
a
次に、別の頂点を追加し、次の指示に従って、最初の頂点に接続し1
ます。
a--b
0
andの指示に従って、切断された別の頂点を追加し、次に接続された頂点を追加します1
。
a--b c
\ \ /
`--d
0
andの指示に従って、これをもう一度繰り返します1
。
,--f--e
/ /|\
a--b | c
\ \|/
`--d
最後に、次の指示に従って、次数3の頂点a
とを削除b
し3
ます。
f--e
|\
| c
|/
d
これは、シーケンスによって定義されるグラフ[0,1,0,1,0,1,3]
です。
入力
一連のディレクティブを表す、負でない整数のリスト。
出力
シーケンスによって定義されたグラフ内のノードの数。
テストケース
[] -> 0
[5] -> 0
[0,0,0,11] -> 0
[0,1,0,1,0,1,3] -> 4
[0,0,0,1,1,1] -> 6
[0,0,1,1,0,0,1,1,2,5,7,0,1] -> 6
[0,0,1,1,1,1,5,1,4,3,1,0,0,0,1,2] -> 6
[0,0,1,1,0,0,1,1,5,2,3,0,0,1,1,0,0,1,1,3,4,0,0,1,1,2,1,1] -> 8
[0,0,1,1,0,0,1,1,2,5,7,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,8] -> 14
詳細なルール
関数または完全なプログラムを作成できます。最短のバイトカウントが優先されます。標準の抜け穴は許可されていません。回答でアルゴリズムを説明してください。
1週間が経過したので、最短の回答を受け入れました。さらに短いものが後で出てきたら、選択を更新します。賞賛に値する言及は、Peter Taylorの回答にあります。これには、勝者を含む他のいくつかの人物が基づいていました。