EKG 순서의 조건


13

소개

EKG 시퀀스는 1과 2로 시작하며, 다음 항은 아직 시퀀스에 포함되지 않은 가장 작은 양의 정수이고 마지막 항과의 공통 요소가 1보다 큽니다 (공동체가 아님).

첫 번째 용어는 다음과 같습니다.

1, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, ...

용어의 그래프가 EKG와 매우 유사하기 때문에 EKG라고합니다.

OEIS시퀀스 A064413입니다 .

도전

정수 n 을 입력으로 취하고 시퀀스 의 n 개의 첫 항이 n 보다 큰 함수를 출력하는 함수를 작성해야합니다 .

시퀀스의 규칙이 세 번째 항으로 시작함에 따라 입력 정수는 3보다 크거나 같아야합니다. 예를 들어, 입력 10이 주어지면 출력은 17 번째 항이기 때문에 12나머지 10 개의 항 중 어느 것도 10을 초과하지 않기 때문 입니다.

테스트 사례

3-> 1

10-> 1

100-> 9

1000-> 70

규칙

  • 3보다 작은 정수의 경우 함수는 0 또는 오류 코드를 출력 할 수 있습니다.
  • 코드 골프는 짧을수록 좋습니다.

0- 인덱싱을 사용 1하여 시퀀스의 0 번째 항을 사용할 수 있습니까 ? 예를 들어 1510 번째 항 대신 5?
Shaggy

@Shaggy 나는 이것을 수학적 방법으로 사용하는 것이 공정하다고 생각하지만 실제로 테스트 사례의 결과와 실제로 요청 된 기능 자체를 변경합니다. 따라서 나는 당신이 그렇게해서는 안된다고 생각합니다. 죄송합니다.
데이비드

oeis.org/A064413/graph-OEIS 는 그래프를 쓸 수 있습니까? 산뜻한.
Magic Octopus Urn

답변:


7

젤리 , 20 19 18 바이트

S‘gṪ’ɗƇḟ¹Ṃṭ
1Ç¡>¹S

이것은 전체 프로그램입니다.

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

작동 원리

1Ç¡>¹S       Main link. Argument: n (integer)

1            Set the return value to 1.
 Ç¡          Call the helper link n times.
   >¹        Compare the elements of the result with n.
     S       Take the sum, counting elements larger than n.


S‘gṪ’ɗƇḟ¹Ṃṭ  Helper link. Argument: A (array or 1)

S            Take the sum of A.
 ‘           Increment; add 1.
     ɗƇ      Drei comb; keep only elements k of [1, ..., sum(A)+1] for which the
             three links to the left return a truthy value.
  g              Take the GCD of k and all elements of A.
   Ṫ             Tail; extract the last GCD.
    ’            Decrement the result, mapping 1 to 0.
       ḟ¹    Filterfalse; remove the elements that occur in A.
         Ṃ   Take the minimum.
          ṭ  Tack; append the minimum to A.

생성 된 시퀀스는 입니다. 헬퍼 링크를 번 호출하면 길이 의 시퀀스가 ​​생성 되므로 은 실제로 무시됩니다.[1,0,2,4,6,3,9,12,8,10,5,15,]nn+10



4

자바 스크립트 (ES6) 107 106 105 바이트

f=(n,a=[2,1],k=3)=>a[n-1]?0:a.indexOf(k)+(C=(a,b)=>b?C(b,a%b):a>1)(k,a[0])?f(n,a,k+1):(k>n)+f(n,[k,...a])

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

어떻게?

C

C = (a, b) => b ? C(b, a % b) : a > 1

a[2,1]a[0]

k0

a.indexOf(k) + C(k, a[0])

a.indexOf(k) 다음 중 하나와 같습니다.

  • 1ka
  • 0k
  • i1

a.indexOf(k) + C(k, a[0])0kak1+true=0



4

껍질 , 16 바이트

#>¹↑¡§ḟȯ←⌋→`-Nḣ2

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

설명

#>¹↑¡§ḟȯ←⌋→`-Nḣ2  Implicit input, say n=10
              ḣ2  Range to 2: [1,2]
    ¡             Construct an infinite list, adding new elements using this function:
                   Argument is list of numbers found so far, say L=[1,2,4]
             N     Natural numbers: [1,2,3,4,5,6,7...
           `-      Remove elements of L: K=[3,5,6,7...
      ḟ            Find first element of K that satisfies this:
                    Argument is a number in K, say 6
     §    →         Last element of L: 4
         ⌋          GCD: 2
       ȯ←           Decrement: 1
                    Implicitly: is it nonzero? Yes, so 6 is good.
                  Result is the EKG sequence: [1,2,4,6,3,9,12...
   ↑              Take the first n elements: [1,2,4,6,3,9,12,8,10,5]
#                 Count the number of those
 >¹               that are larger than n: 1

3

MATL , 29 바이트

qq:2:w"GE:yX-y0)yZdqg)1)h]G>z

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

설명:

	#implicit input, n, say 10
qq:	#push 1:8
2:	#push [1 2]. Stack: {[1 .. 8], [1 2]}
w	#swap top two elements on stack
"	#begin for loop (do the following n-2 times):
 GE:	#push 1...20. Stack: {[1 2], [1..20]}
 y	#copy from below. Stack:{[1 2], [1..20], [1 2]}
 X-	#set difference. Stack: {[1 2], [3..20]}
 y0)	#copy last element from below. Stack:{[1 2], [3..20], 2}
 yZd	#copy from below and elementwise GCD. Stack:{[1 2], [3..20],[1,2,etc.]}
 qg)	#select those with gcd greater than 1. Stack:{[1 2], [4,6,etc.]}
 1)	#take first. Stack:{[1 2], 4}
 h	#horizontally concatenate. Stack:{[1 2 4]}
 ]	#end of for loop
G>z	#count those greater than input
	#implicit output of result

왜 입력을 두 배로 늘리는 지 설명해 주 GE:시겠습니까?
david

2
a(n)2na(n)n2n=1000while

3

APL (Dyalog Unicode) , 39 바이트 SBCS

적절한 조건부 검사를 사용하여 ngn, -1 바이트 덕분에 -2 바이트

{+/⍵<⍵⍴3{(1=⍺∨⊃⌽⍵)∨⍺∊⍵:⍵∇⍨⍺+1⋄⍵,⍺}⍣⍵⍳2}

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


왼쪽 인수를 피연산자 함수에 전달하므로 필요가 없습니다 . 또한 함수 ( )로 시작하는 오른쪽의 내용과 바인딩되지 않으므로 . 필요가 없습니다 .
ngn


2

APL (NARS), 문자 121, 바이트 242

∇r←a w;i;j;v
r←w⋄→0×⍳w≤2⋄i←2⋄r←⍳2⋄v←1,1,(2×w)⍴0
j←¯1+v⍳0
j+←1⋄→3×⍳1=j⊃v⋄→3×⍳∼1<j∨i⊃r⋄r←r,j⋄i+←1⋄v[j]←1⋄→2×⍳w>i
r←+/w<r
∇

실행 시간에 1 분 안에 테스트하십시오.

  a¨3 10 100 1000 2000
1 1 9 70 128 

자연스럽게 유형과 범위를 확인하지 않습니다 ...


1

apt, 23 21 바이트

@_jX ªAøZ}f}gA=ì)Aè>U

시도 해봐

@_jX ªAøZ}f}gA=ì)Aè>U
                          :Implicit input of integer U
             A            :10
               ì          :Digit array
              =           :Reassign to A
@          }g             :While the length of A < U+1, take the last element as X,
                          :pass it through the following function & push the result to A
 _       }f               :  Find the first integer Z >= 0 that returns falsey
  jX                      :    Is Z co-prime with X?
     ª                    :    OR
      AøZ                 :    Does A contain Z?
                )         :End loop
                 Aè>U     :Count the elements in A that are greater than U

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