Если вы еще не знаете, кватернион в основном состоит из 4-х частей. Для целей этой задачи он имеет реальный компонент и три мнимых компонента. Мнимые компоненты представлены суффиксом i
, j
, k
. Например, 1-2i+3j-4k
это кватернион с 1
быть реальным компонентом и -2
, 3
и -4
будучи мнимые компоненты.
В этом задании вы должны разобрать строковую форму кватерниона (например "1+2i-3j-4k"
) в список / массив коэффициентов (например [1 2 -3 -4]
). Тем не менее, строка кватерниона может быть отформатирована разными способами ...
- Это может быть нормально:
1+2i-3j-4k
- Он может иметь недостающие условия:
1-3k
,2i-4k
(если у вас есть недостающие условия, выход0
для этих терминов) - Это , возможно, отсутствуют коэффициенты:
i+j-k
(В данном случае, это эквивалентно1i+1j-1k
Другими словами,.i
,j
Илиk
без номера перед предполагается иметь1
перед по умолчанию) - Это может быть не в правильном порядке:
2i-1+3k-4j
- Коэффициенты могут быть просто целыми или десятичными:
7-2.4i+3.75j-4.0k
Есть некоторые вещи, которые нужно отметить при разборе:
- Всегда будет
+
или-
между терминами - Вам всегда будут переданы правильные данные, по крайней мере, с 1 термином и без повторяющихся букв (без
j-j
s) - Все числа можно считать действительными
- Вы можете изменить номера в другую форму после разбора , если вы хотите (напр.
3.0 => 3
,0.4 => .4
,7 => 7.0
)
Встроенные синтаксические / кватернионные и стандартные лазейки запрещены. Это включает в себя eval
ключевые слова и функции. На входе будет одна строка, а на выходе будет список, массив, значения, разделенные пробелами и т. Д.
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Тонны тестовых случаев
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
ли частью легальной продукции для последних двух примеров?
eval
ограничение, которое будет принимать строку, интерпретируется как код и / или ввод. Любые преобразования не учитываются при этом, потому что вы не можете передать, например, строку "test"
в целочисленную функцию преобразования, чтобы получить целое число, но test
это будет интерпретироваться как код в нормальной eval
функции. TLDR: eval: нет, преобразования типов: да.
+
знаки на входе? Нравится+1k
:?