Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2017/07/11 (火)

なでしこ3でしりとり

| 11:12 | なでしこ3でしりとり - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3でしりとり - 雪乃☆雫のなでしこ日和 なでしこ3でしりとり - 雪乃☆雫のなでしこ日和 のブックマークコメント

 とりあえず、末尾語を引数で渡すことでできるようになったから載せとく。

 だけど別に、関数内で使う変数は全部そうしなきゃない仕様になったとゆうわけではないようなので、ナゾはナゾのままなんだよねぇ~;

#なでしこ3でしりとり3
#-----------------------------------------------------------
除去音=「ー-~・‥….。,、?!」。
変換音=「がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっをゐゑ」
変換後=「かきくけこさしすせたちつてとはひふへほはひふへほあいうえおやゆよわつおいえ」
#-----------------------------------------------------------
●先頭語取得(Sから)
  先頭語はSの1だけ文字左部分の変換音変換。
ここまで

●末尾語取得(Sから)
  S=Sから除去音除去。
  末尾語はSの1だけ文字右部分の変換音変換。
ここまで
#-----------------------------------------------------------
●除去音除去(Sから)
  除去音を文字列分解反復
    S=Sの対象置換。
  ここまで
  Sで戻るここまで

●変換音変換(Sの)
  回数=0
  変換文字=変換後を文字列分解。
  変換音を文字列分解反復
    もし、S=対象ならば、S=変換文字@回数
    回数回数+1
  ここまで
  Sで戻るここまで
#-----------------------------------------------------------

#-----テスト------------------------------------------------
ルール=「【ルール説明】
・小さい文字(拗促音)は大きくするよ(カボチャ→やさい)
・濁音半濁音は清音と同様に繋げられるよ(りんご→こまつな)
・長音は無視できるよ(チーター→たぬき)」
ルールと言う。
ルールと表示。

開始語=「なでしこ」
先頭語=。
末尾語=開始語から先頭語取得。

末尾語と開始語でシリトリする。

●シリトリ(MとSで)
  先頭語はSから先頭語取得。
  末尾語=M。
  もし、先頭語=末尾語でなければ、
    「負け!」と言う終わる。
  ここまで。
  末尾語はSから末尾語取得。
  もし、末尾語=「ん」ならば、
    「負け!」と言う終わる。
  ここまで。
  ダイアログIME=「IMEオン」
  「『{S}』{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれでなければ、
    末尾語とそれでシリトリする。
  違えば、
    「負け!」と言う終わる。
  ここまで。
ここまで
#-----------------------------------------------------------

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170711

2017/07/06 (木)

なでしこ3

| 23:58 | なでしこ3 - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - なでしこ3 - 雪乃☆雫のなでしこ日和 なでしこ3 - 雪乃☆雫のなでしこ日和 のブックマークコメント

 なでしこ3の0.1.0をリリースとゆうことで、まにゅあるもせっせと更新されてる風味だったのでちょっと学んでみようと思ったのです。

 前のしりとりくらいなら、簡単に移植できそうに思ったけど、甘かったorz

 なにしろ、参考に出来る物も少ないから、自分が違ってるのか、3の仕様なのか、まだベータ版ゆえの不備なのかすらわかんないコト多数;;;

 なんとしてもうまくいかず、取りあえずこんな感じ。

 しりとりのルールについて考える前の、とりあえず最後の一文字と先頭の一文字でつないでいくだけのしりとりです。

 は「なでしこ3」なので、万一奇特にもお試ししてみようとゆう方は、ここから。

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

#なでしこ3でしりとり
#-----------------------------------------------------------
ルール=「【ルール説明】
・最後に『ん』のつく単語を入力したら負け!
・濁音半濁音はのまま(りんご→ごりら)
・小さな文字は大きな文字で入力してね(紅茶=こうちや)
・長音は読みの通りの母音で入力してね(チーター=ちいたあ)」
ルールと言う。
ルールと表示。

開始語=「なでしこ」
先頭語=。
末尾語=開始語の1だけ文字左部分。

開始語でシリトリする。

●シリトリ(Sで)
  先頭語はSの1だけ文字左部分。
  もし、先頭語=末尾語でなければ、
    「負け!」と言う終わる。
  ここまで。
  末尾語はSの1だけ文字右部分。
  もし、末尾語=「ん」ならば、
    「負け!」と言う終わる。
  ここまで。
  ダイアログIME=「IMEオン」
  「『{S}』{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれでなければ、
    それでシリトリする。
  違えば、
    「負け!」と言う終わる。
  ここまで。
ここまで。
#-----------------------------------------------------------

 まず変わったのは、もしや繰り返しや関数の終わりに「ここまで」が必要になったことで、めんどくさいけど、色々のことを考えるとこれはこのほうがイイですよね。

 何しろ、なでしこはインデント一つ狂っただけでも事件が起きるのに、掲示板なんかじゃ当然のよーにタブや半角スペースが消えたり、全角スペースに置き換わったりされてしまうから厄介が起きまくりだけど、ブロックを明示できれば、の心配がないもねー。

 あと、配列も変わってるので、よく確認しないと。

 でもまあ、こはまず問題ないとして・・・


 「終わる」で、エラー表示になるって、一体なんで~?

 まあ、終わるからいいけど;


 「カッコ閉じ」「波カッコ閉じ」が、「undefined」となってしまう。

#-----------------------------------------------------------
「{カッコ}なでしこ3{カッコ閉じ}」と表示。
「{波カッコ}なでしこ3{波カッコ閉じ}」と表示。
#-----------------------------------------------------------

 「カッコ」「波カッコ」はこれでいけるのだから、従来どうりの記述でいいハズだと思うんだけど・・・よくわからん~。

 てゆうか、undefinedってなんすか・・・「定義されていない」・・・・・・むむむ~?

 定数として定義されてないって意味なんでしょうか(?_?)

 二重カギ括弧がふつーに使えるようになっていたから、取りあえずそれにしといたけどねーw(いいのか?!)


 して「反復」の時には、「回数」のカウンター機能が働かなくなったんですかね?

 またまた「undefined」が発生~。

 ところが、「」の時には従来どおりっぽい。

#---------------------------
Aは[1,2,3]
Aを反復
  回数言う
  対象表示
ここまで
#---------------------------
3
  回数言う
  「ワン」と表示ここまで
#---------------------------

 まあ、自分でカウンターせばいいだけなんだけど・・・

 ・・・ここで結構はまったんだよ(>_<)


 して、何よりの最大のナゾは・・・

 直前で、「開始語から先頭語取得」している「末尾語」が、「シリトリ」関数の中で参照できないこと。

 これは、いまだにナゾが解明してません(ToT)

#なでしこ3でしりとり2
#-----------------------------------------------------------
除去音=「ー-~・‥….。,、?!」。
変換音=「がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっをゐゑ」
変換後=「かきくけこさしすせたちつてとはひふへほはひふへほあいうえおやゆよわつおいえ」
#-----------------------------------------------------------
●先頭語取得(Sから)
  先頭語はSの1だけ文字左部分の変換音変換。
ここまで

●末尾語取得(Sから)
  S=Sから除去音除去。
  末尾語はSの1だけ文字右部分の変換音変換。
ここまで
#-----------------------------------------------------------
●除去音除去(Sから)
  除去音を文字列分解反復
    S=Sの対象置換。
  ここまで
  Sで戻るここまで

●変換音変換(Sの)
  回数=0
  変換文字=変換後を文字列分解。
  変換音を文字列分解反復
    もし、S=対象ならば、S=変換文字@回数
    回数回数+1
  ここまで
  Sで戻るここまで
#-----------------------------------------------------------

#-----テスト------------------------------------------------
ルール=「【ルール説明】
・小さい文字(拗促音)は大きくするよ(カボチャ→やさい)
・濁音半濁音は清音と同様に繋げられるよ(りんご→こまつな)
・長音は無視できるよ(チーター→たぬき)」
ルールと言う。
ルールと表示。

開始語=「なでしこ」
先頭語=。
末尾語=開始語から先頭語取得。

開始語でシリトリする。

●シリトリ(Sで)
  先頭語はSから先頭語取得。
  もし、先頭語=末尾語でなければ、
    「負け!」と言う終わる。
  ここまで。
  末尾語はSから末尾語取得。
  もし、末尾語=「ん」ならば、
    「負け!」と言う終わる。
  ここまで。
  ダイアログIME=「IMEオン」
  「『{S}』{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれでなければ、
    それでシリトリする。
  違えば、
    「負け!」と言う終わる。
  ここまで。
ここまで
#-----------------------------------------------------------

 シリトリ関数内では末尾語が「undefined」になってしまっているため、実行するといきなり「負け!」と言われてしまいます(´д`;

 シリトリ関数自体は、冒頭のものとほとんど変わってないですよ?

 「先頭語取得」関数の方が良くないのかと思いきや、先頭語取得せず、最初のと同様に「末尾語=開始語の1だけ文字左部分」としてもダメ、さらには、末尾語=「な」などとしてもやっぱりダメなんですからね。

 むむむむむ~(@_@)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170706

2017/07/02 (日)

しりとりのルール

| 00:00 | しりとりのルール - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - しりとりのルール - 雪乃☆雫のなでしこ日和 しりとりのルール - 雪乃☆雫のなでしこ日和 のブックマークコメント

 しりとりのルールなんて、決まり切っているだろうと思われるところですが、検索してみると色々出てきてなかなか難しい!(@_@)

 主に、濁音・半濁音や、長音・拗音・促音の扱いですかね。

●濁音半濁音は、通常はのままですけど(りんご→ごぼう)、より易しいルールで清音化して扱える場合もあります(りんご→こまつな)

●長音は、通常は無視しますけど(チーター→たぬき)、長音の前の文字の母音を使うというルールもあります(チーター=ちいたあ→あしか)。また、いっこ前の文字とセットでという、より難しいルールもあります(チーター→ターキー)

●拗音は、それを通常の文字として扱える場合(カボチャ→やさい)と、いっこ前の文字とセットで(カボチャ→チャーハン)という場合があります

●促音(ちっちゃい「っ」)で終わる単語って、何かありますかね? 通常の日本語的には、擬音や感嘆詞としてしか無いような気がするんだけど・・・もしあった場合、拗音同様大きくするか、前の文字とセットにするか、長音同様無視するか・・・の三択のように思われます。


 さらに、「ぢ」「づ」「を」「ん」などの扱いをどうするかの問題があります

●「ぢ」「づ」などは、清音化する場合は問題ないんですが(はなぢ→ちりとり)、のままの場合、本当にのままだとかなりキビシイので、あと、「コレは一体どっちなんだ?!」・・・とゆうギロンに発展し、しりとりが中断されかねないので、聞いた音の通り「じ」「ず」でOKという場合もあります

●「を」も同様で、も現代語だと助詞の扱いだから固有名詞しかないと思うんだけど、しかもそれを言ったら、「ゐ」「ゑ」も入ってきちゃうんじゃ?! ってことにもなるので、よっぽどな人達じゃない限り、聞いた音の通り「お」「い」「え」で良いことになってると思います。

●近頃「ん」で始まる語もあるじゃーないか!という話もあるらしいんですが(外国語)、それを認めると、逆に「ん」を言ったもん勝ちみたいな感じになっちゃうじゃないですか? 「ん」で終わる単語は、「ぢ」「づ」「を」の比では無く多いので。

 これは、続けられるかどうかではなく、「ん」は禁止ワードであるいう縛りと考えるべきものだと思うんだよね。


 さて・・・

 面目にしりとりのプログラムを作るなら、これらの色々のルールに対応できるべく作っていった方が良いのだろうと思いますが、の最大の問題は、単語リストつくんの面倒! ってところなんで(爆)

 少ない単語で長く続けられるよう、

1,濁音半濁音は清音化。

2,長音は無視。

3,拗音促音は大文字化。

4,「を」などで終わる単語なんか登録しない!(爆)

 ・・・とゆう方針でやっていきたい。

 こんな感じ?

#しりとりテスト
#-----------------------------------------------------------
除去音=「ー-~・‥….。,、?!」。
変換音=「がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽぁぃぅぇぉゃゅょゎっをゐゑ」
変換後=「かきくけこさしすせたちつてとはひふへほはひふへほあいうえおやゆよわつおいえ」
#-----------------------------------------------------------
*先頭語取得(Sから)
  先頭語はSの1文字左部分の変換音変換。

*末尾語取得(Sから)
  S=Sから除去音除去。
  末尾語はSの1文字右部分の変換音変換。
#-----------------------------------------------------------
*除去音除去(Sから)
  (除去音を文字列分解)を反復
    S=Sの対象置換。
  Sで戻る。

*変換音変換(Sの)
  変換文字=変換後を文字列分解。
  (変換音を文字列分解)を反復
    もし、S=対象ならば、S=変換文字¥(回数-1)
  Sで戻る。
#-----------------------------------------------------------

#-----テスト------------------------------------------------
ルール=「【ルール説明】
・小さい文字(拗促音)は大きくするよ(カボチャ→やさい)
・濁音半濁音は清音と同様に繋げられるよ(りんご→こまつな)
・長音は無視できるよ(チーター→たぬき)」
ルールと言う。
ルールと表示。

開始語=「しりとり」
先頭語=。
末尾語=開始語から先頭語取得。

開始語でシリトリする。

*シリトリ(Sで)
  先頭語はSから先頭語取得。
  もし、先頭語=末尾語でなければ、「負け!」と言う終わる。
  末尾語はSから末尾語取得。
  もし、末尾語=「ん」ならば、「負け!」と言う終わる。
  ダイアログIME=「IMEオン」
  「{カッコ}{S}{カッコ閉じ}{改行}{改行}全角ひらがなで続く単語を入力してね。」と尋ねる。
  もしそれならば、「負け!」と言う終わる。
  違えばそれでシリトリする。
#-----------------------------------------------------------

 一人で延々しりとりが続けられますw

 除去音と変換音を、もう少し丁寧に分けて登録して、フラグによって処理を振り分ければ、様々なパターンのルールに対応できるんだろうけど。

 登録しない!なんて言い張らなくても、濁音半濁音や拗促音同様に変換音に突っ込めば、「を」「ゐ」「ゑ」もふつーに変換できたなあwww

 促音を拗音同様大きな文字に変換とゆう取り扱いで良いのか、長音同様除去してしまうかは、悩むところ。

 いや、んな単語は登録しないっ!(爆)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20170702