Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import * as fs from 'fs';
- import * as readline from 'readline';
- import { performance } from 'perf_hooks';
- function swap(array: number[], from: number, to: number): void {
- [array[from], array[to]] = [array[to], array[from]];
- }
- function rearrangeSequence(sortingPairs: number[][], sequence: number[], iterations: number = 0, maxIterations = 100): number {
- if (iterations > maxIterations) {
- console.error('Max iterations reached');
- return 0;
- }
- let swapped = false;
- for (let i = 0; i < sortingPairs.length; i++) {
- const [start, end] = sortingPairs[i];
- const startPos = sequence.indexOf(start);
- const endPos = sequence.indexOf(end);
- if (startPos > endPos) {
- swap(sequence, startPos, endPos);
- swapped = true;
- }
- }
- if (swapped) {
- iterations++;
- return rearrangeSequence(sortingPairs, sequence, iterations, maxIterations);
- }
- return iterations;
- }
- const rl = readline.createInterface({
- input: fs.createReadStream(__dirname + '/day5a_input.txt')
- });
- const sortingPairs: number[][] = [];
- const sequences: number[][] = [];
- rl.on('line', (line) => {
- if (line.indexOf('|') !== -1) {
- sortingPairs.push(line.split('|').map((pair) => +pair.trim()));
- } else if (line.trim() !== '') {
- sequences.push(line.split(',').map((order) => +order.trim()));
- }
- });
- rl.on('close', () => {
- let day1Answer = 0;
- let day2Answer = 0;
- let totalIterations = 0;
- let maxIterations = 0;
- const startTime = performance.now()
- sequences.forEach((sequence) => {
- // Get sorting pairs where both numbers exist in the sequence
- const matchingSortingPairs = sortingPairs.filter((pair) => sequence.indexOf(pair[0]) >= 0 && sequence.indexOf(pair[1]) >= 0);
- let iterations = rearrangeSequence(matchingSortingPairs, sequence, 0);
- if (iterations > 0) {
- day2Answer += sequence[Math.floor(sequence.length / 2)];
- } else {
- day1Answer += sequence[Math.floor(sequence.length / 2)];
- }
- totalIterations += iterations;
- maxIterations = Math.max(maxIterations, iterations);
- });
- console.log(day1Answer);
- console.log(day2Answer);
- console.log(maxIterations);
- const endTime = performance.now();
- console.log(`the solution took ${endTime - startTime} milliseconds`)
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement