Bir numarayı ayrıştırın!


16

Göreviniz, aşağıdaki biçimi kullanarak bir sayıyı ayrıştırmaktır.

Bu, taban dönüşümüne benzer, ancak tabandaki listelemek yerine digits,values liste girişine kadar ekler öyle ki,.

Verilen taban ise n, listedeki her sayı, liste boyunca k*(n**m), nerede 0<=k<nve mbenzersizdir şeklinde olmalıdır .

gözlük

  • Herhangi bir makul giriş / çıkış formatı. Programınız / fonksiyonunuz 2 giriş alır ve bir liste çıkarır.
  • Çıktı listesi herhangi bir sırada olabilir.
  • 0 hariç tutulabilir veya dahil edilebilir.
  • Liderlik 0yapılabilir.
  • Yerleşiklere izin verilir .

testcases

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]

puanlama

Bu . Baytlarda en kısa çözüm kazanır.

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 

Yanıtlar:


5

Jöle , 7 bayt

lr0⁹*×b

Çevrimiçi deneyin! veya tüm test senaryolarını doğrulayın .

Nasıl çalışır

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.

Ah, ters aralık ...
Leaky Nun

Bu kadar az karakterle elde edilebilecek şeyler çok etkileyici
t-clausen.dk

4

JavaScript (ES6), 47 bayt

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


Snippet eklemek ister misiniz? :)
Leaky Nun



3

J, 20 19 bayt

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

kullanım

   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

açıklama

[(]*(^<:@#\.))#.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 bayt

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

Tabanı ve yığının üstündeki sayıyı (bu sırayla) bekleyen ve bunları rakam listesiyle (baştaki sıfırlar dahil, baştaki sıfırlar hariç) değiştiren adsız bir blok.

Burada test edin.

açıklama

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 bayt

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

1

Python 2, 44 bayt

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

Çıktılar en az anlamlı olandan çoğa, çok fazla sıfırla birlikte.

En önemliden en küçüğe çıktı almak için:

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

Tekrarlama n, yer değeri çarpanını ölçeklendirirken basamakları divmod ile tekrar tekrar çıkarır c.


İkinci versiyon için range(-n,1)bunun yerine yapamaz mısın range(n,-1,-1)?
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Teşekkürler, tersine gitmenin bir seçenek olduğunu görmedim. Sadece yapmak yeterlidir range(n).
xnor

1

Yakut, 35 34 bayt

Bu bir liman XNOR Python cevap , ancak yazdırır ntest durumu çok kez 727 20baskılar 7, 320, 400ve 724 0s. Golf önerileri hoş geldiniz.

Düzenleme: Ürdün sayesinde 1 bayt.

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

İle bir bayt kaydedebilirsiniz n.times{|i|p ...}.
Ürdün

1

Mathematica, 12 bayt (rakip olmayan)

Wolfram Research'ün OP'nin görevini gördükten sonra bu işlevi yaratıp yaratmadığını merak ediyorum!

NumberExpand

Bu, 11.0 sürümünde (Ağustos 2016) tanıtıldı.


1
Mathematica 11.0 8
Ağustos'ta

1

Mathematica, 46 bayt

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

Açıklama:

[1] içinde: = Tamsayı Rakamlar [123456,10]                                                

Çıkış [1] = {1, 2, 3, 4, 5, 6}

[2] içinde: = DiagonalMatrix @ IntegerDigits [123456,10] // MatrixForm                   

Çıkış [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] içinde: = DiagonalMatrix @ IntegerDigits [123456,10] ~ FromDigits ~ 10                   

Çıkış [3] = {100000, 20000, 3000, 400, 50, 6}

Çok beklenmedik kullanımı DiagonalMatrix. Lütfen bu durumda nasıl çalıştığını açıklayın.
DavidC

0

Raket, 82 bayt

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

Ben kazananım (!)


1
Çok fazla alan ... çalışmıyor <n 1? (Racket'i hiç bilmiyorum)
Leaky Nun

1
Bu işe yaramaz - tanımlayıcılar yalnızca boşluk, parantez / kaşlı ayraçlar / kıvırcık ayraçlar ve diğer bazı sembollerle sınırlandırılır '. Yine de iyi bir soru.
Winny

(Ve <sadece ona bağlı bir işlevi olan bir değişkendir)
Winny

0

JavaScript (ES7), 68 bayt

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

Ölçek

Math.powTarayıcı uyumluluğu için kullanımları test edin .

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


**geçerli bir JavaScript operatörü değil mi?
ericw31415


Oh, deneysel. Bu yüzden tarayıcım bunu desteklemiyor.
ericw31415

0

JavaScript, 75 bayt

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

Sadece eğlence için :) Daha fazla golf olabilir, ama nasıl emin değilim.

ES7, 66 bayt

ES7'ye izin veriliyorsa:

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

0

O , 17 bayt

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

İki not:

  1. Üçüncü test durumu, taban dönüşümüyle ilgili bir hata nedeniyle çalışmaz. Görmek Faz / o # 68 .

  2. Bu, çevrimiçi yorumlayıcıda çalışmaz. bhenüz uygulanmadı.


0

> <>, 28 bayt

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

Program başlangıcında yığınta giriş değerlerinin olmasını bekler.

> <> Liste nesneleri içermediğinden, çıktı yeni satırla ayrılmış bir değer listesi olarak sunulur ve ilk satırda 'birimler' bulunur. Örnek bir çalışma:

Input: 
11 2

Ouput:
1
2
0
8

@OP, bu kabul edilebilir bir çıktı biçimi değilse, bana bildirin, yanıtı buna göre düzenleyeceğim.


0

PHP, 55 bayt

Windows-1252 kodlamasını kullanır.

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

Böyle çalıştırın ( -dsadece estetik için eklendi):

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

0

C #, 77 bayt

IEnumerable _(int n,int b){int m=1;while(n>0){yield return n%b*m;n/=b;m*=b;}}

0

Aslında 17 bayt (rakip olmayan)

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

Çevrimiçi deneyin!

Komut bu sorgulamadan sonra eklendiğinden bu gönderim rakip değil .

Açıklama:

;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

Pip , 13 bayt

Wa-:Pa%oo*:b

Eski moda bir şekilde yapıldığında, TBtemel dönüşüm operatörünü kullanmaktan daha kısa olduğu ortaya çıktı . Kod a(sayı) olana kadar bir while döngüsü çalıştırır 0. Her yinelemede, onu yazdırır a%ove çıkarır a. her yinelemeye oönceden başlatılır 1ve b(taban) ile çarpılır . (Bu yaklaşım, tüm 0s tutar ve bir lider ekler 0.)

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.