Chim đầu chim vuông vuông


15

Định nghĩa

Nếu bạn lấy chuỗi các số nguyên dương và ghép chúng thành một chuỗi các chữ số (nghĩa là 149162536496481100...), một hình vuông "chim sớm" là một hình vuông có thể được tìm thấy trong chuỗi này trước vị trí tự nhiên của nó.

Ví dụ: 7 2 (số 49), có thể được tìm thấy ở độ lệch 2 trong chuỗi, mặc dù vị trí tự nhiên nằm ở offset 10. Do đó, 7 là hình vuông "đầu chim" đầu tiên.

Lưu ý rằng để nó được coi là hình vuông "chim sớm", tất cả các chữ số trong hình vuông phải xuất hiện trước khi bắt đầu vị trí tự nhiên. Một trận đấu trùng lặp một phần vị trí tự nhiên không được tính.

a(n)là số nguyên dương thứ n k sao cho k 2 là một hình vuông "chim sớm".

Bài tập

Cho một số nguyên dương n, đầu ra a(n).

Bạn có thể sử dụng lập chỉ mục dựa trên 1 hoặc 0, nhưng nếu bạn sử dụng lập chỉ mục dựa trên 0, vui lòng nói như vậy trong câu trả lời của bạn.

Giải pháp của bạn sẽ có thể xử lý ít nhất là cao a(53)(hoặc nếu bạn đang sử dụng lập chỉ mục dựa trên 0 a(52)).

Tủ thử

n     a(n)
1     7
2     8
3     21
4     25
5     46
6     97
7     129
8     161
9     196
10    221
...
13    277
...
50    30015
51    35000
52    39250
53    46111

Người giới thiệu


Là bảng của các trường hợp thử nghiệm sử dụng cơ sở 0 hoặc 1?
idrougge

1
Có thể xuất ra các nyếu tố đầu tiên của chuỗi? Tùy thuộc vào OP nhưng nhiều người chọn cho phép điều đó.
HyperNeutrino

@idrougge trường hợp kiểm tra là 1 dựa trên.
James Holdiness

@HyperNeutrino Tôi muốn có một bộ kết quả nhất quán cho tất cả các câu trả lời, vì vậy vui lòng chỉ trả về giá trị duy nhất của a(n).
James Holdiness

Câu trả lời:


5

05AB1E , 10 9 byte

Đã lưu 1 byte nhờ Adnan .

µNL<nJNnå

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

Giải trình

µ           # loop until counter equals the input
 NL         # push the range [1 ... iteration_no]
   <        # decrement each
    n       # square each
     J      # join to string
      Nnå   # is iteration_no in the string?
            # if true, increase counter

Bạn có thể bỏ qua ½vì nó sẽ tự động được thêm vào vòng lặp khi bị thiếu.
Ad Nam

@Ad Nam: Đúng. Nhận thấy thử thách này ngay trước khi tôi nhảy lên một chuyến tàu (hoặc sẽ đến nếu nó không bị trì hoãn), vì vậy tôi hoàn toàn bỏ lỡ điều đó. Cảm ơn :)
Emigna

7

JavaScript (ES6), 51 49 45 byte

1 chỉ mục.

f=(n,s=k='')=>n?f(n-!!s.match(++k*k),s+k*k):k

Bản giới thiệu

Định dạng và nhận xét

f = (                         // f = recursive function taking:
  n,                          //   n = input
  s = k = ''                  //   s = string of concatenated squares, k = counter
) =>                          //
  n ?                         // if we haven't reached the n-th term yet:
    f(                        //   do a recursive call with:
      n - !!s.match(++k * k), //     n decremented if k² is an early bird square
      s + k * k               //     s updated
    )                         //   end of recursive call
  :                           // else:
    k                         //   return k

Phiên bản không đệ quy, 53 byte

Điều này không phụ thuộc vào kích thước ngăn xếp động cơ của bạn.

n=>{for(k=s='';n-=!!(s+=k*k).match(++k*k););return k}

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


6

Bình thường , 12 byte

e.f/jk^R2Z`*

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

Làm thế nào nó hoạt động

ef / jk ^ R2Z` * ~ Chương trình đầy đủ. Đặt Q là đầu vào của chúng tôi.

 .f ~ Số nguyên dương Q đầu tiên có kết quả trung thực. Sử dụng biến Z.
      ^ R2Z ~ Bình phương mỗi số nguyên trong phạm vi [0, Z).
    jk ~ Ghép thành một chuỗi duy nhất.
   / ~ Đếm số lần xuất hiện của ...
          `* ~ Biểu diễn chuỗi của Z bình phương.
               Mang lại 0 nếu sai lệch và ≥ 1 nếu trung thực.
e ~ Lấy phần tử cuối cùng (số nguyên trung thực Qth). Đầu ra ngầm.


4

APL (Dyalog) , 53 42 byte

{{0<+/(⍕×⍨⍵+1)⍷' '~⍨⍕×⍨⍳⍵:⍵+1⋄∇⍵+1}⍣⍵⊢0}

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

Làm sao?

- tìm sự xuất hiện của

⍕×⍨⍵+1- bình phương chuỗi x+1trong

⍕×⍨⍳⍵ - phạm vi hình vuông x

' '~⍨ - không có khoảng trắng

+/ - Tổng

0<- nếu tổng là dương (tồn tại), thì nó sẽ trả về x+1, nếu không,

∇⍵+1- tái diễn với x+1.

⍣⍵- nlần áp dụng .


3

Haskell , 73 byte

import Data.List
([n|n<-[7..],isInfixOf(g n)$g=<<[1..n-1]]!!)
g=show.(^2)

Hãy thử trực tuyến! Không có chỉ mục.

Giải trình

Phụ trợ:

import Data.List -- import needed for isInfixOf
g=show.(^2)      -- function short cut to square an int and get the string representation

Chức năng chính:

(                                 !!) -- Index into the infinite sequence
 [n|n<-[7..],                    ]    -- of all numbers n greater equal 7
      isInfixOf(g n)$                 -- whose square appears in the string
                     g=<<[1..n-1]     -- of all squares from 1 up to n-1 concatenated.

2

Thạch , 13 11 byte

R²DµṪẇF
Ç#Ṫ

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

Ngoài ra, đây là giải pháp 10 byte in ncác giá trị đầu tiên của chuỗi: Thử trực tuyến!


lol bạn đánh tôi với điều này; Tôi đã có chính xác như giải pháp của bạn (sau khi chơi golf): P
HyperNeutrino

@HyperNeutrino Có vẻ là sai, thật không may.
dùng202729

Ồ vậy sao Điều đó thật đáng tiếc :( chỉnh sửa ồ đúng rồi nfind: (((
HyperNeutrino

@HyperNeutrino Không vấn đề gì, đọc từ stdin hoạt động.
dùng202729


2

Thạch , 11 byte

Ḷ²DFɓ²ẇ
Ç#Ṫ

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

Một giải pháp thay thế cho giải pháp của user202729 .

Làm thế nào nó hoạt động

C#Ṫ ~ Main Link.

Ç#  ~ First N positive integers with truthy results.
  Ṫ ~ Tail. Take the last one.

-----------------------------------------------------------

Ḷ²DFɓ²ẇ ~ Helper link. This is the filtering condition.

Ḷ       ~ Lowered range. Yields {x | x ∊ Z and x ∊ [0, N)}.
 ²      ~ Square each.
  D     ~ Convert each to decimal (this gets the list of digits).
   F    ~ Flatten.
    ɓ   ~ Starts a new monadic chain with swapped arguments.
     ²  ~ N²; Yields N squared.
      ẇ ~ Is ^ sublist of ^^^?

Wow, có chuỗi tự động.
dùng202729

2

Alice , 32 byte

/
\io/&wd.*\@! d ? ~ ? F $ /WKdt

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

Bố cục lãng phí của chế độ Ordinal đó thực sự làm tôi khó chịu, nhưng tất cả mọi thứ tôi cố gắng lưu một số byte ở đó đều xuất hiện lâu hơn ...

Giải trình

/
\io/...@...

Chỉ là khung I / O thập phân thông thường, với o@ở các vị trí hơi bất thường. Phần cốt lõi của chương trình là đây:

&w    Push the current IP address to the return address stack n times.
      This gives us an easy way to write a loop which repeats until we
      explicitly decrement the loop counter n times.

  d     Push the stack depth, which acts as our running iterator through
        the natural numbers.
  .*    Square it.
  \     Switch to Ordinal mode.
  !     Store the square (as a string) on the tape.
  d     Push the concatenation of the entire stack (i.e. of all squares before
        the current one).
  ?~    Retrieve a copy of the current square and put it underneath.
  ?     Retrieve another copy.
  F     Find. If the current square is a substring of the previous squares,
        this results in the current square. Otherwise, this gives an empty
        string.
  $     If the previous string was empty (not an early bird) skip the next
        command.
  /     Switch back to Cardinal. This is NOT a command.
  W     Discard one address from the return address stack, decrementing our
        main loop counter if we've encountered an early bird.
K     Jump back to the beginning of the loop if any copies of the return
      address are left. Otherwise do nothing and exit the loop.

dt    Push the stack depth and decrement it, to get the final result.

Tôi không biết ngôn ngữ này, nhưng bạn có thể lưu bất kỳ byte nào bằng cách kiểm tra xem hình vuông hiện tại có nằm trong chuỗi không trước khi nối nó?
WGroleau

@WGroleau Tôi không nghĩ vậy. Kiểm tra chính vẫn là một byte ( Fthay vì z), nhưng thao tác ngăn xếp sẽ không đơn giản hơn, thậm chí có thể một hoặc hai lệnh tệ hơn.
Martin Ender

@JamesHoldiness Tại sao không nên? 69696 xuất hiện hai vị trí trước vị trí tự nhiên của nó (chồng chéo với nó). Nếu sự trùng lặp với vị trí tự nhiên của nó nên bị coi nhẹ, có lẽ bạn nên nói như vậy trong thử thách.
Martin Ender

@JamesHoldiness các trường hợp kiểm tra có liên quan đã mất quá nhiều thời gian để kiểm tra, vì vậy tôi chỉ làm đến 10. Các trường hợp kiểm tra trung gian sẽ giúp.
Martin Ender

Điều đó chắc chắn làm tăng thách thức. Bạn sẽ bình luận câu trả lời trước đó thất bại theo cùng một cách? Lưu ý: Tôi thấy những điều này mang tính giải trí, nhưng không bao giờ trả lời, vì tất cả các ngôn ngữ của tôi được thiết kế với khả năng đọc là một yêu cầu. :-) Ngoại trừ trình biên dịch chương trình và FORTH. :-)
WGroleau

1

Husk , 13 byte

!f§€oṁ₁ŀ₁N
d□

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

Giải trình

Dòng thứ hai là một hàm trợ giúp cung cấp cho chúng ta các chữ số thập phân của hình vuông của một số:

 □    Square.
d     Base-10 digits.

Chúng ta có thể gọi chức năng này trên chương trình chính bằng cách sử dụng .

!f§€oṁ₁ŀ₁N
 f§      N    Filter the list of natural numbers by the following fork g(n).
       ŀ        Get [0, 1, ... n-1]
     ṁ₁         Get the decimal digits of each value's square and concatenate
                them into one list. (A)
        ₁       And get the decimal digits of n² itself. (B)
    €           Check whether (A) contains (B) as a sublist.
!             Use the programs input as an index into this filtered list.


1

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

(n=k=0;s="";While[n<#,If[!StringFreeQ[s,t=ToString[++k^2]],n++];s=s<>t];k)&

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

Làm thế nào nó hoạt động

ngiữ số lượng chim sớm được tìm thấy cho đến nay, ksố cuối cùng được kiểm tra, schuỗi "1491625...". Trong khi nquá nhỏ, nếu schứa hình vuông tiếp theo, một con chim sớm khác đã được tìm thấy, vì vậy chúng tôi tăng lên n. Trong mọi trường hợp, chúng tôi mở rộng s.

Khi nđạt đến đầu vào #, chúng tôi quay trở lại k, số cuối cùng được kiểm tra và do đó, con chim đầu tiên được tìm thấy.

Trên máy tính xách tay của tôi, mất khoảng 53 giây để tính số hạng thứ 53 của chuỗi.



1

Bash, 76 69 byte

Giả sử nđược đưa vào biến (tức là n=10 foo.sh). Sử dụng gói grep. Bất kỳ giá trị trung bình nào là đầu ra (nếu được phép, -3 byte).

while((n));do((b=++a*a));grep -q $b<<<$s&&((n--));s=$s$b;done;echo $a

Làm thế nào nó hoạt động?

while ((n)); do  # while n != 0 (C-style arithmetic)
  ((b = ++a*a))  # Increment a and let b = a*a
    # Non-existent value is treated as zero
  grep $b<<<$s   # Search for b in s
    && ((n--))   # If found, decrement n
  s=$s$b         # Append b to s
done
echo $a

@James Đây rồi.
iBug
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.