Không ai biết số GAU


22

Hãy để tôi giới thiệu cho bạn các số GAU

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

Thử thách này khá đơn giản!

Cho số nguyên n> 0, tìm số chữ số của GAU (n)

Thí dụ

Hãy tạo GAU (4),
chúng tôi thực hiện các bước sau (cho đến khi chúng tôi đạt được 4) và ghép chúng lại

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

bạn phải viết mỗi số nhiều lần giá trị của nó, nhưng bạn phải đếm mỗi lần từ 1

Hãy thử tạo GAU (5),
chúng ta sẽ phải đếm từ 1 đến 1

[1]   

sau đó từ 1 đến 2 (nhưng lặp lại mỗi số nhiều lần giá trị của nó )

[122]     

sau đó từ 1 đến 3

[122333]   

sau đó từ 1 đến 4

[1223334444]    

và cuối cùng từ 1 đến 5 (đây là bước cuối cùng vì chúng tôi muốn tìm GAU ( 5 ))

[122333444455555]     

Bây giờ chúng tôi thực hiện tất cả các bước này và ghép chúng
lại kết quả là GAU (5)

11221223331223334444122333444455555     

Chúng tôi quan tâm đến số chữ số của các số GAU này.

Các trường hợp thử nghiệm

Nhập liệu

n   ⟼ Length(GAU(n))

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

Đây là một thách thức .
Mã ngắn nhất tính bằng byte sẽ giành chiến thắng.

Nếu bạn vẫn có bất kỳ câu hỏi xin vui lòng cho tôi biết.
Tôi thực sự muốn tất cả mọi người ở đây hiểu mô hình phức tạp ẩn giấu ma thuật này


4
GAU có nghĩa là gì?
Rò rỉ Nun

21
G là dành cho GAU, A và U không có lý do

2
Cho đến n = 9, độ dài là các số tứ diện, nhưng hơn thế nữa, các số có nhiều chữ số có được theo cách đóng đơn giản
Miff

FYI trường hợp thử nghiệm của bạn nói n ⟼ Length(GUA(n)), không phải GAU (n).
numbermaniac

2
@numbermaniac cảm ơn vì đã phát hiện ra điều này. Số GUA là hoàn toàn khác nhau. Họ chưa được phát minh!

Câu trả lời:


14

SOGL V0.12 , 11 10 8 7 5 byte

∫∫l*+

Hãy thử nó ở đây! - điều này dự kiến ​​sẽ được gọi là một hàm với đầu vào trên ngăn xếp và hộp đầu vào trống.
Thay thế 7 byte lấy đầu vào từ hộp đầu vào:

0.∫∫l*+

Hãy thử nó ở đây!

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 numbertốt đẹp
Erik the Outgolfer


7

Brain-Flak , 166 byte

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

Hãy thử trực tuyến!

Giải trình

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

Husk , 7 byte

Σ∫mS*Lḣ

Hãy thử trực tuyến!

Ungolfed / Giải thích

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

Husk , 7 byte

ṁLṁṘNḣḣ

Hãy thử trực tuyến!

Giải trình

          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

Ôi một giải pháp Husk khác :) Không thấy bài đăng của bạn khi đăng bài của tôi, cùng một số lượng lớn nhưng chúng đủ khác nhau, vì vậy tôi cũng sẽ để tôi ở đây.
ბიმო



3

CJam , 20 byte

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

Hãy thử trực tuyến!

Số được truyền trong trường "đầu vào".

Giải thích lộn xộn: (ví dụ đầu vào = 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

Có vẻ khó khi giải thích lol.


2

J, 24 byte

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

Cách tiếp cận cấp cao tương tự với câu trả lời APL của dzaima, được dịch sang J, ngoại trừ chúng tôi tính toán độ dài của số bằng cách biến nó thành chuỗi trước thay vì lấy nhật ký và chúng tôi sử dụng hook của J để nhân chiều dài đó với chính số đó : (*#@":"0). Sau đó, nó chỉ là tổng của tổng quét.

Hãy thử trực tuyến!


1
1(#.]*#\*#\.)1#@":@+i.cũng làm việc cho 22 byte
dặm

@miles Thật thông minh - tôi phải mất một chút để tìm ra nó. Đã bao lâu lập trình trong J?
Giô-na

Một chút sau khi tôi tham gia chơi golf. Tôi thực sự không sử dụng nó để viết bất kỳ chương trình thực tế nào vì không biết tôi có thể đọc nó, nhưng hiện tại tôi sử dụng nó như một máy tính để bàn nâng cao và thường luôn có một cửa sổ mở để tính toán một cái gì đó.
dặm

2

R , 39 byte

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

Xác nhận tất cả các trường hợp thử nghiệm!

Thuật toán đơn giản; Tôi quan sát, như hầu hết đã làm, rằng itrong 1:n, iđược lặp đi lặp lại nhiều i*(n-i+1)lần. Vì vậy, tôi tạo ra vectơ đó, đếm số lượng ký tự trong mỗi ký tự và tính tổng chúng.


1

Python 2, 51 50 byte

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

@LeakyNun Tại sao? Tôi tự phát triển câu trả lời này. Tôi thậm chí không kiểm tra các câu trả lời khác.
orlp

1
Điều này thậm chí không đưa ra câu trả lời đúng, đưa ra 0 cho n = 1, 3 cho n = 2 và 14 cho n = 3
Halvard Hummel

@HalvardHummel Rất tiếc, làm hỏng một dấu hiệu và quên +1. Đã sửa bây giờ.
orlp

Tôi thấy rằng cuối cùng bạn đã hiểu người cha! Có cách nào để kiểm tra mã của bạn trực tuyến hoặc câu trả lời Python 2 khác cũng bao gồm điều này không?

1

JavaScript (ES6), 50 42 byte

Cập nhật: bây giờ về cơ bản là một cổng của những gì câu trả lời khác đang làm.

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

Các trường hợp thử nghiệm


1

Toán học, 66 byte

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


1

Trên thực tế , 13 byte

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

Hãy thử trực tuyến!

Giải trình:

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 byte

õõÈ*sÊÃxx

Hãy thử hoặc kiểm tra tất cả các số từ 1 đến 150 .


Giải trình

Đầu vào ngầm định của số nguyên U.

õõ

Tạo một mảng các số nguyên từ 1 đến Uvà sau đó tạo các mảng con từ 1 đến mỗi số nguyên.

È   Ã

Truyền các phần tử của mỗi mảng con thông qua một hàm.

*sÊ

Chuyển đổi phần tử hiện tại thành một chuỗi ( s), lấy chiều dài của nó ( Ê) và nhân nó với phần tử.

xx

Giảm mảng chính bằng cách thêm vào sau lần đầu tiên thực hiện tương tự với từng mảng phụ.


1

Jq 1.5 , 82 49 43 byte

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

Mở rộng

[   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

Chạy mẫu

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

Hãy thử trực tuyến! cũng jqplay.org


1

Xếp chồng lên nhau , 28 byte

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

Hãy thử trực tuyến!

Một số người có thể hỏi, "Tại thời điểm nào các bí danh không thể đọc được?" Nếu điều này không gần, bạn có một định nghĩa rất tự do về "khả năng đọc".

Giải trình

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

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

Hãy thử trực tuyến!

Tôi đã hy vọng tìm thấy một giải pháp trực tiếp như câu trả lời của @ kamoroso94 bắt đầu, nhưng đã từ bỏ vì tôi đã dành quá nhiều thời gian cho nó. Có lẽ có một cách để làm điều đó, nhưng công thức cần phải điều chỉnh cho mỗi bước độ lớn.

Lời cảm ơn

14 byte được lưu nhờ @someone

6 byte được lưu nhờ @Kevin Cruijssen


1
n=>{int b=0,a=0,i;for(;a++<n;)for(i=0;i++<a;)b+=i.ToString().Length*i;return b;} Hãy thử trực tuyến! cho 80 byte và hiệu suất.
đại từ của tôi là monicareinstate

1
i.ToString()có thể (i+"")để lưu thêm một số byte.
Kevin Cruijssen

1

TOÁN , 15 byte

:ttP*Y"10&YlQks

Hãy thử trực tuyến!

Giải trình:

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

Logarit đó rất tốn kém :-) Bạn có thể thay thế nó bằng cách chuyển đổi thành chuỗi, xóa khoảng trắng, độ dài::ttP*Y"VXzn
Luis Mendo

1

Perl 6 , 36 byte

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

Kiểm tra nó

Mở rộng:

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

Than , 18 14 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Sử dụng Sumđã lưu tôi 4 byte. Giải trình:

  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

: | Tổng các số trong chuỗi khi đưa ra đối số chuỗi
ASCII - chỉ

Chỉ có ASCII Không phải thế, nó chỉ in một Σthay thế ...
Neil

Chỉ có ASCII Ngoài ra, tốt nhất tôi có thể làm Sumvẫn là 18 byte:Print(Cast(Sum(Map(InclusiveRange(1, InputNumber()), Sum(Map(InclusiveRange(1, i), Times(l, Length(Cast(l)))))))));
Neil


@ ASCII - chỉ tôi đã thử tổng sản phẩm nhưng đó là 17 byte : ≔⊕NθIΣEθ×⁻θι×ιLIι. Tuy nhiên, sử dụng Incrementedthay vì loại bỏ InclusiveRange4 byte khỏi nhận xét trước đây của tôi!
Neil


1

[Dyalog APL], 22 20 byte

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

Hãy thử trực tuyến!

Giải trình:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.