子音を逆にする


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に固有のものだと思います。他のフレーバーにも文字クラスの共通部分がありますが、構文は通常であると思います[...&&[^...]]
マーティンエンダー

@MartinEnder sedとgrepでこれらを試す必要があります。ありそうもないsedにありますが、おそらくPCREモードgrepです。
デジタル外傷

1
Perl 6を使用して、<[b..z] - [eiouy]>または<:Ll - [aeiouy]>セットの違いを行う
ブラッドギルバートb2gills

15

Python 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ます。

子音の確認に4バイトを節約した子音チェックのSp3000に感謝します。


1
これはコードゴルフの美しいビットです:)
リン

本当にエレガントで驚くほど短い、これはPython
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

JavaScriptのES6、82 81 80 78バイト

MartinとLeaky Nunにそれぞれ1バイト、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
それは、関数の引数の悪用です。
リーキー修道女

/(?![aeiouy])[a-z]/g
漏れの修道女

だろう/(?[_aeiouy])\w/g動作しますか?
ニール

@Neilいいえ、それはに一致します_。これは、OPが所定の位置に保持したいシンボルです。
コナーオブライエン

1
あなたのデモでは、変更することができますq.onchange=q.onkeydown=q.onkeyup=だけにq.oninput=...
パトリック・ロバーツ

5

Python 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

スコアには-r、sedに渡されるフラグの+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(
ルイスメンドー

@LuisMendo素晴らしいアイデア、ありがとう!
-Suever

4

Perl 5(58 + 4 = 62バイト)

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

-0777フラグ付きで実行するとペナルティが+4になり、Perlが改行モードを正しく処理するためにスラープモードに設定されます。

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

JavaScript(ES6)、72バイト

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

分割する/([^\W\d_aeiouy])/と、子音が配列内の奇数番号のエントリに分類されます。次に、それらのエントリを配列の最後から数えた同等のエントリに切り替えて、結果を結合するだけで十分です。


良くやった!分割については考えませんでした。
コナーオブライエン

5
CIAがコードに侵入したようです。
パトリックロバーツ

同じ正規表現を試してみましたが、数字も逆になります
-edc65

4

JavaScript(ES6)、57 70

編集アメージング20%節約THX @Neil

パーティーに遅れましたが、すべてのjavascriptの人々が何かを見逃したようです

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

(私のソリューションのエラーが原因で)あなたがすでに私をbeっているほど悪いわけではないように、を使用して13バイトを節約できるはずc.pop()です。
ニール

@ニールすごいありがとう、それは大きな改善です
-edc65

4

Perl 5、92 68 55バイト

@manatworkのヘルプのおかげで37バイト節約されました。;-)

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

@Lynn PythonソリューションのPerlへの翻訳。


こんにちは、PPCGへようこそ!
-NoOneIsHere

1
@NoOneIsHereすみません、PPCGとは何ですか。
牡羊座

P rogramming P uzzles&C ODE G OLF。
-NoOneIsHere

1
gそこでは、「」の力が役立ちます:@s=split//;@s=/./g;およびfor(@s){push@a,$_ if(/[^\Waeiou]/);}@a=/[^\Waeiou]/g;。私は、意味m//g修飾リターンすべてのマッチの配列。
マナトワーク

1
2番目のバージョンは、割り当てに参加することで削減できます@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を返すsのすべてのインデックスを生成し、変数iに保存します。

c->'}'>c∉"aeiouy"<"$c"3つのテストを実行し、すべてが正の場合にのみtrueを返します

  • '}'>c文字c{の前に来るかどうかをチェックします。

  • "aeiou"チェックした場合、文字列 cが後に来ます。

  • c∉"aeiouy"cが母音ではないことを検証します

最後に、s[i]すべての子音を生成し、s[flipud(i)]=s[i]それらをiの逆のインデックスに対応するsの位置に割り当てます。


これはどのエンコードを使用しますか()?
アダム

1
残念ながら、UTF-8。
デニス

3

Java(登録商標)、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(負の文字はありません)
漏れの修道女

私は意志charあなたの作品に。:)
gcampbell

3

ルビー、53 50バイト

@manatworkから-3バイト

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

ここで試してみてください


コードが未使用のパラメーターをブロックするのはなぜですか?
マナトワーク

1
@manatworkは正しい。Rubyはブロックであるため、未使用のパラメーターを省略できます。そこで3文字を削ることができます。
シルヴィオマヨロ

@manatwork、私が最初に何かのためにそれを使用するつもりだったが、その後、私はしませんでしたし、その結果として、それを削除するのを忘れて
バリューインク

2

パイソン2、103の 98 100バイト

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桁を修正する必要がありました。


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="")}

句読点が逆になっているのはなぜですか?母音はどこに行ったのですか?
ニカエル


2

APLX、31 バイト

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

⎕a~'aeoiuy'母音のない小文字のアルファベットは、
t←⍞文字入力をtとして保存し
c←(ます… )∊ブール「子音?」を保存します C
t/⍨からの抽出物(子音)T
の逆
(c/t)←(逆のもの)と子音を置き換える
t変更された文字列を返します


1

Python 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

Haskell、157 131バイト

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)()in の内側のペアは必要ありません((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-lang17 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

句読点は、投稿後に質問に編集されましたが、修正します。入力に関してはans、Matlabコンソールへのデフォルト入力が割り当てられているので、単に使用できますか?
シンタックス

1
そうは思いません。自己完結型のソリューションでなければなりません。s=input('')これを行うか、何らかの方法でこれを匿名関数に@(s)
作成

後で、明日やるよ。今はコンピューターから離れています。
シンタックス

1

PowerShell、81バイト

-join(($a=$args|% t*y)|%{if($_-in($c=$a-match'[^\W\d_aeiouy]')){$_=$c[--$i]};$_})

オンラインでお試しください!

少ないゴルフ:

$a          = $args|% toCharArray
$consonants = $a-match'[^\W\d_aeiouy]'
$result     = $a|%{if($_-in$consonants){$_=$consonants[--$i]};$_}
-join($result)

PowerShell、88バイト、-f

$i=0;-join($args|% t*y|%{if($_-match'[^\W\d_aeiouy]'){$c=,$_+$c;$_="{$i}";$i++};$_})-f$c

オンラインでお試しください!


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

ノート:

子音リストを作成する方法は3つありましたが、ソリューションの方が代替方法よりもわずかに優れています。

  • "bcdfghjklmnpqrstvwxz" 22文字(ほとんど退屈)
  • .Q.a _/0 3 6 11 16 19 21文字(ちょっとクール、各インデックスを削除)
  • .Q.a except"aeiouy" 19文字(2番目に退屈)

0

JQ 1.5289の 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

Java 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.