ZADANIE
Celem jest napisanie programu, który obraca dowolną dwuwymiarową listę o 45 stopni, musi być w stanie to zrobić do 7 * 45 (jednocześnie) przed zwróceniem listy. Lista niekoniecznie będzie kwadratowa lub prostokątna. Musisz podać wynik dla przykładów w swojej odpowiedzi. Musi także działać w przypadkach, których nie ma w przykładach ... kółkach, trójkątach itp. Nie można użyć wcześniej istniejącej funkcji, aby wykonać całą czynność.
Wszystkie listy będą miały co najmniej jedną oś symetrii (N, S, E, W). Wszystkie listy podrzędne należy zakładać jako wyśrodkowane. Listy nieparzyste zostaną przesunięte do lewej, aby prawidłowo wyrównać. Zobacz przerwy 4 w środku listy podrzędnej.
WKŁAD
Twój program użyje zmiennej o nazwie l
zawierającej listę oraz zmiennej o nazwie n
określającej kwotę, którą lista zostanie obrócona (n * 45) ( n
zawsze będzie mniejsza niż 7 i może wynosić 0). Będzie musiał zaakceptować l
zawieranie list podrzędnych dowolnego typu danych do wydruku (liczba dziesiętna, lista, liczba całkowita, ciąg [] .. itd.), Ale listy podrzędne będą zawierać tylko jeden typ danych na raz.
Nie musisz akceptować danych wejściowych konsoli ani używać standardowego wejścia. Wiersze określające wartości testowe l
i n
nie są uwzględniane w liczbie znaków, ale muszą być zawarte w przesłanym kodzie.
WYDAJNOŚĆ
Twój program musi wydrukować listę w prawidłowej orientacji, NIL może być używany do wypełniania list, jeśli chcesz, ale wypełnianie nie jest konieczne (jednak, jeśli są wypełnione, masz uśmiechniętą twarz). Podlisty nie muszą być wcięte ani oddzielane znakami nowej linii, jak w przykładach.
PRZYKŁADY
1
IN
l=
[[0 , 1 , 2],
[3 , 4 , 5],
[6 , 7 , 8]]
n=1
OUT
[ [0],
[3 , 1],
[6 , 4 , 2],
[7 , 5],
[8] ]
2)
IN
l=
[[a , b , c , d],
[e , f , g , h]]
n=2
OUT
[[e , a],
[f , b],
[c , g],
[h , d]]
3)
IN
l=
[[A , B , C , D , E , F],
[G , H , I , J],
[K , L],
[0 , 8],
[M , N],
[O , P , Q , R],
[S , T , U , V , W , X]]
n=7
OUT
[ [F],
[E],
[D , J],
[C , I],
[B , H , L],
[A , G , K , 8],
[0 , N , R , X],
[M , Q , W],
[P , V],
[O , U],
[T],
[U] ]
4
IN
l=
[[9 , 8 , 7 , 6],
[5],
[4 , 3 , 2 , 1],
[0] ]
n=3
OUT
[ [0 , 4],
[3],
[2 , 5 , 9],
[1 ,NIL, 8],
[7],
[6], ]
5
IN
l=
[ [Q],
[X ,NIL, Y],
[Z] ]
n=2
OUT
[ [X],
[Z ,NIL, Q],
[Y] ]
n
razy, a nie on
45 °? Pytam, ponieważ jestem całkiem pewien, że nie uzyskałbym wyniku z przykładu 3, stosując siedem obrotu o 45 °.Odpowiedzi:
Python -
234201Wersja bez golfa
Wykorzystuje to mnożenie (liczby zespolonej) przez liczbę zespoloną odpowiadającą obrotowi i rozciąganiu.
[1,1+1j,1j,1j-1,-1,-1j-1,-1j,1-1j]
są liczbami zespolonymi odpowiadającymi wymaganym kątom i przy użyciu najmniejszego współczynnika skalowania, tak że dla wejścia zespolonego z liczbą całkowitą wynikiem jest znów kompleks całkowity.źródło
else: line += [None]
po czwartym z ostatniego wiersza.