GAU Numaralarını kimse bilmiyor


22

GAU numaralarını size tanıtmama izin verin

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

Bu zorluk oldukça basittir!

N> 0 tamsayısına göre, GAU (n) 'nin hane sayısını bulun

Örnek

GAU'yu (4) yapalım (4'e
ulaşana kadar) aşağıdaki adımları uygulayalım ve birleştirelim

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

Her sayıyı değeri kadar yazmak zorundasınız, ancak her zaman 1'den saymak zorundasınız.

GAU (5) yapmaya çalışalım
, 1'den 1'e kadar saymamız gerekecek.

[1]   

sonra 1'den 2'ye kadar (ancak her sayıyı değeri kadar tekrarlayın )

[122]     

sonra 1'den 3'e kadar

[122333]   

sonra 1 ile 4 arasında

[1223334444]    

ve nihayet 1-5 arası (bu son adımdır çünkü GAU'yu bulmak istiyoruz ( 5 ))

[122333444455555]     

Şimdi tüm bu adımları atıyoruz ve onları birleştiriyoruz
, sonuç GAU (5).

11221223331223334444122333444455555     

Bu GAU numaralarının rakamlarıyla ilgileniyoruz.

Test durumları

Input⟼Output

n   ⟼ Length(GAU(n))

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

Bu bir mücadelesi.
Bayt cinsinden en kısa kod kazanacaktır.

Hala herhangi bir sorunuz varsa lütfen bana bildirin.
Buradaki herkesin bu sihirli-gizli-karmaşık yapıyı anlamalarını istiyorum.


4
GAÜ ne anlama geliyor?
Sızdıran Rahibe

21
G GAU içindir, A ve U sebepsiz yere var

2
N = 9 olana kadar, uzunluklar dört yüzlü sayılardır, ancak çok basamaklı sayılar basit bir kapalı formda olur
Miff

Bilgin olsun, sınavın n ⟼ Length(GUA(n))GAU’dan değil.
numbermaniac

2
@numbermaniac bunu gördüğünüz için teşekkürler. GUA numaraları tamamen farklı. Henüz icat edilmediler!

Yanıtlar:


14

SOGL V0.12 , 11 10 8 7 5 bayt

∫∫l*+

Burada dene! - bu, istif üzerindeki giriş ve giriş kutusunun boş olduğu bir fonksiyon olarak adlandırılmayı bekler.
Giriş kutusundan girişi alarak 7 bayt alternatif:

0.∫∫l*+

Burada dene!

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

push that numbers length without popping the numbernice
Outgolfer Erik, 23:17


7

Brain-Flak , 166 bayt

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

Çevrimiçi deneyin!

açıklama

<>(((()()())({}){})())<>           # 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





3

Kabuğu , 7 bayt

Σ∫mS*Lḣ

Çevrimiçi deneyin!

Ungolfed / Açıklama

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

3

Kabuğu , 7 bayt

ṁLṁṘNḣḣ

Çevrimiçi deneyin!

açıklama

          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

Ah başka bir Husk çözümü :) Gönderiminizi benim gönderim sırasında görmedim, aynı bytecount ama onlar yeterince farklı, bu yüzden benimki de burada bırakacağım.
ბიმო



3

CJam , 20 bayt

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

Çevrimiçi deneyin!

Sayı "giriş" alanına iletilir.

Ungolfed açıklama: (örnek giriş = 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

Lol açıklandığında zor görünüyor.


2

J, 24 bayt

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

Biz bir dizeye dönüştürerek ilk yerine günlükleri alarak Buradaki sayı uzunluğunu hesaplamak ve biz sayı kendisi tarafından bu süreye çoğalmaya J'nin kanca kullanmak olsun hariç J çevrilmiş dzaima en APL cevap, benzer şekilde yüksek seviyeli yaklaşımı: (*#@":"0). Bundan sonra sadece tarama toplamının toplamıdır.

Çevrimiçi deneyin!


1
1(#.]*#\*#\.)1#@":@+i.Ayrıca 22 bayt için çalışır
mil

@miles Bu zekice - çözmem biraz zaman aldı. J’de ne zamandır programlama yapıyorsunuz?
Jonah

Kod golfüne katılmamdan biraz sonra. Aslında hiçbir programı okuyamayacağımı bildiğim için gerçek programları yazmak için kullanmıyorum, ancak şimdi gelişmiş bir masaüstü hesap makinesi olarak kullanıyorum ve genellikle bir şeyi hesaplamak için her zaman açık bir pencerem var.
mil

2

R , 39 bayt

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

Tüm test durumlarını doğrulayın!

Basit algoritma; En yaptığı gibi ben için o, gözlenen iiçinde 1:n, itekrarlanır i*(n-i+1)kez. Bu yüzden o vektörü yaratıyorum, her birindeki karakter sayısını sayıyorum ve bunları toplamıyorum.


1

Python 2, 51 50 bayt

lambda n:sum(~k*(k-n)*len(`k+1`)for k in range(n))

@LeakyNun Neden? Bu cevabı kendim geliştirdim. Diğer cevapları bile kontrol etmedim.
orlp

1
Bu doğru cevabı bile vermez, n = 1 için 0, n = 2 için 3 ve n = 3 için 14 verir
Halvard Hummel 23:17

@HalvardHummel Oops, bir işareti karıştırdı ve + 1'i unuttu. Şimdi düzeltildi.
orlp

Sonunda paterni anladığını görüyorum! Kodunuzu çevrimiçi olarak test etmenin bir yolu var mı, yoksa Python 2'nin cevabı da bunu kapsıyor mu?

1

JavaScript (ES6), 50 42 bayt

Güncelleme: şimdi temelde diğer cevapların ne yaptığını bir liman.

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

Test durumları


1

Mathematica, 66 bayt

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


1

Aslında , 13 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

1

Japt , 12 11 10 9 bayt

õõÈ*sÊÃxx

Deneyin veya tüm sayıları 1 ile 150 arasında test edin .


açıklama

Tamsayının örtük girişi U.

õõ

1'den 1'e bir tam sayı dizisi oluşturun Uve sonra 1'den her bir tam sayıya alt diziler oluşturun.

È   Ã

Her alt dizinin elemanlarını bir fonksiyondan geçirin.

*sÊ

Geçerli öğeyi bir dizgeye ( s) dönüştürün, uzunluğu ( Ê) olsun ve öğeyle çarpın.

xx

Her alt dizide aynı şeyi yaptıktan sonra ana diziyi ekleyerek azaltın.


1

Jq 1.5 , 82 49 43 bayt

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

Expanded

[   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

Örnek çalışma

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

Çevrimiçi deneyin! ayrıca jqplay.org


1

Yığılmış , 28 bayt

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

Çevrimiçi deneyin!

Bazıları, "Takma ad hangi noktada okunamıyor?" Diye sorabilir. Bu yakın değilse, çok okunaklı bir "okunabilirlik" tanımına sahipsiniz.

açıklama

[~>[~>[: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


1

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

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

Çevrimiçi deneyin!

@ Kamoroso94 adlı kişinin cevabı gibi doğrudan bir çözüm bulmayı umuyordum. başladığı , ama çok fazla zaman harcadığımdan vazgeçtim. Muhtemelen bunu yapmanın bir yolu vardır, ancak formülün her büyüklük basamağı için ayarlaması gerekir.

Teşekkür

@Someone sayesinde 14 bayt kaydedildi

@Kevin Cruijssen sayesinde 6 bayt kurtarıldı


1
n=>{int b=0,a=0,i;for(;a++<n;)for(i=0;i++<a;)b+=i.ToString().Length*i;return b;} Çevrimiçi deneyin! 80 bayt ve performans için.
zamirim monicareinstate

1
i.ToString()(i+"")biraz daha bayt kaydetmek olabilir .
Kevin Cruijssen

1

MATL , 15 bayt

:ttP*Y"10&YlQks

Çevrimiçi deneyin!

Açıklama:

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

Bu logaritma pahalıdır :-) Dizgeye dönüştürerek, boşlukları kaldırarak, uzunluk değiştirerek değiştirebilirsiniz::ttP*Y"VXzn
Luis Mendo

1

Perl 6 , 36 bayt

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

Dene

Expanded:

{  # 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
}

1

Kömür , 18 14 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Düzenleme: kullanma Sumbeni 4 bayt kurtardı. Açıklama:

  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

: | Toplamı dize argümanları verildiğinde dizgelerde sayıları toplar
ASCII-sadece

@ ASCII-sadece O değildi, sadece baskı yapıyordu Σ...
Neil

@ ASCII-only Ayrıca, yapabileceğim en iyi Sumşey hala 18 byte:Print(Cast(Sum(Map(InclusiveRange(1, InputNumber()), Sum(Map(InclusiveRange(1, i), Times(l, Length(Cast(l)))))))));
Neil


@ ASCII Keşke ürünün toplamını çalıştı ama o 17 byte oldu: ≔⊕NθIΣEθ×⁻θι×ιLIι. Ancak önceki yorumumdan tıraş Incrementedyerine InclusiveRange4 bayt kullanmak !
Neil


1

[Dyalog APL], 22 20 bayt

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

Çevrimiçi deneyin!

Açıklama:

{+/≢¨⍕¨↑,/(/⍨¨⍳¨⍳⍵)}
{                  } 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

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.