Розгорніть деяку кількість


23

Цей виклик ґрунтується на цьому питанні щодо Стакковержа .

При введенні додатного числа виведіть його як суму кожної цифри, помножену на представлення потужності 10.

Вхідні дані

Число, як ціле число, рядок або список цифр / символів.

  • Кількість буде суворо позитивною.
  • Якщо ви приймаєте число як рядок або список, воно не почнеться з а 0.

Вихід

Рядок, що представляє суму кожної відповідної цифри базових 10, кожна помножена на відповідну потужність базової 10. Сума представлена ​​як a + b. +Якщо ви хочете, ви можете використовувати до одного місця навколо кожної сторони знаку. Операнди перераховані у порядку зменшення.

  • 0 ніколи не може бути дійсним операндом.
  • +Знак ( в оточенні або не пробілів) не може бути передній або задньою частиною.

Приклади

Input       Output
12          10 + 2
         or 10+2
         or 10 +2
         or 10+ 2
9           9
123         100 + 20 + 3
10          10
101         100 + 1

Недійсні виходи

2           1 + 1
10          10 + 0
1           0 + 1
12          + 10 + 2
12          10 + 2 +
12          2 + 10

Це код-гольф, тому найкоротший код у байтах виграє!




Чи можемо ми вивести суму в зворотному порядку? Вих. 123 = 3 + 20 + 100
Квінтек

1
чи дозволені провідні та кінцеві місця?
ngn

2
Який очікуваний вихід для входу 0? (Якщо 0 в першу чергу недійсний вхід, його слід видалити з недійсних прикладів виводу IMO)
Pedro A

Відповіді:


11

Пітон 3: 83 80 79 байт

Спробуйте в Інтернеті!

Моє перше подання Code Golf.

t=input();x=len(t);print(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')

-3 байти ов. Дякую за корисну пораду :) -4 байти mypetlion. Дякую за скорочення поради :)


Ласкаво просимо до PPCG! Ви можете покращити свій результат, упорядкувавши свою заявку if if'0'<t[i]і змінивши формулу з x-i-1на x+~i. Ось посилання TIO із покроковими змінами.
ов

Змініть printоператор, print(*[t[i]+'0'*(x+~i)for i in range(x)if'0'<t[i]],sep='+')щоб зберегти 1 байт.
mypetlion

10

Желе , 9 байт

ḊƬḌQIAj”+

Спробуйте в Інтернеті!

Як це працює

ḊƬḌQIAj”+  Main link. Argument: A (digit array)

 Ƭ         Til; apply the link to the left until the results are no longer unique.
           Return all unique results.
Ḋ              Dequeue; discard the first element.
           For input [1,2,0,4], this yields [[1,2,0,4], [2,0,4], [0,4], [4], []].
  Ḍ        Undecimal; convert the digit arrays into integers.
           For input [1,2,0,4], this yields [1204, 204, 4, 4, 0].
   Q       Unique; deduplicate the resulting integers.
           For input [1,2,0,4], this yields [1204, 204, 4, 0].
    I      Increments; yield the forward differences.
           For input [1,2,0,4], this yields [-1000, -200, -4].
     A     Absolute value.
      j”+  Join with separator '+'.

3
Розумний підхід!
Квінтек

8

JavaScript (ES6), 47 байт

Вводиться як ціле число.

f=(n,m=1,k=n%m)=>n-k?f(n-k,m*10)+(k?'+'+k:''):n

Спробуйте в Інтернеті!

Прокоментував

f = (                     // f is a recursive function taking:
  n,                      //   n = number to process
  m = 1,                  //   m = modulo (a power of 10, starting at 1)
  k = n % m               //   k = n mod m
) =>                      //
  n - k ?                 // if n is not equal to k:
    f(n - k, m * 10)      //   do a recursive call with n - k and m * 10
    + (k ? '+' + k : '')  //   if k is not zero: append '+' and k
  :                       // else:
    n                     //   append n and stop recursion

7

R , 55 байт

Припустимо, цілі числа знаходяться під 1e10, що в будь-якому випадку більше, ніж максимальне 32-бітове ціле число ...

function(n,p=10^(9:0),x=p*n%/%p%%10)cat(x[!!x],sep='+')

Спробуйте в Інтернеті!


Ну, 10^(nchar(n):1-1теоретично працювали б для будь-якого цілого числа ...
Джузеппе

1
Було б, але подивіться на всі ці зайві байти!
J.Doe

7

Мова програмування Шекспіра , 807 806 805 804 байт

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Enter Ajax and Ford]Ford:Listen tothy!Scene V:.Ajax:Remember the remainder of the quotient between I twice the sum of a cat a big big cat.You be the sum of you a cat.Ford:You be the quotient between you twice the sum of a cat a big big cat.Be you nicer zero?If solet usScene V.You be I.Scene X:.Ajax:Recall.Be you worse a cat?If solet usScene D.[Exit Ford][Enter Page]Ajax:Be you nicer zero?If sospeak thy.You be the sum of a big big big big cat the cube of the sum of a cat a big cat.[Exit Page][Enter Ford]Ajax:Open heart.Remember I.You zero.Scene L:.Ajax:Am I nicer a cat?If notlet usScene C.Open heart.Ford:You be the sum of you a pig.Let usScene L.Scene C:.Ajax:Recall.Ford:You be I.Scene D:.Ford:You be the sum of you a pig.Be you nicer zero?If solet usScene X.

Спробуйте в Інтернеті!

-23 байти, якщо спочатку може бути виведений нульовий символ

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Enter Ajax and Ford]Ford:Listen tothy!Scene V:.Ajax:Remember the remainder of the quotient between I twice the sum of a cat a big big cat.You be the sum of you a cat.Ford:You be the quotient between you twice the sum of a cat a big big cat.Be you nicer zero?If solet usScene V.You be I.Scene X:.Ajax:Recall.Be you worse a cat?If solet usScene D.[Exit Ford][Enter Page]Ajax:Speak thy.You be the sum of a big big big big cat the cube of the sum of a cat a big cat.[Exit Page][Enter Ford]Ajax:Open heart.Remember me.You zero.Scene L:.Ajax:Am I nicer a cat?If notlet usScene C.Open heart.Ford:You be the sum of you a pig.Let usScene L.Scene C:.Ajax:Recall.Ford:You be I.Scene D:.Ford:You be the sum of you a pig.Be you nicer zero?If solet usScene X.

Пояснення

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Enter Ajax and Ford]

    Boilerplate, introducing the characters.

Ford:Listen tothy!

    Input a value to Ajax.

Scene V:.Ajax:Remember the remainder of the quotient between I twice the sum of a cat a big big cat.You be the sum of you a cat.Ford:You be the quotient between you twice the sum of a cat a big big cat.Be you nicer zero?If solet usScene V.

    Push the digits of Ajax onto Ford's stack, and set Ford's value to be the number of digits in Ajax.

You be I.

    Store the number of digits in the input to Ajax.

Scene X:.Ajax:Recall.Be you worse a cat?If solet usScene D.

    Pop the next digit off the stack, and skip processing it if it equals 0.

[Exit Ford][Enter Page]Ajax:Be you nicer zero?If sospeak thy.You be the sum of a big big big big cat the cube of the sum of a cat a big cat.[Exit Page][Enter Ford]

    All characters start out with a value of 0.
    If Page is 0, that means this is the first number being processed, and we shouldn't output a plus.
    In either case, store the ASCII value of "+" to Page to output next time it is needed.

Ajax:Open heart.Remember I.You zero.

    Output the digit, save the remaining-digit-count for later, and store 0 to Ford for output purposes.

Scene L:.Ajax:Am I nicer a cat?If notlet usScene C.Open heart.Ford:You be the sum of you a pig.Let usScene L.

    Output one fewer 0 than the number of remaining digits to process.

Scene C:.Ajax:Recall.Ford:You be I.

    Store the remaining-digit-count back into Ajax.

Scene D:.Ford:You be the sum of you a pig.Be you nicer zero?If solet usScene X.

    Subtract 1 from the remaining-digit-count, and loop back until there are no more digits left to process.


6

Желе ,  12  11 байт

J’⁵*Ṛ×ḟ0j”+

Повна програма, що приймає число у вигляді списку цифр (у форматі Python), що друкує результат.

Спробуйте в Інтернеті!

Як?

J’⁵*Ṛ×ḟ0j”+ - Main Link: list of digits  e.g. [1,0,2,0,3,0]
J           - range of length                 [1,2,3,4,5,6]
 ’          - decrement (vectorises)          [0,1,2,3,4,5]
  ⁵         - literal 10                      10
   *        - exponentiate (vectorises)       [1,10,100,1000,10000,100000]
    Ṛ       - reverse                         [100000,10000,1000,100,10,1]
     ×      - multiply (vectorises)           [100000,0,2000,0,30,0]
      ḟ0    - filter discard zeros            [100000,2000,30]
        j”+ - join with '+'                   [100000,'+',2000,'+',30]
            - implicit (smashing) print       "100000+2000+30"

Попередній @ 12 байт:

Ḣ;0€ƊÐƤẸƇj”+

5

Haskell, 60 54 байти

Редагувати: -6 байт завдяки Delfad0r.

tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""

Приймає номер введення як рядок.

Спробуйте в Інтернеті!

    scanr(        )""    -- starting with the empty string fold from the right and
                         -- collect the intermediate results in a list
      (.('0'<$)).(:)     -- non pointfree: \d s -> d : ('0'<$s)
                         -- i.e. take the next digit 'd' and append the current result
                         -- from the scanr where each char is replaced by 0
                         --
                         -- e.g. "103" -> ["100","00","3"]
                         --
  f ilter(>="1")         -- keep only elements that have not a 0 as the first char
 (>>=('+':))             -- prepend a + to each element and flatten into
                         -- a single list
tail                     -- drop the first char, ie.e the leading +

2
tail.(>>=('+':)).filter(>="1").scanr((.('0'<$)).(:))""економить 6 байт Спробуйте в Інтернеті! .
Delfad0r

1
@ Delfad0r: приємно, велике спасибі!
німі


4

Python 2 , 64 байти

lambda n:'+'.join(`b`+~e*'0'for e,b in enumerate(n,-len(n))if b)

Неназвана функція, яка бере список цифр n, і повертає рядок.

Спробуйте в Інтернеті!

enumerate(n)дасть кортежі index, itemвпоперек nз індексом, починаючи з 0.

Однак enumerateтакож приймає необов'язковий початковий індекс в якості другого аргументу, встановивши це , -len(n)ми отримуємо індекси ( eи) -len(n), -len(n)+1..., -1.

Це означає, що кількість необхідних нульових знаків для будь-якого елемента ( b) є -1-e, що ~eтак ~e*'0'отримує необхідні кінцеві нулі.

`b`отримує рядкове подання цілої цифри bі +зв'язує це з тими нулями.

if bфільтрує записи за допомогою b==0.

'+'.join(...)потім приєднується до отриманих рядків із +символами.



4

Haskell , 56 55 52 байти

-4 байти завдяки німі .

tail.f
f('0':x)=f x
f(d:x)='+':d:('0'<$x)++f x
f x=x

Спробуйте в Інтернеті!


пояснення

g :: String -> String

-- drop the first char (the leading +) from f
g = tail.f

f :: String -> String

-- if the first digit is 0, continue with the rest of the number
f ( '0' :rest) = f rest

-- otherwise, add a +, the digit and as many 0s as there are digit in the rest.
f (digit:rest) = '+' : digit : ('0' <$ rest) ++ f rest

-- if there is no digit left, return the empty string
f "" = ""

Спробуйте в Інтернеті!


3

Perl 6 , 38 байт

{join '+',grep +*,($_ Z~[R,] 0 Xx^$_)}

Спробуйте в Інтернеті!

Блок анонімного коду, який приймає список цифр і повертає рядок.

Пояснення:

{                                    }  # Anonymous code block
                   $_ Z~   # Zip concatenate the list of digits with
                        [R,] 0 Xx^$_   # The correct number of 0s

          grep +*,(                 )  # Filter out all all the 0 values
 join '+',   # And join with '+'s

3

APL (Діалог), 46 41 40 байт

{¯1↓∊{'0'=⊃⍵:⍬⋄⍵}¨⍵,¨('0'⍴⍨¨⌽⍳≢⍵),¨'+'}

-5 байт завдяки @dzaima

Функція анонімного префікса. Вводиться як рядок. ТІО

(Це мій перший раз, коли я використовую APL на PPCG, ймовірно, зграбний. Також проклинаю вас, нулі!)


41 байт з⎕IO←0
dzaima

3

Сітківка , 19 байт

|'+L$`[1-9]
$&$.'*0

Спробуйте в Інтернеті! Посилання включає тестові випадки. Пояснення:

L`[1-9]

Перерахуйте всі ненульові цифри

$
$&$.'*0

До кожної цифри додайте стільки нулів, скільки було проміжних цифр.

|'+

Розділіть кожен результат за допомогою +s замість нового рядка за замовчуванням.

Сітківка 0,8,2 , 21 байт

M&!`[1-9].*
\B.
0
¶
+

Спробуйте в Інтернеті! Посилання включає тестові випадки. Пояснення:

M&!`[1-9].*

Перерахуйте всі суфікси вхідних даних, які починаються з нульових цифр.

\B.
0

Замініть всі проміжні цифри нулями.

¶
+

Об’єднайте результати за допомогою +s.


3

C (gcc) , 71 69 байт

Кожен крок рекурсивної функції віднімає ту частину, яку вона буде надрукувати, і передає решту числа на.

Дякую стельовій кішці за пропозицію.

g(v,c,w){v&&printf("+%d"+!g(v-w,c*10)+!w*3,w=v%c);w=v;}f(v){g(v,10);}

Спробуйте в Інтернеті!


3

Брахілог , 35 32 байти

l⟧₅;?z{tℕ₁I&h;10↔^;I×ṫ}ˢ;"+"zckc

-3 байти причини 0 не є коректним вводом

Спробуйте в Інтернеті! або тестовий набір

Пояснення

                                    #   implicit input          eg  105
l                                   #   length of input             3
 ⟧₅                                 #   descending range ]n,0]      [2, 1, 0]
   ;?                               #   pair with input             [[2, 1, 0], [105]]
     z                              #   zip (considers numbers as array of digits)
                                    #                               [[2, 1], [1, 0], [0, 5]]
      {               }ˢ            #   select (map and filter)     [2, 1]  |   [1, 0]  |   [0, 5]
       t                            #       tail (last element)     1       |   0       |   5
        ℕ₁                          #       is at least 1           1       |   fail    |   5
          I                         #       store in I
           &h                       #       head of input           2       |           |   0
             ;10↔                   #       pair with 10 & reverse  [10, 2] |           |   [10, 0]
                 ^                  #       power                   100     |           |   1
                  ;I                #       pair with I             [100, 1]|           |   [1, 5]
                    ×               #       multiply                100     |           |   5
                     ṫ              #       to string               "100"   |           |   "5"
                        ;"+"        #   pair with "+"               [["100", "5"], "+"]
                            z       #   zip (cycles shorter)        [["100", "+"], ["5", "+"]]
                             c      #   concat (flattens)           ["100", "+", "5", "+"]
                              k     #   knife (remove last)         ["100", "+", "5"]
                               c    #   concat                      "100+5"

Тепер ОП уточнив, що 0 не є входом, з яким потрібно обробляти, тому ви можете вилучити його |∧Ṡз кінця. :)
DLosc

3

Brachylog v2, 15 байт

~+bᵛ⁰↔;"+"zckwᵐ

Спробуйте в Інтернеті!

Дуже, дуже неефективно.

Так чи інакше, це вдається використовувати тільки 6 байт на те , що в більшості мов тверда частина (розщеплення числа в формі з 10 б , де це одна цифра, в порядку убування) і цілих 9 байт для «приєднатися "(що є вбудованим у більшості мов для гольфу, але не Брахілог).+

На відміну від більшості моїх записів Brachylog (які є функціями), це повна програма, яка приймає введення зі стандартного вводу та виробляє вихід на стандартному виході.

Пояснення

~+bᵛ⁰↔;"+"zckwᵐ
~+               Find an additive partition of the input number
   ᵛ               such that each component of the partition,
  b                when the first digit is removed
    ⁰              is equal to 0;
     ↔           reverse it,
      ;"+"z      pair every element with "+",
           c     flatten the resulting list one level,
            k    remove the last element (i.e. the final "+"),
             w   and print
              ᵐ  each remaining element.

(Причина wᵐвикористовується скоріше, ніж звичайніше c, що ми маємо справу з гетерогенним списком - він містить і числа, і рядки, а замість того, щоб вони змішувались, найпростіше просто надрукувати їх окремо.)

Алгоритм тут грубими силами над усіма додатковими розділами входу, поки він не знайде відповідний (!). Брахілог надає перевагу розділенню на менші можливості та з відсортованими можливостями у порядку зростання, тому перше рішення, яке воно знайде, - це зворотне рішення, про яке задається питання. Тож нам просто потрібно повернути його назад, щоб отримати потрібне нам рішення.




2

Attache , 37 байт

Join&"+"@{Id\`-&>Pairs[_'0]}@Suffixes

Спробуйте в Інтернеті!

Версія Pointfree (41 байт): Join&"+"##`\&:Id##`-&>Pairs@`'&0@Suffixes

Пояснення

Join&"+"@{Id\`-&>Pairs[_'0]}@Suffixes      input e.g.: 1203
                             Suffixes      take the suffixes of the input digit
                                           e.g.: [1203, 203, 3, 3] 
         {                 }@              apply the inner lambda to the suffixes:
                       _'0                   append `0`
                                             e.g.: [1203, 203, 3, 3, 0]
                 Pairs[   ]                  generate the pairs of integers of the above
                                             e.g.: [[1203, 203], [203, 3], [3, 3], [3, 0]]
             `-&>                            subtraction over each pair
                                             e.g.: [1000, 200, 0, 3]
          Id\                                keep only truthy (nonzero) elements
                                             e.g.: [1000, 200, 3]
Join&"+"@                                  join the result by `+`
                                           e.g.: "1000+200+3"


2

Powershell, 55 52 байти

$i=$args.Count;($args|%{$_+'0'*--$i}|?{+$_})-join'+'

Сценарій очікує масив рядків, кожен рядок містить одну цифру. Тестовий сценарій:

$f = {

$i=$args.Count;($args|%{$_+'0'*--$i}|?{+$_})-join'+'

}

@(
    ,('10','1','0')
    ,('10+2','1','2')
    ,('9','9')
    ,('100+20+3','1','2','3')
    ,('100+1','1','0','1')
) | % {
    $e, $a = $_
    $r = &$f @a
    "$($e-eq$r): $(-join$a)=$r"
}

Вихід:

True: 10=10
True: 12=10+2
True: 9=9
True: 123=100+20+3
True: 101=100+1

2

Japt , 13 байт

Вводить дані як масив цифр.

í*¡ApYÃw)f q+

Спробуй це


Пояснення

í                 :Interleave
  ¡               :  Map input
   A              :    10
    p             :    To the power of
     Y            :    The current 0-based index
      Ã           :  End map
       w          :  Reverse
 *                :  Reduce each pair by multiplication
        )         :End interleaving
         f        :Filter (remove 0s)
           q+     :Join with "+"

Альтернатива

Приймає введення як масив цифрових рядків.

ËúTUÊ-EÃfn q+

Спробуй це


2

Java 10, 82 78 байт

n->f(n,1)Object f(int n,int m){return m<n?f(n-n%m,m*10)+(n%m>0?"+"+n%m:""):n;}

Порт Арно JavaScript (ES6) відповідь «s .
-2 байти завдяки @ceilingcat .
-2 байти завдяки Арнольду .

Спробуйте в Інтернеті.

Пояснення:

n->                      // Method with int parameter & Object return-type
  f(n,1)                 //  Call the recursive method with `n` and 1

Object f(int n,int m){   // Recursive method with 2 int parameters & Object return-type
  return m<n?            //  If `m` is smaller than `n`:
          f(n-n%m,m*10)  //   Do a recursive call with `n-n%m` and `m` multiplied by 10
          +(n%m>0?       //   And if `n` is not divisible by `m`:
            "+"          //    Append a "+"
            +n%m         //    As well as `n%m`
           :             //   Else:
            "")          //    Append nothing more
         :               //  Else:
          n;}            //   Simply return the input `n`

Я припускаю, що ця відповідь також була б дійсною для початкового запитання . :) (Можливо, з n%mприсвоєною змінною для читабельності.)
Арнольд

1
Приємно! Моє оригінальне рішення склало 91 байт.
Олів'є Грегоар

1
@ceilingcat Власне, m<nмає працювати.
Арнольд


2

sed -E ,109 99 97 75 74 байти

h;s:.:0:g;G
:l;s:.(.*)\n(.)(.*)\+?(.*):\1\n\3+\4\2\1:;tl
s:\+0+::g;s:..?::

Кожен рядок введення вважається окремим номером. Спробуйте в Інтернеті .

Пояснення:

h;                                           | copy the original string to the temporary buffer
  s:.:0:g;                                   | substitute all digits with zeroes
          G                                  | append the original string to the substituted one
                                             |
:l;                                          | main loop start
   s:.(.*)\n(.)(.*)\+?(.*):\1\n\3+\4\2\1:;   | cut the next digit from the number, append with zeroes and add to the back
                                          tl | loop if the substitution hasn`t converged yet
                                             |
s:\+0+::g;                                   | remove all zero terms
          s:..?::                            | remove \n and the first +, if any

... я можу пограти в гольф далі, я припускаю.


Привіт і ласкаво просимо до PPCG. Ваша відповідь виглядає чудово, хоча я не розумію, чому ви додали тестовий випадок BADC0FFEE . Я думаю, що виклик стосується лише десяткового представлення.
Джонатан Фрех

Вам не потрібно впоратися 01010101010або 000000, відповідно до специфікації виклику. Це рятує будь-які байти?
Денніс

@Dennis Найімовірніше ні, оскільки провідні нулі та між ними поводяться однаково, тому мені потрібно все одно їх стерти.
hidfromkgb

2

Brainfuck, 147 байт

>>+[[<]>+[>],]-[>+>+<<-----]>--->--------<<<[<]>---[[<+<+>>-]<[>+<-]>>.<<<[>>[>]>.<<[<]<-]>>[>]>>.<<<[<]>>>[<[-]>[<+>-]>]>[<+>-]>[<+>-]<<<<[<]>-]>.

Спробуйте в Інтернеті! (Вам потрібно буде поставити галочку з позначкою "!" І ввести введення після "!" У другому рядку коду, інакше він буде продовжувати просити введення назавжди.)

Це, мабуть, не буде найкоротшою відповіддю або гольфувати до найкоротшого, що це могло бути, але це було дуже весело, щоб спробувати це зробити у Brainfuck, щоб я міг також розмістити його.

Як зазначав @JoKing, ця програма не видаляє 0. Я спробую це виправити, але це може бути досить важко.

Пояснення:

>>+[[<]>+[>],]                            Takes inputs and records the amount of them
-[>+>+<<-----]>--->--------               Sets the next 2 cells to 48 (0) and 43 (plus)
<<<[<]>---                                Returns to the start and corrects the number of inputs
                                          Loop
[[<+<+>>-]<[>+<-]>>.                      Prints the first number
<<<[>>[>]>.<<[<]<-]                       Prints the correct number of 0's
>>[>]>>.                                  Prints plus
<<<[<]>                                   Returns to the first cell
>>[<[-]>[<+>-]>]>[<+>-]>[<+>-]<<<<[<]>-]  Removes the first number and shifts everything up by one to make the second number the first 
                                          Loops until on last number
>.                                        Prints last number

На жаль, це не видаляє нулі, як зазначено. Спробуйте в Інтернеті!
Джо Кінг

Дякую, я цього не помічав. Я спробую це виправити. Поки я редагую свій пост
FinW,

2

APL (Dyalog Unicode) , 20 байт

{⍵'+'⍺}/0~⍨(10×⊢)\∘

Спробуйте в Інтернеті!

Вводить введення як вектор цифр. Виводить пробіл перед і після кожного +і включає змінну кількість провідних пробілів.

Це поїзд. Він поділяється на наступне.

  ┌───┴───┐
  /     ┌─┼──┐
┌─┘     0   
{⍵'+'⍺} ┌─┘ ┌┴┐
        ~   \ 
          ┌─┘
       ┌──┼─┐
       10 × 

Перша функція полягає в тому , що це обертає масив, так 1 0 2стає 2 0 1.

Тоді ми вступаємо (10×⊢)\, який застосовується до зворотного масиву. Ця частина натхненна СППАМІ ігрового відповіді на виклик Boustrophedonise. Позичення ngn із запозиченням з урахуванням вектора цифр A B C ..., застосовуючи (10×⊢)\цей вектор, дає наступне.

A (A (10×⊢) B) (A (10×⊢) (B (10×⊢) C)) ...
A ((10×⊢) B) ((10×⊢) (10×C)) ...
A (10×B) (10×10×C) ...

На 2 0 1, (10×⊢)\дає 2 0 100.

Далі йде 0~⍨. Це видаляє всі 0s з масиву, даючи 2 100.

Нарешті приходить +s. {⍵'+'⍺}/це зменшення, яке починається з правого, яке об'єднує лівий аргумент з a +, а потім праворуч arg. Це ефективно повертає масив під час вставки +s. Це дає 100 '+' 2, що відображається як 100 + 2.


2

MathGolf , 12 11 10 байт

hrzúm*ç'+u

Спробуйте в Інтернеті!

Пояснення

Перша команда не потрібна, оскільки введення може бути подано у вигляді списку цифр.

(▒           Convert to a list of digits)
 h           Get length of input list without popping
  r          Push range(a)
   z         Reverse sort
    ú        Map i -> 10**i for each element in list
     m*      Element-wise multiplication
       ç     Filter faulty items in list
        '+   Push "+"
          u  Join with separator

Я можу додати оператор множення попарно, який є одним байтом, але це наразі не є частиною мови. Тоді я міг би видалити один байт із цього рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.