Jeśli jeszcze nie wiesz, czwartorzęd jest w zasadzie liczbą 4-częściową. Na potrzeby tego wyzwania ma prawdziwy komponent i trzy fikcyjne komponenty. Wyimaginowanych części są reprezentowane przez sufiks i, j, k. Na przykład, 1-2i+3j-4kjest kwaternion z 1czym składowa rzeczywista i -2, 3i -4jest z urojonych.
W tym wyzwaniu musisz przeanalizować ciąg znaków czwartorzędu (np. "1+2i-3j-4k") Na listę / tablicę współczynników (np. [1 2 -3 -4]). Ciąg czwartorzędu można jednak sformatować na wiele różnych sposobów ...
- To może być normalne:
1+2i-3j-4k - To może mieć brakujące warunki:
1-3k,2i-4k(Jeśli masz brakujące warunki, wyjście0dla tych kategoriach) - Może to być brak współczynników:
i+j-k(W tym przypadku, jest to równoznaczne z1i+1j-1kInnymi słowy,.i,jLubkbez numeru przed zakłada się mieć1przed domyślnie) - Może nie być w odpowiedniej kolejności:
2i-1+3k-4j - Współczynniki mogą być po prostu liczbami całkowitymi lub dziesiętnymi:
7-2.4i+3.75j-4.0k
Podczas analizowania należy zwrócić uwagę na kilka rzeczy:
- Zawsze będą warunki
+lub-pomiędzy warunkami - Zawsze otrzymasz prawidłowe dane wejściowe z co najmniej 1 terminem i bez powtarzających się liter (bez liter
j-j) - Wszystkie liczby można przyjąć za prawidłowe
- Można zmienić numery w inną formę po parsowania jeśli chcesz (np.
3.0 => 3,0.4 => .4,7 => 7.0)
Wbudowane parsowanie / quaternion i standardowe luki są niedozwolone. Dotyczy to evalsłów kluczowych i funkcji. Dane wejściowe będą stanowić pojedynczy ciąg, a dane wyjściowe będą listą, tablicą, wartościami oddzielonymi spacjami itp.
Ponieważ jest to golfowy kod, wygrywa najkrótszy kod w bajtach.
Mnóstwo przypadków testowych
1+2i+3j+4k => [1 2 3 4]
-1+3i-3j+7k => [-1 3 -3 7]
-1-4i-9j-2k => [-1 -4 -9 -2]
17-16i-15j-14k => [17 -16 -15 -14]
7+2i => [7 2 0 0]
2i-6k => [0 2 0 -6]
1-5j+2k => [1 0 -5 2]
3+4i-9k => [3 4 0 -9]
42i+j-k => [0 42 1 -1]
6-2i+j-3k => [6 -2 1 -3]
1+i+j+k => [1 1 1 1]
-1-i-j-k => [-1 -1 -1 -1]
16k-20j+2i-7 => [-7 2 -20 16]
i+4k-3j+2 => [2 1 -3 4]
5k-2i+9+3j => [9 -2 3 5]
5k-2j+3 => [3 0 -2 5]
1.75-1.75i-1.75j-1.75k => [1.75 -1.75 -1.75 -1.75]
2.0j-3k+0.47i-13 => [-13 0.47 2.0 -3] or [-13 .47 2 -3]
5.6-3i => [5.6 -3 0 0]
k-7.6i => [0 -7.6 0 1]
0 => [0 0 0 0]
0j+0k => [0 0 0 0]
-0j => [0 0 0 0] or [0 0 -0 0]
1-0k => [1 0 0 0] or [1 0 0 -0]
+.
-0część legalnych wyników dla dwóch ostatnich przykładów?
evalograniczenie, które ma być ciągiem, interpretowane jako kod i / lub dane wejściowe. Wszelkie konwersje nie liczą się do tego, ponieważ nie można przekazać, na przykład, ciągu "test"do funkcji konwersji na liczbę całkowitą, aby otrzymać liczbę całkowitą, ale testbyłby interpretowany jako kod w normalnej evalfunkcji. TLDR: eval: nie, konwersje typu: tak.
+na wejściu będą kiedyś niepotrzebne znaki? Jak:+1k?