아무도 GAU 번호를 모른다


22

GAU 번호를 소개하겠습니다

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

이 도전은 매우 간단합니다!

정수 n> 0이 주어지면 GAU (n)의 자릿수를 찾으십시오.

GAU (4)
를 만들고 다음 단계 (4에 도달 할 때까지)를 수행하여 연결 합시다.

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

모든 숫자를 그 값만큼 여러 번 써야하지만 매번 1부터 세어야합니다.

우리가 1에서 1까지 세어야 할 GAU (5) 를 만들어 봅시다.

[1]   

그런 다음 1에서 2까지 (그러나 모든 숫자를 그 값만큼 여러 번 반복 )

[122]     

그런 다음 1에서 3까지

[122333]   

그런 다음 1에서 4까지

[1223334444]    

마지막으로 1 ~ 5 ( GAU ( 5 ) 를 찾고 싶기 때문에 마지막 단계입니다 )

[122333444455555]     

이제이 모든 단계를 수행하고
결과를 GAU (5)로 연결합니다 .

11221223331223334444122333444455555     

이 GAU 번호의 자릿수에 관심이 있습니다.

테스트 사례

입력 ⟼ 출력

n   ⟼ Length(GAU(n))

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

이것은 도전입니다.
바이트 단위의 최단 코드가 이깁니다.

여전히 궁금한 점이 있으면 알려주세요.
나는 여기의 모든 사람들이이 마술처럼 복잡한 패턴을 이해하기를 정말로 원합니다


4
GAU는 무엇을 의미합니까?
Leaky Nun

21
G는 GAU, A의이고, U는 아무 이유없이 단지가

2
n = 9까지, 길이는 사면체 수이지만 그 이상으로 여러 자리 숫자는 단순한 닫힌 형태를 방해합니다.
Miff

참고로 테스트 케이스는 n ⟼ Length(GUA(n))GAU (n)가 아니라 라고 말합니다 .
numbermaniac

2
이것을 발견해 주셔서 감사합니다. GUA 번호는 완전히 다릅니다. 그들은 아직 발명되지 않았습니다!

답변:


14

SOGL V0.12 , 11 10 8 7 5 바이트

∫∫l*+

여기 사용해보십시오! -스택의 입력과 입력 상자가 비어있는 함수로 호출 될 것으로 예상됩니다.
입력 상자에서 입력을받는 7 바이트 대안 :

0.∫∫l*+

여기 사용해보십시오!

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 number좋은
Outgolfer Erik


7

Brain-Flak , 166 바이트

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

온라인으로 사용해보십시오!

설명

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

껍질 , 7 바이트

Σ∫mS*Lḣ

온라인으로 사용해보십시오!

언 골프 / 설명

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

껍질 , 7 바이트

ṁLṁṘNḣḣ

온라인으로 사용해보십시오!

설명

          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

오 또 다른 Husk 솔루션 :) 내 바이트를 게시 할 때 제출 한 내용을 보지 못했지만 동일한 바이트 수는 충분히 다르므로 여기에 남겨 두겠습니다.
ბიმო



3

CJam , 20 바이트

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

온라인으로 사용해보십시오!

이 번호는 "입력"필드에 전달됩니다.

Ungolfed description : (예제 입력 = 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 설명하면 힘들 것 같습니다.


2

J, 24 바이트

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

dzaima의 APL 답변에 대한 유사한 높은 수준의 접근 방식은 J로 변환됩니다. 단, 로그를 가져 오는 대신 문자열로 먼저 숫자를 돌려 숫자의 길이를 계산하고 J의 후크를 사용하여 해당 길이에 숫자 자체를 곱합니다 (*#@":"0). 그 후에는 스캔 합계의 합계입니다.

온라인으로 사용해보십시오!


1
1(#.]*#\*#\.)1#@":@+i.또한 22 바이트 일
마일

@miles 영리합니다. 알아내는 데 약간의 시간이 걸렸습니다. J에서 얼마나 오래 프로그래밍 했습니까?
요나

코드 골프에 합류 한 후 조금. 나는 그것을 읽을 수 없다는 것을 알지 못하므로 실제 프로그램을 작성하는 데 실제로 사용하지는 않지만 지금은 고급 데스크탑 계산기로 사용하며 일반적으로 항상 무언가를 계산하기 위해 열린 창을 가지고 있습니다.
마일

2

R , 39 바이트

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

모든 테스트 사례를 확인하십시오!

간단한 알고리즘; 에서와 마찬가지로 iin 1:n에서 i반복되는 i*(n-i+1)횟수 가 관찰 되었습니다. 그래서 그 벡터를 만들고 각각의 문자 수를 세고 합산합니다.


1

파이썬 2, 51 50 바이트

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

@LeakyNun 왜? 나는이 답변을 스스로 개발했다. 나는 다른 답변도 확인하지 않았습니다.
orlp

1
이것은 정답을 출력하지도 않고, n = 1에 0, n = 2에 3, n = 3에 14를 제공합니다
Halvard Hummel

@HalvardHummel 죄송합니다, 기호를 엉망으로하고 +1을 잊어 버렸습니다. 지금 수정했습니다.
orlp

나는 당신이 마침내 patern을 이해했다는 것을 안다! 온라인으로 코드를 테스트하는 방법이 있습니까? 아니면 다른 Python 2 답변도이를 다루고 있습니까?

1

자바 스크립트 (ES6), 50 42 바이트

업데이트 : 이제 기본적으로 다른 답변이 수행하는 포트입니다.

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

테스트 사례


1

매스 매 티카, 66 바이트

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



1

Japt , 12 11 10 9 바이트

õõÈ*sÊÃxx

그것을 시도 하거나 1에서 150까지의 모든 숫자를 테스트하십시오 .


설명

정수의 묵시적 입력 U.

õõ

1에서 1까지의 정수 배열을 생성 한 U다음 1에서 각 정수까지의 하위 배열을 생성하십시오.

È   Ã

각 하위 배열의 요소를 함수를 통해 전달하십시오.

*sÊ

현재 요소를 문자열 ( s) 로 변환하고 길이 ( Ê)를 가져 와서 요소에 곱하십시오.

xx

먼저 각 하위 배열에 대해 동일한 작업을 수행 한 후 추가하여 주 배열을 줄입니다.


1

Jq 1.5 , 82 49 43 바이트

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

넓히는

[   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

샘플 실행

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

온라인으로 사용해보십시오! 또한 jqplay.org


1

스택 형 , 28 바이트

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

온라인으로 사용해보십시오!

"어떤 시점에서 별칭을 읽을 수 없습니까?" 이것이 가까워지지 않으면 "가독성"에 대한 매우 자유로운 정의를 갖게됩니다.

설명

[~>[~>[: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 코어) , 94 80 74 바이트

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

온라인으로 사용해보십시오!

@ kamoroso94의 답변 과 같은 직접 솔루션을 찾고 싶었습니다. 시작된 있었지만 너무 많은 시간을 보내면서 포기했습니다. 아마도 그것을하는 방법이있을 수 있지만 수식은 모든 규모 단계에 맞게 조정해야합니다.

감사의 말

@someone 덕분에 14 바이트 절약

@Kevin Cruijssen 덕분에 6 바이트 절약


1
n=>{int b=0,a=0,i;for(;a++<n;)for(i=0;i++<a;)b+=i.ToString().Length*i;return b;} 온라인으로 사용해보십시오! 80 바이트 및 성능.
내 대명사는 monicareinstate입니다.

1
i.ToString()(i+"")더 많은 바이트를 절약 할 수 있습니다 .
Kevin Cruijssen


1

펄 6 , 36 바이트

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

그것을 테스트

넓히는:

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

, 18 14 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 편집 : 사용하면 Sum4 바이트가 저장되었습니다. 설명:

  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

: | 문자열 인수가 주어지면 문자열의 숫자를 합산합니다.
ASCII 전용

@ ASCII-only 그것은 단지 Σ대신 인쇄하는 것이 아니라 ...
Neil

@ ASCII-only 또한, 내가 할 수있는 최선 Sum은 여전히 ​​18 바이트입니다 :Print(Cast(Sum(Map(InclusiveRange(1, InputNumber()), Sum(Map(InclusiveRange(1, i), Times(l, Length(Cast(l)))))))));
Neil


@ASCII 전용 제품의 합계를 시도했지만 17 바이트였습니다 ≔⊕NθIΣEθ×⁻θι×ιLIι. 그러나 이전 주석에서 4 바이트 IncrementedInclusiveRange면도 대신 사용하는 것이 좋습니다 !
Neil


1

[Dyalog APL], 22 20 바이트

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

온라인으로 사용해보십시오!

설명:

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.