Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(input) {
- let length = Number(input.shift()); //взимаме дължината на полето, отрязвайки първия елемент от входящия масив
- let bugIndexes = input.shift().split(' '); //правим си масив с индексите на калинките, отрязвайки и втория елемент, който сега се явява пръв, от входящия масив
- let fieldArr = new Array(length); //полето с определената дължина. На него трябва да сложим калинките
- fieldArr.fill(0); //пълним полето с нули на всеки индекс
- let startIndex = 0;
- let steps = 0;
- let posoka = '';
- //console.log(fieldArr)
- for (let i = 0; i < bugIndexes.length; i++) { //обхождаме масива с позициите на калинките
- let posIndex = bugIndexes[i]; //взимаме стойносттите на елементите от масива с позициите на калинките
- fieldArr[posIndex] = 1; //и поставяме калинка на съответните места в масива с полето
- }
- let movesArr = [];
- //console.log(input)
- for (let i = 0; i < input.length; i++) { //обхождаме масива, в който са останали инструкциите за вдижение на калинките
- movesArr.push(input[i].split(' ')); //вкарваме ги в друг масив, в който всяка една инструкция от типа '0 right 1' е отделен масив с 3 елемента
- }
- //console.log(movesArr)
- for (let i = 0; i < movesArr.length; i++) { //ДВУМЕРЕН масив с инструкции под формата на масиви за движение на калинките
- //не ги обхождаме с вложен цикъл, защото няма смисъл
- startIndex = Number(movesArr[i][0]);
- posoka = movesArr[i][1];
- steps = Number(movesArr[i][2]);
- //console.log(fieldArr)
- if (fieldArr[startIndex] != 1) { //ако ни дадат стартов индекс, на който няма калинка - нищо не се случва
- continue;
- } else if (startIndex < 0 || startIndex > fieldArr.length - 1) { //ако ни дадат стартов индекс, който е извън границите на масива с полето - нищо не се случва
- continue;
- } else {
- if (posoka == 'right') { //right
- if (startIndex != fieldArr.length - 1) { //първо проверяваме дали позицията не е последната в масива след като ще калинката лети надясно
- //ако стартовата позиция не е последната в масива, влизаме надолу, за да търсим, дали може да кацне някъде
- if (fieldArr[startIndex + steps] == 0) { //ако позицията за кацане е свободна, калинката каца и освобождава предишната си позиция и всичко свършва тук
- fieldArr[startIndex + steps] = 1;
- fieldArr[startIndex] = 0;
- } else { //ако не е свободна позицията за кацане, калинката започва да търси свободна. Ако не намери - отлита завинаги.
- for (let k = startIndex + steps; k < fieldArr.length; k++) {
- if (k == fieldArr.length - 1 && fieldArr[fieldArr.length] != 0) { //ако сме стигнали края на масива и последната позиция е заета, калинката отлита и освобождава мястото си, цикъла приключва.
- fieldArr[startIndex] = 0;
- break;
- } else {
- if (fieldArr[k] == 0) {
- fieldArr[k] = 1;
- fieldArr[startIndex] = 0;
- break;
- }
- }
- }
- }
- } else { //калинката директно излита от масива и освобождава досегашното си място
- fieldArr[startIndex] = 0;
- }
- //край на логика за ДЯСНА посока
- } else { //left
- if (startIndex != 0) { //първо проверяваме дали позицията не е на първата 0-лева позиция на масива
- //ако стартовата позиция не е последната в масива, влизаме надолу, за да търсим, дали може да кацне някъде
- if (fieldArr[startIndex - steps] == 0) { //ако позицията за кацане е свободна, калинката каца и освобождава предишната си позиция и всичко свършва тук
- fieldArr[startIndex - steps] = 1;
- fieldArr[startIndex] = 0;
- } else { //ако не е свободна позицията за кацане, калинката почва да търси свободна. Ако не намери - отлита завинаги.
- for (let k = startIndex - steps; k >= 0; k--) {
- if (k == 0 && fieldArr[k] != 0) { //ако сме стигнали края (началото му) на масива и последната позиция е заета, калинката отлита и освобождава мястото си, цикъла приключва.
- fieldArr[startIndex] = 0;
- break;
- } else {
- if (fieldArr[k] == 0) {
- fieldArr[k] = 1;
- fieldArr[startIndex] = 0;
- break;
- }
- }
- }
- }
- } else { //ако стартовия индекс на калинката е 0, тя директно излита от масива и освобождава досегашното си място
- fieldArr[startIndex] = 0;
- }
- }
- }
- }
- //console.log(fieldArr)
- console.log(fieldArr.join(' '));
- }
- solve([3, '0 1', '0 right 1', '2 right 1']);
- solve([3, '0 1 2', '0 right 1', '1 right 1', '2 right 1']);
- solve([5, '3', '3 left 2', '1 left -2']);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement