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

Loading…
Cancel
Save