enable triangle scaling

experiments
Peter Babič 3 years ago
parent ea5c775c91
commit 558e06ffc7
  1. 175
      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)
if (i > 0) {
adjcs.addEdge(i, i - 1)
}
circles[i] = C_POLE
}
circles[0] = C_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)
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)
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)
}
}
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)
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