refactor to shorter names

experiments
Peter Babič 3 years ago
parent c252d2d9e7
commit 091325dc11
  1. 130
      src/App.svelte

@ -3,47 +3,45 @@
</script> </script>
<script> <script>
const standingPole = 0 const pole = 0
const emptyHole = 1 const hole = 1
const pickedPole = 2 const pick = 2
const jumpDest = 3 const dest = 3
const adjacents = new Graph() const adjcs = new Graph()
const jumps = new Graph() const jumps = new Graph()
let state = [] let state = []
const numVertices = 15 const numCircles = 15
for (let i = 0; i < numVertices; i++) { for (let i = 0; i < numCircles; i++) {
state[i] = standingPole state[i] = pole
adjacents.addVertex(i) adjcs.addVertex(i)
jumps.addVertex(i) jumps.addVertex(i)
if (i > 0) { if (i > 0) {
adjacents.addEdge(i, i - 1) adjcs.addEdge(i, i - 1)
} }
} }
state[0] = emptyHole state[0] = hole
state[1] = emptyHole
state[9] = emptyHole adjcs.addEdge(0, 8)
adjcs.addEdge(1, 7)
adjacents.addEdge(0, 8) adjcs.addEdge(1, 8)
adjacents.addEdge(1, 7) adjcs.addEdge(2, 6)
adjacents.addEdge(1, 8) adjcs.addEdge(2, 7)
adjacents.addEdge(2, 6) adjcs.addEdge(3, 5)
adjacents.addEdge(2, 7) adjcs.addEdge(3, 6)
adjacents.addEdge(3, 5) adjcs.addEdge(5, 11)
adjacents.addEdge(3, 6) adjcs.addEdge(6, 10)
adjacents.addEdge(5, 11) adjcs.addEdge(6, 11)
adjacents.addEdge(6, 10) adjcs.addEdge(7, 9)
adjacents.addEdge(6, 11) adjcs.addEdge(7, 10)
adjacents.addEdge(7, 9) adjcs.addEdge(9, 13)
adjacents.addEdge(7, 10) adjcs.addEdge(10, 12)
adjacents.addEdge(9, 13) adjcs.addEdge(10, 13)
adjacents.addEdge(10, 12) adjcs.addEdge(12, 14)
adjacents.addEdge(10, 13)
adjacents.addEdge(12, 14)
jumps.addEdge(0, 2) jumps.addEdge(0, 2)
jumps.addEdge(0, 9) jumps.addEdge(0, 9)
@ -64,59 +62,49 @@
jumps.addEdge(9, 14) jumps.addEdge(9, 14)
jumps.addEdge(11, 14) jumps.addEdge(11, 14)
const commonPosition = (a, b) => const commonBetween = (a, b) =>
adjacents.adjacencyList[a].filter(common => adjcs.adjacencyList[a].filter(common =>
adjacents.adjacencyList[b].includes(common) adjcs.adjacencyList[b].includes(common)
)[0] )[0]
const clearDestinations = () => const clearDests = () =>
state.forEach( state.forEach(
(_, i) => (state[i] = state[i] == jumpDest ? emptyHole : state[i]) (_, i) => (state[i] = state[i] == dest ? hole : state[i])
) )
const change = currentlyClicked => { const change = curr => {
const previouslyPicked = state.indexOf(pickedPole) const prev = state.indexOf(pick)
const emptyHoles = [...state.keys()].filter(i => state[i] == emptyHole) const emptyHoles = [...state.keys()].filter(i => state[i] == hole)
const adjacentJump = jumps.adjacencyList[currentlyClicked].indexOf( const possibleDests = jumps.adjacencyList[curr].filter(jump =>
previouslyPicked emptyHoles.includes(jump)
) )
const possibleJumps = jumps.adjacencyList[
currentlyClicked if (state[curr] == pole && prev == -1 && possibleDests.length > 0) {
].filter(jump => emptyHoles.includes(jump)) state[curr] = pick
jumps.adjacencyList[curr].forEach(jump => {
if ( const jumpedOver = commonBetween(curr, jump)
state[currentlyClicked] == standingPole &&
previouslyPicked == -1 && if (state[jump] == hole && state[jumpedOver] == pole) {
possibleJumps.length > 0 state[jump] = dest
) {
state[currentlyClicked] = pickedPole
jumps.adjacencyList[currentlyClicked].forEach(jump => {
const jumpedOver = commonPosition(currentlyClicked, jump)
console.log(currentlyClicked, jump, jumpedOver)
if (
state[jump] == emptyHole &&
state[jumpedOver] == standingPole
) {
state[jump] = jumpDest
} }
}) })
return return
} }
if (state[currentlyClicked] == jumpDest && adjacentJump != -1) { if (state[curr] == dest) {
const jumpedOver = commonPosition(currentlyClicked, previouslyPicked) const jumpedOver = commonBetween(curr, prev)
state[currentlyClicked] = standingPole state[curr] = pole
state[previouslyPicked] = emptyHole state[prev] = hole
state[jumpedOver] = emptyHole state[jumpedOver] = hole
clearDestinations() clearDests()
return return
} }
if (state[currentlyClicked] == pickedPole) { if (state[curr] == pick) {
state[currentlyClicked] = standingPole state[curr] = pole
clearDestinations() clearDests()
} }
} }
</script> </script>
@ -207,10 +195,10 @@
{#each state as _, i} {#each state as _, i}
<div <div
class="circle div{i}" class="circle div{i}"
class:gray={state[i] == emptyHole} class:gray={state[i] == hole}
class:red={state[i] == standingPole} class:red={state[i] == pole}
class:green={state[i] == pickedPole} class:green={state[i] == pick}
class:blue={state[i] == jumpDest} class:blue={state[i] == dest}
on:click={() => change(i)}> on:click={() => change(i)}>
{i} {i}
</div> </div>

Loading…
Cancel
Save