Skip to content

Instantly share code, notes, and snippets.

@puripant
Last active February 2, 2020 07:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save puripant/9e876ff1b496831bf847c4b5d3be6a28 to your computer and use it in GitHub Desktop.
Save puripant/9e876ff1b496831bf847c4b5d3be6a28 to your computer and use it in GitHub Desktop.
How many adventures in Choose Your Own Adventure

All branches in a Choose Your Own Adventure book are visualized as lines. Pages are ordered from top to bottom. Green and red lines are for going forward and backward, respectively. Colored dots are the endings (no next pages). The longest path from the first page is highlighted in bold.

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-lite@4.0.0-beta.2"></script>
<script src="https://cdn.jsdelivr.net/npm/vega-embed@5"></script>
</head>
<body>
<div id="vis"></div>
<script>
const spec = "spec.json";
vegaEmbed("#vis", spec)
// result.view provides access to the Vega View API
.then(result => console.log(result))
.catch(console.warn);
</script>
</body>
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 500,
"height": 1000,
"padding": 10,
"data": [
{
"name": "edges",
"values": [
{"forward": true, "highlighted": 2.5, "source": 9, "target": 11},
{"forward": true, "highlighted": 0.5, "source": 9, "target": 23},
{"forward": true, "highlighted": 2.5, "source": 10, "target": 99},
{"forward": true, "highlighted": 2.5, "source": 11, "target": 53},
{"forward": true, "highlighted": 0.5, "source": 12, "target": 42},
{"forward": true, "highlighted": 2.5, "source": 13, "target": 34},
{"forward": false, "highlighted": 2.5, "source": 14, "target": 10},
{"forward": false, "highlighted": 2.5, "source": 15, "target": 13},
{"forward": true, "highlighted": 0.5, "source": 15, "target": 123},
{"forward": true, "highlighted": 0.5, "source": 16, "target": 35},
{"forward": false, "highlighted": 2.5, "source": 17, "target": 14},
{"forward": false, "highlighted": 2.5, "source": 18, "target": 17},
{"forward": false, "highlighted": 2.5, "source": 19, "target": 15},
{"forward": true, "highlighted": 0.5, "source": 20, "target": 28},
{"forward": false, "highlighted": 0.5, "source": 20, "target": 16},
{"forward": false, "highlighted": 2.5, "source": 21, "target": 18},
{"forward": false, "highlighted": 2.5, "source": 22, "target": 19},
{"forward": false, "highlighted": 0.5, "source": 23, "target": 12},
{"forward": true, "highlighted": 2.5, "source": 24, "target": 27},
{"forward": false, "highlighted": 2.5, "source": 25, "target": 21},
{"forward": false, "highlighted": 0.5, "source": 26, "target": 20},
{"forward": false, "highlighted": 2.5, "source": 27, "target": 25},
{"forward": true, "highlighted": 0.5, "source": 28, "target": 32},
{"forward": true, "highlighted": 0.5, "source": 29, "target": 31},
{"forward": true, "highlighted": 0.5, "source": 30, "target": 40},
{"forward": true, "highlighted": 0.5, "source": 31, "target": 33},
{"forward": true, "highlighted": 0.5, "source": 32, "target": 36},
{"forward": false, "highlighted": 0.5, "source": 33, "target": 26},
{"forward": true, "highlighted": 2.5, "source": 34, "target": 109},
{"forward": true, "highlighted": 0.5, "source": 35, "target": 38},
{"forward": true, "highlighted": 0.5, "source": 36, "target": 41},
{"forward": true, "highlighted": 0.5, "source": 37, "target": 39},
{"forward": true, "highlighted": 0.5, "source": 37, "target": 80},
{"forward": true, "highlighted": 0.5, "source": 38, "target": 43},
{"forward": true, "highlighted": 0.5, "source": 40, "target": 70},
{"forward": true, "highlighted": 0.5, "source": 41, "target": 44},
{"forward": true, "highlighted": 0.5, "source": 42, "target": 48},
{"forward": true, "highlighted": 0.5, "source": 43, "target": 126},
{"forward": true, "highlighted": 0.5, "source": 44, "target": 56},
{"forward": false, "highlighted": 0.5, "source": 46, "target": 37},
{"forward": false, "highlighted": 0.5, "source": 47, "target": 31},
{"forward": true, "highlighted": 0.5, "source": 48, "target": 108},
{"forward": true, "highlighted": 0.5, "source": 48, "target": 63},
{"forward": false, "highlighted": 0.5, "source": 49, "target": 45},
{"forward": true, "highlighted": 0.5, "source": 50, "target": 55},
{"forward": false, "highlighted": 0.5, "source": 51, "target": 46},
{"forward": false, "highlighted": 0.5, "source": 52, "target": 49},
{"forward": true, "highlighted": 2.5, "source": 53, "target": 100},
{"forward": true, "highlighted": 0.5, "source": 54, "target": 112},
{"forward": false, "highlighted": 0.5, "source": 54, "target": 52},
{"forward": true, "highlighted": 0.5, "source": 55, "target": 58},
{"forward": true, "highlighted": 0.5, "source": 56, "target": 83},
{"forward": true, "highlighted": 0.5, "source": 57, "target": 115},
{"forward": true, "highlighted": 0.5, "source": 58, "target": 62},
{"forward": true, "highlighted": 0.5, "source": 59, "target": 65},
{"forward": false, "highlighted": 0.5, "source": 60, "target": 57},
{"forward": true, "highlighted": 0.5, "source": 62, "target": 68},
{"forward": true, "highlighted": 0.5, "source": 63, "target": 67},
{"forward": false, "highlighted": 2.5, "source": 64, "target": 61},
{"forward": true, "highlighted": 0.5, "source": 65, "target": 120},
{"forward": false, "highlighted": 2.5, "source": 66, "target": 64},
{"forward": true, "highlighted": 2.5, "source": 67, "target": 69},
{"forward": false, "highlighted": 0.5, "source": 68, "target": 54},
{"forward": true, "highlighted": 2.5, "source": 69, "target": 71},
{"forward": true, "highlighted": 0.5, "source": 69, "target": 74},
{"forward": false, "highlighted": 0.5, "source": 70, "target": 51},
{"forward": false, "highlighted": 2.5, "source": 71, "target": 24},
{"forward": false, "highlighted": 0.5, "source": 72, "target": 60},
{"forward": true, "highlighted": 0.5, "source": 72, "target": 75},
{"forward": true, "highlighted": 0.5, "source": 73, "target": 118},
{"forward": true, "highlighted": 0.5, "source": 74, "target": 76},
{"forward": true, "highlighted": 0.5, "source": 76, "target": 124},
{"forward": true, "highlighted": 0.5, "source": 76, "target": 81},
{"forward": false, "highlighted": 0.5, "source": 77, "target": 72},
{"forward": true, "highlighted": 0.5, "source": 78, "target": 125},
{"forward": true, "highlighted": 0.5, "source": 78, "target": 119},
{"forward": true, "highlighted": 0.5, "source": 79, "target": 105},
{"forward": false, "highlighted": 0.5, "source": 79, "target": 77},
{"forward": false, "highlighted": 0.5, "source": 80, "target": 79},
{"forward": true, "highlighted": 0.5, "source": 81, "target": 84},
{"forward": true, "highlighted": 0.5, "source": 82, "target": 127},
{"forward": true, "highlighted": 0.5, "source": 83, "target": 86},
{"forward": true, "highlighted": 0.5, "source": 84, "target": 124},
{"forward": true, "highlighted": 0.5, "source": 84, "target": 89},
{"forward": true, "highlighted": 0.5, "source": 86, "target": 97},
{"forward": true, "highlighted": 0.5, "source": 87, "target": 114},
{"forward": true, "highlighted": 0.5, "source": 87, "target": 117},
{"forward": false, "highlighted": 0.5, "source": 88, "target": 85},
{"forward": true, "highlighted": 0.5, "source": 89, "target": 92},
{"forward": true, "highlighted": 0.5, "source": 90, "target": 94},
{"forward": false, "highlighted": 0.5, "source": 91, "target": 88},
{"forward": false, "highlighted": 0.5, "source": 93, "target": 91},
{"forward": false, "highlighted": 2.5, "source": 93, "target": 66},
{"forward": true, "highlighted": 0.5, "source": 94, "target": 98},
{"forward": false, "highlighted": 2.5, "source": 95, "target": 93},
{"forward": false, "highlighted": 2.5, "source": 96, "target": 95},
{"forward": true, "highlighted": 0.5, "source": 97, "target": 103},
{"forward": true, "highlighted": 0.5, "source": 98, "target": 101},
{"forward": true, "highlighted": 2.5, "source": 99, "target": 104},
{"forward": true, "highlighted": 2.5, "source": 100, "target": 110},
{"forward": false, "highlighted": 0.5, "source": 101, "target": 82},
{"forward": true, "highlighted": 0.5, "source": 102, "target": 112},
{"forward": true, "highlighted": 0.5, "source": 103, "target": 106},
{"forward": false, "highlighted": 2.5, "source": 104, "target": 96},
{"forward": false, "highlighted": 0.5, "source": 105, "target": 77},
{"forward": true, "highlighted": 0.5, "source": 106, "target": 111},
{"forward": false, "highlighted": 2.5, "source": 107, "target": 67},
{"forward": false, "highlighted": 0.5, "source": 108, "target": 30},
{"forward": false, "highlighted": 0.5, "source": 109, "target": 29},
{"forward": false, "highlighted": 2.5, "source": 109, "target": 107},
{"forward": false, "highlighted": 0.5, "source": 110, "target": 47},
{"forward": false, "highlighted": 2.5, "source": 110, "target": 22},
{"forward": false, "highlighted": 0.5, "source": 111, "target": 102},
{"forward": true, "highlighted": 0.5, "source": 113, "target": 116},
{"forward": true, "highlighted": 0.5, "source": 114, "target": 128},
{"forward": false, "highlighted": 0.5, "source": 115, "target": 59},
{"forward": true, "highlighted": 0.5, "source": 117, "target": 121},
{"forward": false, "highlighted": 0.5, "source": 118, "target": 78},
{"forward": true, "highlighted": 0.5, "source": 119, "target": 122},
{"forward": false, "highlighted": 0.5, "source": 120, "target": 73},
{"forward": false, "highlighted": 0.5, "source": 121, "target": 90},
{"forward": false, "highlighted": 0.5, "source": 124, "target": 87},
{"forward": false, "highlighted": 0.5, "source": 125, "target": 113},
{"forward": false, "highlighted": 0.5, "source": 126, "target": 50},
{"forward": false, "highlighted": 0.5, "source": 127, "target": 9}
]
},
{
"name": "sourceDegree",
"source": "edges",
"transform": [
{"type": "aggregate", "groupby": ["source"]}
]
},
{
"name": "targetDegree",
"source": "edges",
"transform": [
{"type": "aggregate", "groupby": ["target"]}
]
},
{
"name": "nodes",
"values": [
{"name": "หน้า 1"},
{"name": "2"},
{"name": "3"},
{"name": "4"},
{"name": "5"},
{"name": "6"},
{"name": "7"},
{"name": "8"},
{"name": "9"},
{"name": "10"},
{"name": "11"},
{"name": "12"},
{"name": "13"},
{"name": "14"},
{"name": "15"},
{"name": "16"},
{"name": "17"},
{"name": "18"},
{"name": "19"},
{"name": "20"},
{"name": "21"},
{"name": "22"},
{"name": "23"},
{"name": "24"},
{"name": "25"},
{"name": "26"},
{"name": "27"},
{"name": "28"},
{"name": "29"},
{"name": "30"},
{"name": "31"},
{"name": "32"},
{"name": "33"},
{"name": "34"},
{"name": "35"},
{"name": "36"},
{"name": "37"},
{"name": "38"},
{"name": "39"},
{"name": "40"},
{"name": "41"},
{"name": "42"},
{"name": "43"},
{"name": "44"},
{"name": "45"},
{"name": "46"},
{"name": "47"},
{"name": "48"},
{"name": "49"},
{"name": "50"},
{"name": "51"},
{"name": "52"},
{"name": "53"},
{"name": "54"},
{"name": "55"},
{"name": "56"},
{"name": "57"},
{"name": "58"},
{"name": "59"},
{"name": "60"},
{"name": "61"},
{"name": "62"},
{"name": "63"},
{"name": "64"},
{"name": "65"},
{"name": "66"},
{"name": "67"},
{"name": "68"},
{"name": "69"},
{"name": "70"},
{"name": "71"},
{"name": "72"},
{"name": "73"},
{"name": "74"},
{"name": "75"},
{"name": "76"},
{"name": "77"},
{"name": "78"},
{"name": "79"},
{"name": "80"},
{"name": "81"},
{"name": "82"},
{"name": "83"},
{"name": "84"},
{"name": "85"},
{"name": "86"},
{"name": "87"},
{"name": "88"},
{"name": "89"},
{"name": "90"},
{"name": "91"},
{"name": "92"},
{"name": "93"},
{"name": "94"},
{"name": "95"},
{"name": "96"},
{"name": "97"},
{"name": "98"},
{"name": "99"},
{"name": "100"},
{"name": "101"},
{"name": "102"},
{"name": "103"},
{"name": "104"},
{"name": "105"},
{"name": "106"},
{"name": "107"},
{"name": "108"},
{"name": "109"},
{"name": "110"},
{"name": "111"},
{"name": "112"},
{"name": "113"},
{"name": "114"},
{"name": "115"},
{"name": "116"},
{"name": "117"},
{"name": "118"},
{"name": "119"},
{"name": "120"},
{"name": "121"},
{"name": "122"},
{"name": "123"},
{"name": "124"},
{"name": "125"},
{"name": "126"},
{"name": "127"},
{"name": "128"}
],
"format": {"type": "json"},
"transform": [
{ "type": "window", "ops": ["rank"], "as": ["order"] },
{ "type": "window", "ops": ["rank"], "as": ["index"] },
{
"type": "lookup", "from": "sourceDegree", "key": "source",
"fields": ["index"], "as": ["sourceDegree"],
"default": {"count": 0}
},
{
"type": "lookup", "from": "targetDegree", "key": "target",
"fields": ["index"], "as": ["targetDegree"],
"default": {"count": 0}
},
{
"type": "formula", "as": "degree",
"expr": "datum.sourceDegree.count + datum.targetDegree.count"
}
]
}
],
"scales": [
{
"name": "position",
"type": "band",
"domain": {"data": "nodes", "field": "order", "sort": true},
"range": "height"
},
{
"name": "stroke",
"domain": [true, false],
"range": ["green", "red"]
},
{
"name": "fill",
"domain": [0, 1],
"range": ["green", "lightgray"],
"clamp": true
}
],
"marks": [
{
"type": "symbol",
"name": "layout",
"interactive": false,
"from": {"data": "nodes"},
"encode": {
"enter": {
"opacity": {"value": 0}
},
"update": {
"y": {"scale": "position", "field": "order"},
"x": {"value": 30},
"size": {"field": "degree", "mult": 20, "offset": 0}
}
}
},
{
"type": "text",
"from": {"data": "nodes"},
"encode": {
"update": {
"y": {"scale": "position", "field": "order"},
"x": {"value": 20},
"fontSize": {"value": 8},
"align": {"value": "right"},
"baseline": {"value": "middle"},
"text": {"field": "name"}
}
}
},
{
"type": "path",
"from": {"data": "edges"},
"encode": {
"update": {
"stroke": {"scale": "stroke", "field": "forward"},
"strokeOpacity": {"value": 0.5},
"strokeWidth": {"field": "highlighted"}
}
},
"transform": [
{
"type": "lookup", "from": "layout", "key": "datum.index",
"fields": ["datum.source", "datum.target"],
"as": ["sourceNode", "targetNode"]
},
{
"type": "linkpath",
"sourceY": {"expr": "min(datum.sourceNode.y, datum.targetNode.y)"},
"targetY": {"expr": "max(datum.sourceNode.y, datum.targetNode.y)"},
"sourceX": {"expr": "30"},
"targetX": {"expr": "30"},
"shape": "arc"
}
]
},
{
"type": "symbol",
"from": {"data": "layout"},
"encode": {
"update": {
"x": {"field": "x"},
"y": {"field": "y"},
"fill": {"scale": "fill", "field": "datum.sourceDegree.count"},
"size": {"field": "size"}
}
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment