주어진 N, [ 'A', 'B', 'AB', 'C', 'D', 'CD', 'ABCD', 'E',…]의 n 번째 요소 출력?


12

다음 목록을 고려하십시오.

expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]

여기에 한 가지 방법이 있습니다. 한자를 쓰는 법을 배우고 점점 더 큰 덩어리를 배우고, 갈수록 리허설을하고 싶습니다. A로 시작한 다음 B로 이동하면 이미 두 쌍의 시퀀스가 ​​있으므로 결합합니다. 그런 다음 C와 D로 가서 다른 쌍을 만들고 연습하십시오. 그런 다음 연습 : ABCD. 그런 다음 E와 H를 동일하게 한 다음 ABCDEFGH를 연습합니다. 목록은 무한합니다.

목표는이 목록에서 n 번째 요소 인 인덱스를 0에서 생성하여 인쇄하는 것입니다. 'Z'다음에 'A'가 다시 있다고 가정하십시오.

우승 기준은 소스 코드 길이입니다.


3
때 확실하지 나는 그것을 얻을 BCCDEF? 무엇을 연결하고 무엇을 결정하지 않습니까? 어떻게 그것이 시작하면 무한 A후에 다시 Z(후 당신은 어떤 점에서 의미 ABCDEFGHIJKLMNOPQRSTUVWXZ우리가 ABCDEFGHIJKLMNOPQRSTUVWXZAB뭔가를 나?)
조나단 앨런

5
감싸는 문자에 대한 테스트 사례는 높이 평가됩니다 ( x,y,z,a,b...).
Stewie Griffin

7
도전을 개선하기 위해 앞으로 샌드 박스 를 사용하는 것이 좋습니다 . 거기서, 당신은 당신의 도전이 메인 PPCG 사이트에 적합한 지 확인하기 위해 동료 사용자로부터 피드백을받을 것입니다! 개인적으로 모든 사람이 게시물을 볼 수 있도록 샌드 박스에 2 일 이상 게시물을 남길 수 있습니다.
JungHwan Min

2
@JungHwanMin : 목록을 무한대로 인쇄해도 괜찮습니다. 정수 목록을 반환합니다.
d33tah

4
"정수 목록 반환을 전달합니다"는 무엇을 의미합니까? 정수 목록 출력이 허용됩니까? 그렇다면 " 'Z'이후에 다시 'A'를 얻는다고 가정하십시오."-이 출력 형식의 경우 (i + 25 이후에 다시 i를 얻음)? (또한 관련 정보로 게시물을 업데이트하십시오-의견에서 사양을 발견하지 마십시오.)
Jonathan Allan

답변:



6

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

시퀀스를 1 인덱스로 만들고 KSab에서 사용하는 것과 유사한 단순화를 사용하여 2 바이트를 절약 할 수 있습니다 .

n=>(x=g=y=>n?g(y+=y==(x^=y-x),n--):x<y?[x++,...g(y)]:[])(1)

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


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

랩핑되지 않은 정수 목록을 리턴합니다.

n=>(g=v=>n?g(u&-u^v?v*2:!!u++,n--):v?[u-v,...g(v-1)]:[])(u=1)

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

Donald Knuth의 건축을 기반으로합니다. 관련 OEIS 항목 : A182105 .

어떻게?

이것은 2 단계 재귀 함수입니다.

먼저 로 정의 된 시퀀스 빌드 하고 다음을 수행합니다.(un,vn)(u1,v1)=(1,1)

(un+1,vn+1)={(un+1,1),if (unANDun)=vn(un,2vn),otherwise

두 번째 단계에서, 우리는리스트 를 만들어 결국 반환합니다.[unvn,unvn+1,,un]


JavaScript (ES6), 97 바이트

대문자를 래핑하여 반환합니다.

n=>(s=i='',g=v=>(s+=String.fromCharCode(65+i++%26),n--)?g(u&-u^v?v*2:!!u++):s.substr(u-v,v))(u=1)

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

또는 소문자 91 바이트 입니다.



2

Wolfram Language (Mathematica) , 80 71 바이트

Range@#2+#-#2&@@Nest[If[#~BitAnd~-#==#2,{#+1,1},{#,2#2}]&@@#&,{1,1},#]&

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

영문자 랩핑 문자열 대신 정수 목록을 리턴합니다. 인덱스가 0입니다.

@Arnauld 덕분에 OEIS A182105를 사용합니다 .

54 바이트를 무기한으로 목록 인쇄

Do[j=Range@i;#∣i&&Print@j[[-#;;]]&/@(2^j/2),{i,∞}]

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

1- 색인. TIO 버전은 충돌을 방지하는 lim대신에 있습니다.




1

, 45 42 35 바이트

FN⊞υ⎇∧›Lυ¹⁼L§υ±¹L§υ±²⁺⊟υ⊟υ§αL⭆υκ⮌⊟υ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 1- 색인. 결과를 생성하는 간단한 수식을 찾을 수 없으므로 질문에 주어진 절차를 따르기 만했습니다. 설명:

FN

주어진 횟수를 반복하십시오 n.

⊞υ

다음 요소를 다음 u과 같이 계산 하여 사전 정의 된 빈 배열로 푸시합니다 .

⎇∧›Lυ¹⁼L§υ±¹L§υ±²

...에 u요소가 두 개 이상 있고 마지막 두 요소의 길이가 같은 경우 ...

⁺⊟υ⊟υ

... 두 번째 요소를 마지막 요소에 추가하여 결과를 역순으로 만듭니다.

§αL⭆υκ

... 그렇지 않으면 다음 문자는 지금까지 추가 한 문자 수를 세고 사전 정의 된 대문자 알파벳으로 주기적으로 색인하여 찾을 수 있습니다. (목록이 비어 있으면 길이의 합 또는 길이의 합을 계산하는 데 실패하고 목록을 문자열로 매핑하면 빈 목록을 특수하게 묶는 것보다 2 바이트가 절약됩니다.)

⮌⊟υ

원하는 목록 u의 반대 n요소 인의 마지막 요소를 가져 와서 그 반대를 암시 적으로 인쇄하십시오.

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