diff --git a/day-16/Sample.mjs b/day-16/Sample.mjs new file mode 100644 index 0000000..48ebe28 --- /dev/null +++ b/day-16/Sample.mjs @@ -0,0 +1,22 @@ +import operations from './operations'; + +const DEFINITION_REGEXP = /\d+/g; + +class Sample { + constructor(definition) { + const numbers = definition.match(DEFINITION_REGEXP).map(Number); + this.before = numbers.slice(0, 4); + [this.opcode, this.inputA, this.inputB, this.outputC] = numbers.slice(4, 8); + this.after = numbers.slice(8); + } + + probe() { + return operations.filter((operation) => { + const data = [].concat(this.before); + operation(data, this.inputA, this.inputB, this.outputC); + return data.toString() === this.after.toString(); + }); + } +} + +export default Sample; diff --git a/day-16/index.mjs b/day-16/index.mjs new file mode 100755 index 0000000..b0d8133 --- /dev/null +++ b/day-16/index.mjs @@ -0,0 +1,42 @@ +#!/usr/bin/env node --experimental-modules --no-warnings + +import Sample from './Sample'; +import input from './input'; +import operations from './operations'; +import { day } from '../utils'; + +const [sampling, program] = input.split('\n\n\n\n'); +const samples = sampling.split('\n\n').map(definition => new Sample(definition)); + +day(16).part(1).solution(() => ( + samples.filter(sample => ( + sample.probe().length >= 3 + )).length +)); + +day(16).part(2).solution(() => { + const remaining = new Set(samples); + while (remaining.size) { + for (const sample of remaining) { + const candidates = sample.probe().filter(operation => ( + operation.opcode === undefined + )); + if (candidates.length === 1) { + const [operation] = candidates; + operation.opcode = sample.opcode; + } + if (candidates.length <= 1) { + remaining.delete(sample); + } + } + } + + const data = [0, 0, 0, 0]; + const lines = program.split('\n'); + for (const line of lines) { + const [opcode, inputA, inputB, outputC] = line.match(/\d+/g).map(Number); + const operation = operations.find(candidate => candidate.opcode === opcode); + operation(data, inputA, inputB, outputC); + } + return data[0]; +}); diff --git a/day-16/input/example.mjs b/day-16/input/example.mjs new file mode 100644 index 0000000..25293df --- /dev/null +++ b/day-16/input/example.mjs @@ -0,0 +1,6 @@ +export default `Before: [3, 2, 1, 1] +9 2 1 2 +After: [3, 2, 2, 1] + + +9 1 1 1`; diff --git a/day-16/input/index.mjs b/day-16/input/index.mjs new file mode 100644 index 0000000..399abd4 --- /dev/null +++ b/day-16/input/index.mjs @@ -0,0 +1,4041 @@ +export default `Before: [3, 1, 2, 3] +5 3 1 1 +After: [3, 0, 2, 3] + +Before: [1, 1, 2, 2] +9 0 2 0 +After: [0, 1, 2, 2] + +Before: [0, 1, 3, 3] +12 1 0 3 +After: [0, 1, 3, 1] + +Before: [1, 0, 2, 3] +9 0 2 2 +After: [1, 0, 0, 3] + +Before: [3, 0, 2, 2] +8 0 3 0 +After: [1, 0, 2, 2] + +Before: [3, 1, 0, 0] +11 2 0 2 +After: [3, 1, 1, 0] + +Before: [0, 1, 2, 2] +7 0 0 3 +After: [0, 1, 2, 0] + +Before: [0, 1, 0, 0] +15 1 3 3 +After: [0, 1, 0, 1] + +Before: [3, 0, 0, 2] +8 0 3 1 +After: [3, 1, 0, 2] + +Before: [0, 2, 2, 1] +3 3 2 0 +After: [1, 2, 2, 1] + +Before: [1, 1, 3, 0] +15 1 3 2 +After: [1, 1, 1, 0] + +Before: [3, 1, 1, 2] +1 1 3 0 +After: [0, 1, 1, 2] + +Before: [2, 1, 3, 0] +15 1 3 1 +After: [2, 1, 3, 0] + +Before: [3, 0, 1, 3] +6 2 3 1 +After: [3, 0, 1, 3] + +Before: [2, 1, 1, 2] +1 1 3 1 +After: [2, 0, 1, 2] + +Before: [3, 2, 1, 3] +6 2 3 2 +After: [3, 2, 0, 3] + +Before: [2, 1, 2, 2] +1 1 3 1 +After: [2, 0, 2, 2] + +Before: [1, 2, 1, 3] +5 3 2 2 +After: [1, 2, 0, 3] + +Before: [3, 2, 2, 2] +10 0 2 1 +After: [3, 1, 2, 2] + +Before: [0, 1, 0, 0] +15 1 3 0 +After: [1, 1, 0, 0] + +Before: [0, 0, 2, 1] +5 0 0 2 +After: [0, 0, 1, 1] + +Before: [3, 1, 3, 2] +1 1 3 0 +After: [0, 1, 3, 2] + +Before: [2, 1, 3, 2] +4 3 2 0 +After: [2, 1, 3, 2] + +Before: [0, 2, 3, 3] +4 1 2 0 +After: [2, 2, 3, 3] + +Before: [0, 1, 0, 0] +12 1 0 3 +After: [0, 1, 0, 1] + +Before: [2, 1, 3, 3] +11 0 2 2 +After: [2, 1, 1, 3] + +Before: [0, 3, 2, 1] +3 3 2 2 +After: [0, 3, 1, 1] + +Before: [0, 1, 3, 3] +12 1 0 0 +After: [1, 1, 3, 3] + +Before: [0, 3, 0, 1] +7 0 0 1 +After: [0, 0, 0, 1] + +Before: [1, 0, 2, 1] +14 3 3 3 +After: [1, 0, 2, 0] + +Before: [2, 3, 3, 2] +4 0 2 1 +After: [2, 2, 3, 2] + +Before: [1, 2, 2, 2] +13 2 2 0 +After: [2, 2, 2, 2] + +Before: [3, 0, 3, 2] +4 3 2 3 +After: [3, 0, 3, 2] + +Before: [0, 1, 3, 2] +1 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 0, 1, 1] +2 3 1 0 +After: [1, 0, 1, 1] + +Before: [0, 1, 1, 3] +6 1 3 3 +After: [0, 1, 1, 0] + +Before: [0, 2, 3, 1] +5 2 3 0 +After: [0, 2, 3, 1] + +Before: [2, 3, 3, 1] +5 2 3 0 +After: [0, 3, 3, 1] + +Before: [2, 1, 2, 2] +13 2 2 0 +After: [2, 1, 2, 2] + +Before: [1, 2, 3, 1] +5 2 3 3 +After: [1, 2, 3, 0] + +Before: [1, 2, 0, 2] +14 3 3 0 +After: [0, 2, 0, 2] + +Before: [2, 1, 0, 2] +14 3 3 2 +After: [2, 1, 0, 2] + +Before: [2, 2, 3, 1] +11 0 2 3 +After: [2, 2, 3, 1] + +Before: [2, 3, 3, 2] +4 3 2 2 +After: [2, 3, 2, 2] + +Before: [2, 2, 1, 1] +14 3 3 3 +After: [2, 2, 1, 0] + +Before: [2, 1, 3, 2] +14 3 3 3 +After: [2, 1, 3, 0] + +Before: [2, 1, 0, 3] +10 0 1 3 +After: [2, 1, 0, 1] + +Before: [0, 1, 2, 1] +0 1 2 0 +After: [0, 1, 2, 1] + +Before: [3, 2, 0, 0] +11 2 0 2 +After: [3, 2, 1, 0] + +Before: [3, 1, 0, 1] +11 2 0 2 +After: [3, 1, 1, 1] + +Before: [1, 1, 3, 0] +15 1 3 3 +After: [1, 1, 3, 1] + +Before: [0, 0, 3, 2] +14 3 3 0 +After: [0, 0, 3, 2] + +Before: [2, 1, 3, 1] +10 0 1 3 +After: [2, 1, 3, 1] + +Before: [1, 1, 2, 3] +0 1 2 2 +After: [1, 1, 0, 3] + +Before: [0, 2, 2, 3] +13 3 3 2 +After: [0, 2, 3, 3] + +Before: [1, 1, 3, 3] +5 3 3 3 +After: [1, 1, 3, 1] + +Before: [1, 2, 3, 3] +4 1 2 1 +After: [1, 2, 3, 3] + +Before: [1, 1, 2, 3] +5 2 2 3 +After: [1, 1, 2, 1] + +Before: [2, 0, 3, 3] +11 0 2 2 +After: [2, 0, 1, 3] + +Before: [1, 0, 2, 3] +13 2 2 1 +After: [1, 2, 2, 3] + +Before: [0, 1, 2, 1] +7 0 0 1 +After: [0, 0, 2, 1] + +Before: [2, 0, 2, 3] +13 2 2 2 +After: [2, 0, 2, 3] + +Before: [3, 0, 1, 0] +2 2 1 0 +After: [1, 0, 1, 0] + +Before: [3, 3, 3, 3] +5 3 2 1 +After: [3, 1, 3, 3] + +Before: [0, 1, 2, 3] +12 1 0 2 +After: [0, 1, 1, 3] + +Before: [2, 0, 3, 1] +11 0 2 3 +After: [2, 0, 3, 1] + +Before: [2, 1, 2, 1] +3 3 2 1 +After: [2, 1, 2, 1] + +Before: [2, 1, 3, 0] +11 0 2 2 +After: [2, 1, 1, 0] + +Before: [0, 1, 2, 2] +1 1 3 0 +After: [0, 1, 2, 2] + +Before: [2, 0, 3, 3] +4 0 2 1 +After: [2, 2, 3, 3] + +Before: [3, 0, 1, 1] +2 3 1 3 +After: [3, 0, 1, 1] + +Before: [2, 2, 1, 2] +8 0 2 1 +After: [2, 1, 1, 2] + +Before: [3, 2, 3, 3] +4 1 2 0 +After: [2, 2, 3, 3] + +Before: [1, 1, 2, 3] +0 1 2 0 +After: [0, 1, 2, 3] + +Before: [2, 1, 1, 1] +8 0 2 1 +After: [2, 1, 1, 1] + +Before: [1, 2, 2, 3] +5 2 1 2 +After: [1, 2, 1, 3] + +Before: [2, 3, 1, 2] +8 0 2 3 +After: [2, 3, 1, 1] + +Before: [0, 1, 2, 1] +12 1 0 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 1, 3] +12 1 0 1 +After: [0, 1, 1, 3] + +Before: [2, 1, 3, 0] +15 1 3 0 +After: [1, 1, 3, 0] + +Before: [0, 1, 2, 2] +1 1 3 3 +After: [0, 1, 2, 0] + +Before: [3, 2, 2, 2] +8 0 3 1 +After: [3, 1, 2, 2] + +Before: [1, 2, 0, 3] +13 3 3 2 +After: [1, 2, 3, 3] + +Before: [0, 1, 0, 1] +12 1 0 3 +After: [0, 1, 0, 1] + +Before: [3, 2, 2, 3] +6 1 3 1 +After: [3, 0, 2, 3] + +Before: [1, 2, 3, 2] +4 3 2 2 +After: [1, 2, 2, 2] + +Before: [3, 2, 2, 3] +10 0 2 2 +After: [3, 2, 1, 3] + +Before: [2, 1, 2, 2] +0 1 2 2 +After: [2, 1, 0, 2] + +Before: [2, 3, 2, 3] +5 3 3 2 +After: [2, 3, 1, 3] + +Before: [1, 1, 2, 3] +6 2 3 3 +After: [1, 1, 2, 0] + +Before: [2, 1, 1, 3] +6 2 3 2 +After: [2, 1, 0, 3] + +Before: [3, 2, 3, 2] +4 1 2 1 +After: [3, 2, 3, 2] + +Before: [1, 0, 2, 2] +9 0 2 1 +After: [1, 0, 2, 2] + +Before: [0, 3, 3, 2] +5 0 0 1 +After: [0, 1, 3, 2] + +Before: [1, 1, 3, 3] +5 3 2 3 +After: [1, 1, 3, 1] + +Before: [3, 1, 0, 2] +1 1 3 0 +After: [0, 1, 0, 2] + +Before: [0, 1, 1, 0] +12 1 0 0 +After: [1, 1, 1, 0] + +Before: [3, 0, 3, 2] +8 0 3 2 +After: [3, 0, 1, 2] + +Before: [1, 0, 1, 1] +14 3 3 1 +After: [1, 0, 1, 1] + +Before: [3, 1, 1, 0] +15 1 3 3 +After: [3, 1, 1, 1] + +Before: [3, 0, 1, 0] +2 2 1 2 +After: [3, 0, 1, 0] + +Before: [3, 1, 0, 2] +8 0 3 2 +After: [3, 1, 1, 2] + +Before: [0, 1, 3, 0] +12 1 0 0 +After: [1, 1, 3, 0] + +Before: [2, 3, 3, 3] +4 0 2 3 +After: [2, 3, 3, 2] + +Before: [3, 2, 2, 2] +8 0 3 0 +After: [1, 2, 2, 2] + +Before: [3, 1, 3, 0] +15 1 3 0 +After: [1, 1, 3, 0] + +Before: [2, 1, 2, 2] +1 1 3 3 +After: [2, 1, 2, 0] + +Before: [0, 1, 2, 2] +1 1 3 2 +After: [0, 1, 0, 2] + +Before: [2, 2, 1, 3] +8 0 2 0 +After: [1, 2, 1, 3] + +Before: [1, 1, 2, 2] +0 1 2 0 +After: [0, 1, 2, 2] + +Before: [0, 1, 3, 2] +4 3 2 2 +After: [0, 1, 2, 2] + +Before: [2, 1, 2, 3] +6 1 3 0 +After: [0, 1, 2, 3] + +Before: [2, 1, 2, 3] +10 0 1 2 +After: [2, 1, 1, 3] + +Before: [1, 1, 2, 2] +9 0 2 2 +After: [1, 1, 0, 2] + +Before: [3, 1, 1, 3] +6 2 3 2 +After: [3, 1, 0, 3] + +Before: [1, 1, 2, 0] +9 0 2 0 +After: [0, 1, 2, 0] + +Before: [3, 1, 3, 1] +14 3 3 1 +After: [3, 0, 3, 1] + +Before: [1, 1, 0, 0] +15 1 3 3 +After: [1, 1, 0, 1] + +Before: [0, 0, 2, 1] +3 3 2 2 +After: [0, 0, 1, 1] + +Before: [2, 3, 3, 2] +4 0 2 3 +After: [2, 3, 3, 2] + +Before: [2, 2, 1, 3] +6 2 3 1 +After: [2, 0, 1, 3] + +Before: [2, 1, 2, 1] +3 3 2 2 +After: [2, 1, 1, 1] + +Before: [2, 2, 3, 2] +14 3 3 2 +After: [2, 2, 0, 2] + +Before: [1, 1, 2, 2] +0 1 2 2 +After: [1, 1, 0, 2] + +Before: [2, 1, 0, 3] +6 1 3 2 +After: [2, 1, 0, 3] + +Before: [3, 2, 2, 0] +13 2 2 3 +After: [3, 2, 2, 2] + +Before: [0, 1, 1, 0] +12 1 0 2 +After: [0, 1, 1, 0] + +Before: [2, 1, 0, 2] +10 0 1 2 +After: [2, 1, 1, 2] + +Before: [1, 0, 0, 2] +2 0 1 1 +After: [1, 1, 0, 2] + +Before: [0, 1, 2, 1] +3 3 2 0 +After: [1, 1, 2, 1] + +Before: [0, 1, 3, 0] +12 1 0 3 +After: [0, 1, 3, 1] + +Before: [0, 1, 2, 3] +13 3 3 1 +After: [0, 3, 2, 3] + +Before: [0, 1, 2, 1] +12 1 0 0 +After: [1, 1, 2, 1] + +Before: [0, 1, 1, 1] +14 2 3 0 +After: [0, 1, 1, 1] + +Before: [0, 2, 2, 3] +6 2 3 1 +After: [0, 0, 2, 3] + +Before: [3, 1, 0, 0] +15 1 3 2 +After: [3, 1, 1, 0] + +Before: [1, 0, 3, 1] +2 0 1 0 +After: [1, 0, 3, 1] + +Before: [2, 1, 1, 2] +8 0 2 0 +After: [1, 1, 1, 2] + +Before: [2, 1, 2, 2] +10 0 1 2 +After: [2, 1, 1, 2] + +Before: [2, 2, 2, 1] +3 3 2 1 +After: [2, 1, 2, 1] + +Before: [2, 1, 3, 2] +11 0 2 1 +After: [2, 1, 3, 2] + +Before: [3, 2, 3, 2] +8 0 3 3 +After: [3, 2, 3, 1] + +Before: [1, 2, 0, 3] +6 1 3 3 +After: [1, 2, 0, 0] + +Before: [2, 1, 0, 2] +1 1 3 1 +After: [2, 0, 0, 2] + +Before: [3, 3, 1, 3] +13 3 3 3 +After: [3, 3, 1, 3] + +Before: [1, 2, 2, 1] +3 3 2 3 +After: [1, 2, 2, 1] + +Before: [2, 1, 3, 2] +1 1 3 1 +After: [2, 0, 3, 2] + +Before: [2, 1, 3, 2] +10 0 1 0 +After: [1, 1, 3, 2] + +Before: [1, 0, 2, 1] +3 3 2 2 +After: [1, 0, 1, 1] + +Before: [1, 1, 3, 2] +1 1 3 2 +After: [1, 1, 0, 2] + +Before: [2, 2, 3, 0] +11 0 2 1 +After: [2, 1, 3, 0] + +Before: [3, 0, 0, 2] +14 3 3 1 +After: [3, 0, 0, 2] + +Before: [3, 1, 3, 0] +15 1 3 2 +After: [3, 1, 1, 0] + +Before: [2, 1, 2, 1] +3 3 2 0 +After: [1, 1, 2, 1] + +Before: [0, 1, 3, 2] +12 1 0 2 +After: [0, 1, 1, 2] + +Before: [3, 3, 0, 3] +11 2 0 3 +After: [3, 3, 0, 1] + +Before: [2, 0, 3, 1] +2 3 1 2 +After: [2, 0, 1, 1] + +Before: [1, 3, 0, 2] +14 3 3 0 +After: [0, 3, 0, 2] + +Before: [3, 0, 0, 2] +8 0 3 3 +After: [3, 0, 0, 1] + +Before: [3, 0, 2, 1] +3 3 2 2 +After: [3, 0, 1, 1] + +Before: [3, 1, 0, 3] +11 2 0 2 +After: [3, 1, 1, 3] + +Before: [0, 1, 0, 3] +12 1 0 1 +After: [0, 1, 0, 3] + +Before: [2, 2, 2, 1] +3 3 2 0 +After: [1, 2, 2, 1] + +Before: [1, 0, 3, 1] +2 0 1 3 +After: [1, 0, 3, 1] + +Before: [1, 1, 2, 3] +9 0 2 0 +After: [0, 1, 2, 3] + +Before: [1, 3, 2, 3] +6 2 3 2 +After: [1, 3, 0, 3] + +Before: [0, 1, 3, 0] +7 0 0 3 +After: [0, 1, 3, 0] + +Before: [1, 1, 2, 0] +15 1 3 1 +After: [1, 1, 2, 0] + +Before: [3, 1, 3, 2] +1 1 3 1 +After: [3, 0, 3, 2] + +Before: [1, 3, 2, 1] +9 0 2 3 +After: [1, 3, 2, 0] + +Before: [0, 0, 2, 1] +7 0 0 1 +After: [0, 0, 2, 1] + +Before: [2, 1, 1, 0] +15 1 3 2 +After: [2, 1, 1, 0] + +Before: [2, 3, 2, 0] +13 2 2 0 +After: [2, 3, 2, 0] + +Before: [1, 1, 2, 1] +9 0 2 1 +After: [1, 0, 2, 1] + +Before: [2, 1, 2, 0] +15 1 3 1 +After: [2, 1, 2, 0] + +Before: [1, 0, 2, 1] +9 0 2 2 +After: [1, 0, 0, 1] + +Before: [1, 1, 0, 2] +1 1 3 2 +After: [1, 1, 0, 2] + +Before: [3, 0, 0, 1] +2 3 1 0 +After: [1, 0, 0, 1] + +Before: [1, 0, 0, 3] +2 0 1 3 +After: [1, 0, 0, 1] + +Before: [3, 1, 2, 0] +0 1 2 1 +After: [3, 0, 2, 0] + +Before: [1, 1, 2, 0] +0 1 2 1 +After: [1, 0, 2, 0] + +Before: [2, 1, 2, 0] +0 1 2 3 +After: [2, 1, 2, 0] + +Before: [1, 0, 3, 1] +14 3 3 0 +After: [0, 0, 3, 1] + +Before: [0, 1, 3, 2] +12 1 0 0 +After: [1, 1, 3, 2] + +Before: [1, 3, 2, 3] +9 0 2 2 +After: [1, 3, 0, 3] + +Before: [0, 2, 2, 1] +3 3 2 3 +After: [0, 2, 2, 1] + +Before: [0, 2, 2, 0] +7 0 0 3 +After: [0, 2, 2, 0] + +Before: [2, 0, 0, 1] +14 3 3 0 +After: [0, 0, 0, 1] + +Before: [2, 3, 3, 3] +13 3 3 3 +After: [2, 3, 3, 3] + +Before: [3, 2, 3, 3] +4 1 2 1 +After: [3, 2, 3, 3] + +Before: [3, 3, 2, 2] +8 0 3 0 +After: [1, 3, 2, 2] + +Before: [2, 2, 3, 0] +4 1 2 2 +After: [2, 2, 2, 0] + +Before: [0, 0, 1, 3] +7 0 0 3 +After: [0, 0, 1, 0] + +Before: [2, 0, 2, 1] +13 2 2 2 +After: [2, 0, 2, 1] + +Before: [2, 2, 3, 1] +5 2 3 1 +After: [2, 0, 3, 1] + +Before: [2, 0, 1, 1] +2 3 1 0 +After: [1, 0, 1, 1] + +Before: [0, 0, 2, 3] +6 2 3 0 +After: [0, 0, 2, 3] + +Before: [2, 1, 3, 3] +13 3 3 2 +After: [2, 1, 3, 3] + +Before: [1, 0, 3, 0] +2 0 1 2 +After: [1, 0, 1, 0] + +Before: [0, 1, 3, 2] +12 1 0 3 +After: [0, 1, 3, 1] + +Before: [0, 2, 3, 1] +7 0 0 1 +After: [0, 0, 3, 1] + +Before: [1, 0, 1, 3] +13 3 3 3 +After: [1, 0, 1, 3] + +Before: [3, 3, 0, 2] +11 2 0 3 +After: [3, 3, 0, 1] + +Before: [3, 0, 2, 1] +3 3 2 1 +After: [3, 1, 2, 1] + +Before: [1, 0, 2, 0] +9 0 2 0 +After: [0, 0, 2, 0] + +Before: [0, 3, 2, 2] +13 2 2 0 +After: [2, 3, 2, 2] + +Before: [0, 0, 0, 1] +2 3 1 3 +After: [0, 0, 0, 1] + +Before: [2, 1, 2, 1] +0 1 2 3 +After: [2, 1, 2, 0] + +Before: [2, 3, 1, 3] +8 0 2 1 +After: [2, 1, 1, 3] + +Before: [3, 3, 0, 0] +11 2 0 1 +After: [3, 1, 0, 0] + +Before: [1, 3, 3, 3] +13 3 3 0 +After: [3, 3, 3, 3] + +Before: [0, 1, 0, 1] +12 1 0 0 +After: [1, 1, 0, 1] + +Before: [3, 2, 0, 1] +14 3 3 0 +After: [0, 2, 0, 1] + +Before: [0, 1, 0, 0] +7 0 0 0 +After: [0, 1, 0, 0] + +Before: [2, 1, 2, 1] +0 1 2 1 +After: [2, 0, 2, 1] + +Before: [3, 2, 1, 1] +14 3 3 3 +After: [3, 2, 1, 0] + +Before: [3, 1, 0, 0] +11 2 0 1 +After: [3, 1, 0, 0] + +Before: [2, 1, 3, 2] +1 1 3 2 +After: [2, 1, 0, 2] + +Before: [0, 2, 2, 3] +6 2 3 0 +After: [0, 2, 2, 3] + +Before: [1, 0, 2, 0] +9 0 2 2 +After: [1, 0, 0, 0] + +Before: [0, 2, 1, 2] +7 0 0 2 +After: [0, 2, 0, 2] + +Before: [0, 0, 1, 3] +6 2 3 3 +After: [0, 0, 1, 0] + +Before: [3, 2, 3, 1] +4 1 2 2 +After: [3, 2, 2, 1] + +Before: [1, 0, 2, 1] +3 3 2 1 +After: [1, 1, 2, 1] + +Before: [2, 3, 2, 1] +3 3 2 3 +After: [2, 3, 2, 1] + +Before: [3, 1, 2, 0] +15 1 3 0 +After: [1, 1, 2, 0] + +Before: [0, 1, 2, 0] +12 1 0 0 +After: [1, 1, 2, 0] + +Before: [3, 3, 0, 0] +11 2 0 3 +After: [3, 3, 0, 1] + +Before: [2, 0, 1, 2] +8 0 2 3 +After: [2, 0, 1, 1] + +Before: [3, 1, 3, 3] +5 3 2 2 +After: [3, 1, 1, 3] + +Before: [1, 0, 2, 2] +14 3 3 1 +After: [1, 0, 2, 2] + +Before: [2, 1, 2, 3] +0 1 2 3 +After: [2, 1, 2, 0] + +Before: [3, 0, 2, 1] +10 0 2 1 +After: [3, 1, 2, 1] + +Before: [2, 1, 0, 2] +1 1 3 2 +After: [2, 1, 0, 2] + +Before: [0, 1, 1, 2] +12 1 0 3 +After: [0, 1, 1, 1] + +Before: [3, 1, 0, 2] +1 1 3 3 +After: [3, 1, 0, 0] + +Before: [0, 2, 3, 0] +4 1 2 2 +After: [0, 2, 2, 0] + +Before: [3, 1, 2, 3] +0 1 2 1 +After: [3, 0, 2, 3] + +Before: [0, 0, 2, 1] +3 3 2 3 +After: [0, 0, 2, 1] + +Before: [0, 1, 2, 1] +0 1 2 3 +After: [0, 1, 2, 0] + +Before: [2, 0, 1, 2] +14 3 3 1 +After: [2, 0, 1, 2] + +Before: [0, 0, 2, 0] +7 0 0 3 +After: [0, 0, 2, 0] + +Before: [3, 1, 3, 2] +1 1 3 2 +After: [3, 1, 0, 2] + +Before: [2, 1, 0, 0] +15 1 3 1 +After: [2, 1, 0, 0] + +Before: [2, 2, 2, 2] +13 2 2 0 +After: [2, 2, 2, 2] + +Before: [0, 2, 3, 3] +6 1 3 1 +After: [0, 0, 3, 3] + +Before: [3, 3, 2, 1] +3 3 2 3 +After: [3, 3, 2, 1] + +Before: [1, 0, 2, 2] +9 0 2 0 +After: [0, 0, 2, 2] + +Before: [0, 1, 2, 3] +0 1 2 0 +After: [0, 1, 2, 3] + +Before: [0, 1, 2, 0] +0 1 2 0 +After: [0, 1, 2, 0] + +Before: [0, 1, 2, 1] +3 3 2 3 +After: [0, 1, 2, 1] + +Before: [0, 1, 0, 3] +7 0 0 3 +After: [0, 1, 0, 0] + +Before: [2, 0, 1, 1] +8 0 2 2 +After: [2, 0, 1, 1] + +Before: [1, 2, 0, 3] +6 1 3 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 2, 2] +0 1 2 1 +After: [1, 0, 2, 2] + +Before: [2, 3, 1, 2] +14 3 3 1 +After: [2, 0, 1, 2] + +Before: [3, 2, 0, 3] +11 2 0 1 +After: [3, 1, 0, 3] + +Before: [1, 0, 2, 3] +9 0 2 0 +After: [0, 0, 2, 3] + +Before: [3, 2, 2, 0] +10 0 2 0 +After: [1, 2, 2, 0] + +Before: [3, 3, 3, 2] +8 0 3 3 +After: [3, 3, 3, 1] + +Before: [0, 1, 3, 2] +1 1 3 0 +After: [0, 1, 3, 2] + +Before: [0, 0, 0, 1] +14 3 3 3 +After: [0, 0, 0, 0] + +Before: [1, 0, 2, 3] +2 0 1 0 +After: [1, 0, 2, 3] + +Before: [2, 1, 3, 1] +14 3 3 3 +After: [2, 1, 3, 0] + +Before: [1, 3, 1, 2] +14 3 3 2 +After: [1, 3, 0, 2] + +Before: [2, 0, 2, 1] +3 3 2 3 +After: [2, 0, 2, 1] + +Before: [0, 1, 2, 3] +6 1 3 0 +After: [0, 1, 2, 3] + +Before: [2, 1, 3, 1] +11 0 2 2 +After: [2, 1, 1, 1] + +Before: [0, 1, 1, 0] +15 1 3 2 +After: [0, 1, 1, 0] + +Before: [1, 1, 2, 1] +9 0 2 2 +After: [1, 1, 0, 1] + +Before: [3, 1, 1, 3] +6 1 3 1 +After: [3, 0, 1, 3] + +Before: [0, 1, 3, 3] +7 0 0 3 +After: [0, 1, 3, 0] + +Before: [1, 0, 2, 1] +2 0 1 1 +After: [1, 1, 2, 1] + +Before: [2, 0, 1, 1] +8 0 2 0 +After: [1, 0, 1, 1] + +Before: [0, 2, 2, 2] +7 0 0 3 +After: [0, 2, 2, 0] + +Before: [3, 2, 3, 3] +6 1 3 3 +After: [3, 2, 3, 0] + +Before: [3, 3, 3, 2] +4 3 2 3 +After: [3, 3, 3, 2] + +Before: [3, 1, 1, 1] +14 3 3 3 +After: [3, 1, 1, 0] + +Before: [2, 0, 3, 1] +4 0 2 3 +After: [2, 0, 3, 2] + +Before: [2, 1, 2, 2] +1 1 3 2 +After: [2, 1, 0, 2] + +Before: [3, 1, 0, 1] +11 2 0 1 +After: [3, 1, 0, 1] + +Before: [2, 3, 2, 1] +3 3 2 2 +After: [2, 3, 1, 1] + +Before: [0, 0, 3, 1] +7 0 0 1 +After: [0, 0, 3, 1] + +Before: [2, 3, 1, 0] +8 0 2 1 +After: [2, 1, 1, 0] + +Before: [2, 0, 0, 1] +14 3 3 1 +After: [2, 0, 0, 1] + +Before: [0, 1, 3, 1] +12 1 0 2 +After: [0, 1, 1, 1] + +Before: [2, 0, 2, 1] +3 3 2 0 +After: [1, 0, 2, 1] + +Before: [2, 3, 3, 1] +11 0 2 0 +After: [1, 3, 3, 1] + +Before: [0, 0, 3, 1] +2 3 1 3 +After: [0, 0, 3, 1] + +Before: [1, 0, 1, 3] +2 0 1 3 +After: [1, 0, 1, 1] + +Before: [0, 2, 2, 2] +14 3 3 2 +After: [0, 2, 0, 2] + +Before: [3, 3, 0, 1] +11 2 0 1 +After: [3, 1, 0, 1] + +Before: [3, 1, 3, 3] +6 1 3 3 +After: [3, 1, 3, 0] + +Before: [1, 2, 3, 2] +4 1 2 3 +After: [1, 2, 3, 2] + +Before: [0, 1, 0, 3] +6 1 3 0 +After: [0, 1, 0, 3] + +Before: [2, 0, 2, 1] +2 3 1 1 +After: [2, 1, 2, 1] + +Before: [0, 2, 0, 3] +13 3 3 0 +After: [3, 2, 0, 3] + +Before: [1, 1, 1, 2] +1 1 3 3 +After: [1, 1, 1, 0] + +Before: [1, 3, 3, 3] +13 3 3 2 +After: [1, 3, 3, 3] + +Before: [0, 1, 3, 0] +12 1 0 2 +After: [0, 1, 1, 0] + +Before: [3, 1, 2, 0] +15 1 3 1 +After: [3, 1, 2, 0] + +Before: [2, 2, 2, 1] +3 3 2 2 +After: [2, 2, 1, 1] + +Before: [2, 2, 1, 2] +8 0 2 0 +After: [1, 2, 1, 2] + +Before: [3, 1, 2, 3] +0 1 2 2 +After: [3, 1, 0, 3] + +Before: [0, 1, 1, 2] +14 3 3 1 +After: [0, 0, 1, 2] + +Before: [0, 1, 3, 3] +5 3 2 0 +After: [1, 1, 3, 3] + +Before: [3, 1, 2, 2] +8 0 3 0 +After: [1, 1, 2, 2] + +Before: [2, 1, 1, 3] +13 3 3 1 +After: [2, 3, 1, 3] + +Before: [0, 2, 1, 2] +7 0 0 0 +After: [0, 2, 1, 2] + +Before: [0, 1, 1, 0] +15 1 3 0 +After: [1, 1, 1, 0] + +Before: [3, 1, 2, 2] +1 1 3 3 +After: [3, 1, 2, 0] + +Before: [0, 0, 2, 3] +13 3 3 1 +After: [0, 3, 2, 3] + +Before: [1, 0, 0, 3] +5 3 3 3 +After: [1, 0, 0, 1] + +Before: [2, 0, 1, 1] +2 2 1 3 +After: [2, 0, 1, 1] + +Before: [3, 3, 1, 2] +14 3 3 2 +After: [3, 3, 0, 2] + +Before: [0, 1, 0, 2] +12 1 0 3 +After: [0, 1, 0, 1] + +Before: [1, 2, 3, 1] +4 1 2 2 +After: [1, 2, 2, 1] + +Before: [3, 0, 3, 2] +8 0 3 1 +After: [3, 1, 3, 2] + +Before: [3, 1, 1, 1] +14 2 3 2 +After: [3, 1, 0, 1] + +Before: [0, 2, 2, 0] +13 2 2 0 +After: [2, 2, 2, 0] + +Before: [0, 1, 3, 2] +12 1 0 1 +After: [0, 1, 3, 2] + +Before: [3, 1, 2, 1] +10 0 2 3 +After: [3, 1, 2, 1] + +Before: [3, 0, 0, 2] +11 2 0 3 +After: [3, 0, 0, 1] + +Before: [1, 2, 2, 2] +9 0 2 2 +After: [1, 2, 0, 2] + +Before: [2, 0, 0, 1] +2 3 1 2 +After: [2, 0, 1, 1] + +Before: [1, 0, 0, 1] +14 3 3 1 +After: [1, 0, 0, 1] + +Before: [3, 3, 1, 2] +8 0 3 2 +After: [3, 3, 1, 2] + +Before: [0, 1, 1, 0] +12 1 0 1 +After: [0, 1, 1, 0] + +Before: [0, 2, 1, 1] +7 0 0 1 +After: [0, 0, 1, 1] + +Before: [0, 1, 2, 0] +12 1 0 3 +After: [0, 1, 2, 1] + +Before: [2, 1, 2, 1] +13 2 2 1 +After: [2, 2, 2, 1] + +Before: [1, 1, 1, 3] +6 2 3 3 +After: [1, 1, 1, 0] + +Before: [1, 1, 2, 0] +0 1 2 0 +After: [0, 1, 2, 0] + +Before: [2, 1, 1, 2] +10 0 1 0 +After: [1, 1, 1, 2] + +Before: [3, 2, 2, 1] +3 3 2 3 +After: [3, 2, 2, 1] + +Before: [3, 0, 3, 2] +4 3 2 1 +After: [3, 2, 3, 2] + +Before: [1, 0, 0, 1] +2 3 1 3 +After: [1, 0, 0, 1] + +Before: [2, 3, 2, 2] +13 2 2 0 +After: [2, 3, 2, 2] + +Before: [2, 1, 0, 0] +10 0 1 2 +After: [2, 1, 1, 0] + +Before: [2, 0, 3, 2] +4 0 2 3 +After: [2, 0, 3, 2] + +Before: [0, 2, 3, 2] +7 0 0 1 +After: [0, 0, 3, 2] + +Before: [0, 3, 2, 3] +7 0 0 2 +After: [0, 3, 0, 3] + +Before: [3, 2, 2, 0] +10 0 2 2 +After: [3, 2, 1, 0] + +Before: [3, 0, 2, 1] +5 2 2 1 +After: [3, 1, 2, 1] + +Before: [2, 0, 2, 1] +3 3 2 2 +After: [2, 0, 1, 1] + +Before: [1, 2, 2, 3] +9 0 2 2 +After: [1, 2, 0, 3] + +Before: [0, 3, 2, 1] +3 3 2 0 +After: [1, 3, 2, 1] + +Before: [0, 3, 1, 3] +13 3 3 0 +After: [3, 3, 1, 3] + +Before: [0, 1, 2, 3] +0 1 2 2 +After: [0, 1, 0, 3] + +Before: [2, 0, 1, 3] +2 2 1 0 +After: [1, 0, 1, 3] + +Before: [1, 1, 2, 2] +1 1 3 0 +After: [0, 1, 2, 2] + +Before: [2, 1, 2, 3] +10 0 1 3 +After: [2, 1, 2, 1] + +Before: [0, 1, 2, 3] +6 1 3 2 +After: [0, 1, 0, 3] + +Before: [3, 1, 3, 2] +4 3 2 3 +After: [3, 1, 3, 2] + +Before: [3, 1, 0, 2] +11 2 0 3 +After: [3, 1, 0, 1] + +Before: [2, 0, 3, 1] +11 0 2 2 +After: [2, 0, 1, 1] + +Before: [2, 3, 3, 3] +4 0 2 2 +After: [2, 3, 2, 3] + +Before: [0, 1, 2, 2] +1 1 3 1 +After: [0, 0, 2, 2] + +Before: [0, 1, 1, 2] +1 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 3, 2, 0] +9 0 2 2 +After: [1, 3, 0, 0] + +Before: [3, 3, 1, 3] +13 3 3 1 +After: [3, 3, 1, 3] + +Before: [1, 1, 3, 3] +5 3 3 2 +After: [1, 1, 1, 3] + +Before: [0, 0, 0, 2] +7 0 0 0 +After: [0, 0, 0, 2] + +Before: [2, 1, 1, 2] +10 0 1 1 +After: [2, 1, 1, 2] + +Before: [3, 0, 0, 1] +2 3 1 1 +After: [3, 1, 0, 1] + +Before: [0, 1, 2, 2] +0 1 2 1 +After: [0, 0, 2, 2] + +Before: [1, 1, 2, 2] +0 1 2 3 +After: [1, 1, 2, 0] + +Before: [0, 1, 1, 3] +12 1 0 0 +After: [1, 1, 1, 3] + +Before: [1, 2, 2, 1] +3 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 1, 2, 0] +10 0 1 2 +After: [2, 1, 1, 0] + +Before: [0, 1, 2, 3] +0 1 2 3 +After: [0, 1, 2, 0] + +Before: [1, 2, 1, 3] +6 2 3 0 +After: [0, 2, 1, 3] + +Before: [3, 1, 2, 2] +1 1 3 1 +After: [3, 0, 2, 2] + +Before: [1, 2, 2, 2] +5 2 1 0 +After: [1, 2, 2, 2] + +Before: [2, 1, 2, 1] +3 3 2 3 +After: [2, 1, 2, 1] + +Before: [3, 1, 0, 0] +15 1 3 3 +After: [3, 1, 0, 1] + +Before: [3, 3, 2, 0] +10 0 2 3 +After: [3, 3, 2, 1] + +Before: [1, 0, 3, 1] +2 3 1 0 +After: [1, 0, 3, 1] + +Before: [1, 2, 1, 3] +6 1 3 3 +After: [1, 2, 1, 0] + +Before: [3, 1, 0, 2] +11 2 0 1 +After: [3, 1, 0, 2] + +Before: [0, 1, 0, 2] +1 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 0, 1, 2] +14 3 3 2 +After: [1, 0, 0, 2] + +Before: [2, 1, 1, 1] +10 0 1 0 +After: [1, 1, 1, 1] + +Before: [1, 3, 1, 3] +6 2 3 0 +After: [0, 3, 1, 3] + +Before: [1, 1, 2, 1] +9 0 2 0 +After: [0, 1, 2, 1] + +Before: [1, 2, 3, 3] +6 1 3 3 +After: [1, 2, 3, 0] + +Before: [3, 1, 2, 2] +0 1 2 3 +After: [3, 1, 2, 0] + +Before: [1, 0, 2, 0] +2 0 1 3 +After: [1, 0, 2, 1] + +Before: [1, 1, 2, 2] +9 0 2 3 +After: [1, 1, 2, 0] + +Before: [2, 0, 2, 3] +6 2 3 0 +After: [0, 0, 2, 3] + +Before: [1, 3, 1, 2] +14 3 3 1 +After: [1, 0, 1, 2] + +Before: [0, 2, 1, 3] +6 1 3 1 +After: [0, 0, 1, 3] + +Before: [1, 1, 1, 2] +1 1 3 1 +After: [1, 0, 1, 2] + +Before: [3, 1, 2, 1] +0 1 2 1 +After: [3, 0, 2, 1] + +Before: [2, 1, 1, 3] +6 2 3 3 +After: [2, 1, 1, 0] + +Before: [1, 1, 2, 3] +0 1 2 1 +After: [1, 0, 2, 3] + +Before: [0, 1, 3, 1] +12 1 0 1 +After: [0, 1, 3, 1] + +Before: [3, 3, 2, 2] +14 3 3 1 +After: [3, 0, 2, 2] + +Before: [0, 2, 3, 0] +7 0 0 0 +After: [0, 2, 3, 0] + +Before: [0, 1, 0, 3] +6 1 3 3 +After: [0, 1, 0, 0] + +Before: [1, 1, 2, 3] +9 0 2 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 0] +9 0 2 2 +After: [1, 1, 0, 0] + +Before: [1, 0, 3, 1] +2 3 1 2 +After: [1, 0, 1, 1] + +Before: [2, 0, 3, 2] +4 0 2 1 +After: [2, 2, 3, 2] + +Before: [3, 1, 3, 1] +5 2 3 3 +After: [3, 1, 3, 0] + +Before: [2, 0, 1, 1] +14 2 3 1 +After: [2, 0, 1, 1] + +Before: [2, 0, 3, 3] +11 0 2 0 +After: [1, 0, 3, 3] + +Before: [3, 1, 2, 1] +0 1 2 0 +After: [0, 1, 2, 1] + +Before: [3, 3, 1, 3] +13 3 3 2 +After: [3, 3, 3, 3] + +Before: [0, 1, 0, 3] +12 1 0 0 +After: [1, 1, 0, 3] + +Before: [2, 1, 1, 0] +8 0 2 1 +After: [2, 1, 1, 0] + +Before: [0, 1, 3, 2] +1 1 3 3 +After: [0, 1, 3, 0] + +Before: [3, 2, 3, 2] +8 0 3 0 +After: [1, 2, 3, 2] + +Before: [2, 0, 3, 2] +11 0 2 1 +After: [2, 1, 3, 2] + +Before: [0, 1, 1, 1] +12 1 0 1 +After: [0, 1, 1, 1] + +Before: [2, 0, 3, 1] +4 0 2 1 +After: [2, 2, 3, 1] + +Before: [2, 1, 2, 1] +0 1 2 0 +After: [0, 1, 2, 1] + +Before: [3, 2, 0, 1] +11 2 0 2 +After: [3, 2, 1, 1] + +Before: [0, 1, 0, 0] +15 1 3 1 +After: [0, 1, 0, 0] + +Before: [3, 1, 2, 3] +6 1 3 0 +After: [0, 1, 2, 3] + +Before: [0, 1, 2, 0] +0 1 2 2 +After: [0, 1, 0, 0] + +Before: [1, 2, 2, 1] +9 0 2 2 +After: [1, 2, 0, 1] + +Before: [3, 3, 2, 1] +3 3 2 2 +After: [3, 3, 1, 1] + +Before: [0, 2, 1, 3] +13 3 3 1 +After: [0, 3, 1, 3] + +Before: [0, 2, 2, 2] +7 0 0 0 +After: [0, 2, 2, 2] + +Before: [1, 3, 3, 2] +14 3 3 2 +After: [1, 3, 0, 2] + +Before: [3, 1, 0, 2] +1 1 3 1 +After: [3, 0, 0, 2] + +Before: [0, 2, 3, 3] +6 1 3 3 +After: [0, 2, 3, 0] + +Before: [3, 1, 2, 0] +15 1 3 2 +After: [3, 1, 1, 0] + +Before: [0, 0, 2, 3] +5 2 2 3 +After: [0, 0, 2, 1] + +Before: [1, 0, 2, 1] +9 0 2 0 +After: [0, 0, 2, 1] + +Before: [0, 1, 1, 2] +7 0 0 0 +After: [0, 1, 1, 2] + +Before: [2, 3, 1, 3] +5 3 2 1 +After: [2, 0, 1, 3] + +Before: [2, 1, 2, 3] +0 1 2 0 +After: [0, 1, 2, 3] + +Before: [2, 2, 3, 2] +4 0 2 1 +After: [2, 2, 3, 2] + +Before: [0, 3, 2, 2] +7 0 0 2 +After: [0, 3, 0, 2] + +Before: [3, 0, 3, 3] +5 3 0 3 +After: [3, 0, 3, 1] + +Before: [1, 1, 3, 3] +13 3 3 0 +After: [3, 1, 3, 3] + +Before: [3, 2, 3, 3] +4 1 2 3 +After: [3, 2, 3, 2] + +Before: [0, 1, 2, 2] +13 2 2 0 +After: [2, 1, 2, 2] + +Before: [0, 3, 2, 3] +5 0 0 2 +After: [0, 3, 1, 3] + +Before: [3, 3, 3, 2] +4 3 2 2 +After: [3, 3, 2, 2] + +Before: [0, 3, 0, 3] +5 3 3 0 +After: [1, 3, 0, 3] + +Before: [3, 3, 2, 2] +13 2 2 2 +After: [3, 3, 2, 2] + +Before: [2, 1, 0, 2] +1 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 3, 0, 1] +14 3 3 1 +After: [3, 0, 0, 1] + +Before: [0, 0, 3, 0] +7 0 0 2 +After: [0, 0, 0, 0] + +Before: [1, 0, 1, 1] +2 0 1 2 +After: [1, 0, 1, 1] + +Before: [1, 2, 3, 3] +13 3 3 0 +After: [3, 2, 3, 3] + +Before: [3, 2, 1, 3] +6 2 3 3 +After: [3, 2, 1, 0] + +Before: [3, 1, 2, 1] +10 0 2 1 +After: [3, 1, 2, 1] + +Before: [1, 2, 2, 0] +9 0 2 3 +After: [1, 2, 2, 0] + +Before: [3, 1, 2, 2] +0 1 2 0 +After: [0, 1, 2, 2] + +Before: [0, 1, 0, 0] +12 1 0 0 +After: [1, 1, 0, 0] + +Before: [2, 0, 2, 1] +2 3 1 2 +After: [2, 0, 1, 1] + +Before: [2, 3, 2, 1] +3 3 2 1 +After: [2, 1, 2, 1] + +Before: [3, 2, 3, 1] +14 3 3 3 +After: [3, 2, 3, 0] + +Before: [1, 0, 2, 1] +3 3 2 0 +After: [1, 0, 2, 1] + +Before: [1, 1, 2, 0] +0 1 2 2 +After: [1, 1, 0, 0] + +Before: [2, 2, 3, 2] +11 0 2 3 +After: [2, 2, 3, 1] + +Before: [3, 0, 2, 3] +10 0 2 0 +After: [1, 0, 2, 3] + +Before: [3, 2, 3, 2] +4 3 2 1 +After: [3, 2, 3, 2] + +Before: [3, 1, 2, 2] +10 0 2 2 +After: [3, 1, 1, 2] + +Before: [2, 1, 3, 3] +6 1 3 2 +After: [2, 1, 0, 3] + +Before: [3, 2, 2, 2] +8 0 3 2 +After: [3, 2, 1, 2] + +Before: [0, 1, 0, 0] +7 0 0 3 +After: [0, 1, 0, 0] + +Before: [2, 3, 3, 2] +11 0 2 3 +After: [2, 3, 3, 1] + +Before: [0, 2, 3, 2] +7 0 0 3 +After: [0, 2, 3, 0] + +Before: [1, 3, 3, 3] +5 3 2 0 +After: [1, 3, 3, 3] + +Before: [3, 2, 0, 3] +11 2 0 3 +After: [3, 2, 0, 1] + +Before: [3, 2, 2, 2] +14 3 3 3 +After: [3, 2, 2, 0] + +Before: [2, 3, 2, 3] +13 2 2 3 +After: [2, 3, 2, 2] + +Before: [3, 2, 3, 2] +14 3 3 0 +After: [0, 2, 3, 2] + +Before: [1, 3, 1, 1] +14 3 3 0 +After: [0, 3, 1, 1] + +Before: [3, 1, 2, 1] +0 1 2 2 +After: [3, 1, 0, 1] + +Before: [0, 1, 1, 2] +1 1 3 1 +After: [0, 0, 1, 2] + +Before: [3, 3, 3, 2] +8 0 3 0 +After: [1, 3, 3, 2] + +Before: [2, 0, 3, 3] +4 0 2 0 +After: [2, 0, 3, 3] + +Before: [1, 2, 2, 1] +3 3 2 1 +After: [1, 1, 2, 1] + +Before: [0, 1, 3, 0] +7 0 0 2 +After: [0, 1, 0, 0] + +Before: [0, 0, 3, 2] +14 3 3 2 +After: [0, 0, 0, 2] + +Before: [2, 3, 2, 1] +5 2 0 3 +After: [2, 3, 2, 1] + +Before: [0, 1, 0, 1] +12 1 0 2 +After: [0, 1, 1, 1] + +Before: [0, 1, 2, 0] +15 1 3 3 +After: [0, 1, 2, 1] + +Before: [1, 3, 2, 3] +6 2 3 0 +After: [0, 3, 2, 3] + +Before: [1, 1, 1, 3] +13 3 3 1 +After: [1, 3, 1, 3] + +Before: [2, 1, 3, 3] +4 0 2 3 +After: [2, 1, 3, 2] + +Before: [0, 1, 2, 3] +0 1 2 1 +After: [0, 0, 2, 3] + +Before: [2, 1, 1, 2] +1 1 3 3 +After: [2, 1, 1, 0] + +Before: [3, 0, 2, 0] +10 0 2 3 +After: [3, 0, 2, 1] + +Before: [1, 2, 2, 1] +9 0 2 3 +After: [1, 2, 2, 0] + +Before: [2, 1, 3, 2] +4 0 2 1 +After: [2, 2, 3, 2] + +Before: [3, 3, 0, 1] +11 2 0 3 +After: [3, 3, 0, 1] + +Before: [3, 1, 2, 0] +0 1 2 0 +After: [0, 1, 2, 0] + +Before: [0, 1, 3, 3] +12 1 0 1 +After: [0, 1, 3, 3] + +Before: [1, 0, 0, 1] +2 3 1 1 +After: [1, 1, 0, 1] + +Before: [1, 1, 2, 3] +9 0 2 1 +After: [1, 0, 2, 3] + +Before: [3, 2, 0, 2] +11 2 0 1 +After: [3, 1, 0, 2] + +Before: [0, 3, 1, 1] +7 0 0 1 +After: [0, 0, 1, 1] + +Before: [0, 1, 2, 2] +7 0 0 1 +After: [0, 0, 2, 2] + +Before: [0, 3, 2, 0] +7 0 0 0 +After: [0, 3, 2, 0] + +Before: [2, 3, 2, 1] +3 3 2 0 +After: [1, 3, 2, 1] + +Before: [3, 3, 0, 2] +8 0 3 1 +After: [3, 1, 0, 2] + +Before: [0, 1, 2, 1] +12 1 0 3 +After: [0, 1, 2, 1] + +Before: [0, 2, 3, 3] +5 0 0 3 +After: [0, 2, 3, 1] + +Before: [0, 0, 0, 1] +2 3 1 1 +After: [0, 1, 0, 1] + +Before: [2, 0, 3, 2] +11 0 2 2 +After: [2, 0, 1, 2] + +Before: [0, 1, 3, 0] +15 1 3 1 +After: [0, 1, 3, 0] + +Before: [0, 2, 1, 3] +7 0 0 0 +After: [0, 2, 1, 3] + +Before: [0, 3, 3, 3] +7 0 0 2 +After: [0, 3, 0, 3] + +Before: [3, 1, 2, 2] +1 1 3 0 +After: [0, 1, 2, 2] + +Before: [3, 0, 0, 2] +14 3 3 3 +After: [3, 0, 0, 0] + +Before: [3, 1, 3, 0] +15 1 3 1 +After: [3, 1, 3, 0] + +Before: [3, 0, 2, 1] +3 3 2 3 +After: [3, 0, 2, 1] + +Before: [0, 1, 0, 3] +12 1 0 2 +After: [0, 1, 1, 3] + +Before: [2, 3, 2, 2] +5 2 0 0 +After: [1, 3, 2, 2] + +Before: [0, 1, 2, 2] +0 1 2 0 +After: [0, 1, 2, 2] + +Before: [2, 0, 1, 0] +8 0 2 1 +After: [2, 1, 1, 0] + +Before: [3, 1, 3, 3] +6 1 3 0 +After: [0, 1, 3, 3] + +Before: [1, 1, 1, 2] +1 1 3 2 +After: [1, 1, 0, 2] + +Before: [2, 1, 0, 2] +1 1 3 3 +After: [2, 1, 0, 0] + +Before: [2, 1, 3, 2] +11 0 2 3 +After: [2, 1, 3, 1] + +Before: [3, 1, 2, 2] +14 3 3 3 +After: [3, 1, 2, 0] + +Before: [3, 0, 1, 2] +2 2 1 1 +After: [3, 1, 1, 2] + +Before: [3, 1, 1, 0] +15 1 3 1 +After: [3, 1, 1, 0] + +Before: [2, 0, 3, 0] +4 0 2 3 +After: [2, 0, 3, 2] + +Before: [0, 2, 0, 3] +7 0 0 2 +After: [0, 2, 0, 3] + +Before: [1, 0, 2, 2] +9 0 2 2 +After: [1, 0, 0, 2] + +Before: [0, 3, 2, 1] +3 3 2 3 +After: [0, 3, 2, 1] + +Before: [2, 1, 1, 0] +15 1 3 0 +After: [1, 1, 1, 0] + +Before: [3, 1, 3, 2] +8 0 3 1 +After: [3, 1, 3, 2] + +Before: [0, 0, 2, 1] +2 3 1 3 +After: [0, 0, 2, 1] + +Before: [3, 1, 2, 2] +10 0 2 0 +After: [1, 1, 2, 2] + +Before: [1, 3, 2, 1] +3 3 2 0 +After: [1, 3, 2, 1] + +Before: [1, 3, 2, 1] +3 3 2 3 +After: [1, 3, 2, 1] + +Before: [3, 2, 3, 2] +4 3 2 0 +After: [2, 2, 3, 2] + +Before: [2, 1, 3, 0] +4 0 2 0 +After: [2, 1, 3, 0] + +Before: [3, 1, 2, 1] +3 3 2 1 +After: [3, 1, 2, 1] + +Before: [1, 3, 2, 0] +9 0 2 1 +After: [1, 0, 2, 0] + +Before: [3, 2, 0, 1] +14 3 3 2 +After: [3, 2, 0, 1] + +Before: [2, 3, 3, 3] +11 0 2 1 +After: [2, 1, 3, 3] + +Before: [0, 1, 2, 0] +0 1 2 3 +After: [0, 1, 2, 0] + +Before: [2, 1, 3, 2] +1 1 3 0 +After: [0, 1, 3, 2] + +Before: [1, 1, 2, 0] +9 0 2 3 +After: [1, 1, 2, 0] + +Before: [0, 1, 2, 2] +12 1 0 2 +After: [0, 1, 1, 2] + +Before: [0, 0, 3, 3] +5 0 0 2 +After: [0, 0, 1, 3] + +Before: [1, 0, 1, 3] +2 2 1 0 +After: [1, 0, 1, 3] + +Before: [2, 0, 3, 0] +11 0 2 3 +After: [2, 0, 3, 1] + +Before: [2, 3, 2, 1] +14 3 3 1 +After: [2, 0, 2, 1] + +Before: [3, 2, 2, 3] +10 0 2 0 +After: [1, 2, 2, 3] + +Before: [2, 0, 1, 1] +8 0 2 3 +After: [2, 0, 1, 1] + +Before: [0, 1, 2, 1] +0 1 2 1 +After: [0, 0, 2, 1] + +Before: [0, 1, 2, 3] +5 3 1 1 +After: [0, 0, 2, 3] + +Before: [3, 0, 0, 3] +13 3 3 2 +After: [3, 0, 3, 3] + +Before: [1, 1, 2, 2] +1 1 3 3 +After: [1, 1, 2, 0] + +Before: [3, 0, 0, 3] +13 3 3 3 +After: [3, 0, 0, 3] + +Before: [0, 1, 1, 2] +1 1 3 0 +After: [0, 1, 1, 2] + +Before: [0, 1, 2, 3] +13 2 2 1 +After: [0, 2, 2, 3] + +Before: [1, 1, 2, 3] +9 0 2 2 +After: [1, 1, 0, 3] + +Before: [3, 0, 0, 3] +11 2 0 0 +After: [1, 0, 0, 3] + +Before: [0, 1, 0, 2] +12 1 0 2 +After: [0, 1, 1, 2] + +Before: [0, 1, 2, 0] +5 0 0 3 +After: [0, 1, 2, 1] + +Before: [3, 3, 2, 1] +10 0 2 3 +After: [3, 3, 2, 1] + +Before: [2, 2, 3, 0] +4 1 2 3 +After: [2, 2, 3, 2] + +Before: [2, 0, 2, 0] +5 2 2 3 +After: [2, 0, 2, 1] + +Before: [1, 1, 2, 0] +15 1 3 0 +After: [1, 1, 2, 0] + +Before: [1, 3, 2, 3] +9 0 2 0 +After: [0, 3, 2, 3] + +Before: [3, 1, 3, 0] +15 1 3 3 +After: [3, 1, 3, 1] + +Before: [3, 0, 1, 3] +2 2 1 3 +After: [3, 0, 1, 1] + +Before: [0, 1, 1, 0] +15 1 3 1 +After: [0, 1, 1, 0] + +Before: [1, 3, 2, 1] +3 3 2 2 +After: [1, 3, 1, 1] + +Before: [2, 2, 3, 0] +11 0 2 3 +After: [2, 2, 3, 1] + +Before: [1, 1, 2, 3] +5 3 2 1 +After: [1, 0, 2, 3] + +Before: [3, 0, 1, 1] +2 3 1 0 +After: [1, 0, 1, 1] + +Before: [2, 1, 2, 3] +5 2 0 1 +After: [2, 1, 2, 3] + +Before: [2, 1, 2, 0] +10 0 1 0 +After: [1, 1, 2, 0] + +Before: [2, 2, 3, 3] +4 1 2 1 +After: [2, 2, 3, 3] + +Before: [3, 0, 2, 1] +3 3 2 0 +After: [1, 0, 2, 1] + +Before: [3, 2, 2, 0] +10 0 2 3 +After: [3, 2, 2, 1] + +Before: [3, 0, 1, 3] +5 3 0 3 +After: [3, 0, 1, 1] + +Before: [1, 1, 2, 0] +0 1 2 3 +After: [1, 1, 2, 0] + +Before: [3, 1, 1, 2] +1 1 3 1 +After: [3, 0, 1, 2] + +Before: [1, 3, 2, 1] +3 3 2 1 +After: [1, 1, 2, 1] + +Before: [0, 1, 1, 0] +7 0 0 0 +After: [0, 1, 1, 0] + +Before: [3, 1, 3, 2] +1 1 3 3 +After: [3, 1, 3, 0] + +Before: [0, 3, 2, 3] +6 2 3 1 +After: [0, 0, 2, 3] + +Before: [3, 2, 2, 3] +6 2 3 0 +After: [0, 2, 2, 3] + +Before: [3, 1, 2, 1] +3 3 2 2 +After: [3, 1, 1, 1] + +Before: [2, 0, 2, 3] +6 2 3 1 +After: [2, 0, 2, 3] + +Before: [3, 1, 0, 2] +11 2 0 2 +After: [3, 1, 1, 2] + +Before: [1, 1, 0, 2] +1 1 3 1 +After: [1, 0, 0, 2] + +Before: [2, 2, 3, 3] +11 0 2 2 +After: [2, 2, 1, 3] + +Before: [0, 0, 2, 3] +13 2 2 1 +After: [0, 2, 2, 3] + +Before: [2, 1, 3, 0] +10 0 1 1 +After: [2, 1, 3, 0] + +Before: [0, 1, 2, 2] +5 2 2 0 +After: [1, 1, 2, 2] + +Before: [1, 1, 3, 2] +4 3 2 3 +After: [1, 1, 3, 2] + +Before: [3, 1, 2, 0] +15 1 3 3 +After: [3, 1, 2, 1] + +Before: [0, 1, 3, 1] +12 1 0 3 +After: [0, 1, 3, 1] + +Before: [0, 1, 2, 2] +0 1 2 3 +After: [0, 1, 2, 0] + +Before: [3, 2, 2, 3] +10 0 2 1 +After: [3, 1, 2, 3] + +Before: [0, 3, 1, 1] +14 3 3 0 +After: [0, 3, 1, 1] + +Before: [3, 0, 2, 1] +2 3 1 1 +After: [3, 1, 2, 1] + +Before: [0, 3, 2, 3] +13 2 2 3 +After: [0, 3, 2, 2] + +Before: [3, 0, 2, 0] +10 0 2 2 +After: [3, 0, 1, 0] + +Before: [2, 3, 0, 3] +13 3 3 3 +After: [2, 3, 0, 3] + +Before: [3, 0, 1, 3] +2 2 1 0 +After: [1, 0, 1, 3] + +Before: [0, 1, 1, 0] +12 1 0 3 +After: [0, 1, 1, 1] + +Before: [0, 1, 2, 3] +12 1 0 1 +After: [0, 1, 2, 3] + +Before: [0, 1, 3, 0] +5 0 0 1 +After: [0, 1, 3, 0] + +Before: [3, 2, 2, 1] +10 0 2 2 +After: [3, 2, 1, 1] + +Before: [3, 1, 3, 1] +5 2 1 0 +After: [0, 1, 3, 1] + +Before: [0, 1, 2, 0] +15 1 3 0 +After: [1, 1, 2, 0] + +Before: [0, 1, 0, 2] +1 1 3 1 +After: [0, 0, 0, 2] + +Before: [3, 0, 2, 1] +10 0 2 2 +After: [3, 0, 1, 1] + +Before: [0, 1, 0, 0] +12 1 0 2 +After: [0, 1, 1, 0] + +Before: [3, 0, 2, 1] +10 0 2 3 +After: [3, 0, 2, 1] + +Before: [0, 3, 2, 1] +3 3 2 1 +After: [0, 1, 2, 1] + +Before: [1, 1, 2, 2] +9 0 2 1 +After: [1, 0, 2, 2] + +Before: [2, 1, 3, 0] +15 1 3 2 +After: [2, 1, 1, 0] + +Before: [0, 0, 2, 1] +13 2 2 2 +After: [0, 0, 2, 1] + +Before: [0, 3, 3, 2] +4 3 2 2 +After: [0, 3, 2, 2] + +Before: [2, 1, 2, 0] +15 1 3 2 +After: [2, 1, 1, 0] + +Before: [1, 0, 2, 2] +9 0 2 3 +After: [1, 0, 2, 0] + +Before: [0, 1, 1, 0] +15 1 3 3 +After: [0, 1, 1, 1] + +Before: [0, 1, 0, 0] +15 1 3 2 +After: [0, 1, 1, 0] + +Before: [0, 1, 1, 3] +12 1 0 2 +After: [0, 1, 1, 3] + +Before: [3, 1, 2, 2] +10 0 2 3 +After: [3, 1, 2, 1] + +Before: [3, 3, 2, 3] +10 0 2 3 +After: [3, 3, 2, 1] + +Before: [0, 0, 1, 3] +2 2 1 1 +After: [0, 1, 1, 3] + +Before: [0, 1, 3, 0] +15 1 3 2 +After: [0, 1, 1, 0] + +Before: [1, 3, 2, 2] +9 0 2 1 +After: [1, 0, 2, 2] + +Before: [3, 3, 0, 0] +11 2 0 0 +After: [1, 3, 0, 0] + +Before: [0, 1, 0, 0] +12 1 0 1 +After: [0, 1, 0, 0] + +Before: [3, 2, 0, 2] +14 3 3 2 +After: [3, 2, 0, 2] + +Before: [3, 3, 0, 2] +11 2 0 2 +After: [3, 3, 1, 2] + +Before: [1, 2, 2, 3] +9 0 2 3 +After: [1, 2, 2, 0] + +Before: [1, 3, 3, 3] +5 3 3 2 +After: [1, 3, 1, 3] + +Before: [2, 0, 1, 1] +14 3 3 0 +After: [0, 0, 1, 1] + +Before: [1, 3, 2, 2] +9 0 2 0 +After: [0, 3, 2, 2] + +Before: [2, 1, 1, 3] +8 0 2 1 +After: [2, 1, 1, 3] + +Before: [2, 1, 1, 2] +8 0 2 3 +After: [2, 1, 1, 1] + +Before: [2, 2, 1, 0] +8 0 2 2 +After: [2, 2, 1, 0] + +Before: [3, 1, 2, 1] +10 0 2 2 +After: [3, 1, 1, 1] + +Before: [0, 2, 3, 0] +7 0 0 1 +After: [0, 0, 3, 0] + +Before: [3, 3, 3, 3] +5 3 0 2 +After: [3, 3, 1, 3] + +Before: [3, 0, 2, 1] +13 2 2 1 +After: [3, 2, 2, 1] + +Before: [1, 1, 2, 3] +0 1 2 3 +After: [1, 1, 2, 0] + +Before: [2, 1, 2, 3] +6 2 3 1 +After: [2, 0, 2, 3] + +Before: [0, 0, 1, 2] +2 2 1 2 +After: [0, 0, 1, 2] + +Before: [1, 2, 1, 3] +5 3 1 2 +After: [1, 2, 0, 3] + +Before: [3, 0, 0, 2] +8 0 3 0 +After: [1, 0, 0, 2] + +Before: [1, 3, 2, 1] +9 0 2 1 +After: [1, 0, 2, 1] + +Before: [3, 1, 2, 1] +0 1 2 3 +After: [3, 1, 2, 0] + +Before: [0, 1, 2, 3] +12 1 0 0 +After: [1, 1, 2, 3] + +Before: [2, 3, 3, 3] +11 0 2 3 +After: [2, 3, 3, 1] + +Before: [0, 2, 0, 3] +7 0 0 3 +After: [0, 2, 0, 0] + +Before: [1, 1, 3, 2] +1 1 3 3 +After: [1, 1, 3, 0] + +Before: [3, 2, 3, 3] +5 3 2 1 +After: [3, 1, 3, 3] + +Before: [1, 0, 2, 3] +13 3 3 1 +After: [1, 3, 2, 3] + +Before: [2, 1, 3, 0] +15 1 3 3 +After: [2, 1, 3, 1] + +Before: [2, 0, 2, 3] +6 2 3 2 +After: [2, 0, 0, 3] + +Before: [2, 1, 1, 3] +6 1 3 0 +After: [0, 1, 1, 3] + +Before: [0, 0, 2, 1] +2 3 1 2 +After: [0, 0, 1, 1] + +Before: [1, 0, 1, 0] +2 0 1 3 +After: [1, 0, 1, 1] + +Before: [2, 1, 1, 3] +13 3 3 2 +After: [2, 1, 3, 3] + +Before: [0, 2, 1, 0] +7 0 0 2 +After: [0, 2, 0, 0] + +Before: [1, 0, 2, 0] +2 0 1 2 +After: [1, 0, 1, 0] + +Before: [0, 0, 3, 1] +2 3 1 0 +After: [1, 0, 3, 1] + +Before: [2, 0, 1, 0] +8 0 2 3 +After: [2, 0, 1, 1] + +Before: [3, 1, 1, 2] +1 1 3 3 +After: [3, 1, 1, 0] + +Before: [0, 1, 1, 2] +12 1 0 0 +After: [1, 1, 1, 2] + +Before: [1, 1, 2, 1] +9 0 2 3 +After: [1, 1, 2, 0] + +Before: [0, 0, 0, 2] +14 3 3 2 +After: [0, 0, 0, 2] + +Before: [3, 1, 0, 2] +1 1 3 2 +After: [3, 1, 0, 2] + +Before: [0, 1, 3, 2] +4 3 2 0 +After: [2, 1, 3, 2] + +Before: [1, 0, 2, 1] +2 0 1 2 +After: [1, 0, 1, 1] + +Before: [1, 3, 2, 1] +9 0 2 0 +After: [0, 3, 2, 1] + +Before: [0, 0, 2, 1] +3 3 2 1 +After: [0, 1, 2, 1] + +Before: [2, 2, 2, 3] +6 1 3 3 +After: [2, 2, 2, 0] + +Before: [3, 2, 2, 2] +10 0 2 2 +After: [3, 2, 1, 2] + +Before: [1, 0, 3, 2] +14 3 3 1 +After: [1, 0, 3, 2] + +Before: [2, 0, 3, 0] +4 0 2 1 +After: [2, 2, 3, 0] + +Before: [2, 1, 1, 2] +10 0 1 3 +After: [2, 1, 1, 1] + +Before: [2, 1, 2, 0] +10 0 1 3 +After: [2, 1, 2, 1] + +Before: [2, 3, 3, 3] +11 0 2 2 +After: [2, 3, 1, 3] + +Before: [2, 1, 2, 1] +10 0 1 1 +After: [2, 1, 2, 1] + +Before: [2, 2, 3, 3] +4 1 2 3 +After: [2, 2, 3, 2] + +Before: [3, 1, 2, 3] +10 0 2 3 +After: [3, 1, 2, 1] + +Before: [1, 2, 2, 0] +9 0 2 1 +After: [1, 0, 2, 0] + +Before: [1, 3, 2, 2] +9 0 2 3 +After: [1, 3, 2, 0] + +Before: [1, 1, 2, 3] +5 3 2 2 +After: [1, 1, 0, 3] + +Before: [1, 0, 3, 0] +2 0 1 1 +After: [1, 1, 3, 0] + +Before: [1, 1, 1, 0] +15 1 3 0 +After: [1, 1, 1, 0] + +Before: [0, 2, 3, 3] +4 1 2 2 +After: [0, 2, 2, 3] + +Before: [2, 1, 3, 2] +5 2 1 2 +After: [2, 1, 0, 2] + +Before: [2, 1, 2, 0] +0 1 2 1 +After: [2, 0, 2, 0] + +Before: [1, 1, 3, 2] +1 1 3 0 +After: [0, 1, 3, 2] + +Before: [3, 3, 2, 1] +10 0 2 2 +After: [3, 3, 1, 1] + +Before: [0, 1, 2, 1] +3 3 2 2 +After: [0, 1, 1, 1] + +Before: [0, 1, 3, 3] +7 0 0 0 +After: [0, 1, 3, 3] + +Before: [2, 0, 2, 1] +3 3 2 1 +After: [2, 1, 2, 1] + +Before: [1, 1, 2, 1] +0 1 2 1 +After: [1, 0, 2, 1] + +Before: [3, 0, 1, 2] +8 0 3 1 +After: [3, 1, 1, 2] + +Before: [1, 0, 2, 2] +2 0 1 2 +After: [1, 0, 1, 2] + +Before: [3, 1, 2, 3] +6 2 3 1 +After: [3, 0, 2, 3] + +Before: [0, 0, 2, 1] +2 3 1 0 +After: [1, 0, 2, 1] + +Before: [0, 1, 0, 3] +12 1 0 3 +After: [0, 1, 0, 1] + +Before: [2, 1, 1, 3] +5 3 2 3 +After: [2, 1, 1, 0] + +Before: [2, 0, 3, 2] +14 3 3 1 +After: [2, 0, 3, 2] + +Before: [1, 2, 2, 2] +9 0 2 1 +After: [1, 0, 2, 2] + +Before: [0, 1, 1, 1] +12 1 0 0 +After: [1, 1, 1, 1] + +Before: [0, 2, 0, 1] +7 0 0 2 +After: [0, 2, 0, 1] + +Before: [2, 2, 1, 2] +8 0 2 3 +After: [2, 2, 1, 1] + +Before: [1, 0, 1, 1] +2 0 1 3 +After: [1, 0, 1, 1] + +Before: [2, 1, 1, 2] +10 0 1 2 +After: [2, 1, 1, 2] + +Before: [2, 1, 1, 1] +8 0 2 2 +After: [2, 1, 1, 1] + +Before: [3, 3, 2, 2] +10 0 2 2 +After: [3, 3, 1, 2] + +Before: [2, 3, 2, 0] +13 2 2 1 +After: [2, 2, 2, 0] + +Before: [1, 0, 2, 3] +2 0 1 2 +After: [1, 0, 1, 3] + +Before: [2, 1, 3, 3] +4 0 2 0 +After: [2, 1, 3, 3] + +Before: [1, 2, 2, 0] +5 2 1 2 +After: [1, 2, 1, 0] + +Before: [0, 1, 0, 2] +12 1 0 1 +After: [0, 1, 0, 2] + +Before: [3, 1, 1, 2] +8 0 3 0 +After: [1, 1, 1, 2] + +Before: [0, 1, 3, 0] +15 1 3 0 +After: [1, 1, 3, 0] + +Before: [2, 1, 3, 2] +4 3 2 2 +After: [2, 1, 2, 2] + +Before: [3, 1, 0, 2] +8 0 3 3 +After: [3, 1, 0, 1] + +Before: [2, 3, 3, 3] +11 0 2 0 +After: [1, 3, 3, 3] + +Before: [0, 1, 1, 3] +6 2 3 2 +After: [0, 1, 0, 3] + +Before: [2, 3, 3, 1] +11 0 2 2 +After: [2, 3, 1, 1] + +Before: [3, 1, 1, 2] +8 0 3 2 +After: [3, 1, 1, 2] + +Before: [1, 2, 2, 3] +9 0 2 0 +After: [0, 2, 2, 3] + +Before: [1, 1, 0, 2] +1 1 3 0 +After: [0, 1, 0, 2] + +Before: [1, 1, 0, 2] +1 1 3 3 +After: [1, 1, 0, 0] + +Before: [0, 1, 2, 3] +12 1 0 3 +After: [0, 1, 2, 1] + +Before: [3, 0, 1, 2] +8 0 3 3 +After: [3, 0, 1, 1] + +Before: [2, 1, 2, 3] +0 1 2 1 +After: [2, 0, 2, 3] + +Before: [3, 0, 0, 0] +11 2 0 3 +After: [3, 0, 0, 1] + +Before: [3, 2, 2, 2] +8 0 3 3 +After: [3, 2, 2, 1] + +Before: [1, 1, 3, 3] +6 1 3 1 +After: [1, 0, 3, 3] + +Before: [3, 1, 0, 1] +11 2 0 0 +After: [1, 1, 0, 1] + +Before: [1, 1, 1, 0] +15 1 3 3 +After: [1, 1, 1, 1] + +Before: [2, 2, 3, 2] +4 0 2 3 +After: [2, 2, 3, 2] + +Before: [2, 2, 3, 2] +11 0 2 1 +After: [2, 1, 3, 2] + +Before: [0, 0, 1, 1] +7 0 0 0 +After: [0, 0, 1, 1] + +Before: [0, 3, 1, 3] +7 0 0 1 +After: [0, 0, 1, 3] + +Before: [2, 1, 3, 1] +10 0 1 0 +After: [1, 1, 3, 1] + +Before: [3, 1, 2, 2] +0 1 2 2 +After: [3, 1, 0, 2] + +Before: [1, 0, 3, 2] +2 0 1 0 +After: [1, 0, 3, 2] + +Before: [3, 0, 3, 1] +2 3 1 1 +After: [3, 1, 3, 1] + +Before: [3, 1, 2, 1] +3 3 2 0 +After: [1, 1, 2, 1] + +Before: [3, 1, 2, 1] +10 0 2 0 +After: [1, 1, 2, 1] + +Before: [3, 3, 2, 1] +3 3 2 1 +After: [3, 1, 2, 1] + +Before: [0, 1, 0, 2] +1 1 3 0 +After: [0, 1, 0, 2] + +Before: [2, 1, 3, 1] +11 0 2 1 +After: [2, 1, 3, 1] + +Before: [2, 3, 1, 1] +8 0 2 3 +After: [2, 3, 1, 1] + +Before: [2, 2, 2, 1] +5 2 2 1 +After: [2, 1, 2, 1] + +Before: [3, 0, 1, 1] +2 3 1 2 +After: [3, 0, 1, 1] + +Before: [2, 2, 2, 1] +14 3 3 0 +After: [0, 2, 2, 1] + +Before: [2, 3, 3, 2] +4 0 2 0 +After: [2, 3, 3, 2] + +Before: [2, 2, 3, 1] +11 0 2 2 +After: [2, 2, 1, 1] + +Before: [0, 1, 1, 1] +7 0 0 3 +After: [0, 1, 1, 0] + +Before: [3, 3, 0, 1] +11 2 0 2 +After: [3, 3, 1, 1] + +Before: [2, 2, 3, 3] +4 0 2 2 +After: [2, 2, 2, 3] + +Before: [2, 2, 3, 0] +4 0 2 3 +After: [2, 2, 3, 2] + +Before: [1, 1, 2, 1] +0 1 2 3 +After: [1, 1, 2, 0] + +Before: [2, 1, 0, 2] +10 0 1 1 +After: [2, 1, 0, 2] + +Before: [1, 3, 2, 0] +9 0 2 0 +After: [0, 3, 2, 0] + +Before: [3, 2, 0, 2] +11 2 0 2 +After: [3, 2, 1, 2] + +Before: [0, 1, 1, 2] +1 1 3 3 +After: [0, 1, 1, 0] + +Before: [1, 1, 3, 2] +1 1 3 1 +After: [1, 0, 3, 2] + +Before: [0, 2, 2, 1] +3 3 2 2 +After: [0, 2, 1, 1] + +Before: [2, 1, 1, 3] +10 0 1 2 +After: [2, 1, 1, 3] + +Before: [0, 1, 1, 3] +7 0 0 2 +After: [0, 1, 0, 3] + +Before: [3, 1, 2, 1] +5 2 2 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 2, 0] +15 1 3 2 +After: [1, 1, 1, 0] + +Before: [0, 1, 2, 2] +0 1 2 2 +After: [0, 1, 0, 2] + +Before: [2, 0, 1, 1] +2 2 1 2 +After: [2, 0, 1, 1] + +Before: [1, 1, 2, 2] +1 1 3 1 +After: [1, 0, 2, 2] + +Before: [3, 1, 2, 0] +10 0 2 2 +After: [3, 1, 1, 0] + +Before: [3, 2, 0, 3] +11 2 0 2 +After: [3, 2, 1, 3] + + + +9 1 1 1 +9 1 1 2 +9 3 3 3 +0 3 2 1 +2 1 3 1 +15 0 1 0 +3 0 3 1 +9 2 0 3 +9 3 0 0 +9 2 3 2 +4 2 3 2 +2 2 1 2 +2 2 2 2 +15 2 1 1 +3 1 1 3 +9 1 2 0 +9 3 1 1 +9 2 0 2 +3 0 2 0 +2 0 3 0 +15 3 0 3 +3 3 1 1 +9 3 0 2 +9 2 3 3 +9 2 0 0 +11 0 2 2 +2 2 3 2 +2 2 1 2 +15 1 2 1 +2 3 0 2 +12 2 0 2 +5 0 3 2 +2 2 1 2 +2 2 2 2 +15 1 2 1 +9 1 2 2 +9 3 1 3 +9 3 2 0 +0 3 2 2 +2 2 3 2 +15 2 1 1 +3 1 0 3 +9 3 2 1 +2 2 0 2 +12 2 0 2 +0 1 2 2 +2 2 1 2 +15 3 2 3 +3 3 2 0 +9 0 1 1 +9 0 3 3 +9 2 1 2 +6 3 2 1 +2 1 2 1 +15 1 0 0 +3 0 2 1 +2 2 0 3 +12 3 1 3 +9 2 0 0 +8 0 3 3 +2 3 3 3 +15 1 3 1 +3 1 1 3 +9 1 1 0 +9 0 2 2 +2 0 0 1 +12 1 1 1 +2 1 2 2 +2 2 1 2 +15 3 2 3 +2 0 0 0 +12 0 2 0 +2 0 0 1 +12 1 2 1 +2 0 0 2 +12 2 3 2 +11 0 2 0 +2 0 1 0 +15 0 3 3 +3 3 2 0 +9 0 2 3 +9 2 3 2 +9 1 0 1 +6 3 2 1 +2 1 3 1 +2 1 1 1 +15 0 1 0 +3 0 3 3 +9 1 0 1 +9 3 0 0 +13 2 0 2 +2 2 2 2 +15 2 3 3 +3 3 3 1 +9 2 2 2 +2 1 0 3 +12 3 0 3 +9 2 1 0 +4 2 3 2 +2 2 2 2 +15 1 2 1 +3 1 2 0 +9 2 0 2 +2 3 0 1 +12 1 3 1 +6 3 2 1 +2 1 1 1 +15 0 1 0 +3 0 1 1 +2 2 0 3 +12 3 2 3 +9 2 2 0 +9 0 2 2 +5 0 3 0 +2 0 2 0 +2 0 3 0 +15 0 1 1 +9 1 1 3 +9 0 0 0 +2 3 2 3 +2 3 1 3 +15 1 3 1 +3 1 0 3 +9 3 1 2 +9 2 2 0 +9 1 0 1 +7 1 0 1 +2 1 1 1 +15 1 3 3 +3 3 3 2 +2 1 0 0 +12 0 1 0 +2 1 0 1 +12 1 0 1 +9 2 3 3 +7 0 3 1 +2 1 1 1 +15 2 1 2 +3 2 3 1 +2 0 0 3 +12 3 0 3 +9 0 2 2 +9 3 0 0 +11 2 0 2 +2 2 3 2 +15 2 1 1 +3 1 3 3 +9 0 3 2 +9 2 3 0 +9 3 2 1 +10 0 1 0 +2 0 2 0 +2 0 1 0 +15 0 3 3 +3 3 3 1 +2 1 0 3 +12 3 2 3 +2 2 0 2 +12 2 2 2 +2 1 0 0 +12 0 1 0 +7 0 3 0 +2 0 3 0 +2 0 3 0 +15 1 0 1 +3 1 0 2 +9 1 1 3 +9 2 2 1 +9 0 1 0 +15 3 3 0 +2 0 3 0 +15 0 2 2 +3 2 2 1 +9 3 2 2 +9 2 3 0 +9 3 3 3 +0 3 2 3 +2 3 3 3 +15 1 3 1 +9 1 0 3 +8 0 3 3 +2 3 2 3 +15 1 3 1 +3 1 2 0 +9 2 2 3 +9 1 2 1 +7 1 3 2 +2 2 3 2 +2 2 1 2 +15 0 2 0 +3 0 2 1 +9 3 0 0 +9 1 1 3 +9 0 3 2 +11 2 0 3 +2 3 2 3 +2 3 3 3 +15 3 1 1 +9 2 1 0 +9 2 2 3 +5 0 3 3 +2 3 3 3 +15 3 1 1 +3 1 0 2 +2 0 0 1 +12 1 3 1 +9 3 0 0 +9 1 1 3 +12 3 1 1 +2 1 2 1 +15 2 1 2 +3 2 3 1 +9 0 3 2 +9 2 0 0 +7 3 0 2 +2 2 1 2 +15 2 1 1 +3 1 0 0 +2 2 0 2 +12 2 0 2 +9 0 1 1 +2 3 2 3 +2 3 2 3 +15 0 3 0 +3 0 3 1 +9 2 1 2 +9 1 3 3 +9 1 3 0 +3 0 2 2 +2 2 2 2 +2 2 1 2 +15 2 1 1 +3 1 3 3 +9 3 3 2 +9 2 3 1 +2 3 0 0 +12 0 2 0 +11 0 2 2 +2 2 2 2 +15 3 2 3 +3 3 0 2 +2 3 0 3 +12 3 1 3 +9 0 2 1 +12 3 1 0 +2 0 3 0 +15 0 2 2 +9 2 1 3 +9 2 0 0 +5 0 3 1 +2 1 2 1 +15 1 2 2 +3 2 0 3 +9 1 0 0 +9 3 1 2 +9 3 1 1 +12 0 1 2 +2 2 2 2 +15 2 3 3 +3 3 0 1 +2 2 0 3 +12 3 2 3 +9 2 2 0 +9 3 3 2 +5 0 3 3 +2 3 1 3 +15 1 3 1 +9 3 1 0 +9 2 3 2 +9 0 0 3 +13 2 0 3 +2 3 1 3 +15 1 3 1 +3 1 3 0 +2 1 0 1 +12 1 2 1 +9 1 0 3 +2 0 0 2 +12 2 3 2 +13 1 2 3 +2 3 2 3 +2 3 3 3 +15 3 0 0 +3 0 1 1 +9 1 1 3 +9 0 1 2 +9 2 1 0 +8 0 3 2 +2 2 2 2 +15 1 2 1 +9 0 0 2 +9 3 1 0 +2 0 0 3 +12 3 0 3 +0 0 2 0 +2 0 1 0 +15 0 1 1 +3 1 2 0 +9 2 2 1 +9 3 1 3 +0 3 2 3 +2 3 1 3 +15 0 3 0 +3 0 2 2 +9 3 2 3 +2 0 0 1 +12 1 0 1 +9 1 2 0 +12 0 1 1 +2 1 3 1 +2 1 1 1 +15 2 1 2 +3 2 0 0 +9 2 3 2 +9 2 0 3 +9 0 0 1 +9 1 2 1 +2 1 2 1 +2 1 2 1 +15 1 0 0 +3 0 3 2 +9 3 2 0 +9 2 0 1 +1 0 1 0 +2 0 3 0 +15 0 2 2 +3 2 3 1 +2 1 0 2 +12 2 2 2 +2 3 0 0 +12 0 1 0 +2 0 0 3 +12 3 0 3 +6 3 2 3 +2 3 1 3 +2 3 3 3 +15 3 1 1 +3 1 1 2 +9 2 3 0 +9 2 2 3 +9 2 0 1 +5 0 3 0 +2 0 3 0 +15 0 2 2 +9 3 1 3 +9 3 2 0 +1 0 1 0 +2 0 1 0 +15 2 0 2 +3 2 2 1 +9 3 0 0 +2 1 0 2 +12 2 3 2 +9 2 3 3 +1 0 3 0 +2 0 1 0 +15 1 0 1 +3 1 1 3 +9 2 3 0 +9 0 0 1 +11 0 2 0 +2 0 2 0 +15 0 3 3 +3 3 3 0 +9 3 2 1 +9 2 3 2 +9 1 3 3 +10 2 1 1 +2 1 3 1 +2 1 3 1 +15 0 1 0 +3 0 0 1 +9 0 0 3 +9 3 3 0 +6 3 2 3 +2 3 3 3 +2 3 2 3 +15 1 3 1 +3 1 1 0 +2 3 0 3 +12 3 2 3 +2 0 0 2 +12 2 0 2 +2 1 0 1 +12 1 0 1 +14 2 3 1 +2 1 1 1 +15 0 1 0 +3 0 2 3 +9 2 2 0 +9 3 1 2 +2 1 0 1 +12 1 0 1 +11 0 2 1 +2 1 2 1 +15 1 3 3 +2 0 0 1 +12 1 0 1 +9 1 2 0 +2 0 2 0 +2 0 1 0 +15 0 3 3 +3 3 3 1 +2 0 0 2 +12 2 2 2 +9 2 3 0 +9 3 0 3 +1 3 0 0 +2 0 2 0 +15 0 1 1 +3 1 1 3 +9 1 0 1 +2 2 0 0 +12 0 2 0 +9 3 0 2 +13 0 2 1 +2 1 1 1 +2 1 3 1 +15 3 1 3 +3 3 0 1 +9 1 2 3 +9 1 2 2 +7 3 0 0 +2 0 3 0 +15 0 1 1 +9 0 2 2 +9 3 1 3 +9 1 0 0 +2 0 2 0 +2 0 1 0 +2 0 1 0 +15 0 1 1 +9 2 1 0 +1 3 0 2 +2 2 3 2 +15 2 1 1 +3 1 2 0 +2 2 0 1 +12 1 2 1 +9 1 2 2 +1 3 1 1 +2 1 3 1 +15 0 1 0 +3 0 3 1 +9 0 1 3 +9 3 2 2 +2 0 0 0 +12 0 2 0 +13 0 2 0 +2 0 1 0 +15 0 1 1 +3 1 2 3 +9 3 2 0 +9 2 3 1 +2 1 0 2 +12 2 1 2 +13 1 0 1 +2 1 3 1 +15 3 1 3 +3 3 0 1 +9 1 1 3 +9 3 1 2 +2 3 2 0 +2 0 1 0 +15 0 1 1 +9 2 1 2 +9 1 1 0 +9 0 0 3 +6 3 2 0 +2 0 1 0 +15 1 0 1 +3 1 1 0 +9 2 0 1 +2 0 0 2 +12 2 1 2 +9 3 2 2 +2 2 2 2 +15 2 0 0 +9 2 1 3 +9 1 1 1 +9 2 3 2 +4 2 3 2 +2 2 2 2 +15 0 2 0 +3 0 2 1 +9 0 1 2 +9 3 3 0 +9 3 0 3 +0 3 2 0 +2 0 2 0 +15 1 0 1 +9 1 2 2 +9 2 3 0 +9 2 3 3 +5 0 3 0 +2 0 1 0 +15 0 1 1 +3 1 0 2 +9 3 2 1 +2 2 0 3 +12 3 1 3 +9 2 0 0 +8 0 3 0 +2 0 2 0 +15 0 2 2 +3 2 1 0 +9 3 2 3 +9 1 3 1 +9 1 0 2 +9 2 3 2 +2 2 1 2 +2 2 1 2 +15 0 2 0 +3 0 1 3 +2 2 0 0 +12 0 2 0 +9 3 1 1 +9 0 0 2 +1 1 0 2 +2 2 2 2 +2 2 2 2 +15 2 3 3 +3 3 2 0 +2 2 0 3 +12 3 1 3 +9 0 2 2 +9 0 1 1 +15 3 3 3 +2 3 3 3 +15 0 3 0 +3 0 3 2 +9 3 3 0 +9 2 1 3 +2 3 0 1 +12 1 1 1 +1 0 3 0 +2 0 3 0 +2 0 2 0 +15 0 2 2 +9 2 3 1 +9 2 1 0 +5 0 3 1 +2 1 2 1 +15 1 2 2 +9 3 1 1 +9 3 1 3 +10 0 1 0 +2 0 2 0 +15 2 0 2 +3 2 3 3 +2 2 0 0 +12 0 3 0 +9 2 0 1 +9 1 2 2 +13 1 0 0 +2 0 3 0 +2 0 3 0 +15 0 3 3 +3 3 1 1 +2 0 0 0 +12 0 2 0 +9 3 3 2 +9 1 2 3 +13 0 2 3 +2 3 2 3 +15 1 3 1 +9 1 2 3 +9 0 0 0 +9 0 0 2 +15 3 3 2 +2 2 1 2 +15 2 1 1 +3 1 1 2 +9 2 2 3 +9 2 1 1 +9 2 3 0 +5 0 3 3 +2 3 2 3 +2 3 1 3 +15 2 3 2 +3 2 0 3 +2 0 0 2 +12 2 2 2 +2 1 0 0 +12 0 1 0 +3 0 2 1 +2 1 3 1 +15 1 3 3 +3 3 0 1 +9 1 3 3 +9 3 1 0 +13 2 0 3 +2 3 3 3 +15 3 1 1 +3 1 0 3 +9 1 2 0 +9 3 1 2 +9 3 1 1 +12 0 1 1 +2 1 1 1 +2 1 1 1 +15 1 3 3 +3 3 2 2 +9 2 2 3 +9 3 2 0 +9 2 0 1 +1 0 1 3 +2 3 1 3 +15 2 3 2 +9 0 2 3 +4 1 3 0 +2 0 3 0 +15 2 0 2 +3 2 0 0 +2 1 0 1 +12 1 1 1 +2 0 0 2 +12 2 3 2 +14 3 2 3 +2 3 3 3 +2 3 1 3 +15 0 3 0 +3 0 0 3 +9 0 0 2 +9 3 3 0 +11 2 0 2 +2 2 2 2 +15 2 3 3 +3 3 1 0 +9 2 3 3 +2 1 0 2 +12 2 2 2 +9 3 1 1 +10 2 1 2 +2 2 1 2 +15 2 0 0 +3 0 3 1 +9 2 3 0 +9 2 2 2 +5 0 3 2 +2 2 3 2 +15 1 2 1 +3 1 3 2 +2 1 0 1 +12 1 1 1 +9 1 2 3 +7 1 0 1 +2 1 3 1 +15 2 1 2 +9 3 0 1 +8 0 3 3 +2 3 1 3 +15 2 3 2 +3 2 2 1 +9 0 0 2 +9 3 3 3 +2 3 0 0 +12 0 3 0 +11 2 0 0 +2 0 2 0 +15 0 1 1 +9 2 0 2 +9 0 1 3 +9 2 2 0 +6 3 2 3 +2 3 2 3 +2 3 1 3 +15 3 1 1 +9 0 0 2 +9 2 1 3 +9 3 1 0 +1 0 3 3 +2 3 2 3 +2 3 3 3 +15 3 1 1 +2 2 0 0 +12 0 2 0 +2 3 0 3 +12 3 0 3 +9 2 1 2 +4 0 3 0 +2 0 1 0 +15 0 1 1 +2 1 0 0 +12 0 1 0 +2 2 0 2 +12 2 3 2 +2 1 0 3 +12 3 2 3 +15 0 0 3 +2 3 2 3 +2 3 1 3 +15 1 3 1 +3 1 3 2 +2 3 0 0 +12 0 2 0 +2 0 0 3 +12 3 1 3 +9 0 1 1 +7 3 0 1 +2 1 2 1 +2 1 1 1 +15 2 1 2 +3 2 0 0 +9 3 0 2 +9 0 3 1 +2 3 2 3 +2 3 3 3 +15 0 3 0 +3 0 3 1 +2 0 0 3 +12 3 2 3 +9 1 1 0 +9 0 0 2 +14 2 3 3 +2 3 2 3 +15 1 3 1 +9 3 3 0 +9 2 0 2 +9 3 0 3 +13 2 0 2 +2 2 3 2 +15 2 1 1 +3 1 0 3 +9 2 3 2 +9 1 0 1 +9 1 3 0 +3 0 2 0 +2 0 3 0 +2 0 2 0 +15 3 0 3 +9 0 3 2 +9 3 2 0 +2 1 2 0 +2 0 2 0 +15 0 3 3 +3 3 1 0 +9 1 3 3 +9 0 3 1 +9 1 0 2 +12 3 1 1 +2 1 2 1 +2 1 1 1 +15 0 1 0 +3 0 3 2 +9 2 2 1 +9 2 2 0 +8 0 3 1 +2 1 3 1 +2 1 2 1 +15 1 2 2 +3 2 2 0 +2 0 0 3 +12 3 0 3 +9 0 0 1 +9 3 1 2 +14 3 2 1 +2 1 3 1 +15 0 1 0 +3 0 2 2 +9 2 2 3 +9 3 1 1 +9 2 2 0 +1 1 0 0 +2 0 1 0 +15 2 0 2 +3 2 0 1 +9 1 2 3 +2 2 0 2 +12 2 1 2 +9 2 2 0 +8 0 3 0 +2 0 2 0 +2 0 3 0 +15 0 1 1 +3 1 0 0 +9 2 3 1 +9 3 1 2 +2 3 2 2 +2 2 1 2 +15 0 2 0 +3 0 2 2 +9 3 2 1 +2 0 0 0 +12 0 0 0 +9 3 0 0 +2 0 1 0 +15 0 2 2 +2 3 0 0 +12 0 1 0 +2 3 0 3 +12 3 2 3 +12 0 1 0 +2 0 3 0 +15 2 0 2 +3 2 3 1 +9 3 2 0 +9 2 1 2 +9 0 1 3 +10 2 0 3 +2 3 1 3 +15 3 1 1 +3 1 3 0 +9 3 2 1 +9 1 2 3 +12 3 1 3 +2 3 1 3 +15 0 3 0 +3 0 0 1 +9 2 0 0 +9 2 0 3 +5 0 3 3 +2 3 1 3 +15 1 3 1 +3 1 2 2 +9 0 1 1 +9 1 0 0 +9 2 0 3 +15 0 0 0 +2 0 1 0 +15 2 0 2 +3 2 1 1 +2 1 0 2 +12 2 3 2 +9 2 2 0 +5 0 3 2 +2 2 2 2 +15 1 2 1 +3 1 2 0 +9 3 3 1 +2 2 0 3 +12 3 0 3 +9 3 0 2 +14 3 2 2 +2 2 3 2 +15 2 0 0 +3 0 3 1 +9 0 2 0 +9 1 0 2 +9 2 0 3 +2 3 2 3 +2 3 1 3 +15 1 3 1 +3 1 1 3 +9 3 1 1 +9 2 0 0 +9 3 0 2 +13 0 2 0 +2 0 1 0 +15 0 3 3 +3 3 3 2 +9 1 0 0 +9 2 1 3 +7 0 3 0 +2 0 1 0 +2 0 1 0 +15 0 2 2 +3 2 0 0 +9 0 2 3 +9 2 2 2 +6 3 2 2 +2 2 1 2 +15 0 2 0 +3 0 1 1 +9 3 1 0 +2 1 0 2 +12 2 1 2 +9 3 0 3 +9 2 3 0 +2 0 3 0 +15 0 1 1 +3 1 3 3 +9 3 1 0 +9 3 3 2 +9 3 1 1 +0 1 2 2 +2 2 2 2 +15 3 2 3 +3 3 2 1 +9 2 0 2 +9 2 1 3 +1 0 3 0 +2 0 3 0 +15 0 1 1 +3 1 2 2 +9 2 0 1 +2 1 0 0 +12 0 1 0 +7 0 3 0 +2 0 1 0 +15 0 2 2 +3 2 0 1 +9 2 2 0 +9 3 1 2 +2 3 0 3 +12 3 1 3 +7 3 0 0 +2 0 1 0 +15 1 0 1 +9 3 2 0 +9 1 2 2 +0 0 2 2 +2 2 3 2 +15 2 1 1 +3 1 0 3 +9 0 1 2 +2 1 0 1 +12 1 0 1 +0 0 2 0 +2 0 3 0 +15 3 0 3 +3 3 0 0 +9 2 1 1 +9 3 0 2 +9 2 2 3 +4 1 3 2 +2 2 1 2 +2 2 1 2 +15 2 0 0`; diff --git a/day-16/operations.mjs b/day-16/operations.mjs new file mode 100644 index 0000000..b6433b2 --- /dev/null +++ b/day-16/operations.mjs @@ -0,0 +1,114 @@ +/* eslint-disable max-len, no-param-reassign, no-unused-vars */ + +/* Addition */ + +// addr (add register) stores into register C the result of adding register A and register B. +export const addr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] + data[inputB]; +}; + +// addi (add immediate) stores into register C the result of adding register A and value B. +export const addi = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] + inputB; +}; + +/* Multiplication */ + +// mulr (multiply register) stores into register C the result of multiplying register A and register B. +export const mulr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] * data[inputB]; +}; + +// muli (multiply immediate) stores into register C the result of multiplying register A and value B. +export const muli = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] * inputB; +}; + +/* Bitwise AND */ + +// banr (bitwise AND register) stores into register C the result of the bitwise AND of register A and register B. +export const banr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] & data[inputB]; +}; + +// bani (bitwise AND immediate) stores into register C the result of the bitwise AND of register A and value B. +export const bani = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] & inputB; +}; + +/* Bitwise OR */ + +// borr (bitwise OR register) stores into register C the result of the bitwise OR of register A and register B. +export const borr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] | data[inputB]; +}; + +// bori (bitwise OR immediate) stores into register C the result of the bitwise OR of register A and value B. +export const bori = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] | inputB; +}; + +/* Assignment */ + +// setr (set register) copies the contents of register A into register C. (Input B is ignored.) +export const setr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA]; +}; + +// seti (set immediate) stores value A into register C. (Input B is ignored.) +export const seti = (data, inputA, inputB, outputC) => { + data[outputC] = inputA; +}; + +/* Greater-than testing */ + +// gtir (greater-than immediate/register) sets register C to 1 if value A is greater than register B. Otherwise, register C is set to 0. +export const gtir = (data, inputA, inputB, outputC) => { + data[outputC] = inputA > data[inputB] ? 1 : 0; +}; + +// gtri (greater-than register/immediate) sets register C to 1 if register A is greater than value B. Otherwise, register C is set to 0. +export const gtri = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] > inputB ? 1 : 0; +}; + +// gtrr (greater-than register/register) sets register C to 1 if register A is greater than register B. Otherwise, register C is set to 0. +export const gtrr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] > data[inputB] ? 1 : 0; +}; + +/* Equality testing */ + +// eqir (equal immediate/register) sets register C to 1 if value A is equal to register B. Otherwise, register C is set to 0. +export const eqir = (data, inputA, inputB, outputC) => { + data[outputC] = inputA === data[inputB] ? 1 : 0; +}; + +// eqri (equal register/immediate) sets register C to 1 if register A is equal to value B. Otherwise, register C is set to 0. +export const eqri = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] === inputB ? 1 : 0; +}; + +// eqrr (equal register/register) sets register C to 1 if register A is equal to register B. Otherwise, register C is set to 0. +export const eqrr = (data, inputA, inputB, outputC) => { + data[outputC] = data[inputA] === data[inputB] ? 1 : 0; +}; + +export default [ + addr, + addi, + mulr, + muli, + banr, + bani, + borr, + bori, + setr, + seti, + gtir, + gtri, + gtrr, + eqir, + eqri, + eqrr, +];