Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. const fs = require("fs");
  2. const path = require("path");
  3. const input = fs.openSync(__dirname + path.sep + "input.txt", "r");
  4. const output = fs.openSync(__dirname + path.sep + "output.txt", "w");
  5. let buffer = Buffer.alloc(65536);
  6. let linesCount = NaN;
  7. let numbersCount;
  8. let numbers = [...(new Array(101))].map(v => 0);
  9.  
  10. for (let number of numberSequence()) {
  11. if (isNaN(linesCount)) {
  12. linesCount = number;
  13. } else if (number === -1 && linesCount > 0) {
  14. numbersCount = -1;
  15. linesCount--;
  16. } else if (numbersCount === -1) {
  17. numbersCount = number;
  18. } else if (numbersCount > 0) {
  19. numbers[number]++;
  20. numbersCount--;
  21. }
  22. }
  23.  
  24. writeOutput();
  25.  
  26. function* numberSequence() {
  27. let inputPosition = 0;
  28. let bufferLength = 0;
  29. let numberReading = false;
  30. let number;
  31.  
  32. while (bufferLength = fs.readSync(input, buffer, 0, buffer.length, inputPosition)) {
  33. inputPosition += bufferLength;
  34.  
  35. for (let i = 0; i < bufferLength; i++) {
  36. if (48 <= buffer[i] && buffer[i] <= 57) {
  37. if (!numberReading) {
  38. numberReading = true;
  39. number = 0;
  40. }
  41.  
  42. number = number * 10 + buffer[i] - 48;
  43. } else if (buffer[i] === 10) {
  44. if (numberReading) {
  45. numberReading = false;
  46.  
  47. yield number;
  48. }
  49.  
  50. yield -1;
  51. } else if (numberReading) {
  52. numberReading = false;
  53.  
  54. yield number;
  55. }
  56. }
  57. }
  58.  
  59. if (numberReading) {
  60. yield number;
  61. }
  62. }
  63.  
  64. function writeOutput() {
  65. let removeFirstSpace = true;
  66.  
  67. numbers.forEach((count, number) => {
  68. if (!count) {
  69. return;
  70. }
  71.  
  72. let str = " " + number;
  73. let align = buffer.length % str.length;
  74. let bytesToWrite = str.length * count;
  75.  
  76. buffer.fill(str);
  77.  
  78. while (bytesToWrite > 0) {
  79. let chunkLength = bytesToWrite > buffer.length ? buffer.length - align : bytesToWrite;
  80. let offset = 0;
  81.  
  82. bytesToWrite -= chunkLength;
  83.  
  84. if (removeFirstSpace) {
  85. offset = 1;
  86. chunkLength--;
  87. removeFirstSpace = false;
  88. }
  89.  
  90. fs.writeSync(output, buffer, offset, chunkLength);
  91. }
  92. });
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement