Dalam salah satu strip xkcd yang lebih ikonik, Randall Munroe memvisualisasikan garis waktu dari beberapa film dalam grafik naratif:
(Klik untuk versi yang lebih besar.)
Sumber: xkcd No. 657 .
Diberikan spesifikasi garis waktu film (atau narasi lain), Anda harus membuat bagan tersebut. Ini adalah kontes popularitas, jadi jawaban dengan suara terbanyak (bersih) akan menang.
Persyaratan minimum
Untuk sedikit memperketat spesifikasi, berikut adalah serangkaian fitur minimum yang harus diterapkan setiap jawaban:
Ambil sebagai masukan daftar nama karakter, diikuti oleh daftar acara. Setiap peristiwa adalah daftar karakter yang sekarat, atau daftar kelompok karakter (menandakan karakter mana yang saat ini bersama-sama). Berikut adalah satu contoh bagaimana narasi Jurassic Park dapat dikodekan:
["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]] ]
Misalnya baris pertama berarti bahwa pada awal grafik, T-Rex adalah satu-satunya, tiga Raptor bersama-sama, Malcolm sendirian, Grant dan Sattler bersama-sama, dll. Acara kedua ke terakhir berarti dua Raptors mati. .
Bagaimana tepatnya Anda mengharapkan input terserah Anda, selama informasi seperti ini dapat ditentukan. Misalnya, Anda dapat menggunakan format daftar yang mudah. Anda juga dapat mengharapkan karakter dalam acara tersebut menjadi nama karakter lengkap lagi dll.
Anda dapat (tetapi tidak harus) berasumsi bahwa setiap daftar grup berisi setiap karakter yang hidup tepat dalam satu grup. Namun, Anda tidak boleh berasumsi bahwa grup atau karakter dalam satu acara berada dalam urutan yang nyaman.
Render ke layar atau file (sebagai vektor atau grafik raster) grafik yang memiliki satu baris untuk setiap karakter. Setiap baris harus diberi label dengan nama karakter di awal baris.
- Untuk setiap peristiwa normal, harus ada, secara berurutan, beberapa bagian melintang dari bagan di mana kelompok-kelompok karakter secara jelas mirip dengan kedekatan garis mereka masing-masing.
- Untuk setiap peristiwa kematian, garis-garis karakter yang relevan harus berakhir dalam gumpalan yang terlihat.
- Anda tidak harus mereproduksi fitur lain dari plot Randall, Anda juga tidak harus mereproduksi gaya gambarnya. Garis-garis lurus dengan belokan tajam, semuanya hitam, tanpa label lebih lanjut dan judul sangat baik untuk memasuki kompetisi. Anda juga tidak perlu menggunakan ruang secara efisien - misalnya Anda berpotensi menyederhanakan algoritma Anda dengan hanya memindahkan garis ke bawah untuk bertemu dengan karakter lain, selama ada arah waktu yang jelas.
Saya telah menambahkan solusi referensi yang memenuhi persis persyaratan minimum ini.
Membuatnya Cantik
Ini adalah kontes popularitas, jadi di atas itu, Anda dapat menerapkan kesenangan apa pun yang Anda inginkan. Penambahan yang paling penting adalah algoritma tata letak yang layak yang membuat bagan lebih terbaca - misalnya yang membuat tikungan di garis mudah diikuti dan yang mengurangi jumlah penyilangan garis yang diperlukan. Ini adalah masalah algoritmik inti dari tantangan ini! Suara akan memutuskan seberapa baik kinerja algoritma Anda dalam menjaga grafik tetap rapi.
Tapi di sini ada beberapa ide lagi, sebagian besar berdasarkan pada bagan Randall:
Dekorasi:
- Garis berwarna.
- Judul untuk plot.
- Garis pelabelan berakhir.
- Secara otomatis relabelling baris yang telah melalui bagian yang sibuk.
- Gaya digambar tangan (atau lainnya? Seperti yang saya katakan, tidak perlu mereproduksi gaya Randall jika Anda memiliki ide yang lebih baik) untuk garis dan font.
- Orientasi sumbu waktu yang dapat disesuaikan.
Ekspresifitas tambahan:
- Disebutkan peristiwa / kelompok / kematian.
- Menghilang dan muncul kembali garis.
- Karakter masuk terlambat.
- Menyoroti yang menunjukkan (dapat dipindahtangankan) properti karakter (misalnya, lihat ringbearer di bagan LotR).
- Pengkodean informasi tambahan dalam sumbu pengelompokan (mis. Informasi geografis seperti pada bagan LotR).
- Perjalanan waktu?
- Realitas alternatif?
- Karakter berubah menjadi yang lain?
- Penggabungan dua karakter? (Pemisahan karakter?)
- 3D? (Jika Anda benar-benar melangkah sejauh itu, pastikan Anda benar-benar menggunakan dimensi tambahan untuk memvisualisasikan sesuatu!)
- Fitur relevan lainnya, yang dapat berguna untuk memvisualisasikan narasi film (atau buku, dll.).
Tentu saja, banyak dari ini akan memerlukan input tambahan, dan Anda bebas untuk menambah format input Anda seperlunya, tetapi harap dokumentasikan bagaimana data dapat dimasukkan.
Harap sertakan satu atau dua contoh untuk memamerkan fitur yang Anda terapkan.
Solusi Anda harus dapat menangani input yang valid, tetapi tidak apa-apa jika lebih cocok untuk jenis narasi tertentu daripada yang lain.
Kriteria Pemilihan
Saya tidak punya ilusi bahwa saya bisa memberi tahu orang-orang bagaimana mereka harus menggunakan suara mereka, tetapi di sini ada beberapa pedoman yang disarankan sesuai kepentingan:
- Turunkan jawaban yang mengeksploitasi celah, yang standar atau yang lain, atau hardcode satu atau lebih hasil.
- Jangan memvotasikan jawaban yang tidak memenuhi persyaratan minimum (tidak peduli seberapa suka sisanya).
- Pertama dan terpenting, tingkatkan algoritma tata letak yang bagus. Ini termasuk jawaban yang tidak menggunakan banyak ruang vertikal sambil meminimalkan penyilangan garis agar grafik dapat terbaca, atau yang berhasil menyandikan informasi tambahan ke dalam sumbu vertikal. Memvisualisasikan pengelompokan tanpa membuat kekacauan besar harus menjadi fokus utama dari tantangan ini, sehingga ini tetap menjadi kontes pemrograman dengan masalah algoritme yang menarik.
- Upvote fitur opsional yang menambah daya ekspresif (yaitu bukan hanya dekorasi murni).
- Terakhir, upvote presentasi yang bagus.
sumber
[[x,y,z]]
artinya semua karakter saat ini bersama-sama. Tetapi jika acara tidak mengandung daftar, tetapi hanya karakter secara langsung, itu adalah kematian, jadi dalam situasi yang sama[x,y,z]
berarti ketiga karakter itu mati. Jangan ragu untuk menggunakan format lain, dengan indikasi eksplisit apakah sesuatu itu adalah kematian atau peristiwa pengelompokan jika itu membantu Anda. Format di atas hanya saran. Selama format input Anda setidaknya bersifat ekspresif, Anda dapat menggunakan sesuatu yang lain.Jawaban:
Python3 dengan numpy, scipy dan matplotlib
edit :
sorted_event
fungsinya.coords
).sumber
T-SQL
Saya tidak senang dengan ini sebagai entri, tapi saya pikir pertanyaan ini layak untuk dicoba setidaknya. Saya akan mencoba untuk memperbaikinya nanti, tetapi pelabelan akan selalu menjadi masalah dalam SQL. Solusinya memerlukan SQL 2012+ dan dijalankan di SSMS (SQL Server Management Studio). Outputnya ada di tab hasil spasial.
Timeline yang dihasilkan terlihat seperti berikut ini
sumber
Mathematica, Solusi Referensi
Sebagai referensi, saya menyediakan skrip Mathematica yang memenuhi persis persyaratan minimum, tidak lebih, tidak kurang.
Itu mengharapkan karakter menjadi daftar format dalam pertanyaan dalam
chars
, dan peristiwa dalamevents
.Sebagai contoh, berikut adalah contoh Jurassic Park menggunakan jenis daftar Mathematica:
kita akan mendapatkan:
(Klik untuk versi yang lebih besar.)
Itu tidak terlihat terlalu buruk, tetapi itu terutama karena data input lebih atau kurang teratur. Jika kami mengocok grup dan karakter di setiap acara (sambil mempertahankan struktur yang sama), hal-hal seperti ini dapat terjadi:
Yang agak berantakan.
Jadi seperti yang saya katakan, ini hanya memenuhi persyaratan minimum. Itu tidak mencoba untuk menemukan tata letak yang bagus dan tidak cantik, tetapi di situlah kalian masuk!
sumber