Bao lâu là một từ tiếng Wales?


37

Viết chương trình hoặc hàm nhận đầu vào là một chuỗi đại diện cho một từ tiếng Wales (UTF-8 trừ khi bạn có quy định khác).

Sau đây là tất cả các chữ cái duy nhất trong tiếng Wales:

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

Để trích dẫn Wikipedia ,

Trong khi các chữ viết tắt ch , dd , ff , ng , ll , ph , rh , th được viết bằng hai ký hiệu, chúng đều được coi là các chữ cái đơn. Điều này có nghĩa là, ví dụ Llanelli (một thị trấn ở Nam Wales) được coi là chỉ có sáu chữ cái bằng tiếng Wales, so với tám chữ cái bằng tiếng Anh.

Những chữ cái này cũng tồn tại trong tiếng Wales, mặc dù chúng bị giới hạn trong các từ vựng kỹ thuật mượn từ các ngôn ngữ khác:

k, q, v, x, z

Các chữ cái có dấu phụ không được coi là các chữ cái riêng biệt, nhưng chức năng của bạn phải chấp nhận chúng và có thể đếm chúng. Những chữ cái như vậy có thể là:

â, ê, î, ô, û,, ŵ, á, é, í, ó, ú, ê ù,

(Điều này có nghĩa là ASCII không phải là mã hóa đầu vào có thể chấp nhận được, vì nó không thể mã hóa các ký tự này.)

Ghi chú:

  • Đây là mã golf.
  • Bạn không cần phải tính đến các từ như llongyfarch , trong đó ng không phải là một chữ viết tắt, mà là hai chữ cái riêng biệt. Từ này có chín chữ cái, nhưng bạn có thể hiểu nhầm thành tám chữ cái. (Nếu bạn có thể giải thích cho những từ như vậy, điều đó thật tuyệt vời, nhưng nằm ngoài phạm vi của thử thách này.)
  • Đầu vào được đảm bảo không có khoảng trắng (trừ khi bạn thích nó với một dòng mới duy nhất (hoặc một cái gì đó bí truyền hơn), trong trường hợp có thể được cung cấp). Chắc chắn sẽ không có khoảng trắng nội bộ.

Các trường hợp thử nghiệm:

  • Llandudno, 8
  • Llanelli, 6
  • Rhyl, 3
  • Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (thực sự 51, nhưng chúng tôi sẽ tính 50)
  • T ,r, 3
  • Cymru, 5
  • Glyndŵr, 7

4
Đầu vào có thể được đưa ra trong tất cả các chữ thường?
Sản xuất ETH

15
Vợ tôi là một người nói tiếng xứ Wales sẽ khuyên rằng J được thêm vào phần chữ "Mượn" vì nó không thực sự là một phần của bảng chữ cái tiếng Wales
Rich Starkie

@RichStarkie Bài viết Wikipedia hơi mơ hồ trên mặt trận đó. Hiểu biết của tôi là j được sử dụng trong các từ mượn ngay cả khi nó không có trong từ gốc, vì vậy nó được sử dụng theo âm vị học, ngụ ý rằng ở giai đoạn này, nó được sinh ra trong ngôn ngữ. Tôi đã thấy những tranh luận tương tự về v trong tiếng Ailen. Nó được coi rộng rãi không phải là một phần của bảng chữ cái Ailen, nhưng nó tồn tại trong một số tên Ailen, như Ó Cuiv .
TRiG

1
Và một chú thích trong bài viết chính tả tiếng Wales liệt kê mh , nhngh dưới dạng biểu đồ . Methinks Tôi cần mở một câu hỏi về Ngôn ngữ học SE .
TRiG

3
Thật xấu hổ vì đã quá muộn; rằng "ngh" ba-glyphed có thể đã làm cho nó phức tạp hơn một chút.
megaflop

Câu trả lời:


6

05AB1E , 24 23 21 byte

Mã số:

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

Giải trình:

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.

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến!


16

Võng mạc , 23 byte

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

Hãy thử trực tuyến!

Ngay cả regex moar.


Có lẽ tôi không biết gì về Retina, nhưng việc xuất ra độ dài của văn bản đầu vào ở đâu? Tài liệu về Retina dường như không giải thích cách thức hoạt động trong "Thử trực tuyến!" trang web.
Xaero Degreaz

2
Đầu ra là ẩn, bởi vì dòng duy nhất là giai đoạn Kết hợp, trả về số lượng kết quả khớp. Ở đây, regex phù hợp với mọi chữ cái tiếng Wales.
dùng48538

Vì vậy, theo logic đó, sau đó mọi câu trả lời dưới đây trong đó độ dài được gọi rõ ràng trong mã có thể được rút ngắn?
Xaero Degreaz

2
@XaeroDegreaz Retina là một trong những ngôn ngữ duy nhất tự động đếm các trận đấu và in chúng ra. Đây là cách Retina, ngôn ngữ, hoạt động. Đây không phải là cách các ngôn ngữ khác hoạt động, và vì vậy những ngôn ngữ đó cần gọi các hàm độ dài của chúng một cách rõ ràng để có được đầu ra đúng.
isaacg

Cảm ơn, tôi hiểu rồi. Sau khi đọc thêm vào tài liệu, tôi thấy giai đoạn "Khớp" mặc định thực hiện đầu ra này.
Xaero Degreaz

5

JavaScript (ES6), 44 byte

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

Câu trả lời tầm thường có thể là ngắn nhất.


5

BASH 52 50 (sed + wc) 41

-9 cảm ơn Jordan

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

Nếu chữ in hoa được yêu cầu, cái này cần iở cuối lệnh sed. (Tôi bỏ nó đi vì tất cả các "chữ cái đơn" trong câu hỏi đều là chữ thường mặc dù một số ví dụ không có).


1
Tại sao grep -o .|wc -lthay vì wc -c?
Jordan

wc -c tính â thông qua ẁ là hai.
Riley

À, tất nhiên rồi. FWIW nếu bạn sử dụng GNU hoặc BSD, wcbạn có thể sử dụng -mđể đếm các ký tự thay vì byte.
Jordan

Bạn có thể di chuyển ctừ chtrong với [prt]? sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
megaflop

2
Đó là một sự xấu hổ ([dfl])\1sẽ lâu hơn dd|ff|ll. Chỉ cần thêm một phụ âm đôi sẽ ủng hộ phiên bản thông minh.
Toby Speight

4

Rơm , 30 58 35 33 byte

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

Thay thế từng lần xuất hiện của regex bằng 0và chuyển đổi từ đơn nguyên sang thập phân.

Đáng buồn thay, Straw không thể chuyển cờ đến regex. Tôi quên mất việc ?flags:xây dựng

Hãy thử trực tuyến! (Mã được thêm là để xác minh tất cả các trường hợp thử nghiệm)


Làm thế nào để ngôn ngữ này khác với một cái gì đó như Retina?
Hạ cấp

@Downgoat Straw dựa trên stack: P
TuxCrafting


3

PowerShell v2 +, 52 50 48 byte

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

Liệu một chữ cái -replacetrên tất cả các ký tự hai ký tự, thay đổi chúng thành 0(được thực hiện bởi vì thay đổi thành một chữ số sẽ yêu cầu dấu ngoặc kép), sau đó nhận được .lengthchuỗi kết quả.

Các trường hợp thử nghiệm

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

Tôi không quen thuộc với PowerShell, nhưng bạn có thực sự cần dấu ngoặc đơn xung quanh [prtc]hkhông?
Jordan

@Jordan Không, tôi thì không. Đó không phải là một thứ PowerShell, đó là một thứ không tốt cho tôi. : D Cảm ơn vì đã chơi golf!
admBorkBork


2

PHP, 56 byte

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

1
Tôi tin rằng các [dfl]{2}trận đấu df, ldvv cũng như các trận đấu dự định của nó. dd|ff|lllà cùng chiều dài.
Sản xuất ETH

1
Tôi biết rằng niềm tin của bạn là đúng nhưng tôi nghĩ rằng niềm tin của bạn không phải là một loại tin tưởng. nó trông giống một loại kowledge
Jörg Hülsermann

1
Thay vì echo(khoảng trống ở cuối), hãy sử dụng <?=, giúp tiết kiệm 2 byte. Ngoài ra, $tkhông cần thiết ở đó, giúp bạn tiết kiệm thêm 3 byte.
Ismael Miguel

Thnak Bạn Ismael. Tôi phải bối rối hơn một chút rằng tôi không xóa $ t
Jörg Hülsermann

2

Java 7, 156 73 byte

Tải các byte được lưu nhờ vào @ OlivierGrégoire .

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

Các trường hợp bất ngờ & thử nghiệm:

Hãy thử nó ở đây.

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

Đầu ra:

8
6
3
50
3
5
7

Bạn nhập và sau đó bạn không sử dụng Matchertrực tiếp? : o Ngoài ra, Matchercó thể được xác định trong vòng lặp for.
Olivier Grégoire

1
Tôi có cảm giác mạnh đó return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()là cách, cách ngắn hơn. Không thể làm việc này?
Olivier Grégoire

Vâng, vâng, nó hoạt động và đó là 73 byte cho phiên bản Java 7 ( int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}). Và chỉ 51 cho phiên bản Java 8 ( s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()).
Olivier Grégoire

1
@ OlivierGrégoire Cảm ơn. Đó Matcherlà một tai nạn. Tôi đã có nó một cách chính xác trong mã kiểm tra, nhưng không phải trong mã đánh gôn ..>.> replaceAllMặc dù vậy, công việc của bạn tốt hơn, cảm ơn.
Kevin Cruijssen

1

R, 54 byte

Rất giống với các câu trả lời khác. Khớp bất kỳ một trong hai chữ cái ký tự và thay thế chúng bằng @và sau đó đếm số lượng ký tự. Đọc đầu vào từ stdin. Sử dụng tùy chọn ignore.case = TRUE(đối số thứ ba để gsub) để khớp cả ký tự chữ hoa và chữ thường.

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

Tiền thưởng

Cả hai gsubncharđược vector hóa có nghĩa là điều này cũng hoạt động trên một vectơ ký tự, ví dụ:

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

sản xuất:

[1]  8  6  3 50  3  5  7


0

XQuery, 77 byte

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


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.