Galce bir kelime ne kadardır?


37

Galce bir sözcüğü temsil eden bir dize girdi olarak alan bir program veya işlev yazın (aksi belirtilmedikçe UTF-8).

Aşağıdakilerin tümü Galce'daki tek harflerdir :

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

Wikipedia'dan alıntı yapmak ,

Her biri iki sembolle yazıldığında ch , dd , ff , ng , ll , ph , rh , th digraphslarının tümü tek harf olarak kabul edilir. Bu, örneğin, Llanelli'nin (Güney Galler'deki bir kasaba) İngilizce'deki sekiz harfe kıyasla Galce'de yalnızca altı harfe sahip olduğu anlamına gelir.

Bu mektuplar, diğer dillerden ödünç alınan teknik terimlerle sınırlı olsalar da, Galce'de bulunmaktadır:

k, q, v, x, z

Aksanlı harflerin ayrı harfler olduğu kabul edilmez, ancak işleviniz onları kabul etmeli ve onları sayabilmelidir. Muhtemel bu mektuplar:

â, ê, î, ô, ŷ, ŵ, á, é, í, ó, ú, ý, ẃ, ä, ë, ï,,,,, ẅ, à, è, ì, ï, ò, ù, ẁ

(Bu, ASCII'nin bu karakterleri kodlayamadığından kabul edilebilir bir giriş kodlaması olmadığı anlamına gelir.)

Notlar:

  • Bu kod golfü.
  • Sen gibi kelimeleri hesaba gerek yok llongyfarch hangi, ng bir digraph değil, iki ayrı harfler. Bu kelimenin dokuz harfi vardır, ancak sekiz olarak yanlış sayabilirsiniz. (Eğer varsa olabilir böyle bir deyişle hesaba, bu tür müthiş bir, ama bu meydan kapsamı dışındadır.)
  • Girişin boşluk içermemesi garantilidir (tek bir izleyen yeni satırla (veya daha ezoterik bir şeyle tercih etmediğiniz sürece) (bu durumda sağlanabilir). Kesinlikle hiçbir iç boşluk olmayacak.

Test durumları:

  • Llandudno, 8
  • Llanelli, 6
  • Rhyl, 3
  • Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (gerçekten 51, ancak 50 sayarız)
  • Tar, 3
  • Cymru, 5
  • Glyndŵr, 7

4
Giriş tüm küçük harflerle verilebilir mi?
ETHProductions 12:16

15
Yerli bir Welsh konuşmacısı olan eşim, J'nin "Galrow" alfabesinin bir parçası olmadığı için "Ödünç" mektuplar bölümüne eklenmesini tavsiye eder
Zengin Starkie

@RichStarkie Wikipedia makalesi bu konuda biraz belirsizdi. Anladığım kadarıyla j orijinal sözcükte olmasa bile ödünç alınan sözcüklerde kullanılıyor, bu nedenle fonolojik olarak kullanılıyor, bu aşamada dilin kendiliğinden doğallaştığını ima ediyor. İrlanda'da v hakkında benzer argümanlar gördüm . İrlanda alfabesinin bir parçası olmadığı kabul edilir ancak Ó Cuiv gibi bazı İrlanda adlarında bulunur .
TRiG

1
Galce yazım belgesindeki dipnot, mh , nh ve ngh ' i grafikler olarak listeler . Metinler Dilbilim SE üzerine bir soru açmam gerekiyor .
TRiG

3
Utanç çok geç; Bu üçlü gliphed "ngh" biraz daha karmaşık yapmış olabilir.
megaflop

Yanıtlar:


6

05AB1E , 24 23 21 bayt

Kod:

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

Açıklama:

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 kodlamasını kullanır . Çevrimiçi deneyin!


16

Retina , 23 bayt

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

Çevrimiçi deneyin!

Hatta moar regex.


Muhtemelen Retina'ya karşı cehaletimdir, fakat giriş metninin uzunluğunun çıktısı nedir? Retina'daki belgeler "Çevrimiçi deneyin!" De nasıl çalıştığını açıklamıyor gibi görünüyor. bir site.
Xaero Degreaz 13:16

2
Çıktı örtüktür, çünkü tek satır bir Eşleşme aşamasıdır, eşleşme sayısını döndürür. Burada, regex her Galler harfiyle eşleşir.
kullanıcı48538

Yani bu mantıkla, sonra kodun içindeki kodun uzunluğu olarak açıkça adlandırılan aşağıdaki cevaplar kısaltılabilir mi?
Xaero Degreaz

2
@XaeroDegreaz Retina, eşleşmeleri otomatik olarak sayan ve bunları basan tek dillerden biridir. Dil, Retina böyle çalışır. Diğer dillerin işleyişi bu değildir ve bu nedenle, doğru çıktıları elde etmek için bu dillerin uzunluk işlevlerini açıkça çağırması gerekir.
isaacg

Teşekkürler, şimdi anlıyorum. Belgelere daha fazla okuduktan sonra varsayılan "Maç" aşamasını görüyorum bu çıktı.
Xaero Degreaz,

5

JavaScript (ES6), 44 bayt

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

Önemsiz cevap en kısa olabilir.


5

BASH 52 50 (sed + wc) 41

-9 Jordan sayesinde

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

Büyük harf gerekiyorsa i, bunun sed komutunun sonunda olması gerekir. (Dışarıda bıraktım, çünkü bazı örnekler olmasa da, söz konusu "tek harflerin tümü" küçük harflerden oluşuyor.


1
Neden grep -o .|wc -lyerine wc -c?
Ürdün

wc -c â ila two ikiye kadar sayar.
Riley

Ah, elbette. FWIW GNU veya BSD wckullanıyorsanız -mbayt yerine karakter saymak için kullanabilirsiniz .
Ürdün

Hareket edebiliyor cgelen chİle [prt]? sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
megaflop

2
Daha ([dfl])\1uzun sürecek bir ayıp dd|ff|ll. Sadece bir iki kat daha ünsüz zeki sürümü lehine olur.
Toby Speight

4

Straw , 30 58 35 33 bayt

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

Regex'in her oluşumunu değiştirin 0ve unary'den ondalık karaktere dönüştürün.

Ne yazık ki, Straw bayraklarını regex'lere geçiremez. Ben unutmak ?flags:yapı

Çevrimiçi deneyin! (Eklenen kod tüm test durumlarını doğrulamak içindir)


Bu dilin Retina gibi bir şeyden farkı nedir?
Downgoat

@Downgoat Straw yığın tabanlı: P
TuxCrafting 12:16


3

PowerShell v2 +, 52 50 48 bayt

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

-replaceTüm iki sembollü-tek harfli harflerin hepsinde bir değişiklik yapar, bunları değiştirir 0(rakamsız olarak değiştirmek için tırnak gerekir), sonra .lengthsonuç dizenin değerini alır .

Test durumları

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'e aşina değilim, ancak gerçekten etraftaki parantezlere [prtc]hmi ihtiyacınız var ?
Ürdün

@Jordan Hayır, yapmıyorum. Bu bir PowerShell olayı değil, regex'te olmayan bir şey. : D Golf için teşekkürler!
AdmBorkBork


2

PHP, 56 Bayt

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

1
İnanıyorum [dfl]{2}maçlar df, ldvb yanı sıra amaçlanan maçları. dd|ff|llaynı uzunluktadır.
ETHProductions

1
İnancınızın doğru olduğunu biliyorum, ancak inancınızın bir tür inanma olmadığını düşünüyorum. bir çeşit
kowledge

1
Yerine echo(sonunda boşluk), <?=2 bayt kaydeder kullanın . Ayrıca, $tburada 3 bayt daha tasarruf etmenize gerek yok.
Ismael Miguel,

Thnak seni Ismael. Daha sonra birazcık kafamı karıştırmam gerekiyor, $ t
Jörg Hülsermann 13:16

2

Java 7, 156 73 bayt

@ OlivierGrégoire sayesinde bir sürü bayt kurtarıldı .

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

Ungolfed ve test durumları:

Burada dene.

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

Çıktı:

8
6
3
50
3
5
7

İthalat yapıyorsunuz ve sonra Matcherdoğrudan kullanmıyorsunuz ? : o Ayrıca, Matcherfor döngüsünde tanımlanabilir.
Olivier Grégoire

1
Bu, return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()çok kısa olan yolunda güçlü bir his var . Bu işe yaramaz mı?
Olivier Grégoire

Evet, işe yarıyor ve Java 7 sürümü ( int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}) için 73 bayt . Ve Java 8 sürümü için sadece 51 ( s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()).
Olivier Grégoire

1
@ OlivierGrégoire Teşekkürler. Bu Matcherbir kazaydı. Test kodunda doğru yazdım, ancak golf kodunda yok ..>.> replaceAllİşleriniz daha iyi, teşekkürler.
Kevin Cruijssen

1

R, 54 bayt

Diğer cevaplara çok benzer. İki karakter harfinden herhangi biriyle eşleşir ve bunların yerine geçer @ve ardından karakter sayısını sayar. Stdin'den girişi okur. Hem küçük hem de büyük karakterlerle eşleşme seçeneğini ignore.case = TRUE(üçüncü argüman gsub) kullanır.

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

Bonus

Her ikisi de gsubve ncharvektörelleştirilmiştir, bunun bir karakter vektörü üzerinde de çalıştığı anlamına gelir, örneğin:

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

üretir:

[1]  8  6  3 50  3  5  7


0

XQuery, 77 bayt

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.