자음 반전


42

프로그램은 문자열을 입력으로 취하고 모음의 순서를 유지하면서 자음을 반전시킵니다. 모든 문자는 소문자이므로 케이스에 대해 걱정할 필요가 없습니다. 예는 다음과 같습니다.

  1. 입력 : a test case.
    자음은 여기에 있습니다 t,s,t,c,s. 그것들은 역순으로 나와야합니다. 즉 s,c,t,s,t, 사전 역전 된 문자가있는 동일한 위치로 문자열에 다시 삽입됩니다 : a sect sate.

  2. 입력 : well-done. 출력 : nedl-lowe.

  3. 입력 : reverse the consonants. 출력 : setenne sne cohtosarvr.

이것이 가장 짧은 솔루션이이기는 코드 골프입니다.

Y 그것이 무엇인지에 관계없이 모음으로 간주되어야하며 반전되지 않아야합니다.

숫자, 문장 부호, 따옴표 및 기타 기호 ( @#$%^&*(){}[]\|/<>~-_+=`) 뿐만 아니라 다른 것도 입력에 나타날 수 있습니다.

답변:


16

망막, 22 21 20 17

O#^`[b-z-[eiouy]]

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

Leaky Nun 덕분에 1 바이트!

Martin 덕분에 4 바이트!

O정렬을 #의미하고 숫자 값으로 정렬하는 것을 의미합니다. 일치하는 문자는 숫자 값을 갖지 않으므로 모든 문자의 가중치는 동일합니다. 0. ^정렬 된 값의 순서를 반대로하는 것을 의미합니다. 안정적인 정렬 덕분에 값이 반대로됩니다.

-[...]수단은 외측 문자 클래스이 클래스 내부 setwise 간의 차이를 수행한다. 이것은 .NET의 일부이며 MSDN 에서 자세한 내용을 읽을 수 있습니다 .


아주 좋아요 가 -[...]망막에 특정하거나 특정 .NET 정규 표현식에 또는 내가 지금까지 간과 한 것이 일반적인 정규식 기능입니다?
디지털 외상

@DigitalTrauma이 구문을 사용하면 .NET에만 해당한다고 생각합니다. 다른 맛은 문자 클래스 교차점도 있지만 구문은 일반적으로 생각합니다 [...&&[^...]].
Martin Ender 2016 년

@ MartinEnder sed와 grep으로 시도해야합니다. sed와는 달리 PCRE 모드 grep 일 수 있습니다.
디지털 외상

1
Perl 6은 차이를 사용 <[b..z] - [eiouy]>하거나 <:Ll - [aeiouy]>설정합니다
Brad Gilbert b2gills

15

파이썬 2, 86 바이트

s='';c=()
for x in input():b='{'>x not in'aeiouy'<x;s+=b*'%s'or x;c=(x,)*b+c
print s%c

따옴표로 묶은 문자열로 입력을받습니다. 입력을 반복하여 각 자음을 %sin로 바꿉니다 s. 튜플 c은 자음이 역순으로 저장됩니다. 그런 다음 문자열을 대체 서식 %s의의를 s의 자음과를 c.

자음 검사에 대한 Sp3000 덕분에 자음 나열에 4 바이트가 절약되었습니다.


1
이것은 아름다운 코드 골프입니다 :)
Lynn

정말 우아하고 놀랍게도 이것은 파이썬입니다
DevilApple227

9

젤리 , 22 20 바이트

Øaḟ“<1Ṛż»
e€¢œpżf¢Ṛ$

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

작동 원리

Øaḟ“<1Ṛż»   Helper link. No arguments.

Øa          Yield the lowercase alphabet/
   “<1Ṛż»   Decompress that string, yielding "oui aye".
  ḟ         Filter; remove the characters from the right string from the left one.


e€¢œpżf¢Ṛ$  Main link. Argument: s (string)

  ¢         Call the helper link, yielding the string of all consonants.
e€          Test each character of s for membership.
   œp       Partition s at members/consonants.
         $  Combine the three links to the left into a monadic chain.
      f¢    Filter by presence in the consonant string.
        Ṛ   Reverse the result.
     ż      Zipwith; interleave chunks of non-consonants and reversed consonants.

6

자바 스크립트 ES6, 82 81 80 78 바이트

Martin과 Leaky Nun 덕분에 바이트를 절약하고 Neil에 2 바이트를 절약했습니다!

a=>a.replace(r=/(?[_aeiouy])\w/g,e=>[...a].reverse().join``.match(r)[i++],i=0)

테스팅

f=
a=>a.replace(r=/(?![aeiouy])[a-z]/g,e=>[...a].reverse().join``.match(r)[i++],i=0)
;
q.onchange=q.onkeydown=q.onkeyup=function(){
  o.innerHTML = "";
  o.appendChild(document.createTextNode(f(q.value)));
}
*{font-family:Consolas,monospace;}
<input autocomplete="off" id=q>
<div id=o></div>


1
그것은 함수 인수의 나쁜 남용입니다.
Leaky Nun

/(?![aeiouy])[a-z]/g
Leaky Nun

시겠습니까 /(?[_aeiouy])\w/g일?
Neil

@Neil 아니요, 일치 _합니다. OP가 제자리에 유지하려고하는 기호입니다.
Conor O'Brien

1
데모에서는 다음과 같이 변경할 q.onchange=q.onkeydown=q.onkeyup=수 있습니다 q.oninput=.
Patrick Roberts

5

파이썬 2, 106 바이트

s=input()
b=[x for x in s if x in'bcdfghjklmnpqrstvwxz']*2
print''.join(x in b and b.pop()or x for x in s)

에 입력 "quotes"이 필요합니다.


4

파이크, 18 바이트

FD~c{IK_#~c{)oR@(s

여기 사용해보십시오!

또는 새 버전의 경우 16 바이트 :

(for가 모든 문자열 출력을 반환하고 문자열 입력이 있으면 목록 대신 문자열을 반환하는 경우 변경)

FD~c{IK_#~c{)oR@

여기 사용해보십시오!

~c 자음이 들어 있습니다 : bcdfghjklmnpqrstvwxz

F                - For i in input:
  ~c{I           -  if i in "bcdfghjklmnpqrstvwxz":
       _#~c{)    -    filter(reversed(input), <-- in "bcdfghjklmnpqrstvwxz")
             oR@ -   ^[o++]

4

GNU sed, 73

점수는 -rsed에 전달 된 플래그에 대해 +1을 포함 합니다.

:
s/([b-df-hj-np-tv-xz])(.*)([b-df-hj-np-tv-xz])/\u\3\2\u\1/
t
s/./\l&/g

이데온

첫 번째와 마지막 소문자 자음을 반복해서 바꾸고 더 이상 일치하지 않을 때까지 대문자로 변환합니다. 그런 다음 전체 문자열을 다시 소문자로 변환하십시오.


4

J, 53 바이트

C.~[:~.<@~.@/:~"1@(,.|.)@I.@e.&'bcdfghjklmnpqrstvwxz'

어쩌면 가장 좋은 방법은 아니지만 C.순열을 사용하여 해결할 수 있기 때문에 사용하고 싶었습니다 .

용법

   f =: C.~[:~.<@~.@/:~"1@(,.|.)@I.@e.&'bcdfghjklmnpqrstvwxz'
   f 'a test case'
a sect sate
   f 'well-done'
nedl-lowe
   f 'reverse the consonants'
setenne sne cohtosarvr

설명

C.~[:~.<@~.@/:~"1@(,.|.)@I.@e.&'...'  Input: s
                               '...'  The list of consonants
                            e.&'...'  Generate a boolean mask where an index is true
                                      if the char at that index in s is a consonant
                         I.@          Get a list of the true indices
                  (  |.)@             Reverse that list
                  (,.  )@             Join the original and reversed list as columns
            /:~"1@                    Sort each row of that 2d list
         ~.@                          Take the distinct values in each row
       <@                             Box them
   [:~.                               Take the distinct boxes - Now represents the
                                      permutation needed to solve this in cycle notation
C.~                                   Permute s according the cycles and return

4

MATL, 18 22 21 바이트

tt2Y211Y2'y'hX-m)P5M(

@Luis 덕분에 1 바이트 절약

불행히도 이것의 가장 긴 부분은 자음 ( 2Y211Y2'y'hX-) 목록을 얻는 것 입니다.

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

설명

            % Implicitly grab the input
tt          % Duplicate twice
2Y2         % Grab the pre-defined list of all lower-case letters
llY2        % Grab the pre-defined list of lower-case vowels (excluding 'y')
'y'h        % Add 'y' to the list of vowels
X-          % Find the set difference between these two lists (the consonants)
m           % Create a boolean array the size of the input that is true for all consonants
)           % Use this as an index to grab all consonants
P           % Reverse the order of the consonants
5M          % Get the boolean array again
(           % Re-assign the flipped consonants with the original consonant locations
            % Implicitly dislpay the result

1 바이트 이하 :tt2Y211Y2'y'hX-m)P5M(
Luis Mendo

@LuisMendo 훌륭한 아이디어, 감사합니다!
Suever

4

Perl 5 (58 + 4 = 62 바이트)

$_=<>;$r=qr/(?![eiouy])[b-z]/;@a=/$r/g;s/$r/pop@a/ge;print

-0777플래그 로 실행하면 페널티가 +4로 , 펄을 줄 바꿈 모드로 설정하여 줄 바꿈을 올바르게 처리합니다.

STDIN을 통한 입력을 승인하고 STDOUT에 인쇄합니다.

설명

                   $_=<>;   Read the input
 $r=qr/(?![eiouy])[b-z]/;   Save the regex; we'll be using it twice
                @a=/$r/g;   Store all the consonants in an array
           s/$r/pop@a/ge;   Replace each consonant with the final value in the array and pop
                   print    Output the result

4

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

s=>s.split(/([^\W\d_aeiouy])/).map((c,i,a)=>i&1?a[a.length+~i]:c).join``

분할 /([^\W\d_aeiouy])/하면 자음이 배열의 홀수 번호 항목으로 떨어집니다. 그런 다음 해당 항목을 배열 끝부터 다시 계산하여 해당 항목을 전환하고 결과를 함께 결합하면 충분합니다.


좋은 작업! 나는 분할에 대해 생각하지 않았다.
Conor O'Brien

5
CIA가 귀하의 코드에 침투 한 것으로 보입니다.
Patrick Roberts

저도 같은 정규 표현식을 시도하지만 너무 숫자 역
edc65을

4

자바 스크립트 (ES6), 57 70

@Neil에서 놀라운 20 % 절약 편집

파티에 늦었지만 모든 자바 사람들이 뭔가를 놓친 것 같습니다.

a=>a.replace(r=/[^\W\d_aeiouy]/g,_=>c.pop(),c=a.match(r))

테스트

f=a=>a.replace(r=/[^\W\d_aeiouy]/g,_=>c.pop(),c=a.match(r))

function test() {
  var i=I.value
  O.textContent=f(i)
}

test()
#I { width:90% }
<input id=I oninput="test()" value="reverse the consonants."><pre id=O></pre>


@nicael 그것은 단순히 제자리에 있지 않습니다 (nitpick!) (그러나 주목 해 주셔서 감사합니다)
edc65

내 솔루션의 오류로 인해 이미 나쁘지 않은 것처럼 이미 나를 때리고있는 것처럼,를 사용하여 13 바이트를 절약 할 수있는 것 같습니다 c.pop().
Neil

@Neil 와우 감사합니다
그것은

4

Perl 5, 92 68 55 바이트

저장 (37)는 덕분에 바이트 @manatwork 의 도움을. ;-)

$_=<>;@b=@a=/[^\Waeiou]/g;print$_~~@b?pop@a:$_ for/./g

@Lynn Python 솔루션을 Perl로 번역


안녕하세요, PPCG에 오신 것을 환영합니다!
NoOneIsHere6

1
@NoOneIsHere 죄송합니다. PPCG 란 무엇입니까?
양자리

P rogramming P uzzles & C ODE G OLF.
NoOneIsHere6

1
어떤“ g”힘이 도움이 될 것입니다 : @s=split//;@s=/./g;for(@s){push@a,$_ if(/[^\Waeiou]/);}@a=/[^\Waeiou]/g;. 내 말은, m//g수정 반환 모든 일치의 배열을.
manatwork 2016 년

1
과제에 참여하면 두 번째 버전을 줄일 수 있습니다 @b=@a=…. 또한 for블록에 단일 명령문이 ;있으면 (이 경우 뒤에 필요하지 않음) 명령문 수정 자로 변환하고 구분 기호를 절약 할 수 print$_~~@b?pop@a:$_ for/./g있습니다. (예, 죄송합니다, 그리워했습니다 : @s변수에 값 을 저장할 필요가 없습니다 .)
manatwork

3

Pyth, 26 25 24 23 바이트

si : Q ++ \ [JG "aeiouy"\] 3_ @ J
JG "aeiouy"sm? @dJ @ _ @ JQ ~ hZ <--_ @ 때문에 이것을 유지하면
JG "aeiouy"sm? @ dJ @@ JQ = tZ
sm? @ dJ-G "aeiouy"@@ JQ = tZ
sm | -dJ-G "aeiouy"@@ JQ = tZ

테스트 스위트.


3

줄리아, 53 바이트

!s=s[flipud(i)]=s[i=find(c->'}'>c"aeiouy"<"$c",s)]

이것은 문자 배열 을 입력으로 취하고 그 자리에서 자음을 뒤집습니다. 온라인으로 사용해보십시오!

소문자 자음 검사에 대한 크레딧은 @ Sp3000으로 이동합니다.

작동 원리

i=find(...,s)술어 ...true를 리턴 하고 변수 i에 저장하는 모든 인덱스를 생성합니다 .

c->'}'>c∉"aeiouy"<"$c"세 가지 테스트를 수행하고 모두 긍정적 인 경우에만 true를 반환 합니다 .

  • '}'>c문자 c{ 앞에 오는지 확인합니다 .

  • "aeiou"문자열 ca 뒤에 오는지 확인합니다 .

  • c∉"aeiouy"c 가 모음이 아닌지 확인합니다 .

마지막으로 s[i]모든 자음을 산출하고 i 의 반전 된 인덱스에 해당하는 s의s[flipud(i)]=s[i] 위치에 할당합니다 .


어떤 인코딩 ( )을 사용 합니까?
Adám

1
불행히도 UTF-8.
Dennis

3

자바, 319 305 261 188 바이트

이 도움을 주신 @ Leaky Nun 에게 감사드립니다.

char[]r(char[]s){int i=0,j=0,n=s.length;char[]o=new char[n];for(;i<n;i++){if((s[i]+"").matches("(?![eiouy])[b-z]")){o[j++]=s[i];s[i]=65;}}for(i=0;i<n;i++)if(s[i]==65)s[i]=o[--j];return s;}

낡은:

s(String p){int i=0,j=0;char[]s=p.toCharArray(),o=p.toCharArray();for(;i<s.length;i++){if(((s[i]+"").matches("[aeiouy @#$%^&*(){}\\[\\]\\|/\\\\<>~\\-_+=`]")))continue;o[j++]=(s[i]);s[i]='A';}for(i=0;i<s.length;i++)if(s[i]=='A')s[i]=o[--j];return new String(s);}

여기 에서 가져온 영감 ❤

언 골프

String s(String p){
    int i = 0, j = 0;
    char[]s=p.toCharArray(),o=p.toCharArray();
    for (;i<s.length;i++) {
        if (((s[i]+"").matches("[aeiouy @#$%^&*(){}\\[\\]\\|/\\\\<>~\\-_+=`]"))) continue;
        o[j++] = (s[i]); // Store the consonant into o
        s[i] = 'A'; // Put a special character in its place
    }
    for (i=0;i<s.length;i++)
        if (s[i] == 'A') // If special character
            s[i] = o[--j]; // Put back the consonant in reverse order
    return new String(s);
}

2
0특수 문자로 사용할 수 있으며 ( null문자열에없는 것으로 보장됨) 다음을 통해 확인할 수 있습니다 s[i]<1(음수 문자 없음)
Leaky Nun

나는 char당신에게 조각 을 할 것 입니다. :)
gcampbell

3

루비, 53 50 바이트

@manatwork에서 -3 바이트

->s{i=0;s.gsub(r=/[^\Waeiouy_]/){s.scan(r)[i-=1]}}

여기 사용해보십시오


왜 코드가 사용되지 않은 매개 변수를 차단합니까?
manatwork

1
@manatwork가 옳습니다. 루비는 블록이기 때문에 사용하지 않는 매개 변수를 생략 할 수 있습니다. 거기에서 세 글자를 깎을 수 있습니다.
Silvio Mayolo

@manatwork, 나는 처음에 그것을 위해 무언가를 사용하려고했지만, 나는 그것을 제거하지 않고 결과적으로
Value Ink

2

파이썬 2, 103 98100 바이트

import re
def r(s):a=re.split("([^\W\d_aeiouy])",s);print''.join(sum(zip(a[::2],a[-2::-2]+['']),()))

내 JavaScript 답변의 포트. 편집 : @ Dennis ♦ 덕분에 5 바이트를 절약했으며 그 중 즉시 두 개의 고정 숫자를 사용해야했습니다.


2

R, 120 바이트

새로운 답변 :

az=function(x){
y=strsplit(x, NULL)[[1]]
a=regexpr("[bc-df-hj-np-tv-z]", y)
y[a==1]=rev(y[a==1])
paste(y, collapse="")
}

문자열을 x로 사용

az("reverse the consonants")
[1] "setenne sne cohtosarvr"

아래의 오래된 응답 (110 바이트)은 저의 형태가 좋지 않아서 자음을 뒤집 었습니다.

xrev=function(x){y=rev(strsplit(x, NULL)[[1]])
paste(y[is.na(match(y, c("a", "e","i","o","u","y")))], collapse="")}

문장 부호가 반전되는 이유는 무엇입니까? 그리고 모음은 어디로 갔습니까?
nicael


2

APLX, 31 바이트

(c/t)←⌽t/⍨c←(t←⍞)∊⎕a~'aeoiuy'
t

⎕a~'aeoiuy'모음이없는 소문자 알파벳은
t←⍞문자 입력을 t 로 저장합니다
c←()∊store Boolean "consonant?" 로 C의
t/⍨ 에서 추출물 (자음) t는

(c/t)←(반전 된 것)과 자음을 대체
t수정 된 문자열을 반환


1

파이썬 2.7, 144 바이트

def f(a):c='bcdfghjklmnpqrstvwxz';b=[x for x in list(a[::-1])if x in c];[b.insert(x,a[x])for x in range(len(a))if a[x]not in c];return''.join(b)

먼저 자음의 반대 목록을 작성한 다음 다른 각 문자를 원래 색인에 다시 삽입합니다.

언 골프 :

s = 'well-done'
reverse = list(s[::-1])
consonants = [i for i in reverse if i in 'bcdfghjklmnpqrstvwxz']

for x in range(len(s)):
    if s[x] not in 'bcdfghjklmnpqrstvwxz':
        consonants.insert(x,s[x])

print(''.join(consonants))

https://repl.it/C30O


'bcdfghjklmnpqrstvwxz'에 대한 변수를 만들고 대신 해당 변수를 호출하여 바이트를 절약 할 수 있습니다.
MCMastery

1

Mathematica 216 바이트

Module[{h,v,i},v=Characters["aeiouy "];h[s_]:=SortBy[Flatten[Thread/@Transpose@{v,#[[All,1]]&/@(StringPosition[s,#]&/@v)},1],Last];i[s_,{a_,n_}]:=StringInsert[s,a,n];Fold[i,StringReverse@StringReplace[#,v->""],h@#]]&

1

하스켈, 157131 바이트

k="bcdfghjklmnpqrstvwxz";f c((r:q),s)=if c`elem`k then(q,r:s)else(r:q,c:s);f c("",s)=("",c:s);g s=snd$foldr f(filter(`elem`k)s,"")s

최신 정보

@atlasologist의 솔루션을 사용하면 쌍 대신 자음 목록 만 필요하다는 것을 알았습니다.

언 골프

consonants = "bcdfghjklmnpqrstvwxz"

-- Combining function (right fold, improved)
f :: Char -> (String, String) -> (String, String)
f c ((r:rest), s) = if c `elem` consonants then (rest, r:s) else (r:rest, c:s)
f c ("", s) = ("", c:s)

transform :: String -> String
transform s = snd $ foldr f (filter (`elem` consonants) s, "") s


main = do
    line <- getLine
    putStrLn . transform $ line

낡은

c="bcdfghjklmnpqrstvwxz";n c(a@((f,t):q),s)=if c==f then(q,t:s)else(a,c:s);n c([],s)=([],c:s);g s=let z=filter(`elem`c)s in snd$foldr n(zip (reverse z)z,"")s

자음 쌍의 목록을 만든 다음 해당 목록을 사용하여 각 자음을 대체하는 문자열을 안내합니다.

약간 원시적이지만 대답을 먼저 보지 않고 이것을 파악하고 싶었습니다. :)


4
몇 가지 팁 : a) 대신 가드를 사용하십시오 if ... then ... else. b) f는 중위 연산자로 작성하는 것이 좋습니다 %. c)의 내측에는 쌍 않아도 ()에서 ((r:q),s). d) 대체 ""_의 2 라인 f. 전체적으로 ( k동일하게 유지됨) : c%(r:q,s)|c`elem`k=(q,r:s)|1<2=(r:q,c:s);c%(_,s)=("",c:s);g s=snd$foldr(%)(filter(`elem`k)s,"")s.
nimi

1

s-lang ,17 16 바이트 (비경쟁)

s-lang이 더 이상 마지막 인수 괄호를 필요로하지 않기 때문에 1 바이트를 절약했습니다.

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

r[(?![aeiouy])\w

나는 문자열 조작 골프 언어로 작업하기 시작했습니다 (지금은 이것을하고 싶었습니다).

설명:

  • r주어진 정규 표현식 문자 매 처로 문자열을 되돌립니다 (정규 인수가 제공되지 않으면 기본값은 .)
  • [ 선택적 정규식 인수를 시작합니다. r
  • (?![aeiouy])\w 정규 표현식은 y를 제외한 자음 문자와 일치합니다 (불행히도 JavaScript는 문자 클래스 빼기를 허용하지 않습니다)
  • ]일반적으로에 대한 선택적 정규 표현식 인수를 종료 r하지만 마지막 함수이자 마지막 인수이므로 필요하지 않습니다.

1

Matlab, 67 자

입력 'this is a string of- stuff.'

s=input('','s');si=regexp(s,'[b-df-hj-np-tv-xz]');s(si)=s(flip(si))

생산 s = ffit is a fgnirt os- ssuht.

si입력 문자열에서 자음의 인덱스입니다. 마지막 문은 인덱싱을 통해 해당 문자를 동일한 문자로 바꾸지 만 반대 순서로 바꿉니다.


이 이외의 구두점은 처리하지 않습니다 -. 질문은 구두점이 유효한 입력이므로 무시해야한다고 말합니다. 또한 input('')변수를 입력으로 받아 들일 수 없으므로 입력을 잡거나 익명 함수를 작성하는 데 사용해야 합니다.
Suever

1
또한 flip문자열을 뒤집는 데 사용할 수 있습니다 .
Suever

문장 부호는 게시 한 후에 질문으로 편집되었지만 수정하겠습니다. 입력과 관련하여 ansMatlab 콘솔에 기본 입력이 할당되어 있기 때문에을 사용할 수 있습니까?
sintax

1
나는 그렇게 생각하지 않습니다. 독립형 솔루션이어야합니다. s=input('')익명의 기능으로이 작업을 수행 하거나 어떻게 해야합니까@(s)
Suever

알았어, 나중에 또 내일 할게 나는 지금 내 컴퓨터에서 떨어져 있습니다.
sintax


0

q / kdb +, 45 바이트

해결책:

{x[w]:x(|)w:(&)max x=/:.Q.a except"aeiouy";x}

설명:

자음의 색인을 찾아 반대로 자음으로 바꾸십시오.

{x[w]:x reverse w:where max x=/:.Q.a except "aeiouy";x} / ungolfed
{                                                   ; } / two-statement lambda
                                .Q.a except "aeiouy"    / alphabet (a..z) except vowels
                            x=/:                        / equals each-right (returns boolean lists where input is each a consonant)
                        max                             / 'or' the results together
                  where                                 / indices where results are true
                w:                                      / save in variable w
        reverse                                         / reverse this list
      x                                                 / index into input at these indices
 x[w]:                                                  / assign values to x at indices w
                                                     x  / return x

노트:

자음 목록을 작성하는 세 가지 방법이 있습니다. 솔루션의 하나는 대안보다 약간 낫습니다.

  • "bcdfghjklmnpqrstvwxz" 22 자 (가장 지루한)
  • .Q.a _/0 3 6 11 16 19 21 자 (kinda cool, 각 인덱스 삭제)
  • .Q.a except"aeiouy" 19 자 (두 번째로 지루한)

0

JQ 1.5 , 289 263 바이트

def C:"bcdfghjklmnpqrstvwxz";. as$s|[("^","")as$p|[match("([\($p)\(C)]+)";"g").captures[].string]]|.[1]|=(reduce map(length)[]as$l({s:add|explode|reverse|implode,r:[]};.r+=[.s[0:$l]]|.s=.s[$l:])|.r)|if$s[0:1]|inside(C)then[.[1,0]]else . end|transpose|map(add)|add

설명

def consonants:"bcdfghjklmnpqrstvwxz";

  . as $s
| [  ("^","") as $p                                              # parse string onto non-consonant
   | [match("([\($p)\(consonants)]+)";"g").captures[].string]]   # and consonant groups
| .[1] |= (
     reduce map(length)[] as $l (                                # build new for consonant groups
       {s:add|explode|reverse|implode,r:[]}                      # by adding groups from reversed string
     ; .r+=[.s[0:$l]] | .s=.s[$l:]                               
     )
     |.r
  )
| if $s[0:1]|inside(consonants) then  [.[1,0]] else . end        # put groups into proper order for merge
| transpose | map(add) | add                                     # merge groups into final string

샘플 런

$ jq -MRr 'def C:"bcdfghjklmnpqrstvwxz";. as$s|[("^","")as$p|[match("([\($p)\(C)]+)";"g").captures[].string]]|.[1]|=(reduce map(length)[]as$l({s:add|explode|reverse|implode,r:[]};.r+=[.s[0:$l]]|.s=.s[$l:])|.r)|if$s[0:1]|inside(C)then[.[1,0]]else . end|transpose|map(add)|add' input
a sect sate
nedl-lowe
setenne sne cohtosarvr

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


0

자바 8, 157 바이트

s->s.format(s.replaceAll("[^\\W\\d_aeiouy]","%s"),s.chars().mapToObj(c->""+(char)c).filter(c->c.matches("[^\\W\\d_aeiouy]")).reduce("",(x,y)->y+x).split(""))

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

참고 : 컴파일러 경고를 stderr에 인쇄합니다.
설명:

s->                                                    // Lambda function
    s.format(                                          // Format a string using the given arguments
        s.replaceAll("[^\\W\\d_aeiouy]","%s"),         // Generate the format string by replacing all consonants with "%s"
        s.chars()                                      // Stream the characters of the input string s
            .mapToObj(c->""+(char)c)                   // Map characters back to strings
            .filter(c->c.matches("[^\\W\\d_aeiouy]"))  // Filter out vowels and symbols
            .reduce("",(x,y)->y+x)                     // Build the string of consonants in reverse
            .split("")                                 // Turn into an array of single-char strings (varargs abuse)
    )                                                  // Implicit return of the formatted string

거짓말하지 않을게, 나의 유일한 목표는 이 대답 을이기는 것이었다


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