added docs
This commit is contained in:
1 parent
279d501098
commit
66fa2c4424
2 files changed
+309
-4
No files matched your search
@@ -0,0 +1,100 @@
|
||||
const mock_input: string = `...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....`;
|
||||
|
||||
|
||||
function replaceGalaxiesWithNumber(input: string): [string, number]{
|
||||
let i = 0;
|
||||
while(input.indexOf("#") !== -1){
|
||||
input = input.replace("#", i);
|
||||
i ++;
|
||||
}
|
||||
return [input, i];
|
||||
}
|
||||
|
||||
function findEmptyRows(input: string): number[]{
|
||||
let ret = [];
|
||||
let i = 0;
|
||||
for(const row of input.split("\n")){
|
||||
if(row.match(/\d/g) === null ){
|
||||
ret.push(i);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function extractCol(input: string, idx: number): string{
|
||||
let ret = "";
|
||||
const rowLength = input.indexOf("\n") + 1;
|
||||
for(let i = idx; i < input.length; i += rowLength){
|
||||
ret += input.charAt(i)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function findEmptyColumns(input: string): number[]{
|
||||
const numberOfCols = input.indexOf("\n");
|
||||
const ret: number[] = [];
|
||||
for(let i = 0; i < numberOfCols - 1; i ++){
|
||||
if(extractCol(input, i).match(/\d/g) === null){
|
||||
ret.push(i);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
function getGalaxyCoordinates(universe: string, galaxy: number): [number, number]{
|
||||
const dist = universe.indexOf(galaxy.toString());
|
||||
const numberOfCols = universe.indexOf("\n") + 1;
|
||||
return [dist % numberOfCols, Math.floor(dist / numberOfCols)]
|
||||
}
|
||||
|
||||
function isBetween(x: number, minOrMax1: number, minOrMax2: number): boolean{
|
||||
if(minOrMax1 == minOrMax2){
|
||||
return false;
|
||||
}
|
||||
if(minOrMax1 > minOrMax2){
|
||||
return isBetween(x, minOrMax2, minOrMax1);
|
||||
}
|
||||
const min_ = minOrMax1;
|
||||
const max_ = minOrMax2;
|
||||
return min_ < x && x < max_;
|
||||
}
|
||||
|
||||
function distanceBetweenGalaxies(universe: string,
|
||||
galaxy1: number,
|
||||
galaxy2: number,
|
||||
expandedRows: number[],
|
||||
expandedColumns: number[]){
|
||||
const [g1x, g1y] = getGalaxyCoordinates(universe, galaxy1);
|
||||
const [g2x, g2y] = getGalaxyCoordinates(universe, galaxy2);
|
||||
expandedRows.filter(x => isBetween(x, g1x, g2x)).length
|
||||
return Math.abs(g1x - g2x)
|
||||
+ Math.abs(g1y - g2y)
|
||||
+ expandedRows.filter(x => isBetween(x, g1x, g2x)).length
|
||||
+ expandedColumns.filter(x => isBetween(x, g1y, g2y)).length
|
||||
}
|
||||
|
||||
const [universe, nbrGalaxies] = replaceGalaxiesWithNumber(mock_input)
|
||||
console.log(universe)
|
||||
console.log("ho lala")
|
||||
|
||||
const expandedRows = findEmptyRows(universe);
|
||||
const expandedColumns = findEmptyColumns(universe);
|
||||
console.log(expandedColumns)
|
||||
console.log(expandedRows)
|
||||
// console.log(distanceBetweenGalaxies(universe, 4, 8, expandedRows, expandedColumns));
|
||||
// console.log(distanceBetweenGalaxies(universe, 0, 6, expandedRows, expandedColumns));
|
||||
console.log(distanceBetweenGalaxies(universe, 2, 5, expandedRows, expandedColumns));
|
||||
// console.log(distanceBetweenGalaxies(universe, 7, 8, expandedRows, expandedColumns));
|
||||
|
||||
|
||||
console.log("fenni")
|
||||
Reference in new issue
Block a user