В одній з більш знакових смуг xkcd Рендалл Манро візуалізував часові рамки декількох фільмів у розповідних діаграмах:
(Клацніть для збільшення версії.)
Джерело: 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]] ]
Наприклад, перший рядок означає, що на початку діаграми Т-Рекс - самотній, три Раптори разом, Малькольм один, Грант і Саттлер разом і т.д. .
Як саме ви очікуєте, що від вас залежить, якщо ви зможете вказати подібну інформацію. Наприклад, ви можете використовувати будь-який зручний формат списку. Ви також можете розраховувати, що герої в подіях знову стануть повними іменами символів тощо.
Ви можете (але не обов’язково) припускати, що кожен список груп містить кожного живого символу саме в одній групі. Однак, слід НЕ вважати , що групи або символи в межах однієї події в особливо зручному порядку.
Візуалізуйте на екран або файл (у вигляді векторної або растрової графіки) діаграму, яка містить один рядок для кожного символу. Кожен рядок повинен бути позначений іменем символу на початку рядка.
- Для кожної нормальної події для того, щоб мати певний переріз діаграми, в якому групи символів чітко нагадують близькість відповідних рядків.
- Для кожної події смерті рядки відповідних символів повинні закінчуватися видимим крапкою.
- Вам не потрібно відтворювати будь-які інші особливості сюжетів Рендала, а також не потрібно відтворювати його стиль малювання. Прямі лінії з різкими поворотами, всі в чорному кольорі, без зайвих міток і заголовка, цілком чудово вступають у змагання. Також не потрібно ефективно використовувати простір - наприклад, ви могли потенційно спростити алгоритм, лише колись рухаючись лініями вниз, щоб зустрітися з іншими символами, доки є чіткий напрямок часу.
Я додав довідкове рішення, яке відповідає саме цим мінімальним вимогам.
Зробити це досить
Це змагання за популярність, окрім цього ви можете реалізовувати будь-яку фантазію. Найважливішим доповненням є пристойний алгоритм компонування, який робить діаграму більш розбірливою - наприклад, що робить вигини в лініях легко слідувати і що зменшує кількість необхідних перетинів ліній. Це основна алгоритмічна проблема цього завдання! Голоси визначають, наскільки добре працює ваш алгоритм, підтримуючи чіткий графік.
Але ось ще кілька ідей, більшість з яких ґрунтуються на графіках Рендала:
Прикраси:
- Кольорові лінії.
- Назва сюжету.
- Лінія маркування закінчується.
- Автоматичне відновлення ліній, які пройшли через зайнятий ділянку.
- Стиль, намальований вручну (або інший? Як я вже сказав, не потрібно відтворювати стиль Рандала, якщо у вас є краща ідея) для ліній та шрифтів.
- Настроювана орієнтація осі часу.
Додаткова виразність:
- Названі події / групи / смерті.
- Зникаючі та знову з'являються лінії.
- Персонажі, що заходять пізно.
- Основні моменти, які вказують (передаються?) Властивості символів (наприклад, дивіться кільцеву носію в діаграмі LotR).
- Кодування додаткової інформації по осі групування (наприклад, географічна інформація, як на графіку LotR).
- Час у дорозі?
- Альтернативні реалії?
- Персонаж перетворюється на іншого?
- Два символи, що зливаються? (Розбиття персонажа?)
- 3D? (Якщо ви дійсно так далеко, переконайтеся, що ви використовуєте додатковий вимір для візуалізації чогось!)
- Будь-які інші відповідні функції, які могли б бути корисними для візуалізації розповіді про фільм (або книгу тощо).
Звичайно, для багатьох з них потрібен додатковий вклад, і ви можете вільно доповнити свій формат введення, але будь ласка, задокументуйте, як можна вводити дані.
Додайте один-два приклади, щоб показати функції, які ви впровадили.
У вашому рішенні має бути можливість вирішувати будь-які дійсні дані, але це абсолютно добре, якщо воно краще підходить до певних видів розповідей, ніж інші.
Критерії голосування
У мене немає ілюзій, що я можу сказати людям, як вони повинні витрачати свої голоси, але ось кілька запропонованих рекомендацій за важливістю:
- Відповіді Downvote, які використовують лазівки, стандартні ті чи інші, або жорсткий код одного або декількох результатів.
- Не заявляйте відповіді, які не відповідають мінімальним вимогам (якими б фантазійними не були інші).
- Перш за все, запропонуйте приємні алгоритми компонування. Сюди входять відповіді, які не використовують багато вертикального простору, зводячи до мінімуму перетинання ліній, щоб зберегти графік розбірливим, або яким вдалося кодувати додаткову інформацію у вертикальну вісь. Візуалізація групувань, не створюючи великого безладу, повинна бути головним напрямком цього виклику, таким чином, щоб це залишалось конкурсом програмування з цікавою алгоритмічною проблемою.
- Оновіть додаткові функції, які додають виразної сили (тобто не є лише чистою прикрасою).
- Нарешті, підкреслити приємну презентацію.
[[x,y,z]]
би означало, що зараз усі персонажі разом. Але якщо подія не містить списків, а лише персонажів безпосередньо, це навіть смерть, тому в тій же ситуації [x,y,z]
означає, що ці три символи вмирають. Не соромтеся використовувати інший формат із чітким зазначенням, чи є щось смертю чи груповою подією, якщо це допоможе вам. Вищеописаний формат - лише пропозиція. Поки ваш формат введення принаймні такий виразний, ви можете використовувати щось інше.