Вступ:
Хоча спочатку у мене була голова голландської пісні, де тексти пісень: " Doe 'n stapje naar voren, en' n stapje terug " (що перекладається на " Зробіть трохи крок вперед і трохи зробіть крок назад "), коли Я шукав повні тексти пісень, зрозумів, що вони тільки повертаються туди і назад, і ніколи не збоку.
Отже, замість цього я зараз використовую тексти пісень містера C The Slide Man aka DJ Casper - Cha-Cha Slide для цього виклику.
Якщо ми проігноруємо все інше і подивимось лише на слова "ліворуч", "праворуч", "назад" та "хоп" (я порахував "хоп" вперед), включаючи згадані суми, повна пісня буде мати наступний список ( Я тут використовую абревіатури LRBH):
LBHRLLBHRLBHHRRLLLRLBHHHHRRLLLBHHHHHRLRLRLHRLLBHHLRLBHH
Ось повна пісня пісні у прихованому фрагменті коду JavaScript (щоб заощадити місце), де ходи та суми оточені заблокованими дужками:
Виклик:
Тепер на сам виклик. Беремо один, два чи три входи † . Один з них - це список індексованих чисел (тобто або негативних для 0-індексованих; або позитивних для 1-індексованих). (Інші входи необов’язкові та пояснені в правилах виклику.)
Кожен тестовий випадок розпочнеться з позиції {x=0, y=0}
.
Тепер скористайтеся списком текстів рухів та видаліть усі рухи за заданими індексами вхідного списку. Потім перейдіть по ходах (до найбільшого індексу вхідного масиву) і виведіть позицію, в якій ви опинитеся.
Рухи змінять координати так:
- R
: x+1
- L
: x-1
- H
: y+1
- B
:y-1
Правила виклику:
- До списку рухів можна отримати доступ будь-яким способом. †: може бути додатковим входом; може бути у відокремленому файлі на диску, з якого ви будете читати; може бути в змінній рівня класу, до якої ви отримуєте доступ. Він повинен буде знаходитися в формі
L
,R
,B
іH
хоча (може бути рядок або символ-лист / масив), так що ви не можете зберегти рухається-лист , як1
з і-1
х або цілих чисел. - Список поданих вище рухів є жорстким кодом і завжди буде однаковим. (І тому також непогано розміщувати його як поле рівня класу, а не вважати його вхідним, якщо це допомагає підрахунку байтів вашої відповіді.)
- Список вводу може бути як 0-індексованим, так і 1-індексованим (залежить від вас)
- Ми лише "просуваємо" кроки до та виключаємо найбільший індекс списку.
- †: Ви також можете приймати цей останній елемент як окремий цілий вхід, а не останній елемент вхідного масиву.
- Виведення координат x і y, у яких ми закінчуємо, може бути у будь-якому розумному форматі (цілий масив, що містить два елементи, обмежений рядок, надрукований на STDOUT на двох відокремлених рядках тощо)
- Ви можете припустити, що список вхідних даних сортується від найнижчого до найвищого (або найвищого до найнижчого, якщо це те, що ви віддаєте перевагу; у цьому випадку перший пункт - це початковий розмір списку переміщень - якщо він не приймається як окремий вхід). І він також не буде містити дублюваних індексів.
- Якщо найбільший індекс вхідного списку більший, ніж перелік звернень вище (55 ходів - у списку переходів вище), ми знову завертаємося до початку списку (стільки разів, скільки потрібно, залежно від найбільшого індексу входу).
- Вам дозволяється виводити
y,x
замість цьогоx,y
, але, будь ласка, вкажіть це у своїй відповіді.
Приклад:
Вхід: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
Тут переміщення та (0-індекси) індекси один над одним:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64
L, B, H, R, L, L, B, H, R, L, B, H, H, R, R, L, L, L, R, L, B, H, H, H, H, R, R, L, L, L, B, H, H, H, H, H, R, L, R, L, R, L, H, R, L, L, B, H, H, L, R, L, B, H, H, L, B, H, R, L, L, B, H, R, L
Видаляючи індекси списку вхідних даних, у нас залишиться такий список переходів:
1, 2, 3, 5, 6, 7, 9,11,12,15,16,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,35,36,37,38,39,40,41,45,46,47,48,49,51,52,54,55,57,58,61,62,63
B, H, R, L, B, H, L, H, H, L, L, L, R, L, B, H, H, H, H, R, R, L, L, B, H, H, H, H, R, L, R, L, R, L, L, B, H, H, L, L, B, H, L, H, R, B, H, R
Тепер, якщо ми підемо з позиції {0, 0}
на інші рухи, у нас з’являться такі нові координати після кожного руху:
{0,0};B,{0,-1};H,{0,0};R,{1,0};L,{0,0};B,{0,-1};H,{0,0};L,{-1,0};H,{-1,1};H,{-1,2};L,{-2,2};L,{-3,2};L,{-4,2};R,{-3,2};L,{-4,2};B,{-4,1};H,{-4,2};H,{-4,3};H,{-4,3};H,{-4,5};R,{-3,5};R,{-2,5};L,{-3,5};L,{-4,5};B,{-4,4};H,{-4,5};H,{-4,6};H,{-4,7};H,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};R,{-3,8};L,{-4,8};L,{-5,8};B,{-5,7};H,{-5,8};H,{-5,9};L,{-6,9};L,{-7,9};B,{-7,8};H,{-7,9};L,{-8,9};H,{-8,10};R,{-7,10};B,{-7,9};H,{-7,10};R,{-6,10}
Таким чином, кінцевий результат буде: {-6, 10}
Загальні правила:
- Це код-гольф , тому найкоротша відповідь у байтах виграє.
Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування. - Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу return. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду.
- Також настійно рекомендується додавати пояснення до своєї відповіді.
Тестові приклади:
0-indexed input: [0,4,8,10,13,14,27,34,42,43,44,50,53,56,59,60,64]
1-indexed input: [1,5,9,11,14,15,28,35,43,44,45,51,54,57,60,61,65]
Output: {-6, 10}
0-indexed input: [55] (Note: There are 55 moves in the unmodified list)
1-indexed input: [56] (Note: There are 55 moves in the unmodified list)
Output: {-6, 11}
0-indexed input: [0,1,4,5,6,9,10,15,16,17,19,20,27,29,30,37,38,39,41,44,45,46,49,51,52]
1-indexed input: [1,2,5,6,7,10,11,16,17,18,20,21,28,30,31,38,39,40,42,45,46,47,50,52,53]
Output: {10, 16}
0-indexed input: [2,3,7,8,11,12,13,14,18,21,22,23,24,25,26,31,32,33,34,35,36,38,40,42,43,47,48,50,53]
1-indexed input: [3,4,8,9,12,13,14,15,19,22,23,24,25,26,27,32,33,34,35,36,37,39,41,43,44,48,49,51,54]
Output: {-18, -7}
0-indexed input: [0]
1-indexed input: [1]
Output: {0, 0}
0-indexed input: [4,6,7,11,12,13,15,17,20,28,31,36,40,51,59,66,73,74,80,89,92,112,113,114,116,120,122,125,129,134,136,140,145,156,161,162,165,169,171,175,176,178,187,191,200]
1-indexed input: [5,7,8,12,13,14,16,18,21,29,32,37,41,52,60,67,74,75,81,90,93,113,114,115,117,121,123,126,130,135,137,141,146,157,162,163,166,170,172,176,177,179,188,192,201]
Output: {-17, 37}
0-indexed input: [25,50,75,100,125,150,175,200,225,250]
1-indexed input: [26,51,76,101,126,151,176,201,226,251]
Output: {-28, 49}