Хотите попрактиковаться в JavaScript и потенциально выиграть по-крупному? Оцените красивую задачу JavaScript от CodeFights

ИЗМЕНИТЬ 21.08.17 - Конкурс завершен.

Вот отличный способ написать код JavaScript и выиграть путевку в Сан-Франциско по системе «все включено»!

Приз

Трое победителей получают путевку в Сан-Франциско по системе «все включено», включая билет туда и обратно и три ночи в отеле в центре города.

Конкурс

Думайте об этой задаче как о конкурсе красоты для кода. Напишите свое решение на самом элегантном языке JavaScript, доработайте его и нажмите «Отправить». Наша судейская коллегия, старшие инженеры CodeFights, будет искать код, который будет выразительным, читаемым и кратким. В качестве победителей они выберут три самых красивых решения этой задачи!

Соревнование

CFBot хранит всю свою важную информацию в секретных архивах. CodeMaster пытается взломать замок! Замок представляет собой металлический прямоугольник, состоящий из подвижных ячеек, уникален, и его сложно вскрыть. Некоторые камеры замка заняты, а некоторые пусты. Замок разблокируется, когда занятые ячейки образуют определенную конфигурацию.

CodeMaster планирует приложить магниты к 4 сторонам замка (по одной стороне за раз), чтобы ячейки были выровнены правильно. У CodeMaster не так много времени, чтобы попытаться взломать замок, прежде чем CFBot найдет его, и он не хочет тратить время на пробу различных последовательностей. Итак, вы собираетесь помочь ему, реализовав функцию, которая при заданной последовательности операций будет выводить конечное состояние блокировки.

Замок представлен в виде матрицы. Занятые ячейки замка обозначаются заглавной английской буквой A-Z, а его пустые ячейки обозначаются .. Когда CodeMaster помещает магнит на одну из сторон замка, все занятые ячейки смещаются к этому концу замка.

Последовательность действий представляет собой строку, которая может содержать заглавные английские буквы L (слева), R (справа), D (вниз) и U (вверх), которые представляют сторону замка, на которую CodeMaster помещает магнит. < br /> Учитывая начальное состояние блокировки и последовательность действий, ваша функция должна вернуть окончательное состояние блокировки в Секретные Архивы.

Пример

Для примера, показанного выше, у нас есть

lock = ["....",
        "AB..",
        ".C..",
        "...."]

и actions = "RDL", поэтому результат должен быть

secretArchivesLock(lock, actions) = ["....",
                                     "....",
                                     "B...",
                                     "AC.."]

Ввод / вывод

[input] - array.string «замок»

  • Занятые ячейки замка обозначаются заглавной английской буквой A-Z, а его пустые ячейки обозначаются ..

[ввод] - строка «действия»

  • Каждый элемент в этой строке - это L, R, D или U (левый, правый, нижний или верхний) и указывает сторону замка, на которую CodeMaster поместил магнит.

[вывод] - array.string

  • Окончательное состояние замка Секретных архивов.

Принять участие в конкурсе

Готовы попробовать? Это непросто. Как только вы придумали свое решение, не забудьте потратить некоторое время на его усовершенствование. Судьи ищут:

код: выразительный, читаемый и сжатый.

Это означает, что это не соревнование по гольфу. Самый короткий код не обязательно выиграет, поскольку более короткий код обычно не очень удобочитаем. Мое решение пришло прямо на 90 строк кода. Кроме того, я хотел бы услышать о ваших испытаниях и невзгодах при решении этой задачи в комментариях (только, пожалуйста, не публикуйте свои решения, пока не закончится конкурс).

О, и конкурс заканчивается 26 июля, так что не забудьте принять участие в этом мероприятии!

Начните писать свое решение здесь. Полные правила конкурса здесь.

Если этот пост был полезен, пожалуйста, нажмите кнопку хлопка 👏 несколько раз ниже, чтобы выразить свою поддержку! ⬇⬇