Розкладіть число!


16

Ваше завдання - розкласти число у форматі нижче.

Це схоже на перетворення бази, за винятком того, що замість того, щоб перелічувати digitsв базі, ви перераховуєте список values, такий, що список додає до вхідних даних.

Якщо дана база є n, то кожне число у списку має бути у формі k*(n**m), де 0<=k<nта mє унікальним у всьому списку.

Технічні характеристики

  • Будь-який розумний формат введення / виводу. Ваша програма / функція займає 2 входи та виводить список.
  • Список вихідних даних може бути в будь-якому порядку.
  • 0 можуть бути виключені або включені.
  • Ведучі 0дозволені.
  • Вбудовані дозволені .

Тестові шафи

number base   converted list
input1 input2 output
123456 10     [100000,20000,3000,400,50,6] or [6,50,400,3000,20000,100000]
11     2      [8,2,1] or [0,0,0,0,8,0,2,1]
727    20     [400,320,7]
101    10     [100,1] or [100,0,1]

Оцінка балів

Це . Найкоротше рішення в байтах виграє.

code-golf  number  sequence  number-theory  base-conversion  code-golf  bitwise  hashing  code-golf  string  ascii-art  whitespace  code-golf  math  code-golf  code-golf  image-processing  counting  code-golf  math  arithmetic  checksum  code-golf  code-golf  math  arithmetic  number-theory  code-golf  array-manipulation  random  code-golf  string  code-golf  math  ascii-art  base-conversion  code-golf  graphical-output  geometry  3d  code-golf  math  linear-algebra  matrix  code-golf  math  number  sequence  code-golf  array-manipulation  code-golf  math  matrix  linear-algebra  code-golf  number  sequence  counting  code-golf  string  code-golf  string  restricted-source  quine  sorting  code-golf  string  geometry  code-golf  string  code-golf  networking  code-golf  base-conversion  code-golf  math  matrix  code-golf  arithmetic  linear-algebra  matrix  code-golf  number  arithmetic  grid  code-golf  number  source-layout  code-golf  string  bitwise  checksum  code-golf  array-manipulation  code-golf  string  probability-theory  code-golf  tips  code-golf  sequence  code-golf  string  math  sequence  calculus  code-golf  string  palindrome  bioinformatics  code-golf  math  combinatorics  counting  permutations  code-golf  parsing  logic-gates  code-golf  arithmetic  number-theory  combinatorics  code-golf  math  sequence  polynomials  integer  code-golf  string  ascii-art  chess  code-golf  string  code-golf  number  code-golf  string  ascii-art  parsing  code-golf  code-golf  number  natural-language  conversion  code-golf  arithmetic  code-golf  string  code-golf  ascii-art  decision-problem 

Відповіді:


5

Желе , 7 байт

lr0⁹*×b

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

Як це працює

lr0⁹*×b  Main link. Arguments: x (integer), n (base)

l        Compute the logarithm of x to base n.
 r0      Range; yield all non-negative integers less than the logarithm, in
         decreasing order.
   ⁹*    Elevate n to all integers in that range.
      b  Yield the list of base-n digits of x.
     ×   Multiply each digit by the corresponding power of n.

Ах, перевернута дальність ...
Лина монашка

Настільки вражає, чого можна досягти за допомогою такої кількості символів
t-clausen.dk

4

JavaScript (ES6), 47 байт

f=(n,b,p=1,q=b*p)=>[...n<q?[]:f(n,b,q),n%q-n%p]
document.write("<pre>"+
[ [ 123456, 10 ], [ 11, 2 ], [ 727, 20 ], [ 101, 10 ] ]
.map(c=>c+" => "+f(...c)).join`\n`)


Хочете включити фрагмент? :)
Leaky Nun

3

Желе, 12 байт

bLR’*@€U
b×ç

Можна waaaay коротше ...

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



3
lḞr0⁴*×bповинні працювати.
Денніс

Технічно 0r⁴*³%Iпрацює також.
Денніс

Почешіть це. lr0⁴*×bмає однакове число байтів, без усіх зайвих нулів.
Денніс

@Dennis Це, безумовно, досить різне, щоб опублікувати як окрему відповідь.
Дверна ручка

3

Pyth - 12 11 байт

Просто FGITW, може бути коротше.

.e*b^Qk_jEQ

Тестовий сюїт .


Видаліть _байт :)
Лина монашка

@KennyLau означав FGITW, це означає "Найшвидший пістолет на Заході", явище, коли люди, які відповідають, спочатку отримують більше грошей, ніж кращих відповідей.
Мальтісен

@KennyLau о, це дозволено, дерпе.
Малтісен

3

J, 20 19 байт

[(]*(^<:@#\.))#.inv

Використання

   f =: [(]*(^<:@#\.))#.inv
   10 f 123456
100000 20000 3000 400 50 6
   2 f 11
8 0 2 1
   20 f 727
400 320 7
   10 f 101
100 0 1

Пояснення

[(]*(^<:@#\.))#.inv
              #.      Given a base and list of digits in that base,
                      converts it to an integer in base 10
                inv   Power conjunction by -1, creates an inverse
                      Now, this becomes a verb that given a base and an integer in base 10,
                      creates a list of digits in that base representing it
[                     Select the base and pass it along
         #\.          Tally each suffix of the list of base digits,
                      Counts down from n to 1
      <:              Decrements each value
        @             More specifically, decrement is composed with the tally and applied
                      together on each suffix
     ^                Raises each value x using base^x
  ]                   Selects the list of base digits
   *                  Multiply elementwise between each base power and base digit

2

CJam, 16 байт

{1$b\1$,,f#W%.*}

Безіменний блок, який очікує основу та число на вершині стека (у такому порядку) та замінює їх розрядним числом (включаючи внутрішні нулі, без провідних нулів).

Тестуйте це тут.

Пояснення

1$  e# Copy base b.
b   e# Compute base-b digits of input number.
\   e# Swap digit list with other copy of b.
1$  e# Copy digit list.
,   e# Get number of digits M.
,   e# Turn into range [0 1 ... M-1].
f#  e# Map b^() over this range, computing all necessary powers of b.
W%  e# Reverse the list of powers.
.*  e# Multiply each digit by the corresponding power.

2

TSQL, 68 байт

DECLARE @ INT=123456,@z INT=10
DECLARE @l INT=1WHILE
@>0BEGIN PRINT @%@z*@l SELECT @/=@z,@l*=@z END

1

Python 2, 44 байти

lambda n,b:[n/b**i%b*b**i for i in range(n)]

Виходи від найменш значущих до більшості, з багатьма зайвими нулями.

Для виведення найзначнішого до найменшого:

f=lambda n,b,c=1:n*[1]and f(n/b,b,c*b)+[n%b*c]

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


Для другої версії ви не можете зробити це range(-n,1)замість цього range(n,-1,-1)?
Ерік Аутгольфер

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Дякую, я не бачив, що йти в зворотному варіанті було б варіантом. Навіть достатньо просто зробити range(n).
xnor

1

Ruby, 35 34 байт

Це порт відповіді Python XNOR в , але він друкує nраз так тестовий приклад 727 20гравюр 7, 320, 400і 724 0с. Пропозиції з гольфу вітаються.

Редагувати: 1 байт завдяки Йордану.

->n,b{n.times{|i|p n/b**i%b*b**i}}

Ви можете зберегти байт за допомогою n.times{|i|p ...}.
Йорданія

1

Математика, 12 байт (неконкурентна)

Цікаво, чи створила Wolfram Research цю функцію, побачивши виклик ОП!

NumberExpand

Це було введено у версії 11.0 (серпень, 2016).


1
Я змінив, щоб зробити це неконкурентоспроможним, тому що Mathematica 11.0 була випущена 8 серпня.
Leaky Nun

1

Математика, 46 байт

DiagonalMatrix@IntegerDigits@##~FromDigits~#2&

Пояснення:

В [1]: = IntegerDigits [123456,10]                                                

Вихід [1] = {1, 2, 3, 4, 5, 6}

В [2]: = DiagonalMatrix @ IntegerDigits [123456,10] // MatrixForm                   

Вихід [2] // MatrixForm = 1 0 0 0 0 0

                    0 2 0 0 0 0

                    0 0 3 0 0 0

                    0 0 0 4 0 0

                    0 0 0 0 5 0

                    0 0 0 0 0 6

У [3]: = DiagonalMatrix @ IntegerDigits [123456,10] ~ FromDigits ~ 10                   

Вихід [3] = {100000, 20000, 3000, 400, 50, 6}

Дуже несподіване використання DiagonalMatrix. Будь ласка, поясніть, як це працює в цьому випадку.
DavidC

0

Ракетка, 82 байти

(define(d n b[a'()])(if(< n 1)a(d(/ n b)b(cons(*(modulo(floor n)b)(length a))a))))

Я переможець (!)


1
Стільки просторів ... <n 1не працює? (Ракетки я взагалі не знаю)
Лина монашка

1
Ні, що не буде працювати - ідентифікатори розмежовуються лише пробілами, дужками / дужками / фігурними дужками та деякими іншими символами, наприклад '. Хоча це гарне питання.
Вінні

<це лише змінна з прив’язаною до неї функцією)
Вінні

0

JavaScript (ES7), 68 байт

n=>b=>(c=[...n.toString(b)]).map(d=>b**--p*parseInt(d,b),p=c.length)

Тест

Тестове використання Math.powдля сумісності браузера.

f=n=>b=>(c=[...n.toString(b)]).map(d=>Math.pow(b,--p)*parseInt(d,b),p=c.length)
document.write("<pre>"+
[ [ 123456, 10 ], [ 11, 2 ], [ 727, 20 ], [ 101, 10 ] ]
.map(c=>c+" => "+f(c[0])(c[1])).join`\n`)


**не є дійсним оператором JavaScript, правда?
ericw31415


О, це експериментально. Ось чому мій браузер не підтримує це.
ericw31415

0

JavaScript, 75 байт

(a,b)=>[...a.toString(b)].reverse().map(($,_)=>Math.pow(b,_)*parseInt($,b))

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

ES7, 66 байт

Якщо ES7 дозволено, тоді:

(a,b)=>[...a.toString(b)].reverse().map(($,_)=>b**_*parseInt($,b))

0

О , 17 байт

jQb`S/l{#Qn^*p}d

Дві ноти:

  1. Третій тестовий випадок не працює через помилку з базовим перетворенням. Див. Етап / о № 68 .

  2. Це не працює в онлайн-перекладачі. bще не було реалізовано.


0

> <>, 28 байт

:&\
&*>:{:}$%:n$}-:0=?;ao$&:

Очікує, що вхідні значення будуть присутні у стеку при запуску програми.

Оскільки у <<> немає об'єктів списку, висновок подається у вигляді переліку розділених на новий рядок значень із "одиницями" у першому рядку. Приклад запуску:

Input: 
11 2

Ouput:
1
2
0
8

@OP, якщо це неприйнятний вихідний формат, дайте мені знати, і я відповідним чином відредагую відповідь.


0

PHP, 55 байт

Використовується кодування Windows-1252.

for($n=$argv[1];$d+$n-=$d=$n%$argv[2]**++$i;)echo$d,~Ó;

Виконати так ( -dдодано лише для естетики):

php -d error_reporting=30709 -r 'for($n=$argv[1];$d+$n-=$d=$n%$argv[2]**++$i;)echo$d,~Ó; echo"\n";' 123056 10


0

Насправді 17 байт (не конкуруючий)

;a¡;lrR(♀ⁿ@♂≈♀*;░

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

Це подання є неконкурентним, оскільки команда була додана після цього виклику.

Пояснення:

;a¡;lrR(♀ⁿ@♂≈♀*;░
                   initial stack: [b n] (b = base, n = number)
;                  dupe b
 a                 invert stack
  ¡                n as a base-b integer
   ;lrR            dupe, length, range, reverse
       (♀ⁿ         raise b to each power in range
          @♂≈      create list of integers from base-b string
             ♀*    pairwise multiplication
               ;░  filter out zeroes

Напевно, є спосіб уникнути ? (Зіштовхнувся з чотирьох байтів)
Leaky Nun

0

Піп , 13 байт

Wa-:Pa%oo*:b

Це старого способу виявилося коротшим, ніж використання TBоператора базової конверсії. Код працює циклом, поки a(число) не буде 0. При кожній ітерації він друкує a%oі віднімає її a. oпопередньо ініціалізується 1і множиться на b(базу) кожну ітерацію. (Такий підхід зберігає всі елементи 0, а також додає провідні позиції 0.)

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

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