Это простой двухэтапный тест для wix.com

Hi, you made it! 👋 You are about to face a few puzzles that will require some wit and coding skills to solve. The answer to each puzzle is a number, which you'll use in order to progress to the next step. We'd love to see your code so please save it somewhere shareable (e.g. as a private: https://gist.github.com/)
When you feel ready just type start in the console and press Enter. Good luck!✌️
  • введите «старт» и отправьте (введите)
Ready, set, go! To answer a question simply assign the answer to theanswerparam in the console (e.g. typeanswer = 42 and hit Enter). - #1: Assuming '(' means go up and ')' means go down, which floor will you end up on given the input? The building you are in has an infinite number of floors and an infinite number of basements. You start at floor 0. Your input is: ())))(((()))))() ...
  • после внимательного прочтения задания приступим
// #1 
const str1 = `((())))((() ...`;
let i = 0;
for (let key of str1) {
if (key == "(") i++;
else if (key == ")") i--;
}
console.log("the floor is " + i);
  • как видите, простое решение в виде зацикливания строки и изменения переменной (i), представляющей пол.
  • давайте перейдем к следующему заданию (для этого вам нужно присвоить ответ вида answer = 42 😉
- #2: Assuming '<' means left, '>' means right, '^' means up and 'v' means down, you start at a position in the middle of a huge field, where you have more than enough room to move. You start walking according to the directions in input. How many positions did you visit more than once? The position you start in is considered a visit. Your input is: >vv>v><v>^^
  • внимательно прочитав задание приступим к работе, эта задача посложнее начнем с построения алгоритма решения задачи
  • сначала нам нужно определиться с размером карты (область, которую мы перемещаем, и мы можем отмечать места, которые мы уже посетили)
  • затем нам нужно инициализировать карту нулем = отсутствие посещения и 1 для посещения в середине
  • теперь нам нужно пометить область посещения и подсчитать, когда мы посещаем точку, которую мы уже посещаем (сложность здесь в том, что нам нужно подсчитывать только одну точку на позицию)
  • давайте посмотрим на код сейчас
// #2 const str2 = `>^<v>^< ...`; 
//calc map size 
const buildMap = () => {
    let x = 0,
        y = 0,
        max_x = 0,
        max_y = 0;
    const is_max_x = (x) => Math.abs(x) > max_x ? max_x = Math.abs(x) : false;
    const is_max_y = (x) => Math.abs(y) > max_y ? max_y = Math.abs(y) : false;
    for (let key of str2) {
        switch (key) {
            case '<':
                x -= 1;
                is_max_x(x)
                break;
            case '>':
                x += 1;
                is_max_x(x)
                break;
            case '^':
                y += 1;
                is_max_y(y)
                break;
            case 'v':
                y -= 1;
                is_max_y(y)
                break;
            default:
                console.log('ERR!')
                break;
        }
    }
    //return map size 
    return max_x > max_y ? (max_x * 2) + 1 : (max_y * 2) + 1;
}
const markAsVisit = (x, y) => {
    if (map[x][y] == 1) {
        number_of_visits++;
        map[x][y] = 2;
    } else if (map[x][y] == 2) {
        //ignore 
    } else {
        map[x][y] = 1;
    }
};
const map = [];
const map_size = buildMap();
let x = Math.round(map_size / 2) + 1,
    y = Math.round(map_size / 2) + 1;
// set location to center 
//fill the map 
for (let i = 0; i < map_size; i++) {
    map.push([])
    for (let j = 0; j < map_size; j++) {
        map[i].push(0)
    }
}
map[x][y] = 1;
// visit first 
let number_of_visits = 0;
for (let key of str2) {
    switch (key) {
        case '<':
            x -= 1;
            markAsVisit(x, y) break;
        case '>':
            x += 1;
            markAsVisit(x, y) break;
        case '^':
            y += 1;
            markAsVisit(x, y) break;
        case 'v':
            y -= 1;
            markAsVisit(x, y) break;
        default:
            console.log('ERR!') break;
    }
}
console.log('number_of_visits', number_of_visits);
  • попробуйте скопировать код и запустить его пошагово, так вы сможете понять, как мы упрощаем задачу, разбивая ее на простые рыбы и разбираемся с ними пошагово.

Это была простая разбивка теста, есть много вариантов решения, даже лучшие способы для второй задачи, такие как динамическое изменение размера карты и т. д.…

Первоначально опубликовано на blog.prototypesart.net 18 марта 2018 г.