Детское вступление
Всякий раз, когда я беру своих детей в парк развлечений, дети становятся все более нервными, когда мы ближе к парку, с нервным пиковым моментом, когда мы на стоянке и не можем найти место для парковки. Поэтому я решил, что мне нужен метод, чтобы найти ближайшее свободное парковочное место, чтобы минимизировать время, затрачиваемое на парковку.
Техническое вступление
Вообразите представление парковки как этот:
*****************
* *
* ··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
положении на втором этаже.
Вызов
Предоставляя схему парковки, как показано выше, напишите кратчайшую программу, которая рассчитывает расстояние до ближайшей бесплатной парковки, согласно следующему
правила
- В качестве входных данных будет использоваться массив трехмерных символов или двумерный строковый массив или его эквивалент, а выходными данными будет одно целое число, представляющее количество шагов, которые автомобиль должен предпринять, чтобы добраться до ближайшей бесплатной парковки. Если вы получаете массив трехмерных символов, первый индекс может представлять номер этажа, а второй и третий индексы - позицию (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)
альтернативы
- Вы можете использовать любые символы, которые вы хотите представить на карте парковки, просто укажите в своем ответе, какие символы выбраны и что они значат.
Это код-гольф , поэтому может победить самая короткая программа / метод / лямбда / что угодно для каждого языка!
Если вам нужна помощь с алгоритмом, пожалуйста, проверьте мою (ungolfed) реализацию в C # .