猫に帽子をかぶせる


15

来たる冬のbashイベントに触発された

オブジェティブ

帽子を追加 ^´または`入力の各ワードにおける単一母音へ。

ルール

  • hatvowelランダムに選択されなければなりません。各帽子は同じ確率(33%)で表示される必要があり、母音は単語の有効な母音内で同じ確率でなければなりません(単語に2つの有効な母音がある場合、それぞれ50%が選択される可能性が高い)-または最も近いあなたの言語が持っていること。
  • AEIOUaeiou母音のみと見なされます(ごめんなさいy
  • 入力に帽子のある母音はルールに干渉しません(子音と見なすことができます)
  • 入力に母音がない場合、変更されません
  • 大文字を保持する必要があります。

winter> wintér
bash> bâsh
rhythm> rhythm
rng ftw> rng ftw
cat in the hat> cât ìn thê hát
dès> dès
tschüss> tschüss
principî> prìncipî
PROGRAMMING PUZZLES & code golf>PROGRÂMMING PÚZZLES & codé gòlf

勝ち

これはので、最短のコードが勝ちます


「ランダムに(またはあなたの言語に最も近い)」ので、私の言語にランダムなコマンドがなければ、決定論的なことをすることができますか?
致命的

@LuisMendoの方が良いですか?
ロッド

@Fatalizeもget the current timeランダムではありませんか?
ロッド

@Rod私は心に言語がありません。私はちょうどあなたがそれがランダムである(そしてどんな種類のランダムである)ことを強要しなければならないと言っている、さもなければそれは全く意味をなさない。
致命的

仕様では^ ´またはバックティックを追加する必要がありますが、tschussの例ではウムラウトを示しています。ウムラウトは必要ですか?
レベルリバーセント

回答:


1

Perl 6、101バイト

~*.words.map: {(my$p=m:ex:i/<[aeiou]>/».to.pick)~~Mu:D??~S/.**{$p}<(/{("\x300".."\x302").pick}/!!$_}

それを試してみてください

拡張:

~      # stringify (join with spaces)
*\     # Whatever lambda (input parameter)
.words # split into words

.map:  # for each word

{ # bare block lambda with implicit parameter 「$_」
  (

    my $p =

    m
    :exhaustive               # all possible matches
    :ignorecase
    /<[aeiou]>/\              # match a vowel

    ».to.pick                 # pick one of the positions

  ) ~~ Mu:D                   # is it defined ( shorter than 「.defined」 )

  ??                          # if 「$p」 is defined

    ~                         # stringify

    S/
      . ** {$p}               # match 「$p」 positions

      <(                      # ignore them
    /{
      ("\x300".."\x302").pick # pick one of the "hats" to add
    }/


  !!                          # if 「$p」 is not defined    
    $_                        # return the word unchanged
}

2

C#、273 267バイト

using System.Linq;A=s=>{var r=new System.Random();var a=s.Split(' ');return string.Join(" ",a.Select(w=>w.Select((c,i)=>"AEIOUaeiou".Any(d=>c==d)?i:-1).Where(x=>x>=0).ToList()).Select((l,i)=>l.Any()?a[i].Insert(l[r.Next(l.Count)]+1,""+(char)r.Next(768,771)):a[i]));};

repl.itデモ

キャラクターを組み合わせて作成された既にアクセントの付いた母音に帽子を追加するので、私は本当に浮気しているように感じます。それが受け入れられない場合は、この答えが競合しないことを宣言する定型コード追加できるようにお知らせください。

このことは、各入力単語のランダム母音(もしあれば)の後に、U + 0300またはU + 0301またはU + 0302の中にランダムな文字を追加します。

Ungolfed(ラムダ本体のみ)

var r=new System.Random();
// Split sentence to array of words
var a=s.Split(' ');
// Join the (hat-ed) words back to sentence
return string.Join(
    " ",
    // Select an IEnum of list of integers indicating the positions of vowels
    a.Select(w=>
        w.Select((c,i)=>
            // If it's vowel, return position (>=0), else return -1
            "AEIOUaeiou".Any(d=>c==d)?i:-1
        // Filter vowels only
        ).Where(x=>x>=0)
        .ToList()
    // Convert each list of integers to hat-ed words
    ).Select((l,i)=>
        l.Any()
            // Insert "something" into the word...
            ?a[i].Insert(
                // ...at the position after a random vowel in that word...
                l[r.Next(l.Count)]+1,
                // "something" is a random integer in [0x0300, 0x0303), then casted to UTF16 i.e. [U+0300, U+0302]
                ""+(char)r.Next(768,771))
            // List is empty => just return original word
            :a[i]));

1

Mathematica、226バイト

Join@@((p=Position[w=#,Alternatives@@(v=Characters@"aeiouAEIOU")];If[p!={},i=#&@@RandomChoice@p;w[[i]]=FromCharacterCode[ToCharacterCode["àèìòùÀÈÌÒÙ"][[#&@@Position[v,w[[i]]]]]+RandomInteger@2]];w)&/@Split[#,{##}~FreeQ~" "&])&

入力として文字のリストを取り、文字のリストを返す名前のない関数。読みやすいバージョンで、わずかに変更されていません:

 1  v = Characters["aeiouAEIOU"];
 2  a = ToCharacterCode["àèìòùÀÈÌÒÙ"];
 3  Join @@ (
 4    (p = Position[w = #, Alternatives @@ v]; 
 5      If[p != {},
 6        i = First[RandomChoice[p]]; 
 7        w[[i]] =
 8          FromCharacterCode[
 9            a[[ First[ Position[ v, w[[i]] ] ] ]] + RandomInteger[2]
10          ]
11        ]; w
12    ) &
13  ) /@ Split[#1, FreeQ[{##1}, " "] &] &

行13は、入力をすべてのスペースで単語(文字のサブリスト)に分割します。各単語は4〜12行目で定義された関数によって処理され、結果は3行目で1つのリストに再び結合されます。

行4 pは、単語のどの文字wが母音であるかを示すインデックスのリストに設定します。母音がある場合(5行目)、そのようなインデックスの1つをランダムに選択しi(6行目)、単語のその単一文字を新しい文字にリセットします(7-10行目)。最後に、(おそらく変更された)単語を出力しますwます。

新しい文字を選択するには、置換する母音が文字列のどこにあるかを見つけv、対応する文字コードをから選択しますa。しかし、3つの帽子をランダムに選択するには、そのコードを取得し、0から2(行9)の間のランダムな整数を追加してから、文字に変換します。(幸いなことに、behattedの母音はすべて、UTF-8文字コードの連続した3つのトリオに入っています。)


1

Python 3、170バイト

from random import *
c=choice
print(' '.join([w,w[:i]+c('̀́̂')+w[i:]][i>0]for w in input().split()for i in[c([j+1 for j,x in enumerate(w)if x in 'aeiouAEIOU']or[0])]))

ゴルフをしていない:

from random import choice
print(' '.join([
                   w,  # Don't modify the word if no vowels were found

                   w[:i] + choice('̀́̂') + w[i:]
               ][i > 0]
               for w in input().split()
                   for i in [choice([j + 1 for j, x in enumerate(w) if x in 'aeiouAEIOU']
                                    or [0])  # choice requires a non-empty sequence
                             ]))

1
importとの間にスペースは必要ありません*
氏Xcoder

j+1 forすることができますj+1for
ジョナサンフレッチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.