enable triangle scaling

master
Peter Babič 3 years ago
parent 7d547d43d2
commit 6e5821dbcd
Signed by: peter.babic
GPG Key ID: 4BB075BC1884BA40
  1. 173
      src/Triangle.svelte

@ -8,7 +8,13 @@
fallback: scale,
})
const C_MAX_STEPS = 13
// 6/2 circles = 3 steps
// 10/2 circles = 7 steps
// 15/1 circles = 13 steps
// 21/1 circles = 19 steps
// 28/1 circles = ?? steps
const C_NUM_CIRCLES = 21
const C_MAX_STEPS = 19
const C_POLE = 0
const C_HOLE = 1
const C_PICK = 2
@ -21,7 +27,11 @@
let gameover
let victory
onMount(() => restart())
onMount(() => {
restart()
printSingleSolution()
})
const restart = () => {
adjcs = new Graph()
jumps = new Graph()
@ -31,54 +41,52 @@
gameover = false
victory = false
const numCircles = 15
for (let i = 0; i < numCircles; i++) {
circles[i] = C_POLE
for (let i = 0; i < C_NUM_CIRCLES; i++) {
adjcs.addVertex(i)
jumps.addVertex(i)
circles[i] = C_POLE
}
circles[0] = C_HOLE
if (i > 0) {
adjcs.addEdge(i, i - 1)
let row = 0
let col = 0
for (let i = 0; i < C_NUM_CIRCLES; i++, col++) {
const triangular = n => (n <= 1 ? 1 : n + triangular(n - 1))
const leftMost = detph => (detph == 0 ? 0 : triangular(detph))
const find = (r, c) => (c > r ? undefined : leftMost(r) + c)
// const triangular2 = n => (n <= 1 ? 0 : n + triangular2(n - 1))
// const rightMost = detph => (detph == 0 ? 0 : triangular2(detph + 1))
const addEdge = (graph, i, pos) => {
if (pos != undefined && pos < C_NUM_CIRCLES) {
graph.addEdge(i, pos)
}
}
circles[0] = C_HOLE
if (i >= leftMost(row + 1)) {
row++
}
if (i == leftMost(row)) {
col = 0
}
let east = find(row, col + 1)
let south = find(row + 1, col)
let southEast = find(row + 1, col + 1)
addEdge(adjcs, i, east)
addEdge(adjcs, i, south)
addEdge(adjcs, i, southEast)
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)
jumps.addEdge(1, 3)
jumps.addEdge(1, 10)
jumps.addEdge(2, 4)
jumps.addEdge(2, 9)
jumps.addEdge(2, 11)
jumps.addEdge(3, 10)
jumps.addEdge(4, 11)
jumps.addEdge(5, 7)
jumps.addEdge(5, 12)
jumps.addEdge(6, 8)
jumps.addEdge(6, 13)
jumps.addEdge(7, 12)
jumps.addEdge(8, 13)
jumps.addEdge(9, 11)
jumps.addEdge(9, 14)
jumps.addEdge(11, 14)
east = find(row, col + 2)
south = find(row + 2, col)
southEast = find(row + 2, col + 2)
addEdge(jumps, i, east)
addEdge(jumps, i, south)
addEdge(jumps, i, southEast)
}
}
const commonBetween = (source, destination) => {
@ -190,13 +198,17 @@
}
}
const printSolutions = () => {
const printSingleSolution = () => {
let depth = 0
let solutions = []
let shadow = [...circles]
const moves = new Tree("", depth)
const recurse = move => {
if (solutions.length > 0) {
return
}
const hints = getHints(shadow)
if (hints.length == 0) {
return
@ -227,57 +239,96 @@
<style>
.div0 {
grid-area: 5 / 1 / 6 / 2;
grid-area: 1 / 7 / 2 / 8;
}
.div1 {
grid-area: 5 / 3 / 6 / 4;
grid-area: 2 / 6 / 3 / 7;
}
.div2 {
grid-area: 5 / 5 / 6 / 6;
grid-area: 2 / 8 / 3 / 9;
}
.div3 {
grid-area: 5 / 7 / 6 / 8;
grid-area: 3 / 5 / 4 / 6;
}
.div4 {
grid-area: 5 / 9 / 6 / 10;
grid-area: 3 / 7 / 4 / 8;
}
.div5 {
grid-area: 4 / 8 / 5 / 9;
grid-area: 3 / 9 / 4 / 10;
}
.div6 {
grid-area: 4 / 6 / 5 / 7;
grid-area: 4 / 4 / 5 / 5;
}
.div7 {
grid-area: 4 / 4 / 5 / 5;
grid-area: 4 / 6 / 5 / 7;
}
.div8 {
grid-area: 4 / 2 / 5 / 3;
grid-area: 4 / 8 / 5 / 9;
}
.div9 {
grid-area: 3 / 3 / 4 / 4;
grid-area: 4 / 10 / 5 / 11;
}
.div10 {
grid-area: 3 / 5 / 4 / 6;
grid-area: 5 / 3 / 6 / 4;
}
.div11 {
grid-area: 3 / 7 / 4 / 8;
grid-area: 5 / 5 / 6 / 6;
}
.div12 {
grid-area: 2 / 6 / 3 / 7;
grid-area: 5 / 7 / 6 / 8;
}
.div13 {
grid-area: 2 / 4 / 3 / 5;
grid-area: 5 / 9 / 6 / 10;
}
.div14 {
grid-area: 1 / 5 / 2 / 6;
grid-area: 5 / 11 / 6 / 12;
}
.div15 {
grid-area: 6 / 2 / 7 / 3;
}
.div16 {
grid-area: 6 / 4 / 7 / 5;
}
.div17 {
grid-area: 6 / 6 / 7 / 7;
}
.div18 {
grid-area: 6 / 8 / 7 / 9;
}
.div19 {
grid-area: 6 / 10 / 7 / 11;
}
.div20 {
grid-area: 6 / 12 / 7 / 13;
}
.div21 {
grid-area: 7 / 1 / 8 / 2;
}
.div22 {
grid-area: 7 / 3 / 8 / 4;
}
.div23 {
grid-area: 7 / 5 / 8 / 6;
}
.div24 {
grid-area: 7 / 7 / 8 / 8;
}
.div25 {
grid-area: 7 / 9 / 8 / 10;
}
.div26 {
grid-area: 7 / 11 / 8 / 12;
}
.div27 {
grid-area: 7 / 13 / 8 / 14;
}
.triangle {
width: 600px;
height: 520px;
display: grid;
grid-template-columns: repeat(9, 1fr);
grid-template-rows: repeat(5, 1fr);
grid-template-columns: repeat(13, 1fr);
grid-template-rows: repeat(7, 1fr);
grid-column-gap: 0px;
grid-row-gap: 0px;
}

Loading…
Cancel
Save