ウェールズ語はどのくらいですか?


37

ウェールズ語を表す文字列を入力として受け取るプログラムまたは関数を作成します(ユーザーが特に指定しない限り、UTF-8)。

以下は、ウェールズ語のすべての単一文字です。

a、b、c、ch、d、dd、e、f、ff、g、ng、h、i、j、l、ll、m、n、o、p、ph、r、rh、s、t、 th、u、w、y

ウィキペディアを引用するには、

有向グラフchddffngllphrhthはそれぞれ2つの記号で書かれていますが、それらはすべて単一の文字と見なされます。これは、たとえば、ラネリ(ウェールズ南部の町)は、英語の8文字と比較して、ウェールズ語では6文字しかないと見なされていることを意味します。

これらの文字はウェールズ語にも存在しますが、他の言語から借用した技術用語に限定されています。

k、q、v、x、z

分音記号付きの文字は個別の文字とは見なされませんが、関数はそれらを受け入れてカウントできる必要があります。可能なそのような手紙は次のとおりです:

â、ê、î、ô、û、ŷ、ŵ、á、é、í、ó、ú、ý、ẃ、ä、ä、ë、ï、ö、ü、ÿ、ẅ、à、è、ì、ò、 ù、ẁ

(これは、これらの文字をエンコードできないため、ASCIIは受け入れ可能な入力エンコードではないことを意味します。)

ノート:

  • これはコードゴルフです。
  • ngが有向グラフではなく、2つの別々の文字であるllongyfarchのような単語を考慮する必要はありません。この単語には9文字ありますが、8文字と数えることができます。(そのような言葉説明できるなら、それは素晴らしいことですが、この課題の範囲外です。)
  • 入力には空白が含まれないことが保証されています(末尾に改行が1つ(またはより難解なもの)が必要な場合を除き、その場合は提供できます)。確かに内部の空白はありません。

テストケース:

  • ランディドノー、8
  • ラネリ、6
  • リル、3
  • Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch、50(実際には51ですが、50をカウントします)
  • Tŷr、3
  • Cymru、5
  • グリンダー、7

4
入力をすべて小文字で入力できますか?
-ETHproductions

15
ネイティブスピーカーウェールズ語である私の妻は、それが実際にウェールズのアルファベットの一部ではないとして、Jが「借用」の文字部分に追加されることをお勧めします
リッチStarkie

@RichStarkieウィキペディアの記事は、その面では少しあいまいでした。私の理解では、jは元の単語に存在しない場合でも借用された単語で使用されるため、音韻論的に使用されます。私はアイルランド語でvについて同様の議論を見てきました。アイルランド語のアルファベットの一部ではないと広く考えられていますが、ÓCuivなどのアイルランド語の名前で存在します。
TRiG

1
そして、ウェールズ正書法の記事の脚注には、mhnh、およびngh書記としてリストされています。Methinks 言語学SEに関する質問を開く必要があります。
-TRiG

3
残念ですが、手遅れです。トリプルグリフの "ngh"により、少し複雑になった可能性があります。
メガフロップ

回答:


6

05AB1E24 23 21バイト

コード:

u•éÓœ°D¥M™ù>•30B2ô0:g

説明:

u                      # Convert the input to uppercase.
 •éÓœ°D¥M™ù>•30B       # Compressed version of CHDDFFNGLLPHRHTH.
                         It convert the text between the •'s from base 214 to
                         base 10 and converts that to base 30.
                2ô     # Split into pieces of 2.
                  0:   # Replace each element that also occurs in the input by 0.
                    g  # Get the length of the processed input.

CP-1252エンコードを使用します。オンラインでお試しください!


16

網膜、23バイト

i`[cprt]h|dd|ff|ng|ll|.

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

モアー正規表現ですら。


それはおそらくRetinaの私の無知ですが、入力テキストの長さの出力はどこにありますか?Retinaのドキュメントには、「Try it online!」でそれがどのように機能するかが説明されていないようです。サイト。
Xaero Degreaz

2
唯一の行はMatchステージであり、一致の数を返すため、出力は暗黙的です。ここで、正規表現はすべてのウェールズ文字に一致します。
user48538

したがって、そのロジックによって、コードで明示的に長さが呼び出される以下のすべての答えを短縮できますか?
Xaero Degreaz

2
@XaeroDegreaz Retinaは、一致を自動的にカウントして出力する唯一の言語の1つです。これが、言語であるRetinaの仕組みです。他の言語がどのように機能するかではないため、これらの言語は適切な出力を得るために明示的に長さ関数を呼び出す必要があります。
isaacg

おかげで、私は今理解しています。ドキュメントをさらに読んだ後、デフォルトの「Match」ステージがこの出力を実行することがわかります。
Xaero Degreaz

5

JavaScript(ES6)、44バイト

x=>x.match(/[cprt]h|dd|ff|ng|ll|./gi).length

些細な答えが一番短いかもしれません。


5

BASH 52 50(sed + wc)41

-9ヨルダンに感謝

sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m

大文字が必要な場合i、sedコマンドの最後に必要です。(いくつかの例はそうではありませんが、質問の「単一文字」はすべて小文字であるため、省略しました)。


1
なぜgrep -o .|wc -l代わりにwc -c
ヨルダン

wc -cは、âからẁまでを2としてカウントします。
ライリー

ああ、もちろん。FWIW GNUまたはBSD wcを使用-mする場合、バイトではなく文字をカウントするために使用できます。
ヨルダン

cからchに移動できます[prt]か? sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
メガフロップ

2
それは恥([dfl])\1よりも長いですdd|ff|ll。もう1つ2重子音が賢いバージョンを好むでしょう。
トビーSpeight

4

わら30 58 35 33バイト

<((?i:[cprt]h|dd|ff|ng|ll|.))0/$>

正規表現の各出現をで置き換え0、単項から10進数に変換します。

悲しいことに、Strawはフラグを正規表現に渡すことができません。?flags:コンストラクトを忘れる

オンラインでお試しください!(追加されたコードは、すべてのテストケースを検証することです)


この言語はRetinaのようなものとどう違うのですか?
ダウンゴート

@Downgoat Strawはスタックベースです:P
TuxCrafting


3

PowerShell v2 +、52 50 48バイト

($args[0]-replace'dd|ff|ng|ll|[prtc]h',0).length

-replace変更奴らは、すべての上に2つのシンボル・一文字文字に0(非数字に変更すると、引用符が必要になるために行う)、その後、取得.length結果の文字列のを。

テストケース

PS C:\Tools\Scripts\golfing> 'Llandudno','Llanelli','Rhyl','Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch','Tŷr','Cymru','Glyndŵr'|%{"$_ --> "+(.\how-long-is-a-welsh-word.ps1 $_)}
Llandudno --> 8
Llanelli --> 6
Rhyl --> 3
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch --> 50
Tŷr --> 3
Cymru --> 5
Glyndŵr --> 7

PowerShellについてはよく知りませんが、括弧は本当に必要[prtc]hですか?
ヨルダン

@Jordanいいえ、私はしません。それはPowerShellのことではなく、正規表現では私には不得意なことです。:Dゴルフをありがとう!
AdmBorkBork


2

PHP、56バイト

<?=preg_match_all("#[cprt]h|dd|ff|ll|ng|.#iu",$argv[1]);

1
[dfl]{2}一致dfldなど、およびその意図した一致を信じています。dd|ff|ll同じ長さです。
ETHproductions

1
私はあなたの信念が真実であることを知っていますが、あなたの信念は一種の信念ではないと思います。それは一種の知識である以上に見えます
ヨルクヒュルザーマン

1
echo(末尾のスペース)の代わりに、を使用<?=して2バイト節約します。また、これ$tは必要ないので、さらに3バイト節約できます。
イスマエルミゲル

スナック・ユー・イスマエル。私は$ tを削除しないと少し混乱する必要があります
ヨルグヒュルサーマン

2

Java 7、156 73バイト

@OlivierGrégoireのおかげで、大量のバイトを節約できました。

int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","*").length();}

未ゴルフ&テストケース:

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

class M{
  static int c(String s){
    return s.replaceAll("[cprt]h|dd|ff|ng|ll", "*").length();
  }

  public static void main(String[] a){
    System.out.println(c("llandudno"));
    System.out.println(c("llanelli"));
    System.out.println(c("rhyl"));
    System.out.println(c("llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch"));
    System.out.println(c("tŷr"));
    System.out.println(c("cymru"));
    System.out.println(c("glyndŵr"));
  }
}

出力:

8
6
3
50
3
5
7

インポートしてからMatcher直接使用しないのですか?:oまた、Matcherforループで定義できます。
オリビエグレゴワール

1
私は強い感覚を持っていreturn s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()ます。これは機能しませんか?
オリビエグレゴワール

まあ、はい、それは動作し、Java 7バージョン(int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();})では73バイトです。また、Java 8バージョンの場合は51のみです(s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length())。
オリビエグレゴワール

1
@OlivierGrégoireありがとう。これMatcherは事故でした。テストコードには正しくありましたが、ゴルフコードにはありませんreplaceAllでした。
ケビンCruijssen

1

R、54バイト

他の回答と非常に似ています。2文字の文字のいずれかに一致し、それらを置き換えて@、文字数をカウントします。stdinから入力を読み取ります。オプションignore.case = TRUE(の3番目の引数gsub)を使用して、大文字と小文字の両方を一致させます。

nchar(gsub("ch|dd|ff|ng|ll|ph|rh|th","@",scan(,""),T))

ボーナス

gsubncharは両方ともベクトル化されます。つまり、これは文字ベクトルでも機能します。たとえば、

v=c("Llandudno","Llanelli","Rhyl","Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch","Tŷr","Cymru","Glyndŵr")
nchar(gsub("ch|dd|ff|ng|ll|ph|rh|th","@",v,T))

生成するもの:

[1]  8  6  3 50  3  5  7


0

XQuery、77バイト

declare variable$s external;count(tokenize($s,'[cprt]h|ff|dd|ll|ng|.','i'))-1


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