Tidak ada yang tahu Nomor GAU

22

Biarkan saya memperkenalkan Anda ke nomor GAU

GAU(1) = 1  
GAU(2) = 1122  
GAU(3) = 1122122333  
GAU(4) = 11221223331223334444  
GAU(6) = 11221223331223334444122333444455555122333444455555666666  
...  
GAU(10) = 11221223331223334444122333444455555122333444455555666666122333444455555666666777777712233344445555566666677777778888888812233344445555566666677777778888888899999999912233344445555566666677777778888888899999999910101010101010101010  

Tantangan ini sangat sederhana!

Diberikan bilangan bulat n> 0, cari jumlah digit GAU (n)

Contoh

Mari kita membuat GAU (4)
kita mengambil langkah-langkah berikut (sampai kita mencapai 4) dan menggabungkannya

[1][122][122333][1223334444]   

Anda harus menulis setiap angka sebanyak nilainya, tetapi Anda harus menghitung setiap kali dari 1

Mari kita coba membuat GAU (5)
kita harus menghitung dari 1 ke 1

[1]   

lalu dari 1 hingga 2 (tetapi ulangi setiap angka sebanyak nilainya )

[122]     

lalu dari 1 hingga 3

[122333]   

lalu dari 1 hingga 4

[1223334444]    

dan akhirnya dari 1 hingga 5 (ini adalah langkah terakhir karena kami ingin menemukan GAU ( 5 ))

[122333444455555]     

Sekarang kita mengambil semua langkah ini dan menggabungkannya
hasilnya GAU (5)

11221223331223334444122333444455555     

Kami tertarik pada jumlah digit nomor GAU ini.

Uji kasus

Input⟼Output

n   ⟼ Length(GAU(n))

1   ⟼ 1  
2   ⟼ 4  
3   ⟼ 10  
10  ⟼ 230   
50  ⟼ 42190  
100 ⟼ 339240  
150 ⟼ 1295790  

Ini adalah tantangan .
Kode terpendek dalam byte akan menang.

Jika Anda masih memiliki pertanyaan, silakan beri tahu saya.
Saya benar-benar ingin semua orang di sini memahami pola rumit-ajaib-tersembunyi ini


sumber
4
Apa artinya GAU?
Leaky Nun
21
G adalah untuk GAU, A dan U hanya ada tanpa alasan
2
Hingga n = 9, panjangnya adalah angka tetrahedral, tetapi di luar itu angka multi-digit menghalangi bentuk tertutup yang sederhana
Miff
FYI test case Anda mengatakan n ⟼ Length(GUA(n)), bukan GAU (n).
numbermaniac
2
@numbermaniac terima kasih telah melihat ini. Angka GUA sama sekali berbeda. Mereka belum ditemukan!

Jawaban:

14

SOGL V0.12 , 11 10 8 7 5 byte

∫∫l*+

Coba Di Sini! - ini diharapkan disebut sebagai fungsi dengan input pada stack dan kotak input kosong.
Alternatif 7 byte mengambil input dari kotak input:

0.∫∫l*+

Coba Di Sini!

0      push 0
 .     push the input
  ∫    iterate over a range 1..POP (input) inclusive, pusing the current number
   ∫    iterate over 1..POP (above loops number) inclusive, pusing the current number
    l    push that numbers length without popping the number
     *   multiply the length by the number
      +  add to the zero, or whatever it is now
dzaima
sumber
push that numbers length without popping the numberbagus
Erik the Outgolfer
8

Haskell , 45 byte

f n=sum[j*length(show j)|i<-[1..n],j<-[1..i]]

Cobalah online!

jferard
sumber
1
Sedikit lebih tidak bisa dibaca tetapi satu byte lebih murah: TIO
ბიმო
7

Brain-Flak , 166 byte

<>(((()()())({}){})())<>{({}[()]<({}({}<<>({}[()])((){[()](<()>)}{}){{}((((({})({})){}{}){}))<>(({}<({}())>){()<({}[({})])>}{})(<>)}{}<>>({}({})())))>)}{}({}<{}{}{}>)

Cobalah online!

Penjelasan

<>(((()()())({}){})())<>           # Initialize second stack with 9 and 10
{({}[()]<                          # Do main loop n times:
  ({}
    ({}
      <
        <>({}[()])                 # Subtract 1 from counter to next power of 10
        ((){[()](<()>)}{}){        # If reached a power of 10 (say, 10^k):
          {}((((({})({})){}{}){})) # Multiply existing (10^k*0.9) by 10 and push twice
          <>                       # On first stack
          (
            ({}<({}())>)           # Increment length of numbers
            {()<({}[({})])>}{}     # Divide length of new set of numbers by this length
          )                        # Add together to get new set of numbers length
        (<>)}  
      {}<>>  
      ({}({})())                   # Add number length to number set length
    )                              # Add number set length to new segment length
  )                                # Add new segment length to total length
>)}                                # End main loop
{}({}<{}{}{}>)                     # Put result on stack by itself
Nitrodon
sumber
7

Sekam , 5 byte

ṁLΣQḣ

Cobalah online!

Penjelasan

ṁ  map over
 L  length
  Σ  sum list
   Q  all sublists
    ḣ  range 1 .. N
Icer Wild
sumber
Algoritma yang bagus!
H.PWiz
4

05AB1E , 5 byte

LŒJJg

Cobalah online!

Penjelasan

L      # push [1 .. a]
 Œ     # all substrings (a)
  J    # numbers to strings (inner)
   J   # numbers to strings (outer)
    g  # length
Icer Wild
sumber
Selamat datang di situs :)
DJMcMayhem
3

Sekam , 7 byte

Σ∫mS*Lḣ

Cobalah online!

Tidak Terikat / Penjelasan

         -- implicit input N                        | 10
  m   ḣ  -- map the following function over [1..N]  | [1,2,3,4]
   S*L   --   multiply length of number by itself   | [1,2,3,4] (only important for numbers ≥ 10)
 ∫       -- prefix sums                             | [0,1,3,6,10]
Σ        -- sum                                     | 20
ბიმო
sumber
3

Sekam , 7 byte

ṁLṁṘNḣḣ

Cobalah online!

Penjelasan

          Implicit input, e.g 4
      ḣ   Range from 1 to n                               [1,2,3,4]
     ḣ    Prefixes                                        [[],[1],[1,2],[1,2,3],[1,2,3,4]]
  ṁ       Map and then concatenate
   ṘN     Repeat each number in each list by its index    [[],[1],[1,2,2],[1,2,2,3,3,3],[1,2,2,3,3,3,4,4,4,4]]
                                                          [1,1,2,2,1,2,2,3,3,3,1,2,2,3,3,3,4,4,4,4]
ṁ         Map and then sum
 L        Length (of number: 10 -> 2)                     26
H.Piz
sumber
Oh solusi Sekam lain :) Tidak melihat kiriman Anda ketika memposting milik saya, bytecount yang sama tetapi mereka cukup berbeda, jadi saya akan meninggalkan milik saya di sini juga.
ბიმო
3

JavaScript (ES6), 57 55 byte

n=>[...Array(n)].reduce(x=>x+(++y+"").length*y*n--,y=0)

Cobalah online!

Shaggy
sumber
3

Python 2 , 59 58 byte

Satu lagi bytes debu berkat Jonathan Frech.

f=lambda n:n and sum(i*len(`i`)for i in range(n+1))+f(n-1)

Cobalah online!

Tidak pendek tapi eh ... apa-apaan ini.

benar-benar manusiawi
sumber
len(`i`)*i for-> i*len(`i`)for.
Jonathan Frech
53 byte , non-rekursif.
Jonathan Frech
3

CJam , 20 byte

q~),(\{),{_s,*+}*+}%

Cobalah online!

Nomor dilewatkan di bidang "input".

Penjelasan yang tidak dikelompokkan: (contoh input = 2)

q~),(\{),{_s,*+}*+}%                                             | Stack:
q                     read input as string                       | "2"
 ~                    eval input (add it to stack as integer)    | 2
  )                   add 1                                      | 3
   ,                  range (convert to array with values 0...N) | [0, 1, 2]
    (                 pop first item of array                    | [1, 2] 0
     \                swap top two values of stack               | 0 [1, 2]
      {           }   for each item in array...                  | 0 1
       )              add 1                                      | 0 2
        ,             range (convert to array with values 0...N) | 0 [0, 1]
         {     }      for every element in the array...          | 0 0
          _           duplicate                                  | 0 0 0
           s          convert to string                          | 0 0 "0"
            ,         get length of string                       | 0 0 1
             *        multiply                                   | 0 0
              +       add                                        | 0 1
                *     fold                                       | 0 1
                 +    add                                        | 1
                   %  repeat                                     | 4

Sepertinya sulit ketika dijelaskan lol.

Iaka Noe
sumber
2

J, 24 byte

[:+/[:+/\[:(*#@":"0)1+i.

Pendekatan tingkat tinggi yang serupa dengan jawaban APL dzaima, diterjemahkan ke dalam J, kecuali kita menghitung panjang angka dengan mengubahnya menjadi string terlebih dahulu alih-alih mengambil log, dan kita bisa menggunakan kait J untuk mengalikan panjang itu dengan angka itu sendiri: (*#@":"0) . Setelah itu baru jumlah penjumlahan pindaian.

Cobalah online!

Jonah
sumber
1
1(#.]*#\*#\.)1#@":@+i.juga bekerja untuk 22 byte
mil
@ Miles Itu pintar - aku butuh sedikit waktu untuk mengetahuinya. Sudah berapa lama pemrograman dalam J?
Jonah
Beberapa saat setelah saya bergabung dengan kode-golf. Saya sebenarnya tidak menggunakannya untuk menulis program nyata karena tidak saya tahu akan bisa membacanya, tetapi saya menggunakannya sebagai kalkulator desktop canggih sekarang, dan biasanya selalu memiliki jendela terbuka untuk menghitung sesuatu.
mil
2

R , 39 byte

function(n)sum(nchar(rep(1:n,n:1*1:n)))

Verifikasi semua kasus uji!

Algoritma sederhana; Saya mengamati, karena kebanyakan lakukan, bahwa untuk idi 1:n, idiulang i*(n-i+1)kali. Jadi saya membuat vektor itu, menghitung jumlah karakter di masing-masing, dan menjumlahkannya.

Giuseppe
sumber
1

Python 2, 51 50 byte

lambda n:sum(~k*(k-n)*len(`k+1`)for k in range(n))
orlp
sumber
@ LeakyNun Mengapa? Saya mengembangkan jawaban ini sendiri. Saya bahkan tidak memeriksa jawaban lainnya.
orlp
1
Ini bahkan tidak menghasilkan jawaban yang benar, memberi 0 untuk n = 1, 3 untuk n = 2 dan 14 untuk n = 3
Halvard Hummel
@HalvardHummel Ups, mengacak tanda dan lupa memberi +1. Diperbaiki sekarang
orlp
Saya melihat bahwa Anda akhirnya mengerti pola itu! Apakah ada cara untuk menguji kode Anda secara online atau jawaban Python 2 lainnya juga mencakup ini?
1

JavaScript (ES6), 50 42 byte

Diperbarui: sekarang pada dasarnya merupakan port dari apa yang dilakukan jawaban lain.

f=(n,i=1)=>n&&`${n}`.length*n*i+f(n-1,i+1)

Uji kasus

Arnauld
sumber
1

Mathematica, 66 byte

Tr[1^(f=Flatten)[IntegerDigits/@f@(a=Array)[a[#~Table~#&,#]&,#]]]&
J42161217
sumber
1

QBIC , 21 byte

[:|[a|[c|A=A+!c$}?_lA
steenbergh
sumber
1

Sebenarnya , 13 byte

R♂R♂i⌠;n⌡Mεjl

Cobalah online!

Penjelasan:

R♂R♂i⌠;n⌡Mεjl
R              range(1, n+1)
 ♂R            range(1, x+1) for x in previous
   ♂i          flatten into 1D list
     ⌠;n⌡M     for x in list:
      ;n       repeat x x times
          εj   concatenate to string
            l  length
Mego
sumber
1

Japt , 12 11 10 9 byte

õõÈ*sÊÃxx

Cobalah atau uji semua angka dari 1 hingga 150 .


Penjelasan

Input bilangan bulat implisit U.

õõ

Buat array bilangan bulat dari 1 ke Udan kemudian hasilkan sub-array dari 1 ke setiap bilangan bulat.

È   Ã

Lewati elemen masing-masing sub-array melalui fungsi.

*sÊ

Konversi elemen saat ini menjadi string ( s), dapatkan panjangnya ( Ê) dan kalikan dengan elemen.

xx

Kurangi array utama dengan tambahan setelah terlebih dahulu melakukan hal yang sama untuk setiap sub-array.

Shaggy
sumber
1

Jq 1.5 , 82 49 43 byte

[range(.)+1|range(.)+1|"\(.)"*.|length]|add

Diperluas

[   range(.)+1        # for i=1 to N
  | range(.)+1        # for j=1 to i
  | "\(.)"*.          # "j" copied j times
  | length            # convert to length
] | add               # add lengths

Contoh Jalankan

$ jq -Mr '[range(.)+1|range(.)+1|"\(.)"*.|length]|add' <<< "150"
1295790

Cobalah online! juga jqplay.org

jq170727
sumber
1

Ditumpuk , 28 byte

[~>[~>[:rep]"!]"!flat''#`#']

Cobalah online!

Beberapa orang mungkin bertanya, "Di titik mana alias tidak bisa dibaca?" Jika ini tidak dekat, Anda memiliki definisi "keterbacaan" yang sangat liberal.

Penjelasan

[~>[~>[:rep]"!]"!flat''#`#']    input: N
 ~>[          ]"!               for each number K from 1 to N
    ~>[    ]"!                  for each number J from 1 to K
       :rep                     repeat J J times
                 flat           flatten the resultant array
                     ''#`       join by the empty string
                         #'     get the length of said string
Conor O'Brien
sumber
1

C # (.NET Core) , 94 80 74 byte

n=>{int b=0,a=0,i;while(a++<n)for(i=0;i++<a;)b+=(i+"").Length*i;return b;}

Cobalah online!

Saya berharap untuk menemukan solusi langsung seperti apa jawaban @ kamoroso94 dimulai, tetapi menyerah karena saya menghabiskan terlalu banyak waktu untuk itu. Mungkin ada cara untuk melakukannya, tetapi formula perlu disesuaikan untuk setiap langkah besarnya.

Ucapan Terima Kasih

14 byte disimpan berkat @someone

6 byte disimpan berkat @Kevin Cruijssen

Ayb4btu
sumber
1
n=>{int b=0,a=0,i;for(;a++<n;)for(i=0;i++<a;)b+=i.ToString().Length*i;return b;} Cobalah online! untuk 80 byte dan kinerja.
kata ganti saya adalah monicareinstate
1
i.ToString()dapat (i+"")menyimpan lebih banyak byte.
Kevin Cruijssen
1

MATL , 15 byte

:ttP*Y"10&YlQks

Cobalah online!

Penjelasan:

:                range 1:input (implicit input)
 tt              duplicate twice
   P             reverse
    *            multiply elementwise
     Y"          runlength decoding
       10&Yl     log10
            Qk   increment and floor
              s  sum (implicit output)
Giuseppe
sumber
Logaritma itu mahal :-) Anda bisa menggantinya dengan mengonversi menjadi string, menghilangkan spasi, panjang::ttP*Y"VXzn
Luis Mendo
1

Perl 6 , 36 byte

{[+] 1..*Z*($_...1).map:{.chars*$_}}

Menguji

Diperluas:

{  # bare block lambda with implicit parameter 「$_」

  [+]               # reduce the following using &infix:«+»

    1 .. *          # Range from 1 to infinity

    Z*              # zip using &infix:«*»

    ( $_ ... 1 )    # sequence from the input down to 1
    .map:           # for each one
    { .chars * $_ } # multiply the number of digits with itself
}
Brad Gilbert b2gills
sumber
1

Arang , 18 14 byte

IΣE⊕NΣE⊕ι×λLIλ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Menggunakan Summe me save 4 byte. Penjelasan:

  E⊕N           Map from 0 to the input (loop variable i)
      E⊕ι       Map from 0 to i (loop variable l)
            Iλ  Cast l to string
           L    Take the length
         ×λ     Multiply by l
     Σ          Sum the results
 Σ              Sum the results
I               Cast to string
                Implicitly print
Neil
sumber
:| Sum sums numbers in the strings when given string arguments
ASCII-only
@ASCII-only It wasn't that, it was just printing a Σ instead...
Neil
@ASCII-only Also, best I can do with Sum is still 18 bytes: Print(Cast(Sum(Map(InclusiveRange(1, InputNumber()), Sum(Map(InclusiveRange(1, i), Times(l, Length(Cast(l)))))))));
Neil
@ASCII-only I tried sum of product but that was 17 bytes: ≔⊕NθIΣEθ×⁻θι×ιLIι. However, using Incremented instead of InclusiveRange shaves 4 bytes off my previous comment!
Neil
1

[Dyalog APL], 22 20 bytes

{+/≢¨⍕¨↑,/(/⍨¨⍳¨⍳⍵)}

Try it online!

Explanation:

{+/≢¨⍕¨↑,/(/⍨¨⍳¨⍳⍵)}
{                  } anonymous function with right argument named 
                ⍳⍵   range 1 to right arg
              ⍳¨     for each, range 1 to it
             ¨       for each
           /⍨          for each item, repeat right arg left arg times
          (       )  take that and
        ,/           join the sub-arrays together
                    convert from a nested array to a simple array (or something like that, I don't quite understand it :p)
     ⍕¨              convert each number to a char-array (aka string version)
   ≢¨                get length of each
 +/                  sum that together
dzaima
sumber