Trình tự chữ số


17

Đây là một chuỗi hợp lý tầm thường không có trong Từ điển bách khoa trực tuyến về các chuỗi số nguyên .

Bắt đầu với một chuỗi trống sau đó xác định mỗi thuật ngữ là số lượng ký tự cần thiết để viết ra, bằng tiếng Anh, tất cả các chữ số của chuỗi cho đến nay không có khoảng trắng. *

Để tham khảo số lượng ký tự của tất cả các chữ số (mười cơ sở) trong tiếng Anh là:

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

(Đó là sự khởi đầu của cả A52360A5589 .)

Điều này làm cho mục nhập đầu tiên vì không có chữ số nào trong chuỗi trống.a(0)=0

Điều này làm cho mục nhập thứ hai vì phải mất bốn ký tự để viết "không", chữ số duy nhất hiện tại cho đến nay.a(1)=4

Điều này làm cho mục thứ ba vì phải mất thêm bốn ký tự để viết "bốn" cho tổng số tám để viết "zerofour".a(2)=8

Điều này làm cho mục thứ tư vì phải mất thêm năm ký tự để viết "tám" cho tổng số mười ba để viết "zerofoureight".a(3)=13

Điều này làm cho mục thứ năm vì phải mất thêm tám ký tự để viết "onethree" cho tổng số hai mươi mốt để viết "zerofoureightonethree".a(4)=21

...và như thế. Dưới đây là 100 mục đầu tiên:

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

* Chúng tôi có thể định nghĩa nó cho các ngôn ngữ khác và / hoặc các cơ sở khác hoặc với không gian tất nhiên

Các thách thức

Cho đầu ra, trong càng ít byte mã càng tốt, bất kỳ:n

  • điều khoản đầu tiên của chuỗi (nên hoạt động cho các số nguyên không âm)n
  • Giá trị của (nên hoạt động đối với số nguyên không âm)a(n)
  • Số hạng thứ của chuỗi (nên hoạt động cho các số nguyên dương - tức là giá trị của )na(n1)

Đây là vì vậy câu trả lời ngắn nhất tính theo byte sẽ thắng cho mỗi ngôn ngữ và câu trả lời ngắn nhất bằng byte sẽ thắng. Đừng để ngôn ngữ chơi gôn ngăn bạn tham gia vào ngôn ngữ yêu thích của bạn dù là ngôn ngữ thực tế hay bí truyền!


Theo tùy chọn đầu tiên, bạn có nghĩa là 1) 1nên xuất [0]0nên xuất []hoặc 2) 0nên xuất [0](như trong câu trả lời trước của tôi)?
Erik the Outgolfer

@EriktheOutgolfer Ý tôi là (1) vì nó sẽ trả về n điều khoản đầu tiên. Nghĩa là, các tùy chọn là "xuất chuỗi lên đến nhưng không bao gồm a (n)", "đầu ra a (n)" hoặc "đầu ra a (n-1)".
Jonathan Allan

Vậy, a (x) = a (x - 1) + f (a (x - 1)) trong đó f (x) là số lượng ký tự cần thiết để viết x?
FireCubez

@FireCubez có, nếu a (0) = 0 và f (x) là các ký tự không phải không gian để viết các chữ số của x
Jonathan Allan

Câu trả lời:


12

Perl 6 , 45 byte

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

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

Không cần điều chỉnh ưa thích khi bạn có thể lấy tên của chữ số trực tiếp! Khối mã ẩn danh trả về giá trị thứ n của chuỗi hoặc bạn có thể vượt qua trong một phạm vi để nhận danh sách các giá trị

Giải trình:

{(                                     )[$_]}  # 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

@Jonathan ALLan Ah, tôi đã cho rằng bạn đã cho phép một chuỗi vô hạn như một sự trở lại, xin lỗi. Tôi sẽ sửa lỗi này
Jo King

Thật tuyệt, thật tốt :)
Jonathan Allan

Đẹp! »là một byte, phải không? Ngoài ra, [+]có thể dễ thương hơn và gợi ý về cách ops nhị phân có thể trở thành bộ giảm tốc nhưng sumcũng là ba byte và phù hợp với phần còn lại của giải pháp có thể không phải là ngắn nhất nhưng chắc chắn là imo golf thanh lịch nhất .
raiph

@raiph »là hai byte nên nó có thể hoán đổi cho nhau.
Jo King

Có lẽ điều này là gian lận nhưng Rakudo không xử lý chính xác mã nguồn Latin1? Nếu vậy, lưu ý rằng say '»'.encode('latin1').bytes hiển thị 1. :)
giờ 31 phút

8

JavaScript (ES6), 69 68 61 58 byte

Trả về .a(n)

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

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

Làm sao?

Một chữ số được chuyển đổi thành một số chữ cái với:dn

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

Vì số được chia thành các ký tự chữ số, chúng tôi có thể xử lý chỉ bằng cách thêm (dưới dạng nối chuỗi).d×100+1010


7

Stax , 14 13 byte

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

Chạy và gỡ lỗi nó

Cái nhìn sâu sắc quan trọng ở đây là chữ số dyêu cầu ((4 - 2 * d) // 3) % 3 + 3các chữ cái để đánh vần. (Đó là phân chia số nguyên python và mô đun không âm kiểu python)


5

Pip , 21 byte

Lai+:$+4335443554@^Pi

Lấy đầu vào làm đối số dòng lệnh và xuất ra đầu tiên . Hãy thử trực tuyến!nn

Giải trình

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
Tôi đọc nó như là large constant to the power of pivà ấn tượng lớn. (Nó vẫn rất ấn tượng, nhưng cách giải thích ban đầu của tôi chỉ là .. thêm nữa)
urous 22/10/18

4

Ngôn ngữ Wolfram (Mathicala) , 57 byte

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

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

Tr@StringLength@IntegerName@IntegerDigits@#&liệt kê các chữ số của #, chuyển đổi từng chữ số thành tên tiếng Anh, đếm độ dài và tính tổng kết quả. Nhiều thứ liên quan đến danh sách, nó rất thú vị. Sau đó, chúng tôi chỉ lặp đi lặp lại áp dụng định nghĩa.

TIO phàn nàn rằng nó không có kết nối Internet, nhưng tôi không chắc tại sao, vì dù sao nó cũng tìm ra câu trả lời đúng. Có lẽ nó đang kiểm tra cập nhật tên của số nguyên?

Xuất giá trị của , nhưng chúng ta có thể thay đổi nó để cung cấp cho toàn bộ danh sách bằng cách thay đổi thành .a(n)a(0),a(1),,a(n)NestNestList



4

05AB1E , 15 14 byte

ÎFD•16\|/•sSèOO

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

Giải trình

Î                # initialize stack with 0 and input
 F               # input times do:
  D              # duplicate the current number
         sSè     # and use one copy to index into
   •Qb₁ñ•        # 433544355
            OO   # sum digits and sum the stack

4

APL (Dyalog Unicode) , 29 28 byte

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

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

Dfn. Inf(input)

Cảm ơn các bạn @The APL Orchard đã giúp đỡ điều này:

@ngn cho 2 byte; @ H.PWiz cho 3 4 byte.

Bây giờ sử dụng công thức @ đệ quy.

Làm sao:

{{⍵++/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

Python 2 , 61 byte

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

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

Sử dụng ánh xạ đếm số đệ quy .


Python 2 , 63 byte

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

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

Một phiên bản chức năng đệ quy. Phải mất thời gian theo cấp số nhân để chạy vì nó có hai cuộc gọi đệ quy đến f(n-1).


Đẹp! Tôi tò mò nếu tập lệnh tìm biểu thức mà bạn đã đề cập sử dụng trước khi tìm thấy biểu thức này (hoặc có thể là tập lệnh thậm chí ngắn hơn?)
Lynn

@Lynn Tôi đã chạy tập lệnh nhưng không tìm thấy tập nào tốt hơn. 13 ký tự là quá nhiều cho một tìm kiếm đầy đủ và không tìm thấy bất cứ thứ gì dài nhất là 9 ký tự. Khi tôi cắt +3và giới hạn nó cho các toán tử số học (không có bitwise) và các số <= 4, tôi đã tìm thấy giải pháp này nhưng không có gì ngắn hơn hoặc thậm chí có cùng độ dài ngoại trừ tương đương.
xnor

3

Python 2 , 71 byte

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

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


f=lambda n,k=0:n and f(n-1,k+sum(632179420>>3*int(d)&7for d in`k`))or klà cùng một số lượng nhưng tránh xuất ra một danh sách kèm theo.
Jonathan Allan

Có vẻ như thuật toán đệ quy từ câu trả lời staxx của họ sẽ tiết kiệm được 2 byte. Tôi làm như thế này mặc dù!
Jonathan Allan

3

MathGolf , 17 byte

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

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

Điều này sử dụng phương pháp của Arnauld . Xuất ra phần tử thứ n của chuỗi .. Nếu chuỗi trống là ổn a(0), thì chúng ta có thể loại bỏ 0\phần đầu.

Giải trình:

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

Bình thường , 21 byte

u+Gs@L+L3jC\᯻3jGTQ0

Hãy thử trực tuyến tại đây .

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

rất có thể không phải là một byte trong bảng mã của Pyth. (Tôi nghĩ rằng nó sử dụng UTF-8, trong trường hợp đó là 3 byte và j7163 3có cùng độ dài; nhưng tio.run nói Pyth có SBCS. Bí ẩn!)
Lynn

@Lynn Bạn hoàn toàn đúng, tôi đã quên về số byte, xấu của tôi. Bây giờ tôi sẽ để lại mã và cập nhật số byte
Sok






1

J , 37 byte

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

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

Sử dụng phương pháp của Arnauld

Giải trình:

Đối số là 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

Chỉnh sửa sau bình luận 1.

In tất cả các điều khoản

Scala, 76 byte

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

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

In thuật ngữ thứ n

Scala, 72 byte

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

Scala, 69 byte

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

Scala, 67 byte

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

Scala, 67 byte

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

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


1
Tôi không biết Scala, nhưng tôi nghĩ đây không phải là chương trình hay chức năng mà là đoạn trích (nghĩa là nó chạy trên REPL một lần nđược xác định). Nếu bạn biết Scala thì có lẽ dễ sửa. Cũng lưu ý rằng có một mẹo để chơi gôn trong câu hỏi Scala có thể giúp ích. Cuối cùng, thật tuyệt khi đăng một liên kết đến một thông dịch viên trực tuyến, TIO có Scala và được sử dụng bởi rất nhiều thành viên PPCG.
Jonathan Allan

1
@Jonathan ALLan, cảm ơn bạn, nó rất hữu ích.
Bác sĩ Y Wit
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.