Вступ, пов’язаний з дітьми
Щоразу, коли я везу своїх дітей до парку розваг, діти стають нервувати, чим ближче ми до парку, так і з нервовим піком, коли ми знаходимось на парковці і не знаходимо місця для паркування. Тому я вирішив, що мені потрібен метод знайти найближче місце для безкоштовного паркування, щоб мінімізувати витрачений час на паркування.
Технічне вступ
Уявіть собі представлення такої автостоянки:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
У цьому поданні - *
це стіна, ·
вільне місце для паркування, E
точка в'їзду та C
автомобіль, які вже припарковані. Кожен пробіл - це положення, яке автомобіль, який можна припаркувати, може використовувати для переміщення навколо стоянки. Тепер давайте розширимо цю концепцію на 3D для створення багаторівневої стоянки:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Числа 1
, 2
і 3
являють собою зв'язок між рівнями. 1
З першим поверхом з'єднується з 1
на другому поверсі , так автомобіль заходячи в1
положення на першому поверсі з'являється в 1
положенні на другому поверсі.
Виклик
Надавши схему парковки, як показано раніше, напишіть найкоротшу програму, яка обчислює відстань до найближчого вільного місця для паркування відповідно до наступного
Правила
- Вхід буде масивом 3D char або 2D-рядковим масивом або еквівалентом, а вихід буде єдиним цілим числом, що представляє кількість кроків, які повинен здійснити автомобіль, щоб дістатися до найближчого вільного місця для паркування. Якщо ви отримуєте масив 3D char, перший індекс може представляти номер поверху, а другий та третій індекси (x, y) положення для кожного поверху, але це залежить від вас.
- Тут не буде більше 9 пандусів, представлених символом
[1-9]
. - Автомобіль починається з
E
положення (на карті буде лише одна точка входу) і кожного разу рухається, використовуючи пробіли в одному з чотирьох напрямків: вгору, вниз, вліво, вправо. Автомобіль також може ступати в·
положення і[1-9]
положення. - Кожна зміна положення (крок) вважається 1, і кожен раз, коли машина їде з одного поверху на інший, вважається 3, оскільки автомобіль повинен проїхати на пандусі. У цьому випадку рух від білого простору поруч із
1
самим1
собою - це те, що вважається 3 кроками, тому що в результаті цього руху автомобіль виявляється в1
положенні на іншому поверсі. - Автомобіль не може вийти за межі матриці.
- Підрахунок закінчиться, коли автомобіль, що буде паркований, знаходиться в тому ж самому положенні, що і автомобіль
·
. Якщо немає доступних вільних місць для паркування, ви можете повернути нуль, від'ємне ціле число, нульове значення або помилку.
Приклади
У наведеному вище прикладі результат був би 32, оскільки дешевше піти на четвертий поверх і припаркуватися на найближчому паркувальному місці біля с 3
. Найближчі безкоштовні паркувальні місця на третьому поверсі знаходяться на відстані 33 та 34.
Інші приклади:
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * 2 * 3 * *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 1 * 2 * 3
**********E****** ***************** ***************** *****************
Answer: 28 (now the parking space in the 2nd floor is closer)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 4 2 5 3 6 *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
4 * 5 1 6 2 * 3
**********E****** ***************** ***************** *****************
Answer: 24 (now it's better to go to ramp 4 and then to ramp 5 to the third floor)
1st floor 2nd floor 3rd floor 4th floor
***************** ***************** ***************** *****************
* 1 * * * 3 * 2
* CCCCCCCCCCCCC * * CCCCCCCCCCCCC * * ····C··CCCCCC * * ······C······ *
* ************* * * ************* * * ************* * * ************* *
* CCCCCCCCCCCCC * * ·CCCCCCCCCCCC * * ···CCCCCCCCCC * * ··C·······C·· *
* * * 3 * 2 * 1
**********E****** ***************** ***************** *****************
Answer: 16 (now the parking space in the 4th floor is closer)
1st floor 2nd floor 3rd floor 4th floor 5th floor
************ ************ ************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC 3 *·CCCCCCCC 4 *········C *
* * * * * * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2 *··CCCCCCC 3 *·······CC 4
************ ************ ************ ************ ************
Answer: 29 (both the nearest parking spaces at the 4th and 5th floors are at the same distance)
1st floor 2nd floor 3rd floor
************ ************ ************
*CCCCCCCCC 1 *CCCCCCCCC 2 *CCCCCCCCC *
* * * * * *
*CCCCCCCCC E *CCCCCCCCC 1 *CCCCCCCCC 2
************ ************ ************
Answer: -1 (no free parking space)
1st floor
************
* *
* *
* E*
************
Answer: -1 (no parking space at all)
1st floor
************
* ····· *
*· ****
* ····· * E
*********
Answer: -1 (the parking lot designer was a genius)
Альтернативи
- Ви можете використовувати будь-які символи, які хочете представити карту парковки, просто вкажіть у своїй відповіді, які саме обрані вами символи та що вони означають.
Це код-гольф , тому може виграти найкоротша програма / метод / лямбда / що завгодно для кожної мови!
Якщо вам потрібна допомога з алгоритмом, будь ласка, перевірте мою (нестворену) реалізацію в C # .