시퀀스 유지 / 삭제 / 증가


20

내가 말하는 순서는 다음과 같습니다.

{1, 4, 5, 9, 10, 11, 16, 17, 18, 19, 25, 26, 27...}

1에서 시작하여 1을 유지하고 다음 2를 삭제하고 다음 2를 유지하고 3을 삭제하고 3을 유지하십시오. 예, OEIS (A064801) 에도 있습니다!

도전

정수가 주어지면 n>0위 시퀀스의 n 번째 항을 찾으십시오.

테스트 사례

Input -> Output       
1->1  
22->49  
333->683
4444->8908
12345->24747

이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다! 행운을 빕니다!



3
0과 1 사이의 색인을 선택할 수 있습니까?
Mr. Xcoder

1
@ Mr.Xcoder 나는 두렵지 않다. 이것은 1- 인덱스

모든 요소가 포함 된 목록을 순서대로 반환해도됩니까?
밀 마법사

@WheatWizard 이것은 완전히 받아 들일 수 없습니다. 죄송합니다

답변:


12

자바 (OpenJDK 8) , 45 44 바이트

n->{int i=0;for(;++i<n;n-=i);return~-n+i*i;}

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

@Nevay 덕분에 -1 바이트

이것을 잠시 쳐다 본 후 나는 패턴을 발견했다. 우리가 n숫자 를 떨어 뜨릴 때마다 , 시퀀스의 다음 숫자는 완벽한 정사각형입니다. 이것을보고, 나는 정신적으로 시퀀스를 편리한 청크로 나누었습니다. [[1],[4,5],[9,10,11],...]기본적으로 ith 청크는로 시작하고 요소에 i*i대해 위로 반복됩니다 i.

찾기 위해 n이 순서의 일 수를, 우리는 숫자가 점유 청크의 어느 위치 다음에, 그리고 어떤 덩어리 먼저 찾고 싶어요. 우리는 (다음에 청크를 제공합니다) 보다 작을 때까지 증가 숫자 i를 빼고 청크 에 올바른 값을 얻기 위해 단순히 더 합니다 .nnin-1i*iposition

예:

n = 8
n > 1? Yes, n = n - 1 = 7
n > 2? Yes, n = n - 2 = 5
n > 3? Yes, n = n - 3 = 2
n > 4? No, result is 4 * 4 + 2 - 1 = 17

1
return~-n+i*i;1 바이트를 저장 하는 데 사용할 수 있습니다 .
Nevay

7

하스켈, 48 43 41 바이트

n#l=[l..l+n]++(n+1)#(l+2*n+3)
((0:0#1)!!)

0 기반 대신 1 기반 색인을위한 4 바이트 추가. 불필요한 제한, IMHO.

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

n#l             -- n is one less than the number of element to keep/drop and
                -- l the next number where the keep starts
   [l..l+n]     -- keep (n+1) numbers starting at l
   ++           -- and append a recursive call
   (n+1)#       -- where n is incremented by 1 and
      (l+2*n+3) -- l skips the elements to keep & drop

0#1             -- start with n=1 and l=0 and
 0:             -- prepend a dummy value to shift from 0 to 1-based index
    !!          -- pick the i-th element from the list 

6

파이썬 3 , 47 46 바이트

Mr. Xcoder 덕분에 1 바이트.

def f(n):a=round((2*n)**.5);return~-n+a*-~a//2

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

더 높은 숫자에 대해 매우 빠름


46 바이트 : def f(n):a=round((2*n)**.5);return~-n+a*-~a//2. 확실하지 않습니다 ... 영리한 접근!
Mr. Xcoder

더블 람다는 하나의 여분의 바이트이다. 나는 바이트를 절약하기를 바랐다.
Stephen

왜 이것을 다운 피트 했습니까? 우리가 알지 못하는 접근 방식에 문제가 있습니까?
Mr. Xcoder

@ Mr.Xcoder는 아마도 비꼬는 말 때문일 것입니다.
새는 수녀

a*(a+1)모든 정수에도 적용됩니다. 파이썬은 정수의 부동 소수점에 대해 불평합니까? 수레에서의 비트 연산에 대해 불평합니까? 그렇지 않은 경우 : (2*n)**.5+.5|0.
Titus


3

하스켈 , 33 바이트

익명의 기능. 로 사용((!!)$0:do n<-[1..];[n^2..n^2+n-1]) 1

(!!)$0:do n<-[1..];[n^2..n^2+n-1]

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

  • 시퀀스를 무한리스트로 구성한 다음 !! . 는 0:0 내지 1로 시작하는 인덱스에서 조정하는 더미 소자이다.
  • 범위 [n^2..n^2+n-1]는 틈새없이 시작하여 하위 시퀀스를 구성합니다.nn 숫자를 포함하는 합니다.
  • do표기법은 모든 구성 범위를 연결합니다 n>=1.


2

펄 6 , 43 바이트

{(1..*).rotor({++$=>++$+1}...*).flat[$_-1]}

그것을 테스트

넓히는:

{  # bare block lambda with implicit parameter 「$_」

  ( 1 .. * )                  # range starting from 1

  .rotor(                     # break it into chunks

    { ++$  =>  ++$ + 1} ... * # infinite Seq of increasing pairs
    #   1  =>    1 + 1    ==>   1 => 2 ( grab 1 skip 2 )
    #   2  =>    2 + 1    ==>   2 => 3
    #   3  =>    3 + 1    ==>   3 => 4
    # ...  =>  ... + 1

  ).flat\                     # reduce the sequence of lists to a flat sequence
  [ $_ - 1 ]                  # index into the sequence
                              # (adjusting to 0-based index)
}

(1..*).rotor({++$=>++$+1}...*) 생산 :

(
 (1,),
 (4, 5),
 (9, 10, 11),
 (16, 17, 18, 19),
 (25, 26, 27, 28, 29),
 ...
).Seq

2

TeX, 166 바이트

\newcommand{\f}[1]{\count0=0\count1=0\loop\advance\count0 by\the\count1\advance\count1 by1\ifnum\count0<#1\repeat\advance\count0 by#1\advance\count0 by-1
\the\count0}

용법

\documentclass[12pt,a4paper]{article}
\begin{document}
\newcommand{\f}[1]{\count0=0\count1=0\loop\advance\count0 by\the\count1\advance\count1 by1\ifnum\count0<#1\repeat\advance\count0 by#1\advance\count0 by-1
\the\count0}

\f{1}

\f{22}

\f{333}

\f{4444}

\f{12345}
\end{document}

여기에 이미지 설명을 입력하십시오


2

자바 스크립트, 43 38 바이트

n=>eval("for(r=1;n>r;)n-=r++;r*r+n-1")

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

나는 각 삼각 수 에 1을 더한 결과가 제곱 수 라는 사실을 사용합니다 .

예를 들어, 삼각형 숫자는 0, 1, 3, 6, 10 ... 그래서 1, 2, 4, 7, 11 ...의 경우 1, 4, 9, 16, 25 ...를 순서대로 관찰합니다. .

색인이이 알려진 숫자들 사이의 어딘가에 있다면, 시퀀스의 요소는 1 씩만 진행합니다. 예를 들어, 10에 대한 결과를 계산하려면 7 (삼각수에 1을 더한 값)을 취하고 결과 (16)를 취한 다음 10-7 = 3을 더합니다. 따라서 16 + 3 = 19입니다.






1

수학, 37 바이트

Flatten[Range@#+#^2-1&~Array~#][[#]]&

설명

Range@#+#^2-1&

Function양의 정수를 취하여 시퀀스에서 연속적인 숫자 #의 런을 반환합니다 #.

...~Array~#

입력까지 모든 런 목록을 생성합니다. #

Flatten[...][[#]]

Flattens결과 목록과 #th 요소를 반환합니다 .



1

Tampio , 310 308 바이트

n:n uni on n unena 1:lle
a unena k:lle on a vuona k:lla vähennettynä a:sta ja k
a vuona nollalla ja k on a
a vuona k:lla vähennettynä nollasta ja k on a
a vuona b:n seuraajalla ja k on yhteenlaskun kutsuttuna k:n kerrottuna 2:lla arvolla ja k:n vähennettynä a:sta arvolla unena k:n seuraajalle seuraaja

사용법 :로 4:n uni평가됩니다 9.

설명:

n:n uni on n unena 1:lle
uni(n)  =  n `uni` 1

a unena k:lle on  a vuona  k:lla vähennettynä a:sta ja k
a `uni` k     =  (a `vuo` (k     `vähennetty` a)    )  k

 a vuona nollalla ja k on a
(a `vuo` 0        )  k =  a

 a vuona  k:lla vähennettynä nollasta ja k on a
(a `vuo` (k     `vähennetty` 0)       )  k =  a

 a vuona  b:n seuraajalla ja k on
(a `vuo` (b   + 1)        )  k =

 yhteenlaskun kutsuttuna k:n kerrottuna 2:lla arvolla
(yhteenlasku            (k   *          2     )

 ja k:n vähennettynä a:sta arvolla unena  k:n seuraajalle seuraaja
((  k   `vähennetty` a     )       `uni` (k   + 1)   )  ) + 1

표준 라이브러리에서 :

a `vähennetty` b = b - a
yhteenlasku a b  = a + b

1

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

Xanderhall의 관찰에서 영감을 얻은 재귀 솔루션 .

f=(n,x=1)=>n<x?n+x*x-1:f(n-x,++x)

시도 해봐

o.innerText=(
f=(n,x=1)=>n<x?n+x*x-1:f(n-x,++x)
)(i.value=12345);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>



0

수학, 82 바이트

Complement[Range[3#],Array[#+⌊((r=Sqrt[1+8#])-1)/2⌋⌊(r+1)/2⌋/2&,3#]][[#]]&


0

자바 스크립트 (ES6) 100 98 바이트

var k=n=>{var s=[],i=1,c=1,j;while(s.length<n){for(j=i;j<i+c;j++){s.push(j)}i+=c*2+1;c++}return s}

이것의 종류가 빨리 되었기 때문에 개선의 여지가 많으며 기본 루프와 카운터 만 있습니다.


0

망막 , 27 바이트

.+
$*
((^1|1\2)+)1
$1$2$&
1

온라인으로 사용해보십시오! @LeakyNun의 Python 답변 포트. 첫 단계와 마지막 단계는 지루한 십진수 ⇔ 단항 변환입니다. 두 번째 단계는 다음과 같이 작동합니다. ((^1|1\2)+)삼각 숫자 매처입니다. $1일치하는 삼각형 숫자이고 $2인덱스입니다. 후미 1방법은 그 의미하므로 파이썬 루프보다 정확히 하나 적은 반복 결과 덜 엄격 입력보다 큰 삼각형 번호와 일치 $1동등 a-i하고 $2에게 i-1그들의 합인 a-1또는 ~-a필요에 따라. ( $&결과에서 일치 항목이 삭제되는 것을 방지합니다.) 이 경우 입력 내용도 일치합니다.1 일치하지 않는 경우 출력은 입력과 동일합니다. 당신이 이상하다면^((^1|1\2)*)1


0

MATL , 12 바이트

:"@U@:q+]vG)

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

설명

:        % Push range [1 2 ... n], where n is implicit input
"        % For each k in that range
  @U     %   Push k^2
  @:     %   Push range [1 2 ... k]
  q      %   Subtract 1: gives [0 1 ... k-1]
  +      %   Add: gives [k^2 k^2+1 ... k^2+k-1]
]        % End
v        % Concatenate all numbers into a column vector
G)       % Get n-th entry. Implicitly display


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