에라토스테네스 셔플


9

도전

한 줄의 입력을 받아들이고 문자에 대해 매우 구체적이고 이상하게 익숙한 셔플을 수행하고 결과를 출력하는 함수 또는 프로그램을 작성하십시오.

필수 셔플 링은 다음 알고리즘을 사용하여 설명 할 수 있습니다.

  1. 입력의 각 문자에 1 기반 색인으로 레이블을 지정하십시오.
  2. 문자 번호 1을 출력으로 쓰십시오.
  3. 문자 번호 2부터 문자 2 자체를 제외하고 다른 모든 문자를 순서대로 출력에 씁니다 . 즉, 문자 4, 6, 8, 10 등을 출력으로 쓰십시오.
  4. n은 아직 출력으로 기록되지 다음 문자 번호로 시작 출력에 모든 n 번째 문자를 쓰기 제외한 문자 N 자체를, 그리고 당신이 이미 출력에 기입 한 수 (숫자 라벨) 다른 문자를 제외하고.
  5. 출력에 새 문자를 계속 추가하는 한 4 단계를 반복하십시오.
  6. 출력 할 나머지 문자를 순서대로 씁니다.

  1. 문자에 라벨을 붙입니다.
  12 34 5678 9 10 11 12 1314 15 16 17 18 19 20 21 22 23 24 25 26 27
  OLDDOCYAK '스 뷰티 코너

2. 출력 할 첫 번째 문자를 작성하십시오.

 1   2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
  O   LDDOCYAK 'SBEAUTYCORNER
O

3. 2를 제외한 2로 시작하는 다른 모든 문자를 쓰십시오.

 1   2 3 4   5 6   7 8   9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 
 O   LD    D O   C    Y  K '   S  B E U   T Y C   O R   N E   R      
O OA 'EUYCRE

4. 아직 작성되지 않은 다음 문자는 문자 번호 3입니다. 3으로 시작하지만 문자 3 자체는 제외하고 이미 작성된 문자는 제외합니다.

 1   2 3 4   5 6   7 8   9  10 11 12 13 14  15  16 17 18 19 20  21  22 23 24 25 26  27
  O   LD    D O   C Y   K '   S B E U   T Y C   O R   N E R 
OOA 'EUYCRE YB R             

5. 다음 문자 인 문자 5를 사용하여 4 단계를 반복하십시오.

4. 아직 작성되지 않은 다음 문자는 문자 번호 5입니다. 5로 시작하지만 문자 5 자체는 제외하고 이미 작성된 문자는 제외하고 5 번째 문자를 작성하십시오. (이것은 문자 25에 불과합니다).

 1   2 3 4   5 6   7 8  9  10 11 12 13 14  15  16 17 18 19 20  21  22 23 24  25  26  27
  O   LD    D O   C Y   K '   S B E U   T Y C   O R N E R 
OOA 'EUYCREYB R N               

5. 다음 문자는 7입니다. 그러나 14, 21은 이미 작성되었으므로 4 단계를 반복하면 더 이상 문자가 출력되지 않습니다. 따라서 5로 끝납니다.

6. 나머지 문자를 순서대로 작성하십시오.

 1   2 3 4   5 6   7 8  9  10 11 12 13 14  15  16 17 18 19 20  21  22 23 24  25  26  27
  O   LD   D O   C Y   K '   S B E U   T Y C   O R N E R 
OOA 'EUYCREYB RN LDDCKSATO                  

규칙

입력 및 출력은 표준 입력 / 표준 출력, 문자열 또는 문자 배열을 통해 이루어질 수 있습니다.

표준 입력으로 읽는 경우 편의상 후행 줄 바꿈이 있거나 전체 입력에 줄이 있다고 가정 할 수 있습니다. 개행 문자는 셔플에 참여하지 않습니다.

마찬가지로 사용자 편의에 따라 출력에 줄 바꿈이있을 수도 있고 없을 수도 있습니다.

표준 허점은 허용되지 않습니다.

이것은 코드 골프 대회입니다. 바이트 단위의 가장 작은 코드가 이깁니다.

테스트 사례

123456789ABCDEF -> 1468ACE9F2357BD

OLD DOC YAK'S BEAUTY CORNER -> O O A' EUYCREYB RNLDDCKSATO

Blue boxes use a 2600hz tone to convince telephone switches that use in-band signalling that the caller is actually a telephone operator.
->
Bebxsuea20h oet ovnetlpoesice htuei-adsgaln httecle satal  eehn prtre 0ncce ha nng aiuapootnt ihyon atallu o s 6z oi ehwstsnbilt lr clee.

이제 이것이 왜 그렇게 이상하게 친숙한 지 알 것입니다 ... 그것은 최고의 체입니다 ...
busukxuan

1
나는 당신의 코드 블록에서 4에 정말로 당황했습니다. 4 점은 여전히 ​​4 점입니다.
Mama Fun Roll

@MamaFunRoll 그래,하지만 숫자 레이블을 표시하기 위해 모든 것이 약간 떨어져 있습니다. 이를 활용하여 파업을 연장했습니다. 이제 4가 실제로 사라진 것 같습니다.
H Walters

1
예, 그것은 부분적으로 오래된 PPCG meme이었습니다 : P 감사합니다. 선명도를 높이십시오!
Mama Fun Roll

답변:


4

젤리 , 10 바이트

JÆfṂ$ÞÆPÞị

TryItOnline

어떻게?

JÆfṂ$ÞÆPÞị - Main link: theString
J          - range(length), the 1-based indexes of theString
     Þ     - sort these by
    $      -     last two links as a monad
 Æf        -         prime factorization array (e.g. 20 -> [2,2,5])
   Ṃ       -         minimum
        Þ  - sort these by
      ÆP   - isPrime, i.e. move all the primes to the right
         ị - index into theString

5

수학, 61 바이트

#[[SortBy[Range@Length@#,FactorInteger[#][[1,1]]PrimeQ@#&]]]&

이름없는 함수를 문자 목록을 입력으로 받아서 문자 목록을 반환합니다.

FactorInteger[#][[1,1]]의 가장 작은 소인수를 산출 #(반환 1하는 경우 #같음 1). 따라서 FactorInteger[#][[1,1]]PrimeQ@#[: 이상한 식을 산출 #'작은 소인수 S] False경우 #주요 아니며, # True경우 #소수 (이 숫자 및 부울의 평가되지 않은 제품은).

Range@Length@#입력 길이까지의 숫자 목록을 생성합니다. 그런 다음 SortBy위에서 설명한 재미있는 함수로 해당 숫자를 정렬합니다. Mathematica는 실제로 여러 가지 방식으로 유형에 민감하지만 다른 방식으로 유쾌하게 혼합합니다. [number] False형식의 표현식은 [number] 형식의 표현식 전에 알파벳순으로 True정렬되고 숫자는 숫자로 정렬하여 연결이 끊어집니다. 이것은 우리가 원하는 순열을 정확하게 만들고 #[[...]]그에 따라 입력 문자를 순열 시킵니다.


2

C, 164 바이트

입력을 첫 번째 명령 매개 변수로 사용하고 stdout으로 다시 인쇄합니다. 각 캐릭터를 처리 할 때 최종 패스를 허용하여 클리어합니다.

#define p putchar
main(c,s,i,j,t)char**s,*t;{c=strlen(t=s[1]);p(*t);for(;j++<c;)if(t[j])for(i=2*j+1;i<=c;i+=j+1)!t[i]?:p(t[i]),t[i]=0;for(j=0;j++<c;)!*++t?:p(*t);}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.