Skip to content

Instantly share code, notes, and snippets.

@camarin24
Created May 6, 2018 01:10
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 camarin24/90192e6ba2896c9f04c9253d9ec9e3b0 to your computer and use it in GitHub Desktop.
Save camarin24/90192e6ba2896c9f04c9253d9ec9e3b0 to your computer and use it in GitHub Desktop.
Euler Circuit
const matriz = [
[
{ value: 0, used: false, position: 1 },
{ value: 1, used: false, position: 2 },
{ value: 0, used: false, position: 3 },
{ value: 1, used: false, position: 4 },
{ value: 1, used: false, position: 5 }
],
[
{ value: 0, used: false, position: 1 },
{ value: 0, used: false, position: 2 },
{ value: 1, used: false, position: 3 },
{ value: 0, used: false, position: 4 },
{ value: 0, used: false, position: 5 }
],
[
{ value: 0, used: false, position: 1 },
{ value: 0, used: false, position: 2 },
{ value: 0, used: false, position: 3 },
{ value: 1, used: false, position: 4 },
{ value: 0, used: false, position: 5 }
],
[
{ value: 1, used: false, position: 1 },
{ value: 0, used: false, position: 2 },
{ value: 0, used: false, position: 3 },
{ value: 0, used: false, position: 4 },
{ value: 1, used: false, position: 5 }
],
[
{ value: 1, used: false, position: 1 },
{ value: 0, used: false, position: 2 },
{ value: 0, used: false, position: 3 },
{ value: 1, used: false, position: 4 },
{ value: 0, used: false, position: 5 }
]
];
const calculate = () => {
const steps = [];
const init = matriz[0].find(m => !m.used && m.value == 1);
steps.push(1);
init.used = true;
nextStep(init, steps);
console.log(steps.join('-'));
};
const nextStep = (step, steps) => {
const init = matriz[step.position - 1].filter(m => !m.used && m.value == 1);
let allAsigned = true;
for (let item of init) {
if (steps.indexOf(item.position) == -1) {
allAsigned = false;
steps.push(step.position);
item.used = true;
nextStep(item, steps);
}
}
if (allAsigned) {
for (let item of init) {
if (!item.used) {
steps.push(step.position);
item.used = true;
nextStep(item, steps);
}
}
}
if (init.length == 0) {
steps.push(step.position);
}
};
calculate();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment