bổ sung, nối tiếp


14

Bài tập

Phần bổ sung, phần bổ sung được xác định theo cách đệ quy, như thế này

  • a (1) = 1
  • a (n) = a (n-1) .n, nếu n chẵn
  • a (n) = na (n-1), nếu n là số lẻ

nơi đại diện cho một phép nối số nguyên.

Vì vậy, một vài thuật ngữ đầu tiên là: 1,12,312,3124,53124,531246,7531246,...Đây là A053064 .

Nhiệm vụ của bạn là, đưa ra một số nguyên a> 0 để trả về n , sao cho phần tử thứ n trong phần bổ sung, phần bổ sung-Sequence bằng a và nếu không có n như vậy tồn tại trả về 0, một số âm hoặc lỗi xuất hiện, v.v.

Quy tắc

  • Đầu vào có thể được lấy dưới dạng số nguyên, chuỗi, danh sách các ký tự / chữ số, v.v.
  • Đầu ra có thể được in thành STDOUT hoặc trả lại (số nguyên, chuỗi, v.v.
  • Trên đầu vào không hợp lệ & trong trường hợp không tồn tại n như vậy, chương trình của bạn có thể làm bất cứ điều gì nhưng trả về một số nguyên dương (ví dụ: vòng lặp mãi mãi, trả về 0, v.v.)
  • Bạn có thể chọn sử dụng lập chỉ mục 0, nhưng sau đó đầu ra trong trường hợp không tồn tại n không thể là 0

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

1 -> 1
12 -> 2
21 -> 0
123 -> 0
312 -> 3
213 -> 0
211917151311975312468101214161820 -> 21
2119171513119753102468101214161820 -> 0
333129272523211917151311975312468101214161820222426283031 -> 0
999795939189878583817977757371696765636159575553514947454341393735333129272523211917151311975312468101214161820222426283032343638404244464850525456586062646668707274767880828486889092949698100 -> 100

Chính thức hơn: a(n-1)*(int(log(n))+1)+nn*(int(log(n))+1)+a(n-1)?
Ông Xcoder

1
@ Mr.Xcoder Tôi sẽ gọi nó ít trang trọng hơn : P
Post Rock Garf Hunter

@Jonathan ALLan Điều đó đã có trong câu hỏi trong ~ 10 phút.
Ông Xcoder

2
Tôi đề nghị cho phép lỗi cho đầu vào không hợp lệ.
Kritixi Lithos

Tôi đề nghị cho phép hành vi không xác định cho đầu vào không hợp lệ.
Ông Xcoder

Câu trả lời:


6

JavaScript (ES6), 40 byte

Đưa đầu vào dưới dạng một chuỗi. Ném lỗi đệ quy nếu không tìm thấy chỉ mục.

f=(n,s=k='1')=>n==s?k:f(n,++k&1?k+s:s+k)

Bản giới thiệu


Tôi nghĩ bạn có thể tiết kiệm một byte bằng cách này: f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
Rick Hitchcock

@RickHitchcock Thật không may, điều đó sẽ buộc các phép so sánh Số và đưa ra các kết quả dương tính giả trên các đầu vào lớn gây ra do mất độ chính xác.
Arnauld

Gotcha. Nó hoạt động trên các trường hợp thử nghiệm nhưng không chắc nó sẽ xử lý các tình huống khác như thế nào.
Rick Hitchcock

6

C # (.NET Core) , 83, 80, 60 59 byte

n=>{int i=0;for(var t="";t!=n;)t=++i%2<1?t+i:i+t;return i;}

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

Đưa đầu vào dưới dạng một chuỗi vào hàm lambda. 1 chỉ mục. Trả về chỉ số của giá trị cho sự thật, hoặc các vòng lặp vô cùng cho một "chim ưng"


6

Python 2 , 63 byte

-1 byte nhờ @EriktheOutgolfer .

f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j

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

Python 2 , 64 byte

-18 byte nhờ @officialaimm , vì tôi không nhận thấy lỗi đã được cho phép!

x,i,j=input(),'1',1
while i!=x:j+=1;i=[i+`j`,`j`+i][j%2]
print j

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

Python 2 , 82 byte (không lặp mãi mãi)

Điều này trả về 0cho đầu vào không hợp lệ.

def f(n,t="",i=1):
 while len(t)<len(n):t=[t+`i`,`i`+t][i%2];i+=1
 print(n==t)*~-i

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



@officialaimm Cảm ơn rất nhiều! Tôi đã không nhận thấy lỗi / vòng lặp mãi mãi được cho phép.
Ông Xcoder

Lưu một byte bằng lambda:f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
Erik the Outgolfer

@EriktheOutgolfer Đợi, nó ném lỗi đệ quy cho mọi thứ, mặc dù tôi đã đặt sys.setrecursionlimit(). Bạn có thể cung cấp một tio?
Ông Xcoder

@ Mr.Xcoder Nó có ném lỗi x=1không? Hay là x=12? Tôi nghĩ rằng nó chỉ ném một lỗi như vậy cho ít nhất x=151311975312468101214hoặc một cái gì đó.
Erik the Outgolfer

3

Thạch , 12 byte

Rs2ZU1¦ẎVµ€i

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

Giải trình:

Rs2ZU1¦ẎVµ€i
         µ€  Eval this link for each (automatic [1..n] range)
R             Range
 s2           Split in pieces of: 2
   Z          Zip
    U1¦       Only keep index: 1 of: Vectorized reverse
       Ẏ      Flatten 1-deep
        V     Concatenate string versions and eval
           i Find index of y in x (y = implicit input)

3

05AB1E , 14 byte

$vDNÌNFs}«})Ik

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

Chỉ số 0 .
Trả về -1 nếu đầu vào không nằm trong chuỗi.

$                 # push 1 and input
 v                # for each y,N (element, index) in input do:
  D               # duplicate top of stack
   NÌ             # push N+2
     NF }         # N times do:
       s          # swap the top 2 elements on the stack
         «        # concatenate the top 2 elements on the stack
          })      # end loop and wrap in a list
            Ik    # get the index of the input in this list

Haha, đây về cơ bản là giải pháp của tôi với việc ggỡ bỏ và điều bổ sung / rút ngắn. Tôi sẽ xóa câu trả lời của tôi
Okx

@Okx: Ồ vâng, tôi thấy bạn đã đánh golf gần như chính xác điều này chỉ vài phút sau bài viết của tôi. Những bộ óc vĩ đại;)
Emigna

2

R , 73 byte

p=paste0;n=scan(,'');l='';while(l!=n){F=F+1;l="if"(F%%2,p(F,l),p(l,F))};F

Đọc từ stdin và trả về giá trị của chỉ mục (được in ngầm). Vòng lặp vô hạn khi giá trị không nằm trong chuỗi.Ftheo mặc định FALSEđược 0sử dụng khi được sử dụng trong số học.

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


1

Toán học, 135 byte

s=t={};x=1;While[x<5!,{s~AppendTo~#&,s~PrependTo~#&}[[x~Mod~2+1]]@x;AppendTo[t,FromDigits@Flatten[IntegerDigits/@s]];x++];t~Position~#&

1

Thạch ,  19 18  15 byte

+ḂḶṚm2;RḤ$ṁµ€Vi

Một liên kết đơn và lấy số nguyên.

Hãy thử trực tuyến! (rất chậm - mất ~ 50 giây trên TIO chỉ để xác nhận rằng3124 là chỉ mục 4)

Đối với phiên bản nhanh hơn nhiều, hãy sử dụng 18 byter trước đó (chỉ kiểm tra tối đa độ dài của đầu vào, là đủ).

Làm sao?

+ḂḶṚm2;RḤ$ṁµ€Vi - Link: number, v
           µ€   - perform the monadic link to the left for €ach k in [1,2,3,...v]
                -                 (v can be big, lots of k values makes it slow!)
 Ḃ              -   modulo k by 2  = 1 if odd 0 if even
+               -   add to k = k+isOdd(k)
  Ḷ             -   lowered range = [0,1,2,...,k+isOdd(k)]
   Ṛ            -   reverse = [k+isOdd(k),...,2,1,0])
    m2          -   modulo slice by 2 = [k+isOdd(k),k+isOdd(k)-2,...,3,1]
         $      - last two links as a monad:
       R        -   range(k) = [1,2,3,...,k]
        Ḥ       -   double = [2,4,6,...,2k]
     ;          - concatenate = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,2k]
         ṁ      - mould like range(k) = [k+isOdd(k),k+isOdd(k)-2,...,3,1,2,4,6,...,k-isOdd(k)]
                -   (this is a list of the integers to be concatenated for index k)
             V  - evaluate as Jelly code (yields a list of the concatenated integers)
              i - first index of v in that (or 0 if not found)

Sẽ mất bao lâu để tính toán 211917151311975312468101214161820?
Okx

Một thời gian dài, dài: p
Jonathan Allan

Có, nhưng bao lâu?
Okx

Có vẻ như thứ tự v bình phương trong đó v là số nguyên đầu vào.
Jonathan Allan

@JonathanAllan Về mặt kỹ thuật bạn gọi đó là : p
Erik các Outgolfer

1

Swift 4 , 92 byte

Vòng lặp này vô cùng cho các trường hợp không hợp lệ, vì vậy tôi đã không đưa chúng vào liên kết thử nghiệm.

func f(x:String){var i="1",j=1;while i != x{j+=1;i=[i+String(j),String(j)+i][j%2]};print(j)}

Phòng thử nghiệm.

Thật thú vị, nó dài hơn với việc đóng cửa:

var f:(String)->Int={var i="1",j=1;while i != $0{j+=1;i=[i+String(j),String(j)+i][j%2]};return j}

Phòng thử nghiệm.




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.