2013-07-16 4 views
2

Я использую язык программирования: J.Перечислите цифры числа в J

Я хочу поместить всю цифру числа в список.

От:

12345 

к:

1 2 3 4 5 

Что я могу сделать?

+0

лить int в строку, чем в цикле длины строки, получить каждый из них. Или разделите int на 10, тогда как результат будет больше 10. –

+0

Как добавить элементы синглов в список? И с неявной функцией? (Без цикла for) –

+0

может быть, ваш язык программирования имеет те же методы, которые разделяют строку на массив. –

ответ

1

Другой подход:

intToList =: 3 : '((>. 10 ^. y)#10) #: y' 

Это не преобразуется в строку и обратно, которые могут быть потенциально дорогостоящим, но считает цифры с корпус- 10, затем использует анти-базу (#:), чтобы получить каждую цифру.

EDIT:

лучше, безопаснее версия, основанная на комментарий Dan Брон в:

intToList =: 3 : '10 #.^:_1 y' 
+0

Я люблю свой путь! Хороший код. + 1 –

+1

Да, это хороший подход. Обратите внимание, что фраза '(>. 10 ^. Y)' имеет небольшой недостаток, когда y равно 0 или степени 10: try 'intToList 0' или' intToList 1000'. Мы можем улучшить решение, используя обратное к '#:' непосредственно, как в '10 #. ^: _ 1 y', или сделав намек на его реализацию и переписывая' intToList' как '3: '1 + 10 <[email protected]^. 1 >. y'' –

+0

@DanBron Спасибо за альтернативу. Да, лучше не использовать журнал ... – MPelletier

5

так, как я написал бы это

10&#.^:_1 

, которые мы можем видеть в использовании с этим предложение:

(10&#.^:_1) 123456789 
1 2 3 4 5 6 7 8 9 

Эта программа основывается на перестройке, построенной на Base. Он использует (встроенный) аверс базы как синоним для Antibase.