서면 숫자 시퀀스


17

다음은 Online Encyclopedia of Integer Sequences에 없는 합리적으로 사소한 시퀀스입니다 .

빈 시퀀스로 시작한 다음 각 항을 공백없이 영어로 시퀀스의 모든 자리를 쓰는 데 필요한 문자 수로 정의합니다. *

참고로 영어로 된 모든 (기본 10) 자릿수의 문자 수는 다음과 같습니다.

zero   one    two    three  four   five   six    seven  eight  nine
4      3      3      5      4      4      3      5      5      4

( A52360A5589 모두의 시작입니다 .)

빈 시퀀스에는 숫자가 0 이므로 첫 번째 항목 a(0)=0 만듭니다.

이렇게하면 현재까지 유일한 숫자 인 "0"을 쓰려면 4 개의 문자가 필요 하므로 두 번째 항목 됩니다.a(1)=4

"zerofour"를 쓰려면 총 8 개가 "four"를 쓰려면 4 개의 문자가 더 필요 하므로 세 번째 항목 됩니다.a(2)=8

"zerofoureight"를 쓰려면 총 13 개가 "eight"를 쓰려면 5 개의 문자가 더 필요 하므로 4 번째 항목 됩니다.a(3)=13

이렇게하면 "onethree"를 쓰는 데 8 개의 문자가 더 필요하므로 총 다섯 번째 항목 됩니다.a(4)=21

...등등. 처음 100 개의 항목은 다음과 같습니다.

0, 4, 8, 13, 21, 27, 35, 44, 52, 59, 67, 75, 84, 93, 102, 112, 121, 130, 142, 152, 162, 171, 182, 193, 205, 216, 225, 235, 247, 259, 270, 282, 293, 305, 318, 331, 344, 357, 371, 384, 398, 412, 422, 432, 444, 456, 467, 479, 492, 503, 516, 526, 536, 548, 561, 571, 583, 597, 610, 620, 630, 642, 652, 662, 671, 682, 693, 705, 718, 731, 744, 757, 771, 784, 798, 812, 823, 836, 849, 862, 873, 888, 903, 916, 926, 936, 948, 961, 971, 983, 997, 1010, 1024, 1038, 1055, 1070, 1086, 1101, 1114, 1127

* 우리는 다른 언어 및 / 또는 다른 기반이나 물론 공백으로 정의 할 수 있습니다

도전

가능한 적은 수의 코드로 출력이 주어지면 다음 중 하나를 수행하십시오.n

  • 시퀀스 의 처음 항 (음이 아닌 정수에 대해 작동해야 함)n
  • 의 값 음이 아닌 정수에 대해 작동해야 함)a(n)
  • 시퀀스 의 번째 항 (양의 정수, 즉 값에 대해 작동해야 )na ( n - 1 )a(n1)

이것은 이므로 각 언어에 대해 가장 짧은 바이트 단위의 대답이 이기고 바이트 단위의 가장 짧은 대답이 이깁니다. 골프 언어가 실제 언어이거나 난해한 언어로 좋아하는 언어로 들어가는 것을 막지 마십시오!


첫 번째 옵션으로, 당신은 1) 의미합니까 1해야 출력 [0]0출력합니다 []2) 0출력해야 [0]내 이전의 대답과 같은 ()?
Outgolfer Erik

@EriktheOutgolfer 나는 첫 번째 n 항을 반환해야하기 때문에 (1)을 의미합니다. 즉, 옵션은 "a (n) 이하의 시퀀스 출력", "output a (n)"또는 "output a (n-1)"입니다.
Jonathan Allan

따라서 a (x) = a (x-1) + f (a (x-1)) 여기서 f (x)는 x를 쓰는 데 필요한 문자의 양입니까?
FireCubez

@FireCubez 예, a (0) = 0 및 f (x)가 x의 숫자를 쓰기 위해 공백이 아닌 문자 인 경우
Jonathan Allan

답변:


12

펄 6 , 45 바이트

{({[+] @_.join.uninames>>.comb X-6}...*)[$_]}

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

숫자의 이름을 직접 얻을 수있을 때 멋진 모듈로가 필요 없습니다! 시퀀스의 n 번째 값을 반환하는 익명 코드 블록 또는 범위를 전달하여 값 목록을 얻을 수 있습니다.

설명:

{(                                     )[$_]}  # Index input into:
  {                               }...*        # An infinite sequence
                                               # Where each element is
   [+]   # The sum of
       @_.join  # All previous elements joined together
              .uninames  # The unicode names for each character
                         # These are names in the form "DIGIT ONE"
                       >>.comb  # Split each to lists of characters
                               X-6  # Subtract 6 from each

@JonathanAllan Ah, 나는 당신이 무한한 시퀀스를 반환으로 허용했다고 가정했습니다. 죄송합니다. 나는 이것을 고칠 것이다
Jo King

좋은,
Jonathan Allan

좋은! »1 바이트입니까? 또한 [+]이진 op가 어떻게 감속기가 될 수 있는지에 대한 힌트와 힌트가 될 수 있지만 sum3 바이트이며 가장 짧지는 않지만 확실하게 가장 우아한 골프 imo입니다.
raiph

@raiph »는 2 바이트이므로 교환 할 수 있습니다.
Jo King

어쩌면 이것은 속임수이지만 Rakudo가 Latin1 소스 코드를 올바르게 처리하지 않습니까? 그렇다면이 say '»'.encode('latin1').bytes 표시됩니다 1. :)
raiph

8

자바 스크립트 (ES6), 69 68 61 58 바이트

a(n) 반환 합니다 .

f=(n,s=0)=>n?f(n-1,[...s+''].map(d=>s+=(d+10)%23%3+3)|s):s

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

어떻게?

숫자 d 는 다음을 사용하여 숫자 n 의 문자로 변환됩니다 .

n=(((d×100+10)mod23)mod3)+3

 d | *100 | +10 | MOD 23 | MOD 3 | +3 | word
---+------+-----+--------+-------+----+-------
 0 |    0 |  10 |   10   |   1   |  4 | zero
 1 |  100 | 110 |   18   |   0   |  3 | one
 2 |  200 | 210 |    3   |   0   |  3 | two
 3 |  300 | 310 |   11   |   2   |  5 | three
 4 |  400 | 410 |   19   |   1   |  4 | four
 5 |  500 | 510 |    4   |   1   |  4 | five
 6 |  600 | 610 |   12   |   0   |  3 | six
 7 |  700 | 710 |   20   |   2   |  5 | seven
 8 |  800 | 810 |    5   |   2   |  5 | eight
 9 |  900 | 910 |   13   |   1   |  4 | nine

번호가 숫자 문자로 분할되어 있기 때문에,이 처리 수 d×100+10 단에 추가하여 10 (문자열 연결로).


7

Stax , 14 13 바이트

┴♥7[╘⌂←─üTJ‼√

실행 및 디버깅

여기서 중요한 통찰력은 숫자 에 철자 d((4 - 2 * d) // 3) % 3 + 3문자가 필요하다는 것 입니다. (그것은 파이썬 정수 나누기와 파이썬 스타일의 음이 아닌 모듈러스입니다)


5

, 21 바이트

Lai+:$+4335443554@^Pi

입력 을 명령 줄 인수로 사용하고 첫 항을 출력합니다 . 온라인으로 사용해보십시오!

설명

Lai+:$+4335443554@^Pi
                       a is 1st cmdline arg; i is 0 (implicit)
La                     Loop (a) times:
                   Pi   Print i
                  ^     Split it into a list of characters (i.e. digits)
       4335443554@      Use each digit to index into this number, giving the length of the
                        name of the digit (0 -> 4, 1 -> 3, etc.)
     $+                 Sum the results
  i+:                   Increment i by that amount

2
나는 이것을 읽었고 large constant to the power of pi기념비적으로 깊은 인상을 받았다. (여전히 인상적이지만 내 초기 해석은 단지 .. 더)
Οurous

4

Wolfram Language (Mathematica) , 57 바이트

Nest[#+Tr@StringLength@IntegerName@IntegerDigits@#&,0,#]&

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

Tr@StringLength@IntegerName@IntegerDigits@#&의 숫자를 나열하고 #각각을 영어 이름으로 변환하고 길이를 세고 결과를 합산합니다. 많은 것들이 목록에 쓰러져있어 매우 흥미 롭습니다. 그런 다음 정의를 반복적으로 적용합니다.

TIO는 인터넷에 연결되어 있지 않다고 불평하지만 어쨌든 정답을 알아 냈기 때문에 이유를 모르겠습니다. 정수 이름의 업데이트를 확인하고 있습니까?

()(0),(1),,()NestNestList




4

APL (Dyalog Unicode) , 29 28 바이트

{{⍵++/3+3|⌊3÷⍨4-2×⍎¨⍕⍵}⍣⍵⊢0}

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

Dfn. 인쇄합니다에프(나는)

이 문제를 도와 주신 @The APL Orchard 감사합니다.

2 바이트 동안 @ngn; 3 4 바이트 용 @ H.PWiz .

이제 @recursive의 공식을 사용하십시오.

어떻게:

{{⍵++/3+3|⌊3÷⍨4-2×⍎¨⍕⍵}⍣⍵⊢0}  Main fn

 {                     }⍣⍵⊢0  Starting with 0, repeat (⍣) the inner fn input times
      3+3|⌊3÷⍨4-2×⍎¨⍕⍵       @recursive's formula
  ⍵++/                       ⍝ Sum with the input.

3

파이썬 2 , 61 바이트

n=0
exec"for c in`n`:n+=(4-2*int(c))/3%3+3\n"*input()
print n

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

용도 의 자리수 매핑을 재귀 .


파이썬 2 , 63 바이트

f=lambda n:n and f(n-1)+sum((4-2*int(c))/3%3+3for c in`f(n-1)`)

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

재귀 함수 버전. 에 대한 두 개의 재귀 호출이 있기 때문에 실행하는 데 시간이 오래 걸립니다 f(n-1).


좋은! 전에 사용했던 표현 찾기 스크립트가이 표현 (또는 더 짧은 표현)을 찾으면 궁금합니다.
Lynn

@Lynn 스크립트를 실행했지만 더 나은 스크립트를 찾지 못했습니다. 13 문자는 전체 검색에 비해 너무 커서 최대 9 문자를 찾지 못했습니다. 를 잘라내어 +3산술 연산자 (비트 단위 없음)와 숫자 <= 4로 제한했을 때이 솔루션을 찾았지만 동등한 것을 제외하고는 더 짧거나 같은 길이는 없었습니다.
xnor

3

파이썬 2 , 71 바이트

f=lambda n,k=0:n and f(n-1,k+sum(632179420>>3*int(d)&7for d in`k`))or k

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


f=lambda n,k=0:n and f(n-1,k+sum(632179420>>3*int(d)&7for d in`k`))or k개수는 동일하지만 둘러싸는 목록을 출력하지 않습니다.
Jonathan Allan

staxx 응답의 재귀 알고리즘이 2 바이트를 절약하는 것처럼 보입니다. 나는 이것을 좋아한다!
Jonathan Allan

3

MathGolf , 17 바이트

0\{_▒♀*♂+L%3%3+Σ+

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

이것은 Arnauld의 method를 사용합니다 . 시퀀스의 n 번째 요소를 출력합니다. 빈 문자열이 괜찮 으면 시작 부분에서를 a(0)제거 할 수 0\있습니다.

설명:

0\                 Setup 0 as the counter
  {                Loop input times
   _▒              Duplicate counter and split to list of digits
     ♀*            Multiply each element by 100
       ♂+          Add 10
         L%        Modulo by 23
           3%      Modulo by 3
             3+    Add 3
               Σ   Sum list
                +  And add to counter

3

Pyth , 21 바이트

u+Gs@L+L3jC\᯻3jGTQ0

여기에서 온라인으로 사용해보십시오 .

u+Gs@L+L3jC\᯻3jGTQ0   Implicit: Q=eval(input()), T=10

u                Q0   Starting at 0, repeat the following Q times, with current value as G:
          C\᯻           Get character code 7163
         j   3          Convert the above to base 3, yields [1, 0, 0, 2, 1, 1, 0, 2, 2]
      +L3               Add 3 to each to generate digit length dictionary
              jGT       Get digits of G (convert to base 10)
    @L                  Lookup each value in the above in the dictionary, modular indexing
   s                    Take the sum
 +G                     Add G to the above

Pyth의 코드 페이지에서 단일 바이트가 아닐 가능성이 큽니다. (나는 UTF-8을 사용한다고 생각한다.이 경우 3 바이트이고 j7163 3길이는 동일하다. 그러나 tio.run은 Pyth에 SBCS가 있다고한다. 신비로운!)
Lynn

@Lynn 당신은 절대적으로 맞습니다. 바이트 수에 대해 잊어 버렸습니다. 코드를 그대로두고 바이트 수를 업데이트하겠습니다
Sok






1

J , 37 바이트

(+1#.|(3+3|23|10+100*]),.&.":)@]^:[&0

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

Arnauld의 방법을 사용합니다

설명:

논쟁은 n

                                 ^:    - apply the verb on the left hand site
                                   [   - n times
                                    &0 - to a starting value 0
 (                             )@]     - calculate for the current value of the argument
                         ,.&.":        - convert to string and then each char to digit
        (3+3|23|10+100*])              - map each digit to its word length
       |                               - a filler for the fork
    1#.                                - sum the lengths 
   +                                   - add them to the current value

1

첫 번째 댓글 이후 수정되었습니다.

모든 용어를 인쇄합니다

스칼라, 76 바이트

def^(n:Int)=(1 to n).scanLeft(0)((y,_)=>y+(y+"").map(x=>(x*9+1)%13%3+3).sum)

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

n 번째 인쇄 항을

스칼라, 72 바이트

def^(n:Int)=Stream.iterate(0)(x=>x+(x+"").map(x=>(x*9+1)%13%3+3).sum)(n)

스칼라, 69 바이트

def^(n:Int)=(0/:(1 to n))((y,_)=>y+(y+"").map(x=>(x*9+1)%13%3+3).sum)

스칼라, 67 바이트

def s(b:Int):Stream[Int]=b#::s(b+(b+"").map(x=>(x*9+1)%13%3+3).sum)

스칼라, 67 바이트

val s:Stream[Int]=0#::s.map(x=>x+(x+"").map(x=>(x*9+1)%13%3+3).sum)

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


1
나는 스칼라를 모르지만 이것이 프로그램이나 함수가 아니라 스 니펫 이라고 생각 합니다 (즉, 일단 n정의 되면 REPL에서 실행 됩니다). 스칼라를 알고 있다면 아마 쉽게 고칠 수 있습니다. 또한 스칼라 질문에는 골프 팁 이 도움이 될 수 있습니다. 마지막으로 온라인 통역사와의 링크를 게시하는 것이 좋습니다. TIO 에는 Scala가 있으며 많은 PPCG 회원이 사용합니다.
Jonathan Allan

1
@JonathanAllan, 감사합니다. 매우 도움이되었습니다.
Dr Y Wit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.