Doktor, próbując uciec przed siłami Daleków, postanowił wysłać ich w wir, podróżując spiralnie po różnych kieszeniach przestrzeni.
W zależności od charakteru dostępnej czasoprzestrzeni, Doktor musi wejść do TARDIS kontroluje wysokość i szerokość odcinka przestrzeni oraz punkt wejścia, od którego rozpoczyna się spirala.
Przekrój przestrzeni może być pomyślane jako h x wag siatki wypełnionej kolejnych liczb całkowitych od lewej do prawej, z góry do dołu, począwszy od 1.
Pozycja początkowa jest podana jako rc dla wiersza i kolumny ... Z tego oprogramowania TARDIS musi wyrzucić uporządkowaną listę liczb całkowitych uzyskanych przez spiralizację na zewnątrz w kierunku przeciwnym do ruchu wskazówek zegara z rzędu r kolumny c , zaczynając w górę ...
Twoim zadaniem, jako towarzyszowi Doktora, jest zaprogramowanie TARDIS do przyjmowania czterech liczb w formacie height width row column
i określania, który sektor przestrzeni musi podróżować TARDIS, aby pasował do ruchu spiralnego opisanego poniżej ...
Wejście 1
5 5 3 3
(5 x 5 pól, zaczynając od pozycji 3,3)
Wyjście 1
13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5
Wyjaśnianie wyników
Oryginalna siatka
Wygenerowana spirala
Wejście 2
2 4 1 2
(Siatka 2 x 4, zaczynając od pozycji 1,2)
Wyjście 2
2 1 5 6 7 3 8 4
Wyjaśnianie wyników
Nieco inna niż spirala musi teraz krążyć wokół siatki, aby wygenerować odpowiedni wynik ...
Oryginalna siatka
Wygenerowana spirala
Zasady:
To jest gra w golfa, więc najkrótsza długość kodu jest akceptowana.
Powyższych przykładów należy użyć do przetestowania kodu. Jeśli nie zapewnia odpowiedniego wyniku, coś jest nie tak ...
W odpowiedzi należy podać wersje kodu zarówno do gry w golfa, jak i gry w golfa ...
Powodzenia!
Odpowiedzi:
JavaScript (ES6) 124
163 177Edytuj Zupełnie inny sposób, bez potrzeby przechowywania tablicy do przechowywania odwiedzonych komórek. Wykorzystując fakt, że bok spirali rośnie o 1 po każdych 2 obrotach.
źródło
Python 3, 191
Prawdopodobnie nie jest to świetny wynik, ale oto:
Poruszamy się wzdłuż spirali, zwiększając długość boku co sekundę. Jeśli nasza pozycja znajduje się wewnątrz podanej siatki, wypisujemy odpowiedni numer.
Zmienne to:
źródło