数字を分解してください!


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`)


スニペットを含めるようにしますか?:)
リーキー修道女

3

ゼリー、12バイト

bLR’*@€U
b×ç

短くすることができます...

オンラインでお試しください!



3
lḞr0⁴*×b動作するはずです。
デニス

技術的に0r⁴*³%Iは、同様に機能します。
デニス

スクラッチ。lr0⁴*×bすべての余分なゼロなしで、同じバイト数を持ちます。
デニス

@Dennisこれは、別の回答として投稿するのに十分な違いがあります。
ドアノブ


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


2番目のバージョンでは、range(-n,1)代わりにできませんrange(n,-1,-1)か?
エリックアウトゴルファー16

@EʀɪᴋᴛʜᴇGᴏʟғᴇʀありがとう、逆に行くのが選択肢だとは思わなかった。それだけで十分ですrange(n)
-xnor

1

ルビー、35 34バイト

これはポートですXNORのPythonの答えが、それは印刷しnたテストケースのように、時間を727 20印刷物7320400、および724 0秒。ゴルフの提案を歓迎します。

編集:ヨルダンのおかげで1バイト。

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

でバイトを保存できますn.times{|i|p ...}
ヨルダン

1

Mathematica、12バイト(非競合)

OPの挑戦を見た後、Wolfram Researchがこの関数を作成したのではないかと思います!

NumberExpand

これはバージョン11.0(2016年8月)で導入されました。


1
私は作るために編集され、この非競合のMathematica 11.0は8月8日にリリースされたため
漏れ修道女

1

Mathematica、46バイト

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

説明:

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

Out [1] = {1、2、3、4、5、6}

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

Out [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

In [3]:= DiagonalMatrix @ IntegerDigits [123456,10]〜FromDigits〜10                   

Out [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 ES7のべき乗演算子です。
user81655

ああ、実験的です。それが私のブラウザがサポートしていない理由です。
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

O、17バイト

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

2つのメモ:

  1. 3番目のテストケースは、ベース変換のバグが原因で機能しません。phase / o#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


0

ピップ、13バイト

Wa-:Pa%oo*:b

昔ながらの方法でそれを行うことは、TBベース変換演算子を使用するよりも短いことが判明しました。コードはa(数)になるまでwhileループを実行します0。各反復で、を出力しa%o、から減算しaます。oに事前初期化され1b各反復で(ベース)が乗算されます。(このアプローチは、すべてを保持し0、先頭に追加し0ます。)

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.