범용 정수 시퀀스 생성


22

정의

모든 유한 한 정수 시퀀스를 연속 된 서브 시퀀스로 포함하는 경우 (무한한) 정수 시퀀스 범용이라고하자

즉, 정 순서 (a 하나 하는 2 , ...) 각각의 유한 정수 시퀀스 경우에 한정해 보편적 (b (1) , ..., (B)의 n은 ) , 오프셋가 K 되도록 (a K + 1 ,…, a k + n ) = (b 1 ,…, b n ) .

예를 들어 양의 소수는 다음과 같은 이유로 보편적이지 않습니다.

  • 음수, 1 또는 복합 숫자를 포함하지 않습니다 .

  • 3 을 포함하지만 연속 하위 시퀀스 (3, 3, 3) 는 포함하지 않습니다 .

  • 25를 포함하지만 연속 된 서브 시퀀스 (2, 5) 는 포함하지 않습니다 .

  • 연속 서브 시퀀스 (7, 11, 13)를 포함하지만 연속 서브 시퀀스 (13, 11, 7) 는 포함하지 않습니다 .

태스크

선택 어떤 하나의 보편적 인 정수 순서 (A 일을 하는 2 , ...) 다음과 같은 규칙을 준수, 당신의 선택의 프로그래밍 언어를 구현한다.

  • 전체 프로그램 또는 기능을 제출할 수 있습니다.

  • I / O에는 세 가지 옵션이 있습니다.

    1. 입력하지 않고 전체 순서를 인쇄하거나 반환하십시오.

    2. 색인 n 을 입력으로 사용하고 인쇄하거나 n n을 리턴 하십시오 .

    3. 색인 n 을 입력으로 사용하고 인쇄하거나 리턴하십시오 (a 1 ,…, a n ) .

  • I / O 옵션 23의 경우 원하는 경우 0 기반 인덱싱을 사용할 수 있습니다 .

  • 제출은 결정 론적이어야합니다. 동일한 입력으로 여러 번 실행하는 경우 동일한 출력을 생성해야합니다.

또한, 분명하지 않은 한, 선택한 순서가 보편적임을 증명하십시오. 입증되지 않은 추측에 의존하지 않을 수도 있습니다.

표준 규칙이 적용됩니다. 가장 짧은 바이트 단위의 코드가 이길 수 있습니다!


입증되지 않은 추측에 의존하지 않을 수도 있습니다. P : 나는의 묵시적 생각
Outgolfer 에릭

숫자 목록을 어떻게 숫자로 저장합니까?
RosLuP

답변:


13

껍질 , 5 바이트

이것은 무한 목록을 인쇄합니다

ΣṖ…ݱ

온라인으로 사용해보십시오! 또는 시퀀스의 첫 번째 색인을 찾으십시오 . (대부분의 시퀀스에 대해 많은 메모리를 사용합니다)

설명:

   ݱ   Infinite list [1,-1,2,-2,3,-3,4,-4,5,-5...]
  …     Rangify       [1,0,-1,0,1,2,1,0,-1,-2,...]
 Ṗ      Powerset
Σ       Concatenate

허 스크 에서 무한 목록에 대해 잘 작동합니다. 여기 에서 동작을 볼 수 있습니다


Q작동 방식 에 대해 자세히 설명 할 수 있습니다 . (제 생각에는 확실하지 않습니다.)
Dennis

나는 밖으로 @Dennis 회전은 싶어 하지Q
H.PWiz

9

파이썬 2 , 49 46 43 바이트

def f(n):d=len(`n`);return n/d**(n%d)%d-d/2

f(n)n 만 반환 합니다 . n기본에서 가장 작은 자릿수를 사용하여 d높은 자릿수 중 하나를 추출합니다.

온라인으로 사용해보십시오! 이 스크립트 (Dennis 제공)는 임의의 시퀀스를 취하여 n시퀀스가 시작 되는 위치를 알려줍니다 .

설명

n/d**(n%d)%d-d/2
     (n%d)         least significant digit of n
n/d**(   )%d       get n%d-th digit of n
            -d/2   offset to get negative values

예를 들어, 대 n범위 31415926503141592659, d=10그리고 마지막 자리 n선택하는 다른 숫자 중 하나. 그런 다음 -d/2음수 값을 얻기 위해 추가 합니다.

n%d:       0  1  2  3  4  5  6  7  8  9
f(n)+d/2:  0  5  6  2  9  5  1  4  1  3
f(n):     -5  0  1 -3  4  0 -4 -1 -4 -2

독립형 대안, 43 바이트 :

n=input();d=len(`n`);print n/d**(n%d)%d-d/2

len(`n`)대신 사용할 수 있습니다 len(str(n)).
Dennis

감사합니다 @Dennis. 필요한 경우 더 설명을 추가 할 수 있습니다.
japh

유한 시퀀스가 ​​주어지면 시퀀스에서 오프셋을 찾는 함수를 작성했습니다. 온라인으로 사용해보십시오!
Dennis

이것은 매우 시원합니다.
histocrat

좋은. n=2**63-1표현이 L추가 되기 때문에 (위의 str(n)경우 3 바이트 동안 처리 할 것이므로) 위쪽으로 깨질 것입니다 .
Jonathan Allan

5

Brachylog 2, 11 바이트

≜~×-₂ᵐ~ȧᵐ≜∋

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

또한 목록에서 추가 파티션을 사용하여 알고리즘을 시도했지만 더 짧지 않았습니다. 이것은 출력으로 무한한 정수 스트림을 생성하는 생성기입니다. TIO 링크에는 첫 번째 만 인쇄 할 수있는 헤더가 있습니다.

설명

프로그램은 가능한 모든 정수를 순서대로 시도하여 시작합니다 ( 기본적으로 정수에 대해서는 나머지 가능성을 모두 시도합니다). 0, 1, -1, 2, -2 등입니다 (음수는 프로그램 끝에 도달하지 않지만). 이것은 프로그램의 유일한 "무한"단계입니다. 다른 모든 것들은 유한합니다.

그런 다음 정수의 가능한 모든 인수 분해를 생성하고 다른 차수를 다른 것으로 취급하고 2 이상의 값만 사용합니다 (따라서 무한히 많음). 소수뿐 아니라 소인수의 합성 수도 허용됩니다. 즉, 함수 실행 중 어느 시점에서든이 단계에서 정수 ≥ 2의 모든 가능한 시퀀스가 ​​생성됩니다 (이러한 시퀀스에는 반드시 일부 제품이 있고 해당 제품은 초기에 의해 어느 시점에 생성됨 ).

그런 다음 해당 시퀀스 세트를 모든 정수 시퀀스 세트에 맵핑해야합니다.이 단계는 두 단계로 수행됩니다. -₂각 요소 ( ) 에서 2 ( )를 빼서 모든 음이 아닌 정수 시퀀스 세트를 제공 한 다음 더하기 또는 빼기 ( , 즉 "절대 값이있는 값") 각 요소 (). 후자의 단계는 분명히 비결정론 적이므로 Brachylog는이를 생성기로 취급하여 입력 목록의 해당 요소를 더하거나 뺀 요소를 가진 가능한 모든 목록을 생성합니다. 이것은 우리가 가능한 모든 정수 시퀀스에 대한 생성기를 가지고 있고 그것들이 모두 생성되는 순서로 생성한다는 것을 의미합니다 (특히, 각 요소의 절대 값을 취하면 얻는 순서는 각각에 2를 더합니다) 요소를 선택한 다음 결과 요소의 곱으로 주문).

불행히도, 질문은 시퀀스 시퀀스가 ​​아닌 단일 시퀀스를 원하므로 두 개의 명령이 더 필요합니다. 첫째, Brachylog에 시퀀스 시퀀스 를 명시 적으로 생성 하도록 요청합니다 (이 방법을 통해 생성 된 시퀀스의 개념을 설명하는 데이터 구조를 생성하는 것과는 반대로, 필요할 때까지 실제로 시퀀스를 생성하지는 않음). 이 두 경우 모두이 경우 프로그램을 더 빠르게 만들고 출력이 요청 된 순서대로 생성되도록합니다. 마지막으로 생성기가 개별 시퀀스의 요소를 한 번에 하나씩 출력합니다 (이전 시퀀스의 모든 요소가 출력되면 다음 시퀀스로 이동).

최종 결과 : 각각의 가능한 정수 시퀀스가 ​​한 번에 한 요소 씩 생성 및 출력되며 모두 단일 범용 시퀀스로 연결됩니다.


ais523… 당신입니까!?
Fatalize

그렇지 않은 경우 삭제 된 계정의 게시물 이 동일한 계정 번호를 표시한다는 점 에서 우연의 일치 입니다.
완전히 인간적인


4

파이썬 2 , 100 99 바이트

  • ovs 덕분에 1 바이트를 절약했습니다 . 과도하게 반복 itertools내장에 무한 루프.
from itertools import*
for n in count():
 for P in permutations(range(-n,n)*n):
	for p in P:print p

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

음이 아닌 모든 정수에 대해 n반복 된 정수 범위 의 모든 순열을 무기한으로 인쇄합니다 . 이 수정 된 버전을 사용하여 하위 시퀀스 의 첫 번째 오프셋 을 검색 할 수 있습니다 .[-n; n)n
k


while~0:. Heh heh ...
Chas Brown

사용하여 99 바이트itertools.count
ovs

@ovs 감사합니다; 그 내장을 몰랐다.
Jonathan Frech

2

펄 6 , 91 바이트

loop (my$i=1;;$i++){my@n=(-$i..$i);my@m=@n;loop (my$k=1;$k <$i;$k++){@m=@m X@n;};print @m;}

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

이것은 다른 답변들과 비슷한 방법을 사용합니다. Cartesian 제품을 사용하여의 요소를 (-1,0,1)정렬 한 다음에 모든 정렬 된 요소 쌍 을에 인쇄 한 다음에 요소의 (-2,-1,0,1,2)모든 정렬 된 삼중 항을 인쇄합니다 (-3,-2,-1,0,1,2,3).

저는 Perl을 처음 사용하기 때문에 더 많은 골프가있을 수 있습니다.

더 읽기 쉬운 버전 :

loop (my $i = 1; ; $i++) {
  my @n = (-$i..$i);
  my @m = @n;
  loop (my $k=1; $k <$i; $k++) {
    @m = @m X @n;
  }
  print @m;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.