더 상징적 인 xkcd 스트립 중 하나에서 Randall Munroe는 여러 영화의 타임 라인을 설명 차트로 시각화했습니다.
출처 : xkcd No. 657 .
영화 (또는 다른 이야기)의 타임 라인을 지정하면 그러한 차트를 생성해야합니다. 이것은 인기 콘테스트이므로, 가장 많은 (순) 투표로 답변이 이길 것입니다.
최소 요구 사항들
사양을 약간 강화하기 위해 모든 답변이 구현해야하는 최소 기능 세트는 다음과 같습니다.
문자 이름 목록과 이벤트 목록을 입력으로 사용하십시오. 각 이벤트는 죽어가는 문자 목록 또는 문자 그룹 목록 (현재 함께있는 문자를 나타냄)입니다. Jurassic Park 내러티브를 인코딩하는 방법에 대한 예는 다음과 같습니다.
["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 개의 랩터가 함께 있고, 말콤이 혼자이며, Grant와 Sattler가 함께있는 것을 의미합니다. 마지막 두 번째 이벤트는 랩터 중 2 명이 죽는 것을 의미합니다 .
이러한 종류의 정보를 지정할 수있는 한 입력이 사용자에게 얼마나 정확한지 결정하십시오. 예를 들어 편리한 목록 형식을 사용할 수 있습니다. 또한 이벤트의 문자가 다시 전체 문자 이름이 될 것으로 기대할 수 있습니다.
각 그룹 목록에 정확히 하나의 그룹에 각 살아있는 캐릭터가 포함되어 있다고 가정 할 수도 있습니다. 그러나 한 이벤트 내의 그룹 또는 문자 가 특히 편리한 순서 라고 가정 해서는 안됩니다 .
각 문자에 대해 한 줄이있는 차트 또는 화면 (벡터 또는 래스터 그래픽으로)으로 렌더링합니다. 각 줄은 줄의 시작 부분에 문자 이름으로 표시되어야합니다.
- 각각의 정상적인 이벤트에 대해, 문자 그룹이 각 라인의 근접성에 의해 명확하게 닮은 차트의 일부 단면이 순서대로 있어야합니다.
- 각 사망 이벤트에 대해 관련 캐릭터의 행은 눈에 보이는 얼룩으로 끝나야합니다.
- 당신은 할 수 없습니다 랜달의 플롯의 다른 기능을 재현 할 필요가 없으며 자신의 그리기 스타일을 재현해야합니까. 추가 레이블이없는 날카로운 회전이있는 직선, 모두 검은 색으로 표시되며 제목은 경쟁에 완전히 적합합니다. 또한 공간을 효율적으로 사용할 필요가 없습니다. 예를 들어 눈에 띄는 시간 방향이있는 한 다른 문자와 만나기 위해 줄을 아래로만 움직여 알고리즘을 단순화 할 수 있습니다.
이러한 최소 요구 사항을 정확히 충족시키는 참조 솔루션 을 추가했습니다 .
예쁘게 만들기
이것은 인기 콘테스트이므로, 그 위에, 당신이 원하는 어떤 환상이든 구현할 수 있습니다. 가장 중요한 추가 사항은 차트를 더 읽기 쉽게 만드는 적절한 레이아웃 알고리즘입니다. 이것이이 도전의 핵심 알고리즘 문제입니다! 투표는 차트를 깔끔하게 유지하는 알고리즘의 성능을 결정합니다.
그러나 Randall의 차트를 기반으로 한 더 많은 아이디어가 있습니다.
장식물:
- 컬러 라인.
- 줄거리의 제목입니다.
- 라벨링 라인이 종료됩니다.
- 사용량이 많은 섹션을 통과 한 회선에 자동으로 레이블을 다시 지정합니다.
- 선과 글꼴에 대해 손으로 그린 스타일 (또는 내가 말했듯이 Randall의 스타일을 더 잘 생각하면 재현 할 필요가 없습니다).
- 시간 축의 사용자 정의 가능한 방향.
추가 표현력 :
- 명명 된 이벤트 / 그룹 / 죽음.
- 라인이 사라지고 다시 나타납니다.
- 늦게 등장하는 캐릭터.
- 캐릭터의 속성을 나타내는 하이라이트 (예 : LotR 차트의 ringbearer 참조).
- 그룹화 축에 추가 정보 인코딩 (예 : LotR 차트와 같은 지리 정보).
- 시간 여행?
- 대체 현실?
- 다른 캐릭터로 변신하는 캐릭터?
- 두 글자가 합쳐 지나요? (캐릭터 분할?)
- 3D? ( 정말로 나아간 경우 실제로 추가 차원을 사용하여 Someting을 시각화하고 있는지 확인하십시오!)
- 영화 (또는 서적 등)의 이야기를 시각화하는 데 유용한 기타 관련 기능.
물론이 중 많은 부분은 추가 입력이 필요하며 필요에 따라 입력 형식을 자유롭게 늘릴 수 있지만 데이터 입력 방법을 문서화하십시오.
구현 한 기능을 보여주기 위해 하나 또는 두 개의 예를 포함하십시오.
귀하의 솔루션은 유효한 입력을 처리 할 수 있어야하지만, 다른 유형보다 특정 종류의 이야기에 더 적합한 경우에는 절대적으로 좋습니다.
투표 기준
사람들에게 표를 써야하는 방법을 알려줄 수 있다는 환상은 없지만 다음은 중요한 순서대로 제안 된 지침입니다.
- 허점 답은 허점, 표준 또는 기타를 이용하거나 하나 이상의 결과를 하드 코딩합니다.
- 최소한의 요구 사항을 충족시키지 못하는 답변을 공표하지 마십시오 (나머지가 아무리 멋진 지에 상관없이).
- 우선, 멋진 레이아웃 알고리즘을 찬성하십시오. 여기에는 그래프의 가독성을 유지하기 위해 선의 교차를 최소화하면서 수직 공간을 많이 사용하지 않거나 추가 정보를 수직 축으로 인코딩하는 답이 포함됩니다. 큰 혼란을 일으키지 않고 그룹화를 시각화하는 것이이 과제의 주요 초점이되어야합니다. 그래야 흥미로운 알고리즘 문제를 염두에두고 프로그래밍 콘테스트를 유지할 수 있습니다.
- 표현력을 추가하는 선택적 기능을 찬성하십시오 (예 : 순수한 장식이 아님).
- 마지막으로 멋진 프리젠 테이션을 찬성하십시오.
[[x,y,z]]
모든 문자가 함께 현재 것을 의미 할 것입니다. 그러나 이벤트에 목록이없고 문자 만 직접 포함되어있는 경우에도 사망에 해당하므로 동일한 상황 [x,y,z]
에서이 세 문자가 죽는다는 의미입니다. 어떤 것이 사망인지 또는 그룹화 이벤트인지에 대한 명확한 표시와 함께 다른 형식을 자유롭게 사용하십시오. 위 형식은 제안 일뿐입니다. 입력 형식이 최소한 표현적인 한 다른 것을 사용할 수 있습니다.