Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fs = require("fs");
- const path = require("path");
- const input = fs.openSync(__dirname + path.sep + "input.txt", "r");
- const output = fs.openSync(__dirname + path.sep + "output.txt", "w");
- let buffer = Buffer.alloc(65536);
- let linesCount;
- let numbersCount;
- let numbers = [...(new Array(101))].map(v => 0);
- for (let number of numberSequence()) {
- if (!linesCount) {
- linesCount = number;
- } else if (number === -1 && linesCount > 0) {
- numbersCount = -1;
- linesCount--;
- } else if (numbersCount === -1) {
- numbersCount = number;
- } else if (numbersCount > 0) {
- numbers[number]++;
- numbersCount--;
- }
- }
- writeOutput();
- function* numberSequence() {
- let inputPosition = 0;
- let bufferLength = 0;
- let numberReading = false;
- let number;
- while (bufferLength = fs.readSync(input, buffer, 0, buffer.length, inputPosition)) {
- inputPosition += bufferLength;
- for (let i = 0; i < bufferLength; i++) {
- if (48 <= buffer[i] && buffer[i] <= 57) {
- if (!numberReading) {
- numberReading = true;
- number = 0;
- }
- number = number * 10 + buffer[i] - 48;
- } else if (buffer[i] === 10) {
- if (numberReading) {
- numberReading = false;
- yield number;
- }
- yield -1;
- } else if (numberReading) {
- numberReading = false;
- yield number;
- }
- }
- }
- if (numberReading) {
- yield number;
- }
- }
- function writeOutput() {
- let removeFirstSpace = true;
- numbers.forEach((count, number) => {
- if (!count) {
- return;
- }
- let str = " " + number;
- let align = buffer.length % str.length;
- let bytesToWrite = str.length * count;
- buffer.fill(str);
- while (bytesToWrite > 0) {
- let chunkLength = bytesToWrite > buffer.length ? buffer.length - align : bytesToWrite;
- let offset = 0;
- bytesToWrite -= chunkLength;
- if (removeFirstSpace) {
- offset = 1;
- chunkLength--;
- removeFirstSpace = false;
- }
- fs.writeSync(output, buffer, offset, chunkLength);
- }
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement