Sumac 시퀀스의 길이 [닫힘]


11

Sumac 시퀀스는 두 개의 정수 t 1 과 t 2로 시작 합니다.

다음 항 t 3 , = t 1 -t 2

보다 일반적으로, t n = t n-2 -t n-1

시퀀스는 t n <0 일 때 종료됩니다 .

도전 과제 : t 1 과 t 2로 시작하여 Sumac 시퀀스의 길이를 인쇄하는 프로그램이나 함수를 작성하십시오 .

  • t 1 및 t 2 는 언어 범위 내의 정수입니다.
  • 표준 허점이 적용됩니다.

테스트 사례

t1  t2       sumac_len(t1,t2)

120  71      5
101  42      3
500  499     4
387  1       3

보너스 거리 크리드 :

3    -128    1
-314 73      2

이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다.


복제본이 아닌 경우 밀접한 관련
Mr. Xcoder

2
이것은 좋은 도전으로 보이지만 약간 불분명합니다. 우리가 가지고 해야하는 t1t2입력으로? 그리고 i테스트 케이스에는 무엇이 있습니까?
caird coinheringaahing

2
t1 및 t2가> = 0임을 보장합니까?
user202729 2016

6
@Blacksilver 허? 그 보너스는 정확히 무엇입니까? 보너스는 일반적으로 실망 어쨌든
루이스 Mendo에게

6
처리 t_1 = t_2 = 0해야합니까? "CRED 보너스 거리"우리가 처리 할 수없는 뜻 t_1 < 0이나 t_2 < 0?
xnor

답변:


8

껍질 , 8 바이트

→V<¡oG-↔

입력을 2 요소 목록으로 사용합니다. 온라인으로 사용해보십시오!

설명

→V<¡oG-↔  Implicit input, say p=[101,42]
   ¡      Iterate on p:
       ↔    Reverse: [42,101]
    oG-     Cumulative reduce by subtraction: [42,59]
          Result is infinite list [[101,42],[42,59],[59,-17],[-17,76],[76,-93]...
 V<       Find the first index where adjacent pairs are lexicographically increasing.
          In our example [42,59] < [59,-17], so this gives 2.
→         Increment: 3

8

하스켈 , 22 바이트

a#b|b<0=1|c<-a-b=1+b#c

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

음수에 패턴 일치하는 방법이 있었으면 좋겠다 ...

설명

a#b|b<0=1|c<-a-b=1+b#c

a#b                     -- define a function (#) that takes two arguments a and b
   |b<0                 -- if b is negative...
       =1               -- return 1
         |              -- otherwise...
          c<-a-b        -- assign a-b to c...
                =  b#c  -- and return the result of (#) applied to b and c...
                 1+     -- incremented by 1

설명이 코드 자체보다 한 번 명확하지 않다고 생각합니다. : P
Ad Hoc Garf Hunter

@WheatWizard 아마도 설명에 빠졌기 때문일 것입니다. : P
완전히 인간적인

3

껍질 , 12 11 바이트

V<0t¡ȯF-↑2↔

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

그 가치가있는 무엇이든을 위해 보너스 거리의 신조를 취합니다.

설명

    ¡ȯ       Repeatedly apply the function to the right to the list of all
             previous values and collect the results in an infinite list.
          ↔  Reverse the list of previous results.
        ↑2   Take the first two values (last two results).
      F-     Compute their difference (using a fold).
   t         Discard the first element.
V<0          Find the first index of a negative value.


2

MATL , 13 바이트

`yy-y0<~]N2-&

부정적인 입력을 처리합니다 (마지막 두 테스트 사례).

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

설명

`        % Do...while
  yy     %   Duplicate top two elements. Implicit inputs first time
  -      %   Subtract
  y      %   Duplicate from below: push previous term
  0<~    %   Is it 0 or greater? This is the loop condition
]        % End. Proceed with next iteration if top of the stack is true
N        % Push number of elements in stack
2-       % Subtract 2
&        % Specify that the next function, namely implicit display, should
         % only display the top of the stack

2

Brain-Flak , 142 90 바이트

((()){{}<(({}({}))[({}[{}])({})])([(({})<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}>}<>)

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

그리 짧지 않습니다. 뒤로 입력을받습니다.

설명

(
 (())   #Push 1
 {      #Until 0
  {}    #Pop (+1 to counter)
  <(({}({}))[({}[{}])({})])  #tn = tn-1 - tn-2
  ([(({})<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}>  #Greater than 0?
 }      #End loop
 <>     #Get rid of everything
)       #Push result

2

05AB1E , 11 바이트

[DŠ-D0‹#]NÌ

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

설명

다음과 같이 입력을받습니다. t2, t1

[             # start a loop
 DŠ           # duplicate top of stack and move it down 2 positions
   -          # subtract the top 2 values
    D0‹#      # if a copy of the top value is negative, break loop
        ]     # end loop
         NÌ   # push iteration index+2


1

J , 22 바이트

[:#({:,-/)^:(0<{:)^:a:

작동 방식 :

                  ^:a: - Repeat until the result stops changing, store the results in a list
          ^:(0<{:)     - repeat if the second term is positive
   ({:,-/)             - makes a tuple (second, first minus second)
[:#                    - number of elements in the list ([: caps the fork)

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




0

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

1 대신 true를 반환 합니다 .

f=(a,b)=>b<0||1+f(b,a-b)

테스트 사례


1
@totallyhuman 그러면 f(b)(a-b)저축 이 필요 하지 않습니다.
Mr. Xcoder

만약에 a<0? (1 더 이동)
user202729

업데이트 : 더 이상 음수 입력을 지원할 필요가 없지만 그렇게하면 멋집니다.
SIGSTACKFAULT

0

Pyth , 11 바이트

이 2 개 개의 인수를 취하는 재귀 함수입니다, G하고 H. 주어진 입력에서 함수를 실제로 호출하기 위해 링크가 약간 수정되었습니다.

M|<H0hgH-GH

테스트 스위트.


0

APL (Dyalog) , 23 바이트

2∘{0>-/⍵:⍺⋄(⍺+1)∇-⍨\⌽⍵}

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

어떻게?

2∘ -2의 초기 누산기로

-/⍵ -다음 학기이면

0> -0 이하

-누산기를 반환하십시오. 그렇지 않으면,

(⍺+1) -누산기 증가

-그리고 재귀

-⍨\⌽⍵ -마지막 두 항목이 반대로 바뀌 었습니다.

      {⍵} 8 2
8 2
      {⌽⍵} 8 2
2 8
      {-⍨\⌽⍵} 8 2
2 6


0

dc , 24 바이트

?[dsb-1rlbrd0<a]dsaxz1-p

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

설명

?                         # read input                | 71 120
 [dsb-1rlbrd0<a]          # push string               | [string] 71 120
                dsa       # copy top to register a    | [string] 71 120
                   x      # execute the string        | -5 27 1 1 1 1
                    z     # push length of stack      | 6 -5 27 1 1 1 1
                     1-   # decrement top by 1        | 5 -5 27 1 1 1 1
                       p  # print top

 # string in register a:

  dsb                     # copy top to register b    | 71 120
     -                    # subtract                  | 49
      1                   # push 1                    | 1 49
       r                  # swap top two elements     | 49 1
        lb                # load register b           | 71 49 1
          r               # swap top two elements     | 49 71 1
           d0<a           # if top < 0 execute register a

0

Z80 어셈블리, 10 바이트

이 버전은 작업의 "스트리트 크리드"버전을 시도합니다. 그러나 t1 = -314, t2 = 73 인 제안 된 테스트 사례의 경우이 프로그램은 "0"을 생성합니다. 솔직히 "2"보다 약간 더 의미가 있습니다.

SumacLen:
        xor a           ; HL = t[1], DE = t[2], A is the counter
Loop:   bit 7,h
        ret nz          ; stop if HL is negative
        inc a
        sbc hl,de       ; HL = t[3], DE = t[2]
        ex de,hl        ; HL = t[2], DE = t[3]
        jr Loop

Sjasmplus 어셈블러를 사용하여 작성된 ZX Spectrum 48K 용 테스트 프로그램은 여기에서 다운로드 할 수 있습니다 . 컴파일 된 스냅 샷 도 사용할 수 있습니다 .


아마도 비 보너스 버전이 Loop: ret c대신 사용합니까?

예, 더 이상 H의 부호 비트를 확인할 필요가 없습니다. "bit 7, h"를 제거하고 "ret nz"를 "ret c"로 대체 할 수 있으며 "inc a"가 바로 앞쪽으로 이동합니다. 모두 8 바이트
introspec

네; 2결과 내 프로그램 정말 일이다.
SIGSTACKFAULT

당신은 그 의미합니까 0그 테스트 케이스에 대한 허용 대답은? 아니면 내 프로그램을 수정하여 출력하는 것이 더 낫다는 것을 의미 2합니까?
introspec



0

펄 6 ,24 19 바이트

Brad Gilbert b2gills 덕분에 -5 바이트

{+(|@_,*-*...^0>*)}

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

설명 : 괄호 안의 모든 것은 정확히 해당 시퀀스입니다 ( |@_처음 2 개의 항 (= 두 개의 매개 변수 임), *-*두 개의 인수를 취하여 그 차이를 리턴하는 함수이며 * <0정지 조건 (0보다 작은 항) 마지막 기간은) ^뒤에 생략합니다 .... 그런 다음 +연산자로 숫자 컨텍스트를 강제 실행 하여 시퀀스 길이를 산출합니다.


{+(|@_,*-*...^0>*)}
브래드 길버트는 b2gills

@ BradGilbertb2gills : 감사합니다. 나는 골프와 함께 큰 휴식을 취했다. 그래서 나는 조금 녹슬었다. 그러나 내가 얻지 못하는 것은 왜 당신이 * <0*, but why you don't need it in 0> *`에 공간을 넣어야하는지입니다 ...
Ramillies

공간이 필요하므로 혼동하지 마십시오.%h<a>
Brad Gilbert b2gills
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.