숟가락 단어


50

두 단어가 주어지면 초기 자음 클러스터를 전환하여 그것들을 채우십시오 . 가장 적은 바이트가 이깁니다.

plaster man -> master plan
blushing crow -> crushing blow
litigating more -> mitigating lore
strong wrangler -> wrong strangler
def ghi -> ghef di
few years -> yew fears

첫 모음 ( aeiou) 전에 나타나는 자음 이 전환됩니다.

입력 : 다른 자음으로 시작하고 각각 모음을 포함하는 두 개의 소문자 문자열 aeiou.

출력 : 올바른 순서로 두 개의 숟가락 모양의 줄.

입력 및 / 또는 출력을 위해, 2 개의 스트링은 또한리스트 등으로 또는 분리기를 갖는 단일 스트링으로 존재할 수있다.


이것은 이 오래된 질문 의 거의 속임수 이지만 , 이전의 내용을 속임수로 닫을 수 있도록보다 명확하고 안정적인 사양을 작성하고 싶습니다 .


4
단어는 자음으로 시작합니다.
xnor

21
답변은 "oozing snotter"imo 여야합니다 ~
Patrick Roberts

3
@PatrickRoberts 나는 동의하지만, 이것은 도전을 조금 더 단순하게 만듭니다.
xnor

1
주제에 관한 것은 아니지만 좋은 예 스노우 플레이크 -> 흐름 뱀
flawr

1
빠른 행운과 은근한 번트는 참여할 수 없습니다
Denham Coote

답변:


50

Vim, 18 번의 키 입력

/[aeiou]<CR>dbwvnhp0P

중요한 트릭은 비주얼 모드에서 무언가를 붙여 넣으면 실제로 시각적 선택의 오래된 내용을 붙여 넣기 버퍼에 넣는 것입니다.


... 아, 그 생각은하지 않았다. v포괄적이면서 모음에서 다시 선택하여 계속 버립니다 .
Doorknob

10
평범한 vim 사용자로서, 나는 각각의 연속적인 명령을 입력함에 따라 계속 놀랐습니다
Aaron

4
<CR은>은 캐리지 리턴을 의미, 또한 입력으로 알려진 (오래된 타자기 용어를!)
카이 카버

22

브레인 퍽, 238 207 바이트

,[[<+<+>>-]++++[<-------->-]-[<<-->>-----]<<+++++[----[----[------[------>>]]]]>[>>]>,]<<++++++++[<[++++<<]<++++<[++++<<]>>[>>]>>[>>]<-]<[<<]-[<+>---]>[>.>]<[<<]<<[<<]>[>>]>[.>>]<.<[<<]>[>.>]>[>>]>[>>]>[.>>]

,EOF, 8 비트 랩핑 셀 및 셀 0에서 왼쪽으로 이동할 수있는 기능에서 0을 반환 해야 합니다. 제 경험상 가장 일반적인 기본 설정입니다.

나는 이것에 매우 만족합니다. 내 첫 번째 시도는 314 바이트 였고 이것은 확실히 개선되었습니다. :)

입력의 모든 바이트를 두 셀에 저장하여 작동합니다. 하나는 바이트의 실제 값을 가지며 다른 하나는 주어진 경우 다음 코드의 출력을 나타냅니다 (바이트 값-97).

[
    ----
    [
        ----
        [
            ------
            [
                ------>>
            ]
        ]
    ]
]

문자가 자음 인 경우 0이 아닌 값에서 나옵니다. 모음이면 0이됩니다. 거기에서 두 번째 단어가 시작되는 곳을 찾아 모든 것을 순서대로 인쇄하면됩니다.

이 프로그램의 238 바이트 버전은 모든 입력을 수집 한 후 공백 문자를 찾았습니다. 루프를 반복하려고하는 곳에 0이 들어있는 셀을 만드는 것이 복잡했기 때문에 두통이었습니다. 내가 해결 한 방식은 첫 단어의 모든 문자에서 30을 빼고 그 뒤의 모든 문자에서 32를 빼는 효과가있었습니다. 코드의 상당 부분이 그 말도 안되는 것을 처리하는 데 전념했습니다.

이제 입력 루프의 모든 문자 에서 32를 빼면 더 짧아지고 다루기 쉬운 유사한 부작용이 있습니다. 보너스 로이 방법을 사용하면 더 짧은 방법으로 내 자신의 공간 문자를 만들 수 있습니다 .171에서 139를 빼는 대신 (171은 위의 모음 감지기를 통해 공간을 실행할 때 얻는 것입니다), 32를 추가하는 루프 모든 캐릭터에게 171 개의 셀에 32를 더하기 위해 길을 벗어납니다. 여기에는 4 바이트의 비용이 들지만, 총 3 바이트를 절약하기 위해 나중에 139를 빼는 대신 171을 뺄 수 있습니다.

의견 :

For every input character
,[

  Make a copy
  [<+<+>>-]

  Subtract 32 from one
  ++++[<-------->-]

  Subtract 97 from the other
  -[<<-->>-----]<<+++++

  If nonzero:
  [

    Subtract 4
    ----

    If nonzero:
    [

      Subtract 4
      ----

      If nonzero:
      [

        Subtract 6
        ------

        If nonzero:
        [

          Subtract 6
          ------>>

        ]

      ]

    ]

  ]

>[>>]>,]

Add 32 to every character and the 171 that the space left behind
<<++++++++[<[++++<<]<++++<[++++<<]>>[>>]>>[>>]<-]

Go to the space
<[<<]

Subtract 171 from (32 plus 171)
-[<+>---]

~~~~~~~~~~~~~~~

Ready to print!

~~~~~~~~~~~~~~~

Print letters from the second word until the value to the left is zero
>[>.>]

Go to the beginning of the first word
<[<<]<<[<<]

Look at cells to the left of letters in the first word until reaching a zero
>[>>]

Print the rest of the letters in the first word
>[.>>]

Print a space
<.

Go to the beginning of the first word
<[<<]

Print letters from the first word until the value to the left is zero
>[>.>]

Go to the beginning of the second word
>[>>]

Look at cells to the left of letters in the second word until reaching a zero
>[>>]

Print the rest of the letters in the second word
>[.>>]

이것은 y모음으로 계산 되지만 질문은 그렇지 않습니다. ( nye cat-> ce nyat)
Loovjo

1
모음을 확인하는 코드가 확실히 y자음으로 취급되기 때문에 @Loovjo는 정말 이상합니다 ... 왜 그렇게하는지 조사하겠습니다.
undergroundmonorail

17

정력, 23

/[aeiou]<cr>"xd0wndb0Pw"xP

vim이 실제로이 도전에서 경쟁력이 있는지 궁금합니다. 아마도 골프 언어는 아니지만 Ruby / Python / Perl / etc와 같은 언어 일 것입니다.

/[aeiou]<cr>  Find the first vowel
"xd0          "Delete" (cut), to register "x, everything from here to BOL
w             Go to next word
n             Find next vowel
db            "Delete back" - delete from here to the beginning of the word
0             Go to BOL
P             Paste what we just "deleted" (cut) behind the cursor
w             Next word
"xP           Paste backwards from register "x

11
삽입 모드에서이 작업을 수행합니까?
Alex A.

5
@AlexA. ಠ_ಠ
문 손잡이

@AlexA. 삽입 모드는 추가적인 키 입력이 될 것입니다
:)

@AlexA. 삽입 모드? 삽입 명령
Blacklight Shining

1
트윗 담아 가기 삽입 모드에 있고 해당 내용을 입력하면 명령이 실행되지 않기 때문에 농담이었습니다. 파일에 방금 입력했을 것입니다.
Alex A.

13

파이썬, 68 63 60 바이트

import re
lambda s:re.sub('([^aeiou]+|.+ )'*3,r'\3\2\1',s,1)

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

작동 원리

패턴 문자열이 3 번 반복 *3되어 패턴이 생성됩니다.

([^aeiou]+|.+ )([^aeiou]+|.+ )([^aeiou]+|.+ )

모든 인스턴스는 비어 있지 않은 모음이 아닌 빈 문자열이나 비어 있지 않은 문자열 다음에 단일 공백 ​​문자와 일치합니다.

첫 번째 인스턴스는 첫 단어가 시작될 때 자음과 일치합니다. +탐욕 스러우 므로 가능한 한 많은 수, 즉 첫 모음까지 일치 시키려고 시도합니다.

이 때문에 두 번째 인스턴스는 모음에서 시작하므로 단어를 구분하는 공간까지 포함하여 첫 번째 단어의 나머지 부분과 일치합니다.

첫 번째 인스턴스와 마찬가지로, 세 번째 단어는 두 번째 단어의 시작 부분에있는 모든 자음과 일치하므로 전체 패턴에 성공적으로 일치합니다.

원시 문자열 \3\2\1( rPython \3등을 제어 문자로 대체하지 못하게 함 )은 괄호로 묶은 패턴의 일치 순서를 반대로합니다. 즉, 두 번째 단어 의 시작 부분에서 자음으로 바꾼 다음 첫 번째 모음의 모든 문자 첫 단어는 우주까지, 마지막 단어는 첫 단어의 시작 부분에 있습니다.

sub( 1)에 대한 마지막 인수 는 첫 번째 교체 성공 후 즉시 반환되어 나머지 두 번째 단어에서 무의미한 교체를 피합니다. 패턴은 세 개 이상의 연속 자음 문자열과 일치 할 수 있기 때문에 필요합니다.


1
매우 효율적인 정규식으로 파이썬에 정규식 마술을 가져다 준 현상금을 축하합니다. 좋은 설명도 있습니다.
xnor

11

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

s=>s.replace(r=/\b[^aeiou ]+/g,(_,i)=>s.match(r)[+!i])

설명

s=>
  s.replace(
    r=/\b[^aeiou ]+/g,     // r = regex to match consonants
    (_,i)=>s.match(r)[+!i] // replace consonants with the consonants from the other word
  )

테스트

var solution = s=>s.replace(r=/\b[^aeiou ]+/g,(_,i)=>s.match(r)[+!i])
<input type="text" id="input" value="plaster man" />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>


오, 내 나쁜, 나는 오해했다. 내가 match집에 돌아갈 때 mdn 문서를 살펴 볼게요
Patrick Roberts

+!i트릭은 좋은 솔루션입니다. +1
ETHproductions

10

파이썬 (3), 108 (101) 99 바이트

(정규식 사용 안함)

이 함수는 2 개의 인수를 통한 입력을 예상합니다 f('blushing','crow'). 새로운 단어를 튜플로 반환합니다.

S=lambda s,p="":s[0]in"aeiou"and(p,s)or S(s[1:],p+s[0])
def f(x,y):a,b=S(x);c,d=S(y);return c+b,a+d

많은 정규식 솔루션이 있으므로 Python의 re 라이브러리를 사용하지 않는 것을 작성하고 싶었습니다.

작동 원리

복잡한 부분은 람다 표현 S(약칭은 " 첫 번째 모음 앞에 S plit "을 의미 함 )입니다. 주어진 단어에 대해 재귀 적으로 "반복"하여 한 번에 한 단어 씩 s(전체 단어로 시작)부터 끝 p(비어 있음)으로 이동합니다. 첫 번째 모음 (p,s)에서 마침표 (접두사, 접미사)를 반환합니다 . 이는 매개 변수와 비교할 때 잘못된 순서입니다.

반환 된 순서가 접두사이고 접미사 인 것이 더 합리적이라고 생각했습니다 (일반적으로 접두사가 접두사 앞에 있기 때문에). 이 순서는 a,b=S(x)코드를 약간 더 읽기 쉽게 만들 수 있습니다 .

그러나 람다의 매개 변수에서 순서를 선택할 수 없었으므로 p전에 정의 할 수 없었습니다 s. 첫 번째 매개 변수는 s, 가지고 있기 때문에 전체 말을하는 p기본값을했고, 기본 매개 변수가 마지막으로 이동합니다. 그렇게하면 S빈 문자열로 함수 를 두 번 호출 할 필요가 없으며 몇 바이트를 저장할 수 있습니다. 그러나 람다 식에서 사용 된 접두사 / 접미사를 반대 순서로 반환하는 것은 잘못된 결정일 수 있습니다.

함수보다 람다 식을 선택하는 것 def S(s,p=""):return보다 말하기에 더 많은 바이트 가 필요 S=lambda s,p="":합니다. 파이썬에는 단락 평가와 삼항 연산자가 있기 때문에 선택을 할 수 있습니다. 그러나 나는 단락을 어떻게 사용했는지 충분히 설명 할 수 없다. 추론하기 어렵다.


이것이 나의 첫 대답입니다. 이 작업을 올바르게 수행하고 이길 수없는 솔루션을 게시하는 것이 가치가 있기를 바랍니다.

편집 : 고마워 주석가 : 바이트 수를 조금, 두 배로 줄이고 불필요한 정보를 제거했습니다. 쓰기 향상을 시도했습니다. 희망적으로 실수하지 않았다.


ppcg에 오신 것을 환영합니다. 첫 번째 답변 :) 참고 로이 사이트의 대부분의 프로그램에는 후행 줄 바꿈이 없으므로 언급 할 필요가 없습니다 (드문 경우에는 사람들이 그것을 언급 할 때)
undergroundmonorail

3
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 1. 입력 형식에 대해 걱정할 필요가 없습니다. 도전 과제는 명시 적으로 목록을 작성할 수 있다고 말합니다. 2. 태그 위키에 언급 된 기본값에 따라 골프 과제를 코딩하기 위해 전체 프로그램 또는 기능을 제출할 수 있습니다. 이 특정 문제의 경우 함수는 7 바이트 더 짧아야합니다.
데니스

4
마지막 문장과 관련하여 "[...] 이길 수없는 솔루션을 게시 할 가치가 있기를 바랍니다." 가장 확실합니다! 우리는 모두 재미 있고 서로 공헌하고 배우기 위해 여기 있습니다. 더 확실한 해결책은 정규식을 사용하는 것이므로이 대답은 특히 영리합니다. 아주 좋은 일입니다!
Alex A.

훌륭한 첫 번째 대답. 비 정규식에 대해 생각해 낸 것과 매우 유사합니다. 단락 논리 표현식을 사용하는 것에 대해 잘 알고 있었으므로 표현식을 단축 할 수 있다는 것이 밝혀졌습니다.하지만 그렇게하는 방법에 대해 스스로 생각하고 싶습니다.
xnor

나는 당신이 재귀 솔루션을 사용했다는 사실을 정말로 좋아합니다. 매우 우아하게 구현되었습니다!
Ogaday

9

C # 6, 115 바이트

string S(string a)=>System.Text.RegularExpressions.Regex.Replace(a,"([^aeiou]*)(.*) ([^aeiou]*)(.*)","$3$2 $1$4");

정규식의 네임 스페이스가 너무 길면 고통 스럽습니다.


2
장황한 내 세상.
Conor O'Brien

4
System.Text.RegularExpressions.Regex.Replace44 자! +1이기 때문에 +1이어야합니다.
Level River St

2
... 지금 44 개의 문제가 있습니다. ;)
Mason Wheeler

9

CJam, 27 24 22 바이트

2{l_{"aeiou"&}#/(N\}*o

I / O는 한 줄에 한 단어입니다. 온라인으로 사용해보십시오!

작동 원리

2{                 }*   Do the following twice:
  l                       Read a line from STDIN.
   _                      Push a copy.
    {"aeiou"&}#           Find the index of the first character that has a non-
                          empty intersection with the string "aeiou".
               /          Split the string into chunks of that size.
                (         Shift out the first chunk, i.e., all leading consonants.
                 N\       Swap the shifted out chunk with a linefeed.
                     o  Print the topmost stack item.



8

자바 스크립트 ES6, 93 58 52 바이트

ETHProductions 덕분에 6 바이트 절약!

x=>x.replace(/([^aeiou]+)(.+ )([^aeiou]+)/,"$3$2$1")

그것을 테스트하십시오! (ES6 만 해당)


당신이 하하이 편집을했을 때 나는 나의 58 바이트 솔루션 포스트 대답을 클릭 막습니다
user81655

@ user81655 오, 그런 일이있어서 미안합니다.
Conor O'Brien

네 번째 캡처 그룹이나 전혀 필요하지 않습니다 $4;)
ETHproductions

@ETHproductions 아, 그래! 감사!
코너 오브라이언

7

C, 255 (201) 199 바이트

나는 여기에 많은 C 답변을 보지 못하므로 즐기십시오. 또한 처음으로 골프, 제안 및 비평을 환영합니다.

#define S(w,p)p=strpbrk(w,"aeiou")-w
#define c ;strcpy(r
#define l c+strlen(v[1])+b+1
main(int q,char**v){char r[64],S(v[1],a),S(v[2],b)c,v[2])c+b,v[1]+a);strcat(r," ")l-a,v[1])l,v[2]+b);puts(r);}

main ()이 필요하지 않은 경우 24 바이트를 절약하여 179 바이트를 얻을 수 있습니다.

#define S(w,p)p=strpbrk(w,"aeiou")-w
#define c ;strcpy(r
#define l c+strlen(x)+b+1
s(char*x,char*y){char r[64],S(x,a),S(y,b)c,y)c+b, x+a);strcat(r," ")l-a,x)l,y+b);puts(r);}

언 골프 드 :

void spoonerise(char* w1, char* w2)
{
    char rt[64];

    int p1 = strpbrk(w1, "aeiou")-w1;
    int p2 = strpbrk(w2, "aeiou")-w2;

    strcpy(rt, w2);
    strcpy(rt+p2, w1+p1);

    strcat(rt, " ");

    strcpy(rt+strlen(w1)+p2+1-p1, w1);
    strcpy(rt+strlen(w1)+p2+1, w2+p2);

    puts(rt);
}

편집 : feersum의 제안 덕분에 54 바이트를 절약했습니다. = D


조사해 보는 것이 좋습니다 strpbrk.
feersum

+1 이것은 훌륭한 첫 번째 대답입니다. 사이트에 오신 것을 환영합니다.
wizzwizz4

추천 @feersum 주셔서 감사합니다. 그리고 @ wizzwizz4를 환영합니다!
Lince Assassino

6

파이썬 2 364 352 269 251 바이트

편집 : 83 바이트 골프를 도와 주셔서 @Cyoce에게 대단히 감사합니다!

이 골프를 도와주세요! 어쨌든, 나는 적어도 첫 번째 파이썬 응답자입니다. Java 답변이 있으면 Java를 이길 수 있기를 바랍니다.

i=input()
f=l=''
A='aeiou'
for j in A:
 I=i[0];J=I.find(j)
 if ~J:
  if f:
   if f>I[0][:J]:f=I[:J];break
  else:f=I[:J]
for j in A:
 Y=i[1];J=Y.find(j)
 if ~J:
  if l:
   if l>Y[:J]:l=Y[:J];break
  else:l=Y[:J]
print I.replace(f,l,1),Y.replace(l,f,1)

여기 사용해보십시오


5
-1 골프 시도 단일 문자 변수 이상이 제작하지 않는
Mego

@ Mego 나는 그 일을 최대한 빨리 할 것을 약속드립니다. 지금. 그러나 정규식 버전으로 작업하고 있습니다.
TanMath

@Mego 편집을 참조하십시오.
TanMath

5

apt, 26 25 바이트

다행히도 며칠 전에 Japt의 정규 표현식 기능에 모음 클래스를 추가했습니다. 불행히도, 나는 모음이 아닌 클래스 또는 정규식 문자열의 이중 백 슬래시 주위에 방법을 추가하지 않았습니다.

#¿s4 £Uf"[^\\v]+|.+
?" gX

¿원시 문자의 U + 0093이어야한다. 입력은 한 줄로 된 여러 줄 문자열입니다. 온라인으로 사용해보십시오!

편집 : 이제 모음이 아닌 클래스 \V\\( %) 주위에 방법을 추가 했으므로이 코드는 이제 21 바이트에서 작동 합니다 . ( 온라인 시도 )

#¿s4 £Uf"%V+|.+
?" gX

작동 원리

                     // Implicit: U = input string
#¿s4                 // Convert the char code (147) into a base-4 string "2103".
     £               // Map each char X in this string to:
      Uf"[^\\v]+|.+  //  Match each group in U of non-vowels or non-newlines,
?"                   //  with an optional trailing newline.
   gX                //  Get the item at position X in the resulting array.
                     // Implicit: output last expression

이전 버전 (26 바이트) :

UrA="\\b[^\\v ]+"@UfA gÂ!Y

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

작동 원리

UrA="\\b[^\\v ]+"@UfA gÂ!Y  // Implicit: U = input string
  A="\\b[^\\v ]+"           // Set variable A to this regex string, which matches
                            // a word boundary followed by one or more non-vowels.
UrA              @          // Take U and replace each match X of A and its index Y with:
                  UfA       //  Take U.match(A).
                      gÂ!Y  //  Get the item at index ~~!Y (converts 0 to 1, anything else to 0).
                            // Implicit: output last expression

주류 언어에 정규 표현식에 대한 모음 메타가 있었으면 좋겠다!
CJ Dennis

4

파이썬 3, 100 (또는 99) 바이트

import re
def f(*g):a,b=[re.split("[aeiou]",r)[0] for r in g];return b+g[0][len(a):],a+g[1][len(b):]

몇 가지 버전으로 플레이했지만 아래에서 얻을 수없는 것 같습니다. def f(g)대신 사용하여 99 바이트를 줄일 수 있으므로 두 개의 별도 문자열 대신 문자열 목록이 필요하지만 두 개의 arg roue를 선호합니다.

대안은 길이가 같습니다.

import re
s=re.split
def f(x,y):v="[aeiou]";a,b=s(v,x)[0],s(v,y)[0];return b+x[len(a):],a+y[len(b):]

@TanMath가 사용하는 것처럼 교체를 시도했지만 더 짧게 얻을 수 없었습니다. 또한 TanMath는 단일 인스턴스 만 일치하면되기 때문에 "[aeiou]"대신 사용하여 바이트 단위로 답을 더 짧게 얻을 수 있습니다 "[aeiou]+". 마지막으로, 구현은 input()py2와 py3 사이에서 변경된 것으로 보입니다-stdin을 문자열로 자동 평가합니다.


1
아마도 당신은 s=re.split대안 을 의미 합니까?
xnor

예! 명확히. 이것은 내가 처음으로 골프를 쳤으므로 모든 의견과 조언을 부탁드립니다.
Ogaday

1
1. 질문은 명시 적으로 두 문자열을 목록으로 사용할 수 있으므로 *in에 대한 적절한 이유가없는 것 같습니다 *g. 2. 두 번째 버전은로 골프를 칠 수 있습니다 lambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):]).
Dennis

@Dennis에게 감사합니다. 실제로 리팩토링이 작동합니다. 대괄호가 필요하다는 점에 흥미가 있으며 두 번째 람다에 as를 arg로 전달할 필요가 없습니까? 이 솔루션은 주요 import 문과 함께 98 바이트를 제공합니다 f=.
Ogaday

1
아니요, s기본 인수이므로 따로 지정할 필요가 없습니다. 명명되지 않은 람다는 허용되는 제출입니다. f=필요하지 않습니다.
Dennis

4

sed, 38 자

s/([^aeiou]+)(.+ )([^aeiou]+)/\3\2\1/

Retina 솔루션 의 확장 정규식 사용 .

위의 길이는 37 자이며 -r스위치 (+1 자) 가 필요합니다 .

예:

$ cat input | tee /dev/tty | sed -r 's/([^aeiou]+)(.+ )([^aeiou]+)/\3\2\1/'
plaster man
blushing crow
litigating more
strong wrangler
def ghi
master plan
crushing blow
mitigating lore
wrong strangler
ghef di

프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다!
Dennis

3

C # 6, 165 바이트

string S(string a,string b){int i=V(a),j=V(b);return b.Remove(j)+a.Substring(i)+" "+a.Remove(i)+b.Substring(j);}int V(string s)=>s.IndexOfAny("aeiou".ToCharArray());

넓히는:

string S(string a,string b){
    int i=V(a),
        j=V(b);
    return b.Remove(j)+a.Substring(i)+" "+a.Remove(i)+b.Substring(j);
}
int V(string s)=>s.IndexOfAny("aeiou".ToCharArray());

이것은 꽤 오래되었지만 -2 바이트 일 "aeiou".ToCharArray()수 있습니다'a','e','i','o','u'
무지의 구현

아니요, @EmbodimentofIgnorance, IndexOfAny매개 변수를 사용하지 않으므로 다음이 필요합니다.new[]{'a','e','i','o','u'}
Hand-E-Food

아, 내 실수, 나는 IndexOfAnyparams 방법 이라고 생각했다 . 어쨌든, 큰 대답
무지의 구현

3

𝔼𝕊𝕄𝕚𝕟, 24 자 / 42 바이트

ïē/⟮(⁅ᶌ]+)⟯(.+ )Ⅰ/,`⑶⑵⑴`

Try it here (Firefox only).

이를 이해하는 데 도움이 필요하면 다음과 같이 ES6으로 변환됩니다.

input.replace(/([^aeiou]+)(.+ )([^aeiou]+)/g,'$3$2$1')

이 언어는 무엇입니까? 나는 심지어 상자 문자를 얻고 있습니다.
Jesse Williams

@JesseWilliams ESMin이라고 합니다 .
ETHproductions

interperator가 Japt와 같은 것을 가지고 있다면 좋을 것입니다
Generic User

코드가 실행될 때 컴파일 된 JS가 JS 콘솔에 기록됩니다.
Mama Fun Roll

3

PowerShell, 52 바이트

"$args "-replace('(.*?)([aeiou]\S+) '*2),'$3$2 $1$4'

e.g. 
PS C:\scripts\> .\Spoonerise.ps1 'blushing crow'
crushing blow

4 개의 캡처 그룹으로 대체 된 정규식입니다. 와:

  • 확장 할 문자열 곱셈 :
    • ('(.*?)([aeiou]\S+) '*2)'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
  • "$args "정규식에 후행 공백이 그것을 파괴하지 않도록 강제로 인수의 문자열로 배열하고, 후행 공간을 추가합니다.

3

자바 스크립트 (ES6) 120 107 102 101 99 92 바이트

  • 다운 다운 감사합니다!

매개 변수가 이와 같은 객체인지 여부를 고려합니다.
var a = {x: "man", y:"plaster"]}

a.b=(e=>e.slice(e.search`[aeiou]`));with(a){c=b(x),d=b(y),x=x.replace(c,d);y=y.replace(d,c)}

.match(/[aeiou]/).index.search`[aeiou]`
Downgoat

3

파이썬 129 108 105 109 바이트

이 프로그램은 다음과 같은 단어 목록을받습니다. ["master","plan"]

편집 : 감사 @Volatility

편집 : 이제 re.split 사용

import re
a=re.split
c='[aeiou]+'
i,j=input()
f=a(c,i)[0]
l=a(c,j)[0]
print i.replace(f,l,1),j.replace(l,f,1)

이 답변은 대부분의 정규 표현식을 사용합니다.

여기 사용해보십시오


부분 문자열의 모든 인스턴스 를 str.replace대체 하므로을 사용하여 하나의 대체 문자열로 제한하려고합니다 . 그러나을 사용 하고 리 바인드 및 단일 문자 변수를 사용하여 묶음을 저장할 수 있습니다 . .replace(f,l,1)i,j=input()re.findall'[^aeiou]+'
변동성

이것은 그대로 작동하지 않습니다. 한 글자로 된 두 단어조차도 세 개의 문자를 제공하며 input()두 개의 변수 로 압축을 풀려고 합니다. i,j=input().split()(그리고 raw_input()파이썬 2에서) 의미 했습니까 ?
Blacklight Shining

1
@BlacklightShining 단어는 적어도 하나의 모음과 하나의 자음이 있어야합니다. 입력은 문자열 목록을 취하므로 i는 첫 번째 단어이고 j는 두 번째입니다.
TanMath 2016 년

@TanMath까지 내가 그이 알고 있다 기본적으로 허용,하지만 당신은 아마이 필요하다는 곳이 질문에 대해 말해야한다
undergroundmonorail

이것은 너무 많이 대체됩니다. "sass","bit" -> "babb", "sit".
xnor

3

자바 8, 343 바이트

여기에 첫 번째 Java-Answer가 있습니다. 골프를 경험 한 사람은 아니므로 모든 제안에 감사드립니다!

java.util.function.Function;public class C{public static void main(String[] a){Function<String, Integer>f=s->{for(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;return 0;};int i1=f.apply(a[0]),i2=f.apply(a[1]);System.out.println(a[1].substring(0,i2)+a[0].substring(i1)+" "+a[0].substring(0,i1)+a[1].substring(i2));}}

언 골프 드 :

public class SpooneriseWords {
    public static void main(String[] args)
    {       
        Function<String, Integer> f = s -> {
            for(int i = 0; i < s.length(); ++i)
                if("aeiou".contains(s.substring(i, i + 1))) 
                    return i;
            return 0;
        };

        int i1 = f.apply(args[0]);
        int i2 = f.apply(args[1]);
        System.out.println(args[1].substring(0, i2) + args[0].substring(i1));
        System.out.println(args[0].substring(0, i1) + args[1].substring(i2));
    }
}

무엇입니까 java.util.function.Function? 의미하지 않는 한 거기에 있어야한다고 의심 import하지만 가져 오기를 한 번만 참조하기 때문에 삭제하십시오. 다음으로 변경 public class C{public static void Main(String[] a):interface C{void Main(String[]a)
cat

Function<String, Integer>공백이 필요하지 않습니다
cat

for 루프를 다음 for(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;으로 변경 :for(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
cat

i1끔찍하고 너무 긴 varname입니다.
고양이

즉, 변화 Function<String, Integer>java.util.function.Function<String,Integer>및 가져 오기 드롭
고양이

3

옥타브, 96 바이트

옥타브의 인라인 할당과 '인덱스 애니웨어'기능 덕분에이 모든 것은 단일 익명 함수의 정의 일뿐입니다. 의 컷 - 오프 포인트를 저장하는 동안 기본적으로, 우리는 spoonerized 문자열을 재구성 a하고 b. f컷오프 지점을 찾아서 ' find(ismember(a,b),1)' 전체를 두 번 사용하지 못하게 하는 인라인 함수에 특히 만족합니다 . 또한 정규 표현식이 없습니다 :) .

@(p,q)[q(1:(a=(f=@(m)find(ismember(m,'aeoui'),1))(q))-1),p(b=f(q):end),32,p(1:b-1),q(a:end)];

2

티 스크립트 , 27 바이트

xg/(\w+)(.+ )(\w+)/,"$3$2$1

\w실제로 [^aeiou]입니다.


잠깐, 기본 \w정규식 메타를 [^aeiou]?로 변경 했습니다 . 왜?
ETHproductions

사용자 정의 char 클래스를 만들 때 @ETHproductions. \w이미 JavaScript에서 사용 된 것을 잊었습니다 . 곧 다시 변경하겠습니다
Downgoat

2

엘릭서 ,143 117 바이트

s=fn w->String.split_at(w,elem(hd(Regex.run(~r/[aeiou]/,w,return: :index)),0))end
{v,w}=s.(a)
{x,y}=s.(b)
[x<>w,v<>y]

첫 번째 모음에서 두 줄 (a, b)을 분할하고 반환 할 새 줄을 구성합니다.

편집 : elem튜플에서 값을 가져 오기 위해 교묘 한 호출 대신 패턴 일치를 사용하여 몇 바이트를 벗어 났습니다.


2

자바, 147 바이트

나는 단지 기능도 좋다고 가정합니다.

String s(String[]i){String r="[aeiou]",f=i[0].split(r)[0],s=i[1].split(r)[0];return s+i[0].substring(f.length())+" "+f+i[1].substring(s.length());}

split(regex)불행히도 구분 기호를 사용 substring하므로 접미사를 가져와야합니다.


2

Pyth, 30 28 바이트

입력을 받아 두 단어의 목록으로 출력합니다.

ACm,Kh:d"[aeiou]"3.-dKQ+V_GH

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


찾고 계신 것 같습니다 ACm,Kh:d"[aeiou]"3.-dKQ+V_GH. A두 요소 목록을 G와 H에 할당하고 C바꿉니다. 더 좋은 것이있을 수 있습니다.
lirtosiast

2

파이썬 (정규식 없음), 85 바이트

t=lambda s:s[1]in'aeiou'or-~t(s[1:])
lambda a,b:(b[:t(b)]+a[t(a):],a[:t(a)]+b[t(b):])

샘플 실행 :

>>> t=lambda s:s[1]in'aeiou'or-~t(s[1:])
>>> lambda a,b:(b[:t(b)]+a[t(a):],a[:t(a)]+b[t(b):])
<function <lambda> at 0x7f495e534398>
>>> _('plaster', 'man')
('master', 'plan')

t인수의 첫 번째 문자 다음에 가장 빠른 모음의 색인을 계산하는 재귀 함수입니다 s. 두 번째 문자가있는 경우 s[1]모음이고, 이는 평가 True갖고, int1. 그렇지 않으면 첫 번째 문자를 제거한 상태에서 재귀 호출을 수행하고 결과 색인에 1을 추가합니다 -~(2의 보수 보수). 마지막으로, 결과 t는 숟가락을 계산하기 위해 문자열 슬라이싱에 대한 인덱스로 사용됩니다.


1

GNU Awk 4.0, 48 자

split($0,a,/\<[^aeiou]+/,s)&&$0=s[2]a[2]s[1]a[3]

샘플 실행 :

bash-4.3$ for s in 'plaster man' 'blushing crow' 'litigating more' 'strong wrangler' 'def ghi'; do
>     echo -n "$s -> "
>     awk 'split($0,a,/\<[^aeiou]+/,s)&&$0=s[2]a[2]s[1]a[3]' <<< "$s"
> done
plaster man -> master plan
blushing crow -> crushing blow
litigating more -> mitigating lore
strong wrangler -> wrong strangler
def ghi -> ghef di

1

PowerShell, 61 바이트

"$args"-replace'([^aeiou]+)(.*)\s([^aeiou]+)(.*)','$3$2 $1$4'

정규식을 사용하여 각 단어의 첫 글자가 아닌 문자를 바꿉니다.

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