“조기 새”사각형


15

정의

양의 정수 제곱 시퀀스를 가져 와서이를 일련의 자릿수 (예 :)로 연결하는 149162536496481100...경우 "조기 새"사각형은이 문자열에서 원래 위치보다 먼저 찾을 수있는 사각형입니다.

예를 들어, 7 2 (숫자 49)는 문자열에서 오프셋 2에서 찾을 수 있지만 자연 위치는 오프셋 10에 있습니다. 따라서 7은 첫 번째 "조기 새"사각형입니다.

"조기 새"사각형으로 간주 되려면 사각형의 모든 숫자가 자연 위치가 시작되기 전에 발생해야합니다. 자연 위치와 부분적으로 겹치는 경기는 포함되지 않습니다.

a(n)K되도록 n 번째의 양의 정수이고 K 2 에 "조기"제곱된다.

직무

양의 정수가 주어지면 n출력 a(n).

1 기반 또는 0 기반 인덱싱을 사용할 수 있지만 0 기반 인덱싱을 사용하는 경우 답변에서 그렇게 말하십시오.

솔루션은 최소한 a(53)(또는 0 기반 인덱싱을 사용하는 경우) 처리 할 수 ​​있어야합니다 a(52).

테스트 케이스

n     a(n)
1     7
2     8
3     21
4     25
5     46
6     97
7     129
8     161
9     196
10    221
...
13    277
...
50    30015
51    35000
52    39250
53    46111

참고 문헌


테스트 사례 테이블이 기본 0 또는 1을 사용합니까?
idrougge

1
n시퀀스 의 첫 번째 요소를 출력 할 수 있습니까 ? 그것은 OP에 달려 있지만 많은 사람들이 그것을 허용하기로 선택합니다.
HyperNeutrino

@idrougge 테스트 사례는 1을 기반으로합니다.
James Holderness

@HyperNeutrino 모든 답변에 대해 일관된 결과 집합을 선호하므로 단일 값을 반환하십시오 a(n).
James Holderness

답변:


5

05AB1E , 10 9 바이트

Adnan 덕분에 1 바이트가 절약되었습니다 .

µNL<nJNnå

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

설명

µ           # loop until counter equals the input
 NL         # push the range [1 ... iteration_no]
   <        # decrement each
    n       # square each
     J      # join to string
      Nnå   # is iteration_no in the string?
            # if true, increase counter

½누락 된 경우 루프에 자동으로 추가되므로 그대로 둘 수 있습니다 .
Adnan

@Adnan : 맞습니다. 기차를 타기 직전에 (또는 지체되지 않은 경우 가려고했다)이 도전에 주목 했으므로 완전히 놓쳤습니다. 감사합니다 :)
Emigna

7

자바 스크립트 (ES6), 51 49 45 바이트

1- 색인.

f=(n,s=k='')=>n?f(n-!!s.match(++k*k),s+k*k):k

데모

형식화 및 의견

f = (                         // f = recursive function taking:
  n,                          //   n = input
  s = k = ''                  //   s = string of concatenated squares, k = counter
) =>                          //
  n ?                         // if we haven't reached the n-th term yet:
    f(                        //   do a recursive call with:
      n - !!s.match(++k * k), //     n decremented if k² is an early bird square
      s + k * k               //     s updated
    )                         //   end of recursive call
  :                           // else:
    k                         //   return k

비 재귀 버전, 53 바이트

이것은 엔진 스택 크기에 의존하지 않습니다.

n=>{for(k=s='';n-=!!(s+=k*k).match(++k*k););return k}

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


6

Pyth , 12 바이트

e.f/jk^R2Z`*

여기 사용해보십시오!

작동 원리

ef / jk ^ R2Z` * ~ 전체 프로그램. Q를 입력으로하자.

 .f ~ 진실한 결과를 가진 첫 번째 Q 양의 정수. 변수 Z를 사용합니다.
      ^ R2Z ~ [0, Z) 범위의 각 정수를 제곱합니다.
    jk ~ 단일 문자열로 연결합니다.
   / ~ 발생 횟수를 계산 ...
          `* ~ Z의 문자열 표현은 제곱입니다.
               거짓이면 0을, 참이면 1을 나타냅니다.
e ~ 마지막 요소를 얻습니다 (Qth 진리 정수). 암시 적으로 출력합니다.


4

APL (Dyalog) , 53 42 바이트

{{0<+/(⍕×⍨⍵+1)⍷' '~⍨⍕×⍨⍳⍵:⍵+1⋄∇⍵+1}⍣⍵⊢0}

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

어떻게?

-발생을 찾습니다

⍕×⍨⍵+1-의 캐릭터 라인 사각 x+1에서

⍕×⍨⍳⍵ -문자열의 제곱 범위 x

' '~⍨ -공백없이

+/ -합계

0<-합이 양수 (발생이 존재하는 경우)이면를 반환하고 x+1, 그렇지 않으면

∇⍵+1-로 되풀이하십시오 x+1.

⍣⍵- n시간을 적용하십시오 .


3

하스켈 , 73 바이트

import Data.List
([n|n<-[7..],isInfixOf(g n)$g=<<[1..n-1]]!!)
g=show.(^2)

온라인으로 사용해보십시오! 인덱스가 0입니다.

설명

보조 장치 :

import Data.List -- import needed for isInfixOf
g=show.(^2)      -- function short cut to square an int and get the string representation

주요 기능:

(                                 !!) -- Index into the infinite sequence
 [n|n<-[7..],                    ]    -- of all numbers n greater equal 7
      isInfixOf(g n)$                 -- whose square appears in the string
                     g=<<[1..n-1]     -- of all squares from 1 up to n-1 concatenated.

2

젤리 , 13 11 바이트

R²DµṪẇF
Ç#Ṫ

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

또는 n시퀀스의 첫 번째 값 을 인쇄하는 10 바이트 솔루션입니다 . 온라인으로 사용해보십시오!


lol 당신이 나를 이길; 나는 당신의 솔루션 (골프 후)과 정확히 동일했습니다 : P
HyperNeutrino

@HyperNeutrino 불행히도 잘못된 것 같습니다.
user202729

아 진짜? 그것은 불행한 일 :( 편집 오 바로 nfind꼬추 : (((
HyperNeutrino

@HyperNeutrino stdin에서 읽는 데 문제가 없습니다.
user202729


2

젤리 , 11 바이트

Ḷ²DFɓ²ẇ
Ç#Ṫ

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

user202729의 솔루션에 대한 대안 입니다.

작동 원리

C#Ṫ ~ Main Link.

Ç#  ~ First N positive integers with truthy results.
  Ṫ ~ Tail. Take the last one.

-----------------------------------------------------------

Ḷ²DFɓ²ẇ ~ Helper link. This is the filtering condition.

Ḷ       ~ Lowered range. Yields {x | x ∊ Z and x ∊ [0, N)}.
 ²      ~ Square each.
  D     ~ Convert each to decimal (this gets the list of digits).
   F    ~ Flatten.
    ɓ   ~ Starts a new monadic chain with swapped arguments.
     ²  ~ N²; Yields N squared.
      ẇ ~ Is ^ sublist of ^^^?

와우, 자동 문자열 화가 있습니다.
user202729

2

Alice , 32 바이트

/
\io/&wd.*\@! d ? ~ ? F $ /WKdt

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

그 서수 모드의 낭비적인 레이아웃은 실제로 나를 괴롭 히고 있지만, 내가 바이트를 절약하려고 시도하는 모든 것이 더 오래 나옵니다 ...

설명

/
\io/...@...

와 그냥 보통의 진수 I / O 프레임 워크 o@약간 특이한 위치한다. 프로그램의 핵심은 다음과 같습니다.

&w    Push the current IP address to the return address stack n times.
      This gives us an easy way to write a loop which repeats until we
      explicitly decrement the loop counter n times.

  d     Push the stack depth, which acts as our running iterator through
        the natural numbers.
  .*    Square it.
  \     Switch to Ordinal mode.
  !     Store the square (as a string) on the tape.
  d     Push the concatenation of the entire stack (i.e. of all squares before
        the current one).
  ?~    Retrieve a copy of the current square and put it underneath.
  ?     Retrieve another copy.
  F     Find. If the current square is a substring of the previous squares,
        this results in the current square. Otherwise, this gives an empty
        string.
  $     If the previous string was empty (not an early bird) skip the next
        command.
  /     Switch back to Cardinal. This is NOT a command.
  W     Discard one address from the return address stack, decrementing our
        main loop counter if we've encountered an early bird.
K     Jump back to the beginning of the loop if any copies of the return
      address are left. Otherwise do nothing and exit the loop.

dt    Push the stack depth and decrement it, to get the final result.

이 언어를 모르지만 추가하기 전에 현재 사각형이 문자열에 있는지 확인하여 바이트를 저장할 수 있습니까?
WGroleau

@ WGroleau 나는 그렇게 생각하지 않습니다. 기본 검사는 여전히 1 바이트 ( F대신 z)이지만 스택 조작은 더 간단하지 않으며 아마도 1-2 개 명령이 나빠질 수 있습니다.
Martin Ender

@JamesHolderness 왜 안됩니다? 69696은 원래 위치보다 겹치는 두 위치에 나타납니다. 자연스러운 위치와의 겹침을 무시해야한다면 도전에서 그렇게 말해야합니다.
Martin Ender

@JamesHolderness 관련 테스트 사례를 확인하는 데 시간이 너무 오래 걸렸으므로 최대 10 개까지 수행했습니다. 중간 테스트 사례가 도움이됩니다.
Martin Ender

그것은 확실히 도전을 증가시킵니다. 같은 방식으로 실패한 이전 답변을 언급 하시겠습니까? 참고 : 모든 언어가 가독성을 갖도록 설계 되었기 때문에 이러한 재미는 있지만 답을 찾을 수는 없습니다. :-) 어셈블러 및 FORTH를 제외하고. :-)
WGroleau

1

껍질 , 13 바이트

!f§€oṁ₁ŀ₁N
d□

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

설명

두 번째 줄은 숫자 함수의 십진수를 제공하는 도우미 함수입니다.

 □    Square.
d     Base-10 digits.

메인 프로그램에서을 사용하여이 함수를 호출 할 수 있습니다 .

!f§€oṁ₁ŀ₁N
 f§      N    Filter the list of natural numbers by the following fork g(n).
       ŀ        Get [0, 1, ... n-1]
     ṁ₁         Get the decimal digits of each value's square and concatenate
                them into one list. (A)
        ₁       And get the decimal digits of n² itself. (B)
    €           Check whether (A) contains (B) as a sublist.
!             Use the programs input as an index into this filtered list.


1

Wolfram Language (Mathematica) , 75 바이트

(n=k=0;s="";While[n<#,If[!StringFreeQ[s,t=ToString[++k^2]],n++];s=s<>t];k)&

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

작동 원리

n지금까지 발견 된 초기 조류의 수, k마지막으로 확인 된 숫자, s문자열을 유지합니다 "1491625...". 하지만이 n경우, 너무 작은 s우리가 증가하므로 다음 사각형을 포함, 다른 일찍 일어나는 새가 발견되었습니다 n. 어쨌든 우리는 확장 s합니다.

일단 n도달 입력# , 잠시 후 k, 마지막 번호를 확인하고, 따라서 마지막 일찍 일어나는 새가 발견했다.

랩톱에서 시퀀스의 53 번째 항을 계산하는 데 약 53 초가 걸립니다.



1

배쉬, 76 69 바이트

n변수에 주어진 다고 가정 합니다 (예 :) n=10 foo.sh. package를 사용합니다 grep. 중간 값이 출력됩니다 (허용 된 경우 -3 바이트).

while((n));do((b=++a*a));grep -q $b<<<$s&&((n--));s=$s$b;done;echo $a

어떻게 작동합니까?

while ((n)); do  # while n != 0 (C-style arithmetic)
  ((b = ++a*a))  # Increment a and let b = a*a
    # Non-existent value is treated as zero
  grep $b<<<$s   # Search for b in s
    && ((n--))   # If found, decrement n
  s=$s$b         # Append b to s
done
echo $a

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