Randall Munroe hat in einem der ikonischeren xkcd-Strips die Zeitleisten mehrerer Filme in narrativen Diagrammen visualisiert:
(Klicken Sie für eine größere Version.)
Quelle: xkcd Nr. 657 .
Wenn Sie die Zeitachse eines Films (oder eine andere Erzählung) spezifizieren, müssen Sie ein solches Diagramm erstellen. Dies ist ein Beliebtheitswettbewerb, daher gewinnt die Antwort mit den meisten (Netto-) Stimmen.
Mindestanforderungen
Um die Spezifikation ein wenig zu verschärfen, sind hier die Mindestfunktionen aufgeführt, die jede Antwort implementieren muss:
Nehmen Sie als Eingabe eine Liste von Charakternamen, gefolgt von einer Liste von Ereignissen. Jedes Ereignis ist entweder eine Liste sterbender Zeichen oder eine Liste von Zeichengruppen (die angeben, welche Zeichen gerade zusammen sind). Hier ist ein Beispiel dafür, wie die Jurassic Park-Erzählung codiert werden könnte:
["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]] ]
ZB bedeutet die erste Zeile, dass T-Rex am Anfang der Karte einsam ist, die drei Raptoren zusammen sind, Malcolm allein ist, Grant und Sattler zusammen sind usw. Das vorletzte Ereignis bedeutet, dass zwei der Raptoren sterben .
Wie genau Sie die Eingabe erwarten, bleibt Ihnen überlassen, solange diese Art von Informationen angegeben werden kann. Sie können beispielsweise ein beliebiges Listenformat verwenden. Sie können auch erwarten, dass die Zeichen in den Ereignissen wieder die vollständigen Zeichennamen usw. sind.
Sie können (müssen aber nicht) davon ausgehen, dass jede Gruppenliste jedes lebende Zeichen in genau einer Gruppe enthält. Sie sollten jedoch nicht davon ausgehen, dass sich die Gruppen oder Zeichen innerhalb eines Ereignisses in einer besonders günstigen Reihenfolge befinden.
Rendern Sie auf dem Bildschirm oder in einer Datei (als Vektor- oder Raster-Grafik) ein Diagramm, das für jedes Zeichen eine Zeile enthält. Jede Zeile muss am Zeilenanfang mit einem Zeichennamen versehen werden.
- Für jedes normale Ereignis muss es in der richtigen Reihenfolge einen Querschnitt der Tabelle geben, in dem die Zeichengruppen durch die Nähe ihrer jeweiligen Linien eindeutig ähneln.
- Für jedes Todesereignis müssen die Zeilen der relevanten Zeichen in einem sichtbaren Klecks enden.
- Sie müssen weder andere Merkmale von Randalls Zeichnungen reproduzieren, noch müssen Sie seinen Zeichenstil reproduzieren. Gerade Linien mit scharfen Kurven, alle in Schwarz, ohne weitere Beschriftungen und Titel, sind für die Teilnahme am Wettbewerb völlig in Ordnung. Es ist auch nicht erforderlich, den Platz effizient zu nutzen. Sie könnten beispielsweise Ihren Algorithmus vereinfachen, indem Sie immer nur Linien nach unten bewegen, um sich mit anderen Zeichen zu treffen, solange eine erkennbare Zeitrichtung vorliegt.
Ich habe eine Referenzlösung hinzugefügt , die genau diese Mindestanforderungen erfüllt.
Schön machen
Dies ist jedoch ein Beliebtheitswettbewerb. Darüber hinaus können Sie jede gewünschte Fantasie implementieren. Die wichtigste Ergänzung ist ein anständiger Layout-Algorithmus, der das Diagramm besser lesbar macht - z. B. das Verfolgen von Biegungen in den Linien erleichtert und die Anzahl der erforderlichen Linienkreuzungen verringert. Dies ist das zentrale algorithmische Problem dieser Herausforderung! Die Stimmen entscheiden darüber, wie gut Ihr Algorithmus das Diagramm aufgeräumt hält.
Aber hier sind noch einige Ideen, die meisten basieren auf Randalls Diagrammen:
Dekorationen:
- Farbige Linien.
- Ein Titel für die Handlung.
- Beschriftungszeile endet.
- Automatische Neuetikettierung von Leitungen, die einen belegten Abschnitt durchlaufen haben.
- Handgezeichneter Stil (oder wie gesagt, Randalls Stil muss nicht reproduziert werden, wenn Sie eine bessere Idee haben) für Linien und Schriftarten.
- Anpassbare Ausrichtung der Zeitachse.
Zusätzliche Ausdruckskraft:
- Benannte Ereignisse / Gruppen / Todesfälle.
- Verschwindende und wieder auftauchende Linien.
- Zeichen, die spät eintreffen.
- Hervorhebungen, die Eigenschaften von Zeichen anzeigen (übertragbar?) (Siehe z. B. Ringträger in der LotR-Tabelle).
- Codierung zusätzlicher Informationen in der Gruppierungsachse (z. B. geografische Informationen wie im LotR-Diagramm).
- Zeitreise?
- Alternative Realitäten?
- Aus einer Figur wird eine andere?
- Zwei Charaktere verschmelzen? (Eine Charakteraufteilung?)
- 3D? (Wenn Sie wirklich so weit gehen, stellen Sie sicher , dass Sie tatsächlich die zusätzliche Dimension mit some sichtbar zu machen!)
- Alle anderen relevanten Funktionen, die nützlich sein können, um die Erzählung eines Films (oder eines Buches usw.) zu visualisieren.
Natürlich erfordern viele davon zusätzliche Eingaben, und Sie können Ihr Eingabeformat nach Bedarf erweitern. Bitte dokumentieren Sie jedoch, wie Daten eingegeben werden können.
Bitte fügen Sie ein oder zwei Beispiele bei, um die von Ihnen implementierten Funktionen zu demonstrieren.
Ihre Lösung sollte in der Lage sein, alle gültigen Eingaben zu verarbeiten. Es ist jedoch absolut in Ordnung, wenn sie für bestimmte Arten von Erzählungen besser geeignet ist als für andere.
Wahlkriterien
Ich habe keine Illusionen, dass ich den Leuten sagen könnte, wie sie ihre Stimmen ausgeben sollen, aber hier sind einige Richtlinienvorschläge in der Reihenfolge ihrer Wichtigkeit:
- Downvote-Antworten, die Lücken ausnutzen, Standardantworten oder andere, oder ein oder mehrere Ergebnisse fest codieren .
- Stimmen Sie keine Antworten hoch, die die Mindestanforderungen nicht erfüllen (egal wie ausgefallen der Rest sein mag).
- In erster Linie sollten Sie nette Layout-Algorithmen verbessern. Dies schließt Antworten ein, die nicht viel vertikalen Raum beanspruchen, während das Überkreuzen von Linien minimiert wird, um das Diagramm lesbar zu halten, oder die es schaffen, zusätzliche Informationen in die vertikale Achse zu codieren. Das Visualisieren der Gruppierungen ohne große Verwirrung sollte das Hauptaugenmerk dieser Herausforderung sein, so dass dies ein Programmierwettbewerb mit einem interessanten algorithmischen Problem bleibt.
- Verbessere optionale Funktionen, die Ausdruckskraft verleihen (dh nicht nur reine Dekoration sind).
- Zum Schluss noch eine schöne Präsentation.
quelle
[[x,y,z]]
würde bedeuten, dass alle Charaktere derzeit zusammen sind. Wenn das Ereignis jedoch keine Listen, sondern nur direkte Charaktere enthält, ist es sogar ein Tod. In derselben Situation[x,y,z]
bedeutet dies, dass diese drei Charaktere sterben. Sie können auch ein anderes Format verwenden und explizit angeben, ob es sich um ein Todes- oder Gruppierungsereignis handelt, wenn dies für Sie hilfreich ist. Das obige Format ist nur ein Vorschlag. Solange Ihr Eingabeformat mindestens so aussagekräftig ist, können Sie etwas anderes verwenden.Antworten:
Python3 mit Numpy, Scipy und Matplotlib
bearbeiten :
sorted_event
Funktion.coords
).quelle
T-SQL
Ich bin mit diesem Eintrag nicht zufrieden, aber ich denke, dass diese Frage zumindest einen Versuch wert ist. Ich werde versuchen, dies zu einem späteren Zeitpunkt zu verbessern, aber die Beschriftung wird in SQL immer ein Problem sein. Die Lösung erfordert SQL 2012+ und wird in SSMS (SQL Server Management Studio) ausgeführt. Die Ausgabe erfolgt auf der Registerkarte mit den räumlichen Ergebnissen.
Die resultierende Zeitleiste sieht wie folgt aus
quelle
Mathematica, Referenzlösung
Als Referenz stelle ich ein Mathematica-Skript zur Verfügung, das genau die Mindestanforderungen erfüllt, nicht mehr und nicht weniger.
Es wird erwartet, dass die Zeichen eine Liste des Formats in der Frage in
chars
und der Ereignisse in sindevents
.Hier ist als Beispiel das Jurassic Park-Beispiel mit dem Listentyp von Mathematica:
wir werden .. bekommen:
(Klicken Sie für eine größere Version.)
Das sieht nicht allzu schlecht, aber das ist vor allem , weil die Eingangsdaten mehr oder weniger geordnet. Wenn wir die Gruppen und Charaktere in jedem Ereignis mischen (unter Beibehaltung der gleichen Struktur), kann Folgendes passieren:
Welches ist ein bisschen ein Chaos.
Wie gesagt, dies erfüllt nur die Mindestanforderungen. Es versucht nicht, ein schönes Layout zu finden und es ist auch nicht schön, aber da kommt ihr rein!
quelle