Randall Munroeは、より象徴的なxkcdストリップの1つで、いくつかの映画のタイムラインを物語チャートで視覚化しました。
出典:XKCD号657。
映画(またはその他の物語)のタイムラインの仕様を指定すると、そのようなチャートを生成することになります。これは人気のコンテストなので、最も多くの(正味の)投票数を持つ回答が勝ちます。
最小要件
仕様を少し厳しくするために、すべての回答で実装する必要がある機能の最小セットを以下に示します。
入力としてキャラクター名のリストを取得し、その後にイベントのリストを続けます。各イベントは、死にゆくキャラクターのリスト、またはキャラクターのグループのリスト(どのキャラクターが現在一緒にいるかを示す)です。ジュラシックパークの物語をどのようにエンコードできるかの例を次に示します。
["T-Rex", "Raptor", "Raptor", "Raptor", "Malcolm", "Grant", "Sattler", "Gennaro", "Hammond", "Kids", "Muldoon", "Arnold", "Nedry", "Dilophosaurus"] [ [[0],[1,2,3],[4],[5,6],[7,8,10,11,12],[9],[13]], [[0],[1,2,3],[4,7,5,6,8,9,10,11,12],[13]], [[0],[1,2,3],[4,7,5,6,8,9,10],[11,12],[13]], [[0],[1,2,3],[4,7,5,6,9],[8,10,11,12],[13]], [[0,4,7],[1,2,3],[5,9],[6,8,10,11],[12],[13]], [7], [[5,9],[0],[4,6,10],[1,2,3],[8,11],[12,13]], [12], [[0, 5, 9], [1, 2, 3], [4, 6, 10, 8, 11], [13]], [[0], [5, 9], [1, 2], [3, 11], [4, 6, 10, 8], [13]], [11], [[0], [5, 9], [1, 2, 10], [3, 6], [4, 8], [13]], [10], [[0], [1, 2, 9], [5, 6], [3], [4, 8], [13]], [[0], [1], [9, 5, 6], [3], [4, 8], [2], [13]], [[0, 1, 9, 5, 6, 3], [4, 8], [2], [13]], [1, 3], [[0], [9, 5, 6, 3, 4, 8], [2], [13]] ]
たとえば、最初の行は、チャートの最初で、T-Rexは孤独、3つのRaptorsは一緒、Malcolmは単独、GrantとSattlerは一緒などを意味します。最後から2番目のイベントは、2つのRaptors 。
この種の情報を指定できる限り、入力をどの程度正確に期待するかはあなた次第です。たとえば、便利なリスト形式を使用できます。また、イベント内のキャラクターが再び完全なキャラクター名になることも期待できます。
グループの各リストには、1つのグループ内の各生きているキャラクターが含まれていると想定できます(ただし、そうする必要はありません)。ただし、1つのイベント内のグループまたは文字が特に便利な順序であると想定しないでください。
画面またはファイル(ベクトルまたはラスターグラフィック)に、各文字に1行のグラフを表示します。各行には、行の先頭に文字名のラベルを付ける必要があります。
- 通常のイベントごとに、文字のグループがそれぞれの線の近接によって明確に似ているチャートの断面が順番に存在する必要があります。
- 死亡イベントごとに、関連するキャラクターの行は目に見えるブロブで終了する必要があります。
- あなたはないではないランドールのプロットの他の特徴を再現する必要があり、また、あなたは彼の描画スタイルを再現する必要があります。シャープな曲がりくねった直線、すべて黒で、追加のラベルとタイトルなしで、競争に参加するのにまったく問題ありません。また、スペースを効率的に使用する必要もありません。たとえば、識別可能な時間の方向がある限り、行を下に移動して他のキャラクターと会うだけで、アルゴリズムを単純化できる可能性があります。
これらの最小要件を正確に満たす参照ソリューションを追加しました。
きれいにする
ただし、これは人気のコンテストなので、その上で、好きなだけの空想を実装できます。最も重要な追加は、適切なレイアウトアルゴリズムです。これにより、グラフが読みやすくなります。たとえば、線の曲がりを追跡しやすくし、必要な線の交差の数を減らします。これがこの課題の中心的なアルゴリズムの問題です!票により、チャートの整頓を維持するアルゴリズムのパフォーマンスが決まります。
しかし、ここにいくつかのアイデアがあります。それらのほとんどは、ランドールのチャートに基づいています。
デコレーション:
- 色付きの線。
- プロットのタイトル。
- ラベリング行が終了します。
- 忙しいセクションを通過した行に自動的にラベルを付け直します。
- 線とフォントの手書きスタイル(または他の?私が言ったように、より良いアイデアがあればランドールのスタイルを再現する必要はありません)。
- 時間軸のカスタマイズ可能な方向。
追加の表現力:
- 名前付きイベント/グループ/死。
- 行の消失と再出現。
- 遅く入るキャラクター。
- キャラクターの(譲渡可能?)プロパティを示すハイライト(たとえば、LotRチャートのリングベアラーを参照)。
- グループ化軸の追加情報のエンコード(LotRチャートのような地理情報など)。
- タイムトラベル?
- 代替現実?
- 別のキャラクターに変わる?
- 2つの文字がマージされますか?(文字分割?)
- 3D?(本当にそこまで行けば、実際に何かを視覚化するために追加の次元を使用していることを確認してください!)
- 映画(または本など)の物語を視覚化するのに役立つその他の関連機能。
もちろん、これらの多くは追加の入力を必要とし、必要に応じて入力形式を自由に拡張できますが、データの入力方法を文書化してください。
実装した機能を示すために、1つまたは2つの例を含めてください。
ソリューションは有効な入力を処理できる必要がありますが、特定の種類の物語に他の物語よりも適している場合は絶対に問題ありません。
投票基準
私は、人々がどのように投票を使うべきかを人々に伝えることができるという幻想は持っていませんが、重要な順に提案されたガイドラインがいくつかあります:
- 抜け穴、標準的なもの、または他のものを悪用する、または1つ以上の結果をハードコードするダウンボートの回答。
- 最低限の要件を満たしていない回答に賛成票を投じないでください(他の人がどんなに空想的であっても)。
- 何よりもまず、素晴らしいレイアウトアルゴリズムを支持します。これには、グラフを読みやすくするために線の交差を最小限に抑えながら多くの垂直スペースを使用しない回答や、追加情報を垂直軸にエンコードする回答が含まれます。巨大な混乱を起こさずにグループ化を視覚化することがこの挑戦の主な焦点であるはずです。そのため、これは興味深いアルゴリズムの問題を中心にしたプログラミングコンテストのままです。
- 表現力を追加するオプション機能を追加します(つまり、単なる装飾ではありません)。
- 最後に、素敵なプレゼンテーションに賛成です。
[[x,y,z]]
、すべての文字が一緒に現在あることを意味します。ただし、イベントにリストが含まれておらず、キャラクターのみが直接含まれている場合は、死に至ることもあります。したがって、同じ状況で[x,y,z]
は、これら3人のキャラクターが死亡します。別の形式を自由に使用してください。何かが死亡またはグループ化イベントであるかどうかが明示的に示されている場合は、それが役立ちます。上記の形式は単なる提案です。入力形式が少なくとも表現力豊かであれば、他のものを使用できます。