접두사, 추가 순서


14

직무

접두사, 추가 순서는 다음과 같이 재귀 적으로 정의됩니다.

  • a (1) = 1
  • n이 짝수 인 경우 a (n) = a (n-1) .n
  • n이 홀수 인 경우 a (n) = na (n-1)

어디. 정수 연결을 나타냅니다.

따라서 처음 몇 용어는 다음과 같습니다. 1,12,312,3124,53124,531246,7531246,...이것은 A053064 입니다.

당신의 작업은 n 을 반환하기 위해 a> 0 의 정수 주어 지므로 prepend 의 n 번째 요소, append-Sequence는 a 와 같고 n 이 존재 하지 않으면 0, 음수 또는 오류 등을 반환합니다.

규칙

  • 정수, 문자열, 문자 / 숫자 목록 등으로 입력 할 수 있습니다.
  • 출력은 STDOUT으로 인쇄되거나 리턴 될 수 있습니다 (정수, 문자열 등은 양호 함)
  • 유효하지 않은 입력에서 & n 이 존재 하지 않는 경우 프로그램은 양의 정수를 반환 할 수 있지만 양의 정수를 반환 할 수 있습니다 (예 : 영원히 영원히, 0을 반환하십시오).
  • 0 인덱싱을 사용하도록 선택할 수 있지만 n 이 존재하지 않는 경우 출력은 0이 될 수 없습니다

테스트 사례

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

더 공식적인 : a(n-1)*(int(log(n))+1)+nn*(int(log(n))+1)+a(n-1)?
Mr. Xcoder

1
@ Mr.Xcoder 나는 공식적인 전화 : P
포스트 락 Garf 헌터

@JonathanAllan 이미 ~ 10 분 동안 문제가 있습니다.
Mr. Xcoder

2
잘못된 입력에 오류를 허용하는 것이 좋습니다.
user41805

유효하지 않은 입력에 대해 정의되지 않은 동작을 허용하는 것이 좋습니다.
Mr. Xcoder

답변:


6

자바 스크립트 (ES6), 40 바이트

입력을 문자열로받습니다. 인덱스가 없으면 재귀 오류가 발생합니다.

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

데모


나는 이것을 사용하여 바이트를 절약 할 수 있다고 생각 합니다. f=(n,s=k='1')=>n-s?f(n,++k&1?k+s:s+k):k
Rick Hitchcock

@RickHitchcock 불행하게도, 그것은 숫자 비교를 강요하고 정밀도 손실로 인한 큰 입력에 대해 오탐을 유발합니다.
Arnauld

알았어 테스트 사례에서 작동하지만 다른 상황을 어떻게 처리할지 확실하지 않았습니다.
Rick Hitchcock


6

파이썬 2 , 63 바이트

@EriktheOutgolfer 덕분에 -1 바이트 .

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

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

파이썬 2 , 64 바이트

@officialaimm 덕분에 -18 바이트 덕분에 오류 가 허용되지 않았기 때문에!

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

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

파이썬 2 , 82 바이트 (영원히 반복하지 않음)

이것은 0유효하지 않은 입력을 반환 합니다.

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

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


2
Ninja'd : D 65 바이트
officialaimm

@officialaimm 감사합니다! 오류 / 루프가 영원히 허용되는 것을 보지 못했습니다.
Mr. Xcoder

람다로 바이트를 저장합니다 :f=lambda x,i='1',j=2:i!=`x`and f(x,[i+`j`,`j`+i][j%2],j+1)or~-j
Outgolfer Erik

@EriktheOutgolfer 잠깐, 내가 설정했지만 모든 것에 대해 재귀 오류가 발생합니다 sys.setrecursionlimit(). 티오를 제공 할 수 있습니까?
Mr. Xcoder

@ Mr.Xcoder에 대한 오류가 발생 x=1합니까? 아니면 x=12? 나는 그것이 적어도 x=151311975312468101214어떤 것에 대해서만 그런 오류를 던졌다 고 생각했다 .
Outgolfer Erik

3

젤리 , 12 바이트

Rs2ZU1¦ẎVµ€i

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

설명:

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 바이트

$vDNÌNFs}«})Ik

온라인으로 사용해보십시오! 또는 테스트 스위트

설명

0- 인덱싱 . 입력이 순서에 없으면 -1을
반환 합니다.

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

하하, 이것은 기본적으로 내 솔루션이며 g제거 및 추가 / 접두사가 단축되었습니다. 답변을 삭제하겠습니다.
Okx

@ Ok : 오, 그래, 당신은 내 게시물 후 거의 정확히이 분 골프 당신을 골프 볼 수 있습니다. Great minds;)
Emigna

2

아르 자형 , 73 바이트

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

stdin에서 읽고 인덱스 값 (내재적으로 인쇄)을 리턴합니다. 값이 시퀀스에 없을 때 무한 루프됩니다.F기본적 으로 산술에 사용될 때 FALSE캐스트됩니다 0.

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


1

Mathematica, 135 바이트

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

젤리 ,  19 18  15 바이트

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

정수를 가져오고 리턴하는 모나드 링크.

온라인으로 사용해보십시오! (매우 느림-3124인덱스에있음을 확인하기 위해 TIO에서 ~ 50 초가 걸립니다.4 )

훨씬 빠른 버전의 경우 이전 18 바이트를 사용하십시오. (입력 길이까지만 확인하면 충분 함).

어떻게?

+ḂḶṚ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)

계산하는 데 얼마나 걸립 211917151311975312468101214161820니까?
Okx

길고 오랜 시간 : p
Jonathan Allan

예,하지만 얼마나 걸립니까?
Okx

v가 제곱 의 순서 인 것처럼 보입니다. 여기서 v 는 입력 정수입니다.
Jonathan Allan

@JonathanAllan 기술적으로 당신은 그것을 : p
Erik the Outgolfer에

1

스위프트 4 , 92 바이트

이것은 유효하지 않은 경우 무한정 반복되므로 테스트 링크에 ​​포함시키지 않았습니다.

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

테스트 스위트.

흥미롭게도 클로저로 더 길다.

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}

테스트 스위트.




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