Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2020, 12:14
Интересующийся
Отправить личное сообщение для OlesiaBOM Посмотреть профиль Найти все сообщения от OlesiaBOM
 
Регистрация: 05.11.2020
Сообщений: 22

[js] Проблема с массивами.
Доброе время суток!

Нужна функция getLocation, которая будет принимать массив начальных координат coordinates (в виде [x, y]), массив истории команд роботу commands и возвращать массив конечных координат робота в том же виде ( [x, y])

Напомню возможные команды роботу:

"forward" - прямо x + 0, y + 1,
"back" - назад x + 0, y - 1,
"right" - направо x + 1, y + 0,
"left" - налево x - 1, y + 0,

Примеры:

getLocation([0, 0], ['forward', 'right']) === [1, 1]
getLocation([2, 3], ['back', 'back', 'back', 'right']) === [3, 0]
getLocation([0, 5], ['back', 'back', 'back', 'right', 'left', 'forward']) === [0, 3]
Вот кусок программы, идеи кочились((((
function getLocation(coordinates, commands) {
var arr =[0,0];
var arr1 = coordinates;
var arr2=[0,0];
for(var i = 0; i < commands.length; i++){
switch(commands[i]){

case 'forward':
arr2 =[0,1];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

case 'back':
arr2 =[0,-1];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

case 'right':
arr2 =[1,0];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

case 'left':
arr2 =[-1,0];
for(var i = 0; i < arr2.length; i++) {
arr.push(arr1[i]+arr2[i]);
arr.shift();
}
return arr;

}
}
}
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2020, 12:44
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Либо у вас все слишком сложно, либо я чего то не понял.
А почему не так
function getLocation(coordinates, commands) {
	const arr =[...coordinates];
	for(let i = 0; i < commands.length; i++){
		switch(commands[i]){
			case 'forward': arr[1]++; break;
			case 'back': arr[1]--; break;
			case 'right': arr[0]++; break;
			case 'left': arr[0]--; break;
		}
	}
	return arr;
}

console.log( getLocation([0, 0], ['forward', 'right']) ); 
console.log( getLocation([2, 3], ['back', 'back', 'back', 'right']) );
console.log( getLocation([0, 5], ['back', 'back', 'back', 'right', 'left', 'forward']) );
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2020, 12:51
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

function getLocation(coordinates, commands) {
  var arr = coordinates.slice();
  commands.forEach(cmd => {
    arr[0] += cmd === 'left' ? -1 : cmd === 'right' ? 1 : 0
    arr[1] += cmd === 'back' ? -1 : cmd === 'forward' ? 1 : 0
  })
  return arr;
}
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2020, 12:59
Интересующийся
Отправить личное сообщение для OlesiaBOM Посмотреть профиль Найти все сообщения от OlesiaBOM
 
Регистрация: 05.11.2020
Сообщений: 22

Спасибо за помощь!
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2020, 13:03
Интересующийся
Отправить личное сообщение для OlesiaBOM Посмотреть профиль Найти все сообщения от OlesiaBOM
 
Регистрация: 05.11.2020
Сообщений: 22

Нет у меня сложно
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена background при нажатии JIeuTo Общие вопросы Javascript 5 14.09.2018 18:48
Проблема с двойными массивами Пашка Общие вопросы Javascript 5 18.05.2014 20:27
Проблема с массивами HaseProgram Общие вопросы Javascript 2 23.02.2013 19:51
Проблема с массивами! Solovei95 Общие вопросы Javascript 1 23.05.2011 13:15
Проблема с массивами. RRRinat Общие вопросы Javascript 2 20.06.2009 23:10