Wstęp dla dzieci
Ilekroć zabieram moje dzieci do wesołego miasteczka, dzieci denerwują się bardziej, gdy jesteśmy bliżej parku, ze szczytem nerwowym, kiedy jesteśmy na parkingu i nie znajdujemy miejsca do parkowania. Zdecydowałem więc, że potrzebuję metody znalezienia najbliższego bezpłatnego miejsca parkingowego, aby zminimalizować czas spędzony na parkowaniu.
Wprowadzenie techniczne
Wyobraź sobie reprezentację parkingu takiego jak ten:
*****************
* *
* ··CC··C··CC·· *
* ************* *
* ··CCCCCCCCC·· *
* *
**********E******
W tym przedstawieniu *
oznacza ścianę, ·
bezpłatne miejsce parkingowe, E
punkt wjazdu i C
już zaparkowany samochód. Każda biała spacja to pozycja, którą może zaparkować samochód, aby poruszać się po parkingu. Teraz rozszerzmy tę koncepcję na 3D, aby stworzyć parking wielopoziomowy:
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****** ***************** ***************** *****************
Liczby 1
, 2
i 3
reprezentują połączenia między poziomami. 1
Od pierwszych Łéczy podłogowych z 1
na drugim piętrze więc stepping samochód na 1
miejscu w pierwszym piętrze pojawia się w 1
pozycji na drugim piętrze.
Wyzwanie
Podając schemat parkingu, jak pokazano wcześniej, napisz najkrótszy program, który oblicza odległość do najbliższego wolnego miejsca parkingowego, zgodnie z poniższym
Zasady
- Dane wejściowe to tablica znaków 3D lub tablica ciągów 2D lub równoważna, a wynikiem będzie pojedyncza liczba całkowita reprezentująca liczbę kroków, jakie samochód musi wykonać, aby dostać się do najbliższego wolnego miejsca parkingowego. Jeśli otrzymasz tablicę znaków 3D, pierwszy indeks może reprezentować numer piętra, a drugi i trzeci indeks pozycji (x, y) dla każdego piętra, ale to zależy od ciebie.
- Nie będzie więcej niż 9 ramp, reprezentowanych przez
[1-9]
. - Samochód startuje z
E
pozycji (na mapie będzie tylko jeden punkt wejścia) i za każdym razem porusza się za pomocą białych znaków w jednym z czterech kierunków: w górę, w dół, w lewo, w prawo. Samochód może również wchodzić na·
pozycje i[1-9]
pozycje. - Każda zmiana pozycji (kroku) liczy się jako 1, a za każdym razem, gdy samochód jedzie z jednej podłogi na drugą, liczy się jako 3, ponieważ samochód musi wjechać na rampę. W tym przypadku ruch z białego miejsca obok znaku
1
do1
samego liczy się jako 3 kroki, ponieważ w wyniku tego ruchu samochód pojawia się w1
pozycji na drugiej podłodze. - Samochód nie może przekroczyć limitów matrycy.
- Liczenie zakończy się, gdy samochód, który ma być zaparkowany, znajduje się w tej samej pozycji co
·
. Jeśli nie ma dostępnych wolnych miejsc parkingowych, możesz zwrócić zero, ujemną liczbę całkowitą, wartość zerową lub błąd.
Przykłady
W powyższym przykładzie wynik wyniósłby 32, ponieważ taniej jest przejść na czwarte piętro i zaparkować na najbliższym miejscu parkingowym w pobliżu 3
. Najbliższe bezpłatne miejsca parkingowe na trzecim piętrze znajdują się w odległości 33 i 34.
Inne przykłady:
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)
Alternatywy
- Możesz użyć dowolnych znaków, które chcesz reprezentować mapę parkingu, po prostu określ w odpowiedzi, które są wybranymi postaciami i co oznaczają.
To jest golf golfowy , więc może wygrać najkrótszy program / metoda / lambda / cokolwiek dla każdego języka!
Jeśli potrzebujesz pomocy z algorytmem, sprawdź moją (nie golfową) implementację w C # .