Как разбить число на цифры в APL

В APL, как я могу разбить целое число или число на вектор, содержащий его цифры? Какой самый краткий (кратчайший) способ сделать это?

4 ответа

Решение

Вы можете использовать обратную Decode с основанием 10:

10⊥⍣¯1⊢

поскольку Decode будет принимать столько цифр, сколько необходимо, и декодировать их, его обратное будет принимать число и кодировать его столько раз, сколько необходимо,

или, с ⎕IO←0Вы можете попытаться найти индексы отформатированного числа внутри вектора цифр:

⎕D⍳⍕

Демо для обоих решений.

Это лучше, чем уродливое использование Encode с пользовательской длиной, полученной путем формирования массива 10 к длине лог10 ввода:

{⍵⊤⍨10⍴⍨⌈10⍟1+⍵}

Я сделал это в APL2, сначала применив FORMAT, а затем EXECUTE EACH (хотя это может быть ограничено положительными целыми числами):

⍎¨⍕

Попробуйте онлайн!

Не самый краткий, но сила сделать это была в самой ранней APL. Книга 1962 года показывает, как работать с позиционными системами счисления, используя только базовые функции и умножение матриц:

Я пытался сделать это явно: a⊤⍨10×b÷b←⍳⌈10⍟a←⍵

Другие вопросы по тегам