Vassil_Iliev

perfe

May 31st, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const input =
  2.     [
  3.         '7 4',
  4.         '1 5 4 7'
  5.     ]
  6.  
  7. let print = this.print || console.log;
  8. let gets = this.gets || ((arr, index) => () => arr[index++])(input, 0);
  9.  
  10. try {
  11.     class NodeList {
  12.         constructor(val) {
  13.             this.val = val;
  14.             this.next = null;
  15.             this.prev = null;
  16.         }
  17.     }
  18.  
  19.     class DLL {
  20.  
  21.         constructor() {
  22.             this.tail;
  23.             this.head;
  24.             this.map = new Map();
  25.         }
  26.  
  27.         createList(num) {
  28.             for (let i = 1; i <= num; i++) {
  29.  
  30.                 if (!this.head) {
  31.                     const newNode = new NodeList(i);
  32.                     this.head = newNode
  33.                     this.tail = newNode;
  34.                     this.map.set(i, newNode);
  35.                 } else {
  36.                     const newNode = new NodeList(i);
  37.                     newNode.prev = this.tail;
  38.                     this.tail.next = newNode;
  39.                     this.tail = newNode;
  40.                     this.map.set(i, newNode);
  41.                 }
  42.             }
  43.         }
  44.  
  45.         toString() {
  46.             let temp = this.head
  47.             let str = ''
  48.             while (temp != null) {
  49.                 if (temp.next === null) {
  50.                     str += temp.val;
  51.                     temp = temp.next;
  52.                 } else {
  53.                     str += temp.val + ' '
  54.                     temp = temp.next;
  55.                 }
  56.             }
  57.             return str;
  58.         }
  59.  
  60.         shuffle(shuffleNumber) {
  61.             let insertAfter;
  62.  
  63.             if (shuffleNumber % 2 === 0)
  64.                 insertAfter = shuffleNumber / 2;
  65.  
  66.             if (shuffleNumber % 2 != 0)
  67.                 insertAfter = shuffleNumber * 2;
  68.  
  69.             if (insertAfter > this.map.size)
  70.                 insertAfter = this.map.size;
  71.  
  72.             if (insertAfter === shuffleNumber) return;
  73.  
  74.             const removeNode = this.map.get(shuffleNumber);
  75.  
  76.             if (removeNode === this.head) {
  77.                 this.head = this.head.next;
  78.                 this.head.prev = null;
  79.                 removeNode.next = null;
  80.                 removeNode.prev = null;
  81.             } else if (removeNode === this.tail) {
  82.                 this.tail = this.tail.prev;
  83.                 this.tail.next = null;
  84.                 removeNode.next = null;
  85.                 removeNode.prev = null;
  86.             } else {
  87.                 removeNode.prev.next = removeNode.next;
  88.                 removeNode.next.prev = removeNode.prev;
  89.                 removeNode.next = null;
  90.                 removeNode.prev = null;
  91.             }
  92.  
  93.             const insertNode = this.map.get(insertAfter);
  94.  
  95.             if (insertNode === this.head) {
  96.                 removeNode.next = this.head.next;
  97.                 removeNode.prev = this.head;
  98.                 this.head.next.prev = removeNode;
  99.                 this.head.next = removeNode;
  100.             } else if (insertNode === this.tail) {
  101.                 removeNode.prev = this.tail;
  102.                 this.tail.next = removeNode;
  103.                 this.tail = removeNode;
  104.             } else {
  105.                 removeNode.next = insertNode.next;
  106.                 removeNode.prev = insertNode
  107.                 insertNode.next.prev = removeNode;
  108.                 insertNode.next = removeNode;
  109.             }
  110.         }
  111.     }
  112.  
  113.     const N = gets().split(' ').map(Number)
  114.     const M = gets().split(' ').map(Number)
  115.     const list = new DLL();
  116.  
  117.     list.createList(N[0]);
  118.  
  119.     for (let i = 0; i < N[1]; i++) {
  120.         list.shuffle(M[i]);
  121.     }
  122.  
  123.     print(list.toString());
  124.  
  125. } catch (error) {
  126.     console.log(error)
  127. }
Advertisement
Add Comment
Please, Sign In to add comment