바밥에서 zyzyz까지 모든 단어


38

당신의 임무는 구조와 함께 다섯 글자 단어의 읽을 수있는 목록을 출력하는 프로그램을 작성하는 것입니다 :

자음-모음-자음-모음-자음

출력은 한 줄에 한 단어 씩 사전 순으로 정렬해야하며 두 번 반복되는 단어는 없습니다. 소문자 또는 대문자 일 수 있지만 혼합 할 수는 없습니다. 따라서 목록은 다음과 같이 시작하고 끝날 수 있습니다.

babab  
babac  
babad  
...  
zyzyw  
zyzyx  
zyzyz 

모음은 - 전자 - 난 - 오 - 유 - y를 , 다른 20 영어 알파벳 문자는 자음입니다. 단어는 실제 사전 단어 일 필요는 없습니다. 가장 짧은 코드가 승리합니다.

참고 : 몇 년 전에 저는 정확히 그렇게했던 대학 웹 사이트의 프로그램을 우연히 발견했습니다. 내 성명은 cvcvc 제약 조건에 맞으며 나 자신을 인터넷 검색했습니다.


7
여기 두 가지가 있습니다. 첫째, 이와 같은 어리석은 단어가 있습니다. 출품작을 어떻게 시험 할 수 있습니까? 또한 그 제약 조건에 맞는 많은 이름이 있습니다. 가장 먼저 떠오르는 것은 Jacob 이지만 Lucas 와 같은 다른 사람들 도 적합합니다
— TrojanByAccident

9
@TrojanByAccident 나는 도전이 이름 / 영어 단어인지에 관계없이 가능한 모든 일치하는 문자 조합을 요구한다고 생각합니다. "단어가 실제 사전 단어 일 필요는 없습니다."
— trichoplax

3
@wilks 관련 메타 게시물 -이 SE 커뮤니티에서는 엄격한 i / o 형식을 인정하지 않습니다. 이 과제는 단어 사이에 줄 바꿈을 삽입하지 않고 cvcvc 단어를 생성하는 데 중점을 둡니다.
— JungHwan Min

1
@JungHwanMin 링크를 주셔서 감사합니다. 처음으로 여기에 대해 몰랐습니다. 나는 그것을 모든 cvcvc 단어의 읽기 쉽고 알파벳순 목록으로 보았습니다. 따라서 대문자 또는 소문자는 중요하지 않다는 데 동의하지만 기술적으로 유효한 반면 매우 긴 문자열 또는 중첩 배열이라고 생각하면 큰 대답은 아닙니다.
— wilks

2
이 질문에 대한 찬성하는 답변 중 몇 가지를 실행했지만 분명히 "출력은 각 줄마다 증가해야합니다"를 준수하지 않습니다. 이 요구 사항이 완화 되었습니까? 그렇다면이를 반영하여 질문을 편집 할 수 있습니까? 내 답변이 형식에 의해 제한되지 않으면 꽤 많은 바이트를 잃을 수 있다고 생각합니다.
— ElPedro

답변:


28

Mathematica, 72 65 61 바이트

Print@@@Tuples@{a=##/(b=#5#9#15#21#25#)&@@Alphabet[],b,a,b,a}

테스트를 위해로 교체 Print@@@하는 것이 좋습니다 ""<>#&/@. Mathematica는 288,000 줄을 영원히 인쇄하는 대신 처음 몇 단어와 마지막 몇 단어를 보여주는 잘린 형태를 표시합니다.

설명

마침내 문자열을 나누는 용도를 찾았습니다. :)

한동안 문자열을 추가하거나 곱할 가능성에 흥미가 있었지만 실제 사용 사례는 상당히 제한적입니다. 요점은 Mathematica에서 "foo"+"bar"or "foo"*"bar"와 같은 (따라서 짧은 형식 "foo""bar")이 완전히 유효하다는 것입니다. 그러나 실제로는 산술 표현식에서 문자열로 무엇을 해야할지 알지 못하므로 이러한 사항은 평가되지 않습니다. Mathematica 는 일반적으로 적용 가능한 단순화를 적용합니다. 특히 문자열은 정식 순서로 정렬되며 (대문자, 숫자 및 문자가 아닌 문자를 포함하는 문자열을 정렬하기 시작하면 Mathematica에서 상당히 엉망이 됨) 종종 거래를 중단하지만 여기서는 중요하지 않습니다. . 또한 다음과 "abc""abc"같이 단순화됩니다"abc"^2(이것은 문자열을 반복했을 때 문제가되지만 우리는 그것을 가지고 있지 않습니다 "abc"/"abc".)

그래서 우리는 여기서 골프를하려고합니다. 모음 목록과 자음 목록이 필요하므로 Tuples가능한 모든 조합을 생성 하도록 피드 할 수 있습니다 . 첫 번째 접근 방식은 순진한 솔루션이었습니다.

Characters@{a="bcdfghjklmnpqrstvwxz",b="aeiouy",a,b,a}

하드 코딩 된 자음 목록은 약간 아 hurt니다. Mathematica에는 Alphabet내장 된 모음이있어서 값싼 방식으로 모음을 제거 할 수 있다면 피할 수 있습니다. 이것은 까다로운 곳입니다. 요소를 제거하는 가장 간단한 방법은 Complement이지만 다음 옵션 중 하나를 사용하여 더 길어집니다.

{a=Complement[Alphabet[],b=Characters@"aeiouy"],b,a,b,a}
{a=Complement[x=Alphabet[],b=x[[{1,5,9,15,21,25}]]],b,a,b,a}

( 문자열이 아닌 문자 목록을 제공 Characters하므로 더 이상 전체 에 적용 할 필요는 없습니다 Alphabet[].)

그 산술 사업을 시도해 봅시다. 전체 알파벳을 목록 대신 문자의 곱으로 표현하면 취소 규칙으로 인해 간단한 나눗셈으로 문자를 제거 할 수 있습니다. 우리가 필요하지 않기 때문에 많은 바이트를 절약합니다 Complement. 또한 "a""e""i""o""u""y"실제로는보다 짧은 바이트 Characters@"aeiouy"입니다. 그래서 우리는 이것을 다음과 같이합니다 :

a=##/(b="a""e""i""o""u""y")&@@Alphabet[]

우리는 어디에서 자음과 모음의 제품을 저장하고 a및 b각각. 이것은 모든 논증을 곱하고 ##모음의 곱으로 나누는 함수를 작성함으로써 작동 합니다. 이 함수는 알파벳 목록에 적용 되며, 각 문자를 별도의 인수로 전달합니다.

지금까지는 좋지만 이제는

{a=##/(b="a""e""i""o""u""y")&@@Alphabet[],b,a,b,a}

에 대한 주장으로 Tuples, 그리고 그것들은 여전히 ​​목록이 아닌 제품입니다. 일반적으로 수정하는 가장 짧은 방법 List@@@은 앞에 제품을 배치하여 제품을 다시 목록으로 만드는 것입니다. 불행히도, 7 바이트를 추가하면 순진한 접근 방식보다 길어집니다.

그러나 Tuples내부 목록의 머리는 전혀 신경 쓰지 않습니다. 당신이 할 경우

Tuples[{f[1, 2], f[3, 4]}]

(예, 정의되지 않은 경우) 다음과 같은 이점이 f있습니다.

{{1, 3}, {1, 4}, {2, 3}, {2, 4}}

마치 List대신을 사용한 것처럼 f. 따라서 실제로 해당 제품을 바로 전달 Tuples하여 올바른 결과를 얻을 수 있습니다. 이렇게하면 하드 코드 된 두 개의 문자열을 사용하여 순진한 접근 방식보다 5 바이트가 절약됩니다.

이제는 "a""e""i""o""u""y"여전히 성가신 일입니다. 그러나 여기서도 몇 바이트를 절약 할 수 있습니다! 우리 기능의 주장은 개별 문자입니다. 따라서 올바른 인수를 선택하면 문자열 리터럴 대신 3 개보다 짧은 인수를 재사용 할 수 있습니다. 우리는 인수가 원하는 #(짧은 #1), #5, #9, #15, #21와 #25. #마지막에 넣을 경우 *(정규식) #\d+은 숫자가 아닌 숫자를 추가 할 수없는 완전한 토큰 이기 때문에 곱하기 위해 추가 할 필요가 없습니다 . 따라서 우리는 #5#9#15#21#25#또 다른 4 바이트를 절약 하면서 끝납니다 .


11
설명을 읽습니다. 그래서 ... 기본적으로 마술.
— Tally

나는 당신의 Tuples트릭에 놀랐습니다 . 전적으로 문서화되지 않았습니다. 그리고 두 입력 형식 이 머리를 갖지 않는 방법을 Tuples[list,n]다루는 것을 감안할 때 예상치 못한 일입니다 ! listList
— 시몬스


1
@ngenisis 나는 그 말이 매우 혼란 스럽다는 것을 알았습니다. 여러 목록을 사용할 때 이것이 외부 목록을 나타내는 지 확실하지 않기 때문 입니다. 실제로 대신 Tuples[f[{1,2}, {3,4}]]제공 {f[1, 3], f[1, 4], f[2, 3], f[2, 4]}합니다. 내부 헤드가 완전히 무시되었다는 문서는 없습니다.
— Martin Ender

@ASimmons cc. ^
— 마틴 엔더

16

펄, 47 바이트

#!perl -l
/((^|[aeiouy])[^aeiouy]){3}/&&print for a..1x5

shebang을 하나로 계산합니다.

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


2
이것은 훌륭하고 잘되었습니다! 사용하지 않는 이유는 say무엇입니까?
— Dada

감사. 나는 그것이 '자유'해야한다는 것에 동의하지 않습니다-M5.01 .
— primo

1
에 대한 귀하의 의견이 마음에 듭니다 -M5.010. 그리고 골프에서 intersting 부분은 대체하지 않습니다 print와 함께 say...
— 다다

아니다 -E(그 후 say) 공짜 물건은?
— Zaid

@Zaid Primo의 첫 번째 논평
— Dada

11

파이썬 3-110 바이트

a,b="bcdfghjklmnpqrstvwxz","aeiouy";print(*(c+d+e+f+g for c in a for d in b for e in a for f in b for g in a))

간단한 루핑 재미 :)


우리의 아이디어는 동일하다고 생각하지만 Python 3을 사용하면 10으로 나를 이길 수 있습니다!
— ElPedro

이 접근법을 사용하여 python2와 동등한 것을 게시하려고했습니다. 너무 느려서 대신 투표 해주세요.
— Chris H

8

루비, 72 71 52 바이트

puts (?z..?z*5).grep /#{["[^aeiouy]"]*3*"[aeiouy]"}/

기본 아이디어에 대한 Value Ink 덕분에 60 바이트로 줄였습니다.


1
5 글자 단어 목록을 생성하고을 사용하는 것이 더 짧습니다 grep. 소문자 문자열을 사용하는 범위를 생성하면 소문자 단어 만 얻을 수 있습니다. puts ("babab".."zyzyz").grep /#{["[^aeiouy]"]*3*"[aeiouy]"}/for 60 bytes
— Value Ink

7

05AB1E , 18 16 바이트

05AB1E 는 CP-1252 인코딩을 사용합니다.

žP3ãžO3ãâ€øJ€¨ê»

설명

žP3ã                # push all combinations of 3 consonants
    žO3ã            # push all combinations of 3 vowels
        â           # cartesian product
         €ø         # zip each pair of [ccc,vvv] (c=consonant,v=vowel)
           J        # join to list of strings ['cvcvcv','cvcvcv' ...]
            ۬      # remove last vowel from each
              ê     # sort and remove duplicates
              »     # join on newlines

테스트 목적으로 žP자음과 žO모음을 바꾸는 것이 좋습니다 .

자음 5 개와 모음 3 개를 사용한 예


직교 제품을 잘 사용합니다. 그렇게 생각하지 않았을 것입니다.
— Magic Octopus Urn


7

순수한 배쉬, 74

v={a,e,i,o,u,y}
c={b,c,d,f,g,h,{j..n},{p..t},v,w,x,z}
eval echo $c$v$c$v$c

간단한 버팀대 확장.

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


각 품목이 자체 라인에 있어야하는 경우 다음이 있습니다.

순수한 배쉬, 84

v={a,e,i,o,u,y}
c={b,c,d,f,g,h,{j..n},{p..t},v,w,x,z}
eval printf '%s\\n' $c$v$c$v$c

7

PHP, 88 86 84 80 바이트

예쁜 문자열 증가 :)
@Christoph에 의해 6 바이트 절약

for($s=$v=aeiouy;++$s<zyzza;preg_match("#[^$v]([$v][^$v]){2}#",$s)&&print"$s
");

모든 문자열을 통해 루프 bababa를 zyzyz하고 테스트 한 경우에는 패턴과 일치. 로 실행하십시오 -nr.


Lol, 버그가 많은 언어 사양으로 골프를 타는 것을 좋아합니다.
— Patrick Roberts

1
@PatrickRoberts 버그가 아닙니다. 기능입니다. : DI는 $a="001";$a++;언젠가 정수에 암시 적 캐스트를 포함 시켰 습니다. 그것은 매우 불편한 변화였습니다.
— Titus

1
for($s=$v=aeiouy;++$s<zyzza;)preg_match("#[^$v][$v][^$v][$v][^$v]#",$s)&&print"$s\n";당신에게 1 문자를 저장합니다. 슬프게도 사용하려면 에코를 인쇄하여 인쇄해야합니다 &&. 교체 \n진정한 줄 바꿈과 또 다른을 절약 할 수 있습니다.
— Christoph

1
사용하여 일부 문자를 저장할 수는 "#([^$v][$v]){2}​[^$v]#"있지만 테스트하지는 않았습니다.
— Christoph

1
@Christoph : Idk 이유는 있지만 ([^$v][$v]​){2}[^$v]루프에서는 작동하지 않습니다 [^$v]([$v]​[^$v]){2}. 두 변수 모두 독립형으로 작동합니다 (변수 포함).
— Titus

6

MATL , 21 바이트

11Y2'y'h2Y2X~6Myyy&Z*

온라인으로 사용해보십시오! (그러나 출력은 잘립니다).

11Y2   % Push 'aeiou' (predefined literal)
'y'    % Push 'y'
h      % Concatenate: gives 'aeiouy'
2Y2    % Push 'abcdefghijklmnopqrstuvwxyz' (predefined literal)
X~     % Set symmetric difference: gives 'bcdfghjklmnpqrstvwxz'
6M     % Push 'aeiouy' again
yyy    % Duplicate the second-top element three times onto the top. The stack now
       % contains 'bcdfghjklmnpqrstvwxz', 'aeiouy', 'bcdfghjklmnpqrstvwxz',
       % 'aeiouy', 'bcdfghjklmnpqrstvwxz'
&Z*    % Cartesian product of all arrays present in the stack. Implicity display

나는 이것이 바이트 수를 면도하면서 작동해야한다고 생각합니다. 11Y2'y'h2Y2yX~yyy&Z*( 온라인으로 시도하십시오! )
— Conor O'Brien

@ ConorO'Brien 불행히도, 필요 vcvcv하지 않은 패턴 을 만듭니다 cvcvc. 그래도 고마워!
— Luis Mendo

6

파이썬, 92 바이트

f=lambda i=-4,s='':i*[s]or sum([f(i+1,s+c)for c in i%2*'AEIOUY'or'BCDFGHJKLMNPQRSTVWXZ'],[])

itertools이길 수 없습니다 . Python 2에서는 반복이 1 바이트 더 깁니다.

W='',
for s in(['AEIOUY','BCDFGHJKLMNPQRSTVWXZ']*3)[1:]:W=[w+c for w in W for c in s]
print W

이 ^ _ ^ 굉장
— ABcDexter

6

하스켈, 54 51 바이트

l="bcdfghjklmnpqrstvwxz":"aeiouy":l
mapM(l!!)[0..4]

mapM func list에서 반환 한 목록에서 색인 i에 가능한 문자를 사용하여 모든 단어를 작성합니다 func (list!!i).

편집 : @xnor는 저장하고 자신의 솔루션을 볼 2 바이트를 찾았습니다. 다른 것을 찾았습니다.


mapM id$take 5$cycle["bcdfghjklmnpqrstvwxz","aeiouy"]바이트를 저장합니다.
— xnor

더 나은 아직, mapM(cycle["bcdfghjklmnpqrstvwxz","aeiouy"]!!)[0..4]또는 mapM(["bcdfghjklmnpqrstvwxz","aeiouy"]!!)[0,1,0,1,0]. 모음과 자음을 하드 코딩 mapM(\n->[x|x<-['a'..'z'],elem x"aeiou"==odd n])[0..4]하지 않는 것이 좋지만 확실히 만들지는 않습니다.
— xnor

@ xnor : 감사합니다! 교체 cycle명시 적 재귀와 함께 첫 번째 변종에서하면 추가 바이트를 저장합니다.
— nimi

5

Brachylog , 18 바이트

@W:@Dg:2jcb:eac@w\

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

설명

@W:@D                 The list ["aeiouy", "bcdfghjklmnpqrstvwxz"]
     g:2jcb           The list ["bcdfghjklmnpqrstvwxz", "aeiouy", "bcdfghjklmnpqrstvwxz", "aeiouy", "bcdfghjklmnpqrstvwxz"]
           :ea        Take one character of each string
              c       Concatenate into a single string
               @w     Write to STDOUT followed by a newline
                 \    Backtrack: try other characters of the string

gand 의 필요성에 놀랐지 b만 테스트 j중입니다. 문자열 목록을 입력으로 사용하지 않으려 는 것입니까? :eaProlog / Brachylog의 강점을 실제로 보여주고 있으며, 대부분의 다른 언어는 훨씬 더 어려운 단계입니다.

@ ais523 예, 나는 또한 것을 놀라게했다 g및이 b필요했다. j버그가있는 것으로 보이며 이는 인수 목록을 목록과 구별하기가 어렵 기 때문입니다. 이 문제를 해결하면 다시 구현이 복잡해집니다. 나는 단지 그것을 고치지 않고 새로운 버전의 Brachylog에서 핵심 문제를 해결하는 데 시간을 투자 할 수 있습니다.
— Fatalize

5

자바 스크립트 (ES6), 91 90 바이트

f=(s='',i=4)=>{for(c of i%2?'aeiouy':'bcdfghjklmnpqrstvwxz')i?f(s+c,i-1):console.log(s+c)}

편집

  • ETHproductions : for명령문 에서 삼항 연산자 주변의 불필요한 그룹을 제거하여 -1 바이트

설명

이 기능은 호출 깊이의 패리티를 사용하여 모음 또는 자음을 반복할지 여부를 결정하는 5 심도의 재귀 함수를 정의합니다. 각 반복에서 남은 재귀 양을 확인하여 재귀 또는 인쇄 여부를 확인하고 현재 반복 문자를 현재 깊이 우선으로 구축되는 5 문자열의 끝으로 연결합니다.

ISO8859-1 인코딩을 가정 한 대체 89 바이트 솔루션 :

f=(s='',i=4)=>{for(c of i%2?'aeiouy':btoa`mÇ_äi骻-¿s`)i?f(s+c,i-1):console.log(s+c)}

전체 출력을 단일 문자열로 반환하는 대체 96 바이트 솔루션 :

f=(s='',i=4,o='')=>eval("for(c of i%2?'aeiouy':'bcdfghjklmnpqrstvwxz')o+=i?f(s+c,i-1):s+c+`\n`")

자신의 위험 부담으로 실행하십시오. 91 바이트 솔루션의 경우을 사용 f()하고 97 바이트 대안의 경우을 사용하십시오 console.log(f()).


솔루션을 두 가지 다른 방법으로 발전기 로 바꾸려고했습니다 . Firefox에서만 지원되는 속기 형식을 사용하는 길이는 같습니다. f=(s='',i=2)=>(for(c of(i%2?'aeiouy':'bcdfghjklmnpqrstvwxz'))for(q of i?f(s+c,i-1):[s+c])q)불행히도 표준 형식을 사용하면 바이트가 더 깁니다. function*f(s='',i=2){for(c of(i%2?'aeiouy':'bcdfghjklmnpqrstvwxz'))yield*i?f(s+c,i-1):[s+c]}생성기가 가장 짧은 옵션 일 때까지 기다리는 중 ...
— ETHproductions

1
btw, 당신은 for...of바이트를 저장하기 위해 명령문 에서 내부 parens를 제거 할 수 있습니다
— ETHproductions

5

C, 201 199 186 184 183 169 163 바이트

이전의 기본 계산 방법과 약간 다르게 수행하십시오.

f(){for(char*c="bcdfghjklmnpqrstvwxz",*v="aeiouy",i[5]={0},*s[]={c,v,c,v,c},j=0;j<5;puts("")){for(j=5;j--;putchar(s[j][i[j]]));for(;j++<5&&!s[j][++i[j]];i[j]=0);}}

언 골프 드 :

f() {
    for(char *c="bcdfghjklmnpqrstvwxz", *v="aeiouy", i[5]={0}, *s[]={c,v,c,v,c}, j=0; j<5; puts("")) {
        for (j=5; j--; putchar(s[j][i[j]])) ;
        for (; j++ < 5 && !s[j][++i[j]]; i[j]=0) ;
    }
}

그리고 좀 더 전통적인 방식으로 작성되었습니다.

f() {
    char *c="bcdfghjklmnpqrstvwxz", *v="aeiouy", i[]={0,0,0,0,0}, *s[]={c,v,c,v,c}, j=0;
    while (j>=0) {
        for (j=0; j<5; j++) putchar(s[j][i[j]]); // output the word
        while (--j>=0 && !s[j][++i[j]]) i[j]=0; // increment the counters
        puts("");
    }
}

기본적으로, 난 카운터는이고, s의 우리는 각 카운터, 반복되어야하는 동안 모든 문자를 포함하는 문자열의 배열. 트릭은 내부 while 루프입니다. 가장 오른쪽부터 시작하여 카운터를 증가시키는 데 사용됩니다. 표시해야 할 다음 문자가 종료 널 문자 인 경우 카운터를 0으로 다시 시작하면 "캐리"가 다음 카운터로 전파됩니다.

감사합니다 크리스토프!


PPCG에 오신 것을 환영합니다!
— Martin Ender

1
char *c공간이 불필요하다고 생각합니다.
— Christoph

1
f(){char*c="bcdfghjklmnpqrstvwxz",*v="aeiouy",i[]={0,0,0,0,0},*s[]={c,v,c,v,c},j=0;while(j>=0){for(j=0;j<5;++j)putchar(s[j][i[j]]);for(;--j>=0&&!s[j][++i[j]];)i[j]=0;puts("");}}당신은 177에 당신을 얻는다.
— Christoph

2
i[5]={0}대신에 사용 i[]={0,0,0,0,0}하면 7 바이트 가 절약됩니다.
— Falken

1
@Christoph Aha, 감사합니다. 잘 했어. 그러나 당신은 그것을 즐기는 것처럼 보였습니다. 그것이 제가 도전을 추진하고있는 이유입니다. 깨달음에 진심으로 감사합니다.
— dim

4

펄, 71 바이트

map{push@{1+/[aeiouy]/},$_}a..z;$"=",";say for glob"{@1}{@2}"x2 ."{@1}"

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

설명

나중에 설명을 더 추가하겠습니다.

map{push@{1+/[aeiouy]/},$_}a..z;두 개의 배열을 만듭니다 @1. 자음을 @2포함하고 모음을 포함합니다.
glob같은 인수로 호출 {a,b}{c,d}하면 중괄호 요소의 모든 순열을 반환합니다.


4

펀칭, 95 바이트

::45*%\45*/:6%\6/:45*%\45*/:6%\6/1g,2g,1g,2g,1g,55+,1+:"}0":**-!#@_
bcdfghjklmnpqrstvwxz
aeiouy

온라인으로 사용해보십시오! 출력은 잘립니다.

이것은 0에서 287999 사이의 루프에 불과하며 마지막 두 줄의 테이블에서 검색된 숫자의 "숫자"와 함께 인덱스를 혼합 기반 숫자 20-6-20-6-20으로 출력합니다.


4

펄 6 , 70 바이트

$_=<a e i o u y>;my \c=[grep .none,"a".."z"];.say for [X~] c,$_,c,$_,c

흥미로운 부분에 대한 설명 :

.say for [X~] c, $_, c, $_, c

              c, $_, c, $_, c  # list of five lists
         [X ]                  # lazily generate their Cartesian product
           ~                   # and string-concatenate each result
.say for                       # iterate to print each result

그 앞의 코드는 모음 목록 ( $_)과 자음 목록 ( )을 생성합니다 c. 이는 유감스럽게도 장황합니다.


4

파이썬 2 , 120 117 바이트

탭 팁을위한 @WheatWizard에게 감사합니다.

x,y='aeiouy','bcdfghjklmnpqrstvwxz'
for a in x:
 for e in x:
	for b in y:
		for c in y:
			for d in y:print b+a+c+e+d

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

이것이 골프가 될 수 있는지 확실하지 않습니다. 온라인으로 시도하면 128KB에서 잘리지 만 아이디어를 제공하기에 충분합니다. 단어 수를 세는 디버그 코드를 사용한 로컬 실행은 총 288000을 제공했습니다. 누군가 테스트를 원하면 약 45 초 안에 실행됩니다.

zyzyv
zyzyw
zyzyx
zyzyz
Total word count: 288000

110 바이트에 대해 비준수 및 비경쟁 버전 (지정된 형식 대신 중첩 배열을 인쇄) :

x,y='aeiouy','bcdfghjklmnpqrstvwxz'
print[[[[c+a+d+b+e for e in y]for d in y]for c in y]for b in x]for a in x]

1
내 첫 구현이었다 :)
— Carra

모든 들여 쓰기에 공백을 사용하는 대신 단일 들여 쓰기에 공백을 사용하고 이중에 탭을 사용할 수 있습니다.
— 밀 마법사


4

xeger , 49 바이트

([bcdfghj-np-tvwxz][aeiouy]){2}[bcdfghj-np-tvwxz]

정규 표현식이 주어지면 xeger는 단순히 일치하는 모든 문자열을 생성합니다. 브라우저를 종료하지 않으려면 1000 출력마다 일시 중지되며 계속하려면 클릭해야하지만 결국에는 도착합니다.


버그가 ^수정 된 23 바이트 버전은 다음과 같습니다 .

([:c^y][:v:y]){2}[:c^y]

다음은 문자 클래스 "모두 소문자 ASCII 자음"입니다 [:c]과 y배제 ^y, 그리고 "모두 소문자 ASCII의 모음" [:v:]으로 y덧붙였다.


이것은 어떤 정규식 맛을 기반으로합니까? (또는 직접 롤백 한 경우 어떤 기능을 지원합니까? 이에 관한 문서가 있습니까?)
— Martin Ender

@MartinEnder DFA traversal ( 학생용으로 제작 한 DFA / NFA Visualiser 에서 자랐습니다. 일부 문서가 제한적 임) 에서 가져온 롤백 입니다. 더 긴 문자열의 경우 매우 느립니다. 식 자체의 유일한 흥미로운 특징은와 연결됩니다 &.
— Michael Homer

나머지 문서와 일부 샘플을 문서에 추가했습니다.
— Michael Homer

1
문자 클래스에서 범위를 구현 한 것 같습니다. 그럼 당신은 할 수 있습니다 [bcdfghj-np-tvwxz].
— Martin Ender

4

자바 스크립트 (Firefox 30-57), 82 바이트

f=(i=5)=>i?[for(s of f(i-1))for(c of i%2?'bcdfghjklmnpqrstvwxz':'aeiouy')s+c]:['']

문자열 배열을 반환합니다. 102 101 (@ETHproductions 덕분에 1 바이트) 바이트를 위한 매우 빠른 버전 :

_=>[for(i of c='bcdfghjklmnpqrstvwxz')for(j of v='aeiouy')for(k of c)for(l of v)for(m of c)i+j+k+l+m]

좋은. 빠른 버전에는 101 바이트 동안 제거 할 수있는 외부 공간이 있습니다.
— ETHproductions

3

CJam , 32 31 29 28 바이트

Martin Ender 덕분에 2 바이트, kaine 덕분에 1 바이트 절약

"aeiouy"_'{,97>^\1$1$1$N]:m*

온라인으로 사용해보십시오! (출력은 TIO에서 차단됩니다)

설명

"aeiouy"_ e# Push the six vowels and duplicate
'{,97>    e# Push the whole alphabet
^         e# Symmetric set difference of the alphabet with the vowels, yields the consonants only
\         e# Swap top two elements
1$1$1$    e# Copy the second-from-the-top string to the top three times
          e# This results in the array being consonants-vowels-consonants-vowels-consonants
N         e# Add a newline character to the end of the list
]         e# End an array. Puts everything done so far in an array
          e# since there was no explicit start of the array.
:m*       e# Reduce the array using Cartesian products

'{,97>알파벳을 얻을 수 있습니다. 그리고 "aeiouy"_'{,97>^다른 바이트를 저장합니다 1$.
— Martin Ender

첫 번째 캐릭터가 필요하지 않습니다. 스택이 시작되면 가정됩니다.
— kaine

@kaine 흥미로운, 몰랐어요. 감사.
— 비즈니스 고양이

$ "aeiouy"_ '{, 97> ^] 3 * (;: m * N * $는 $ 부호를 무시합니다. 의견에 코드를 넣는 방법에 대한 Idk
— kaine

@kaine "`"와 같은 백틱을 사용하십시오.
— 코너 O'Brien


3

펄, 63 59 54 바이트

$a="aeiouy";$b="[^$a][$a]"x2;for("a"x5.."z"x5){say if/$b[^$a]/}
$a="aeiouy";$b="[^$a][$a]"x2;/$b[^$a]/&&say for"a"x5.."z"x5

$a=aeiouy;$b="[^$a][$a]"x2;/$b[^$a]/&&say for a.."z"x5

변화를 위해 펄 골프를 시도.
편집 : 나는 아직도 배울 것이 많은 것 같습니다 ... :)


좋은 것 (Primo의 답변이 더 짧은 경우에도). /$b[^$a]/&&say for"a"x5.."z"x5몇 바이트를 절약하기 위해 끝을 쓸 수 있습니다 . 편집 : 당신이를 놓을 수 $b및 수행 $a="aeiouy";/([^$a][$a]){2}[^$a]/&&say for"a"x5.."z"x5.
— Dada

또한 따옴표가 필요하지 않습니다 aeiouy. 또한 정규 표현식에서 5자를 확인하므로 할 수 있습니다 a.."z"x5.
— Dada

@ 다다 : 감사합니다. 일반 프로그래밍에는 Perl을 사용하지만 지금까지는 골프를 사용하지 않는 사람으로서 엄격하지 않은 모드를 이용하지도 않았습니다. 내가 선택한 이유 있다고 $a및 $b변수 이름으로, 사람들은 필요로하지 않기 때문에 ... 심지어 엄격 모드에서 선언 할 수 있습니다 :) 나는 또한 펄 6를 많이 사용도하지 않는 요즘, 이 비 엄격 모드를.
— smls 2012 년

3

스칼라, 87 86 바이트

val a="aeiouy"
val b='a'to'z'diff a
for(c<-b;d<-a;e<-b;f<-a;g<-b)println(""+c+d+e+f+g)

당신은 대체 할 수 f"$c$d$e$f$g"와 ""+c+d+e+f+g바이트를 저장합니다.
— corvus_192

3

R, 143132 바이트

q=letters;v=c(1,5,9,15,21,25);x=list(q[-v],q[v],q[-v],q[v],q[-v]);Reduce(paste0,mapply(function(a,b)rep(a,e=b/20),x,cumprod(sapply(x,length))))

q=letters;v=c(1,5,9,15,21,25);x=list(a<-q[-v],b<-q[v],a,b,a);Reduce(paste0,mapply(function(a,b)rep(a,e=b/20),x,cumprod(lengths(x))))

이것은 코드 골프에 처음 갔으므로 더 많이 줄이려는 제안을 환영합니다. 지금까지는 모두 표준 R입니다. 여기서 가장 까다로운 것은 paste0이 인수를 가장 긴 인수 길이로 재활용한다는 것입니다.

편집 : rturnbull의 할당 트릭을 사용 sapply(x,length)하여 로 대체 되었습니다 lengths.


사이트에 오신 것을 환영합니다! 이것은 꽤 좋아 보입니다 (R에 약간만 프로그래밍했습니다). 당신의 대답에 오래된 코드를 포함시키지 않는 것이 좋습니다. 편집 기록은 항상 사용할 수 있으므로 원하는 사람은 언제든지 볼 수 있습니다. 이것은 개인적인 문체 적 인 것이므로 내 의견을 무시하십시오.
— 밀 마법사

114 바이트에 대한 함수 할당으로 무차별 대입 할 수 있습니다 !
— 처벌

3

R, 111 98 바이트

y@Patrick B 덕분에 모음으로 추가 되고 13 바이트가 줄어 들었습니다.

l=letters
v=c(1,5,9,15,21,25)
apply(expand.grid(C<-l[-v],V<-l[v],C,V,C)[,5:1],1,cat,fill=T,sep="")

우리는 사용 expand.grid가능한 모든 조합을 생성 V하고 C우리가 설정 한 변수에서 정의 매트릭스에서, letters(알파벳). 알파벳 순서를 보장하기 위해 조합을 뒤집습니다 (기본값은 첫 번째 변수가 가장 빠르게 회전하는 것이므로). 그런 다음 행렬의 각 행을 반복하여 각 문자를 표준 출력으로 인쇄합니다. 우리는 사용 fill하는 인수를 cat각 단어가 새 줄에 시작되도록 할 수 있습니다.


좋은! cat에서 일부 옵션을 사용하고 "문자"의 이름을 바꾸어 98자를 98 자 ( 'y'를 모음으로 추가하거나 그렇지 않은 경우 95로 추가)로 줄일 수 있습니다. l = letters; v = c (1,5,9, 적용 (확장 그리드 (C <-l [-v], V <-‌l [v], C, V, C) [, 5 : 1], 1, ‌cat , fill = T, sep = "")
— Patrick B.

@PatrickB. 감사! 나는 당신의 제안을 통합했습니다.
— rturnbull


2

클로저, 101 바이트

(print(apply str(for[V["aeiouy"]C["bcdfghjklmnpqrstvwxz"]a C b V c C d V e C](str a b c d e "\n")))))

흥미롭지 않은 ...


2

루비, 65 61 바이트

완전히 다른 접근법 :

(b=[*?a..?z]-a="aeiouy".chars).product(a,b,a,b){|x|puts x*""}

내가 오늘 배운 새로운 것들 : Array # product 함수


2

C 361 바이트

f(){i,j,k,l,m;v[6]={97,101,105,111,117,121};c[25];s=26;for(i=0;i<26;i++)c[i]=97+i;for(i=0;i<26;i++){for(j=0;j<6;j++)if(c[i]==v[j])c[i]+=1;}for(i=0;i<s;i++)for(j=i+1;j<s;){ if(c[i]==c[j]){for(k=j;k<s-1;++k)c[k]=c[k+1];--s;}else ++j;}for(i=0;i<s;i++)for(j=0;j<6;j++)for(k=0;k<s;k++)for(l=0;l<6;l++)for(m=0;m<s;m++)printf("%c%c%c%c%c\n",c[i],v[j],c[k],v[l],c[m]);}

언 골프 버전 :

void f()
{   
int i,j, k,l,m;
int s=26;
int v[6]={97,101,105,111,117,121};
int c[s];

for(i=0;i<s;i++)
 c[i]=97+i;
for(i=0;i<s;i++)
{     
  for(j=0;j<6;j++)
    if(c[i]==v[j])
      c[i]+=1;
     }
for(i=0;i<s;i++)
 for(j=i+1;j<s;)
 { if(c[i]==c[j])
  {
    for(k=j;k<s-1;++k)
      c[k]=c[k+1];
      --s;  
  }else
   ++j;  
  }
for(i=0;i<s;i++)
  for(j=0;j<6;j++)
       for(k=0;k<s;k++)
        for(l=0;l<6;l++)
         for(m=0;m<s;m++)       
      printf("%c%c%c%c%c\n",c[i],v[j],c[k],v[l],c[m]);
}

이것을 확실히 줄이는 방법이 있어야합니다.

설명

  • a, e, i, o, u, y의 정수 값을 숫자 형 배열에 저장했습니다.
  • 모음 인 경우 모든 알파벳을 배열로 저장하고 자음으로 바 꾸었으므로 배열에 자음 값이 중복되었습니다.
  • 중복 자음 값을 제거했습니다.
  • 모든 조합 cvcvc를 인쇄했습니다.

ungolfed 버전을 넣을 수 있다면 엄청나게 도움이 될 것입니다.
— SIGSTACKFAULT
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.