Nikt nie zna liczb GAU

22

Pozwól, że przedstawię ci numery GAU

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

To wyzwanie jest dość proste!

Biorąc pod uwagę liczbę całkowitą n> 0, znajdź liczbę cyfr GAU (n)

Przykład

Zróbmy GAU (4)
, wykonujemy następujące kroki (aż dojdziemy do 4) i łączymy je

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

musisz wpisać każdą liczbę tyle razy, ile wynosi jej wartość, ale musisz liczyć za każdym razem od 1

Spróbujmy zrobić GAU (5)
, będziemy musieli liczyć od 1 do 1

[1]   

następnie od 1 do 2 (ale powtarzając każdą liczbę tyle razy, ile jest jej wartość )

[122]     

następnie od 1 do 3

[122333]   

następnie od 1 do 4

[1223334444]    

i wreszcie od 1 do 5 (jest to ostatni krok, ponieważ chcemy znaleźć GAU ( 5 ))

[122333444455555]     

Teraz wykonujemy wszystkie te kroki i łączymy je,
wynikiem jest GAU (5)

11221223331223334444122333444455555     

Interesuje nas liczba cyfr tych numerów GAU.

Przypadki testowe

Wejście ut Wyjście

n   ⟼ Length(GAU(n))

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

To wyzwanie dla .
Zwycięży najkrótszy kod w bajtach.

Jeśli nadal masz jakieś pytania, daj mi znać.
Naprawdę chcę, żeby wszyscy tutaj zrozumieli ten złożony magicznie wzór


źródło
4
Co oznacza skrót GAU?
Leaky Nun
21
G jest dla GAU, A i U są po prostu bez powodu
2
Aż do n = 9, długości są liczbami czworościennymi, ale poza tym liczby wielocyfrowe stają na drodze prostej formy zamkniętej
Miff
FYI mówi twój przypadek testowy n ⟼ Length(GUA(n)), a nie GAU (n).
numbermaniac
2
@numbermaniac dzięki za wykrycie tego. Numery GUA są zupełnie inne. Nie zostały jeszcze wynalezione!

Odpowiedzi:

14

SOGL V0.12 , 11 10 8 7 5 bajtów

∫∫l*+

Wypróbuj tutaj! - oczekuje się, że zostanie wywołany jako funkcja z danymi wejściowymi na stosie i pustym polem wejściowym.
7-bajtowa alternatywa pobierająca dane z pola wprowadzania:

0.∫∫l*+

Wypróbuj tutaj!

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
źródło
push that numbers length without popping the numbermiło
Erik the Outgolfer
8

Haskell , 45 bajtów

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

Wypróbuj online!

Jferard
źródło
1
Nieco bardziej nieczytelne, ale o jeden bajt tańsze: TIO
ბიმო
7

Brain-Flak , 166 bajtów

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

Wypróbuj online!

Wyjaśnienie

<>(((()()())({}){})())<>           # 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
źródło
7

Łuska , 5 bajtów

ṁLΣQḣ

Wypróbuj online!

Wyjaśnienie

ṁ  map over
 L  length
  Σ  sum list
   Q  all sublists
    ḣ  range 1 .. N
Icer Wild
źródło
Niezły algorytm!
H.PWiz
4

05AB1E , 5 bajtów

LŒJJg

Wypróbuj online!

Wyjaśnienie

L      # push [1 .. a]
 Œ     # all substrings (a)
  J    # numbers to strings (inner)
   J   # numbers to strings (outer)
    g  # length
Icer Wild
źródło
Witamy na stronie :)
DJMcMayhem
3

Łuska , 7 bajtów

Σ∫mS*Lḣ

Wypróbuj online!

Niegolfowane / Wyjaśnienie

         -- 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
ბიმო
źródło
3

Łuska , 7 bajtów

ṁLṁṘNḣḣ

Wypróbuj online!

Wyjaśnienie

          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.PWiz
źródło
Aha, inne rozwiązanie Husk :) Nie widziałem twojego przesłania, kiedy wysłałeś moje, ta sama liczba bajtów, ale są wystarczająco różne, więc zostawię tu również moje.
ბიმო
3

JavaScript (ES6), 57 55 bajtów

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

Wypróbuj online!

Kudłaty
źródło
3

Python 2 , 59 58 bajtów

Kolejny bajtuje kurz dzięki Jonathanowi Frechowi.

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

Wypróbuj online!

Nie krótko, ale eh ... co do cholery.

całkowicie ludzki
źródło
len(`i`)*i for-> i*len(`i`)for.
Jonathan Frech,
53 bajty , nierekurencyjne.
Jonathan Frech,
3

CJam , 20 bajtów

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

Wypróbuj online!

Numer jest przekazywany w polu „wejściowym”.

Objaśnienie bez golfa: (przykładowe wejście = 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

Wydaje się trudne, gdy wyjaśniono lol.

Iaka Noe
źródło
2

J, 24 bajty

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

Podobnie wysokim poziomie podejście do APL odpowiedź dzaima roku, tłumaczone na język J, z wyjątkiem obliczyć długość liczby poprzez przekształcenie go w ciąg pierwszy zamiast podejmowania dzienniki, i dostać się do wykorzystania hak J, aby pomnożyć tę długość przez samego numeru: (*#@":"0). Następnie jest to tylko suma sumy skanowania.

Wypróbuj online!

Jonasz
źródło
1
1(#.]*#\*#\.)1#@":@+i.działa również dla 22 bajtów
mil
@miles To sprytne - zajęło mi trochę czasu, aby to rozgryźć. Jak długo programuję w J?
Jonasz
Trochę po tym, jak dołączyłem do golfa. W rzeczywistości nie używam go do pisania prawdziwych programów, ponieważ nie wiem, czy byłbym w stanie go odczytać, ale teraz używam go jako zaawansowanego kalkulatora biurkowego i zwykle zawsze mam otwarte okno, aby coś obliczyć.
mile
2

R , 39 bajtów

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

Sprawdź wszystkie przypadki testowe!

Prosty algorytm; Zauważyłem, jak większość, że iin 1:n, ipowtarza się i*(n-i+1)razy. Więc tworzę ten wektor, liczę liczbę znaków w każdym i sumuję je.

Giuseppe
źródło
1

Python 2, 51 50 bajtów

lambda n:sum(~k*(k-n)*len(`k+1`)for k in range(n))
orlp
źródło
@LeakyNun Dlaczego? Sam opracowałem tę odpowiedź. Nie sprawdziłem nawet innych odpowiedzi.
lub
1
To nawet nie daje prawidłowej odpowiedzi, daje 0 dla n = 1, 3 dla n = 2 i 14 dla n = 3
Halvard Hummel
@HalvardHummel Ups, pomieszałem znak i zapomniałem +1. Naprawiono teraz.
orlp
Widzę, że w końcu zrozumiałeś patern! Czy istnieje sposób na przetestowanie kodu w trybie online, czy inna odpowiedź na to pytanie również dotyczy Pythona 2?
1

JavaScript (ES6), 50 42 bajtów

Zaktualizowano: teraz w zasadzie port, w którym robią inne odpowiedzi.

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

Przypadki testowe

Arnauld
źródło
1

Mathematica, 66 bajtów

Tr[1^(f=Flatten)[IntegerDigits/@f@(a=Array)[a[#~Table~#&,#]&,#]]]&
J42161217
źródło
1

QBIC , 21 bajtów

[:|[a|[c|A=A+!c$}?_lA
Steenbergh
źródło
1

Właściwie 13 bajtów

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

Wypróbuj online!

Wyjaśnienie:

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
źródło
1

Japt , 12 11 10 9 bajtów

õõÈ*sÊÃxx

Wypróbuj lub przetestuj wszystkie liczby od 1 do 150 .


Wyjaśnienie

Domniemane wprowadzenie liczby całkowitej U.

õõ

Wygeneruj tablicę liczb całkowitych od 1 do, Ua następnie wygeneruj pod-tablice od 1 do każdej liczby całkowitej.

È   Ã

Przekaż elementy każdej podgrupy przez funkcję.

*sÊ

Konwertuj bieżący element na string ( s), uzyskaj jego długość ( Ê) i pomnóż go przez element.

xx

Zmniejsz główną tablicę, dodając po tym, jak najpierw zrobisz to samo dla każdej pod-macierzy.

Kudłaty
źródło
1

Jq 1,5 , 82 49 43 bajty

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

Rozszerzony

[   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

Przykładowy przebieg

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

Wypróbuj online! także jqplay.org

jq170727
źródło
1

Ułożone , 28 bajtów

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

Wypróbuj online!

Niektórzy mogą zapytać: „W którym momencie aliasy są nieczytelne?” Jeśli to nie jest blisko, masz bardzo liberalną definicję „czytelności”.

Wyjaśnienie

[~>[~>[: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
źródło
1

C # (.NET Core) , 94 80 74 bajtów

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

Wypróbuj online!

Miałem nadzieję znaleźć bezpośrednie rozwiązanie, takie jak odpowiedź @ kamoroso94 , ale poddałem się, ponieważ zbyt dużo czasu. Prawdopodobnie istnieje sposób, aby to zrobić, ale formuła musi zostać dostosowana do każdego kroku wielkości.

Podziękowanie

14 bajtów zapisanych dzięki @someone

6 bajtów zaoszczędzonych dzięki @Kevin Cruijssen

Ayb4btu
źródło
1
n=>{int b=0,a=0,i;for(;a++<n;)for(i=0;i++<a;)b+=i.ToString().Length*i;return b;} Wypróbuj online! dla 80 bajtów i wydajności.
mój zaimek to monicareinstate
1
i.ToString()można (i+"")zaoszczędzić trochę więcej bajtów.
Kevin Cruijssen
1

MATL , 15 bajtów

:ttP*Y"10&YlQks

Wypróbuj online!

Wyjaśnienie:

:                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
źródło
Ten logarytm jest drogi :-) Możesz go zastąpić konwertowaniem na ciąg znaków, usuwanie spacji, długość::ttP*Y"VXzn
Luis Mendo
1

Perl 6 , 36 bajtów

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

Sprawdź to

Rozszerzony:

{  # 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
źródło
1

Węgiel drzewny , 18 14 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Za pomocą Sumzapisano mi 4 bajty. Wyjaśnienie:

  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
źródło
: | Sumuje liczby w ciągach, gdy podano argumenty ciągu
tylko ASCII
@ Tylko ASCII To nie było tak, to po prostu drukowało Σzamiast ...
Neil
@ Tylko ASCII Najlepsze, co mogę zrobić, Sumto nadal 18 bajtów:Print(Cast(Sum(Map(InclusiveRange(1, InputNumber()), Sum(Map(InclusiveRange(1, i), Times(l, Length(Cast(l)))))))));
Neil,
@ ASCII tylko próbowałem sumę produktu, ale to było 17 bajtów: ≔⊕NθIΣEθ×⁻θι×ιLIι. Jednak Incrementedzamiast InclusiveRangegolić 4 bajty mojego poprzedniego komentarza!
Neil
1

[Dyalog APL], 22 20 bajtów

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

Wypróbuj online!

Wyjaśnienie:

{+/≢¨⍕¨↑,/(/⍨¨⍳¨⍳⍵)}
{                  } 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
źródło