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-4k
jest kwaternion z 1
czym składowa rzeczywista i -2
, 3
i -4
jest 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ście0
dla tych kategoriach) - Może to być brak współczynników:
i+j-k
(W tym przypadku, jest to równoznaczne z1i+1j-1k
Innymi słowy,.i
,j
Lubk
bez numeru przed zakłada się mieć1
przed 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 eval
słó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]
+
.
-0
część legalnych wyników dla dwóch ostatnich przykładów?
eval
ograniczenie, 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 test
byłby interpretowany jako kod w normalnej eval
funkcji. TLDR: eval: nie, konwersje typu: tak.
+
na wejściu będą kiedyś niepotrzebne znaki? Jak:+1k
?