次のかなを出力する


21

日本語の仮名文字は、日本語の単一の音に対応します。ん(n)を除き、他のすべての仮名は子音部分と母音部分で構成されます。日本語の仮名には自然な順序があります。これは一種の「アルファベット順」であり、通常は10行5列の表に配置されます。

   |   a    i    u    e    o
-----------------------------
*  |   a    i    u    e    o
k  |  ka   ki   ku   ke   ko
s  |  sa   si   su   se   so
t  |  ta   ti   tu   te   to
n  |  na   ni   nu   ne   no
h  |  ha   hi   hu   he   ho
m  |  ma   mi   mu   me   mo
y  |  ya        yu        yo
r  |  ra   ri   ru   re   ro
w  |  wa                  wo

テーブル内の50個のセルの一部が実際には空であっても、この順序はgojuuonまたは「50音」と呼ばれます。

チャレンジ

入力は、woを除き、上記の仮名のいずれかになります。プログラムまたは関数は、次のかなを左から右、上から下の読み取り順序で出力する必要があります。例:

Input       Output
------------------
a     ->    i
i     ->    u
o     ->    ka
ke    ->    ko
so    ->    ta
ni    ->    nu
ya    ->    yu
yu    ->    yo
wa    ->    wo
wo    ->    (undefined behaviour)

オプションの単一の末尾の改行を除いて、出力に先頭または末尾の空白があってはなりません。

これはなので、目標はプログラムサイズをバイト単位で最小化することです。

その他の注意事項

  • 物事をシンプルに保つために、この課題では日本式ローマ字表記を使用しています。ヘプバーンのローマ字表記はより一般的ですが、ゴルフにとって厄介な点がいくつかあります(たとえば、sishiになり、hufuになります)。

  • 空の場所には仮名存在しますが(日本語SEを参照)、それらは非標準であるか、現在は廃止されています。


3
Hepburn例外を使用し、どのループにwo変換するのがはるかに楽しいと思います。na
1

回答:


16

網膜54 53バイト

T`au`ie`y.
wa
we
T`\oeuia`ao
T`ko`stn\hmyr\w`.a
^a
ka

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

説明

Wooo、今日の0.7.2リリースからさらに多くの機能を披露。:)(リリースは、このチャレンジよりも約7時間前です。)

T`au`ie`y.

これは置き換える音訳であるaiし、ueだけの試合で、y.。その目的は、ギャップをスキップするために、およびをそれぞれ処理しyayu好むことです。yiye

wa
we

で置き換えwawe、そのギャップもスキップします。

T`\oeuia`ao

これが新機能です。文字のセットを回転させる場合、音訳の「from」と「to」のセットは通常ほとんど同じです。これでo、他のセットを参照する(バックスラッシュなしで)ことができ、重複を取り除くことができます。\oただリテラルの略でo、その場合インチ したがって、2つのセットは次のように展開されます。

oeuia
aoeuia

a2番目のセットの無関係なものは無視され、母音は期待どおりに周期的に置き換えられます。

T`ko`stn\hmyr\w`.a

これは子音についても同じことを行いますがo、最初のセットで使用します(という理由だけで...)。hそしてw、彼らは文字クラスであるため、エスケープする必要があります。拡張セットは次のとおりです。

kstnhmyrw
stnhmyrw

は、.aこの操作をで終わる音節a、つまりテーブルの次の行にラップする音節に制限します。

^a
ka

最後に、我々は、単一の置き換えaとしka、その場合は、前の音訳で扱うことができないので、。


チャレンジが投稿された後にリリースされたあなたの言語のバージョンを使用していないと、エントリーは競合できなくなりますか?(他の場所でこれについて尋ねた理由を推測しますか?;)
アレックス

@Alexこのチャレンジが投稿される前に、私はそのバージョンをリリースしました。
マーティンエンダー

はい。謝罪いたします。それ以外の場合は、編集により表示されます。リリースのリストを確認しました(おそらく、告発する前にそれを行うべきだったでしょう)。
アレックス

5

ルビー、105

->n{a=['wo','wa']
'rymhntsk '.chars{|c|a+='*o *e *u *i *a'.tr(?*,c).split}
a[8..10]='yu'
a[a.index(n)-1]}

テストプログラムでコメント

f=->n{a=['wo','wa']                     #initialize array to last line of table, begin to build table backwards                                
  'rymhntsk '.chars{|c|                 #for each consonant, 
    a+='*o *e *u *i *a'.tr(?*,c).split  #perform a sustitution to get that line of table in string form,  
  }                                     #then split into array at spaces and append to a
  a[8..10]='yu'                         #substitute 3 elements ye yu yi with 1 element yu
  a[a.index(n)-1]                       #return element before argument (array is backwards.)
}

puts f[gets.chop]

で数バイト節約できますa=%w{wo wa}
ヨルダン

また:"rymhntsk ".chars{|c|"oeuia".chars{|d|a<<c+d}}、私はこっそり疑いがあるが、それはさらにゴルフすることができます。
ヨルダン

5

GNU sed、65

スコアに含まれないコメント:

:                        # Define unnamed label
y/aiueo/iueoa/           # Rotate vowels
/a/y/kstnhmyr/stnhmyrw/  # If at end of row, rotate consonants
s/^a/ka/                 # If at end of 1st row, prefix a "k"
/[yw][ie]\|wu/b          # If one of the invalid values, jump back to label and redo

ああ、これは@MartinRetinaの回答によく似てきています(もちろん、もっと長いです)。


5

Pyth、42 40 38バイト

s.r]z.DrR6*" kstnhmyrw""aiueo"CM"$&./0

これは、母音と子音の間の外積を取り、の各数値の序数の要素を削除し$&./0ます。次に、入力後に要素を出力します。

@J.DrR6*" kstnhmyrw""aiueo"CM"$&./0"hxJz    Implicit: z=input()
       *" kstnhmyrw""aiueo"                 Outer product: [' a',...,' o','ka',...]
    rR6                                     Strip each string—'a'~'o' now single letters
                           CM"$&./0"        Map ord onto the string: [36,38,46,47,48]
  .D                                        Remove elements at those indices.
 J                                          That's the list of kana; assign it to J
                                     xJz    Find the index (x) of z in J,
                                    h       add one,
@J                                          and access J at that index.

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


うわー、この言語はクレイジーです!
ちょうど学習者

3

TXR Lisp、135 127 124 91バイト

(ret[(memqual @1(diff(maprod(op trim-str`@1@2`)" kstnhmyrw""aiueo")'#"yi ye wi wu we"))1])

実行:

1> (ret[(memqual @1(diff(maprod(op trim-str`@1@2`)" kstnhmyrw""aiueo")'#"yi ye wi wu we"))1])
#<interpreted fun: lambda (#:arg-1-0208 . #:arg-rest-0207)>
2> [*1 "a"]
"i"
3> [*1 "o"]
"ka"
4> [*1 "ki"]
"ku"
5> [*1 "mu"]
"me"
6> [*1 "ya"]
"yu"
7> [*1 "yo"]
"ra"
8> [*1 "wa"]
"wo"

1

Bash + sed、83

echo {,k,s,t,n,h,m,y,r,w}{a,i,u,e,o}|sed -E "s/[yw][ie]|wu//g;s/.*\b$1 +//;s/ .*//"
  • 1行でフルテーブルを作成するブレース拡張
  • sed:
    • 削除yiyewiwuおよびwe
    • 入力エントリまでのすべてを削除します(ただし、次のエントリは削除しません)
    • 次のエントリ以降をすべて削除します

1

JavaScriptを、145の 162 131 118バイト

x=>(d=" kstnhmyrw".replace(/./g,"$&a$&i$&u$&e$&o").replace(/ |yi|ye|wiwuwe/g,"").match(/[^aiueo]?./g))[d.indexOf(x)+1]

認めてください、この問題を解決するためのもっとばかげた解決策を想像することはできませんでした;)わかりました、もっと面白い方法でこれをしました。

デモ:

function p(x) {
  return (d=" kstnhmyrw".replace(/./g,"$&a$&i$&u$&e$&o") //build the sequence of kana, regex rulez!
        .replace(/ |yi|ye|wiwuwe/g,"")                   //remove the spaces and excess kana
        .match(/[^aiueo]?./g))[d.indexOf(x)+1]           //split it into array using regex and get the index of input in it
}

alert(p(prompt()))


@ Sp3000ああ、それは残念です。これらの余分な(トレーリング/リーディング)スペースは許可されていません。
ニカエル

@nicael 現在許可されていることを示す仕様には何も表示されません。
マーティンエンダー

@ Sp3000固定間隔。
ニカエル

1

Japt、75 70 68バイト

X=" kstnhmyrw"£"aiueo"®+X w} r" |yi|ye|wiwuwe"P f"[^aiueo]?.")g1+XbU

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


かなりいい!私はこれをさらにゴルフダウンしようとしましたが、3バイトしかX=" kstnhmyrw"£"aiueo"mZ{X+Z} } r" |yi|ye|wiwuwe"P f"[^aiueo]?.")g1+XbU
切り取る

@Ethええ、また、あなたは} }:)に余分なスペースを持っています
-nicael


@Ethの外観、魔法のショートカットで2バイト短くすることができます:D
nicael

待って、実際に動作しますか?ニース、あなたは私を追い抜いた;)
ETHproductions

1

Haskell、114 96バイト

f"ya"="yu"
f"yu"="yo"
f"wa"="wo"
f x=snd(span(/=x)[words[a,b]!!0|a<-" kstnhmyrw",b<-"aiueo"])!!1

[words[a,b]!!0|a<-" kstnhmyrw",b<-"aiueo"]「穴」を含むすべてのカナのリストです。リストを入力仮名の前の部分と入力仮名から最後までの部分に分割します。2番目の部分から2番目の要素を選択します。「穴」周辺の例外は、別のケースで以前にキャッチされました。

編集:@xnorは、span18バイトを節約したものを使用するというアイデアを思いつきました。


(snd$span(/=x)k)!!1ルックアップで機能しないものはありますか?
xnor

@xnor:私はそれを見たので、それは明らかです。本当にありがとう!
-nimi

0

Perl 6、105バイト

.[.first(@*ARGS[0],:k)+1].say with (" kstnhmyrw".comb X~ <a e i o u>).grep(* !~~/[y|w][i|e]|wu/)».trim

これは私が最初に手に入れることができる限り短く、後で別の亀裂を感じるかもしれませんが、私はこれについてかなりいい気分です。


0

JavaScript(ES6)、127バイト

s=>s>"yt"?"yo":s=="ya"?"yu":s=="wa"?"wo":(m=[].concat(...["",..."kstnhmyrw"].map(c=>[..."aiueo"].map(v=>c+v))),m[m.indexOf(s)+1])

説明

s=>

  // Hardcode "yu", "ya" and "wa"
  s>"yt"?"yo":
  s=="ya"?"yu":
  s=="wa"?"wo":

  // Generate table
  (m=[].concat(...                                   // flatten the array of arrays
    ["",                                             // first consonant is blank
    ..."kstnhmyrw"].map(c=>[..."aiueo"].map(v=>c+v)) // combine each consonant and vowel
  ))[m.indexOf(s)+1]                                 // return the next sound

テスト


0

Perl 6、96バイト

{my @a=(" kstnhmyrw".comb X~ <a i u e o>).grep({!/[y|w][e|i]|wu/})>>.trim;@a[1+@a.first($_,:k)]}

0

Python 2、107バイト

L=[(x+y).lstrip()for x in' kstnhmyrw'for y in'aiueo'if x+y not in'yiyewiwuwe']
print L[L.index(input())+1]

'he'たとえば、引用符で囲まれた入力を期待します


0

ラケット151バイト

(second(member s '(a i u e o ka ki ku ke ko sa si su se so ta ti tu te to na
ni nu ne no ha hi hu he ho ma mi mu me mo ya yu yo ra ri ru re ro wa wo)))

ゴルフをしていない:

(define (f s)
  (second
   (member s
           '(a i u e o ka ki ku ke ko sa si su se so ta ti tu te to na ni nu ne
               no ha hi hu he ho ma mi mu me mo ya yu yo ra ri ru re ro wa wo))))

テスト:

(f 'a)
(f 'i)
(f 'o)
(f 'ke)
(f 'so)
(f 'ni)
(f 'ya)
(f 'yu)
(f 'wa)

出力:

'i
'u
'ka
'ko
'ta
'nu
'yu
'yo
'wo

「woが送信された場合、エラーメッセージが表示されます。


0

C、138135バイト

char*s="aiueokstnhmyrw";i,j;k(*v){j=strchr(s,*v>>8)-s;i=strchr(s,*v)-s;j=i<4?i++:j<4?j-~(2520%i&3):!++i;printf("%c%c",s[i],i<5?:s[j]);}

ワンドボックス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.