คำภาษาเวลส์นานเท่าไหร่


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

ที่จะพูดวิกิพีเดีย ,

ในขณะที่ digraphs ch , dd , ff , ng , ll , ph , rh , thแต่ละตัวจะถูกเขียนด้วยสัญลักษณ์สองตัวพวกมันทั้งหมดถือว่าเป็นตัวอักษรเดียว ซึ่งหมายความว่าตัวอย่างเช่น Llanelli (เมืองในเซาท์เวลส์) ได้รับการพิจารณาว่ามีเพียงหกตัวอักษรในภาษาเวลส์เมื่อเทียบกับตัวอักษรภาษาอังกฤษแปดตัว

จดหมายเหล่านี้มีอยู่ในเวลส์แม้ว่าพวกเขาจะถูก จำกัด ให้ใช้คำศัพท์ทางเทคนิคที่ยืมมาจากภาษาอื่น:

k, q, v, x, z

จดหมายที่มีเครื่องหมายกำกับการออกเสียงไม่ถือว่าเป็นตัวอักษรที่แยกจากกัน แต่ฟังก์ชั่นของคุณต้องยอมรับและสามารถนับได้ ตัวอักษรที่เป็นไปได้คือ:

â, ê, î, ô, û, á, á, é, í, ú, ú, ä, ä, ö, è, è, è, è, ù, ẁ

(ซึ่งหมายความว่า ASCII ไม่ใช่การเข้ารหัสอินพุตที่ยอมรับได้เนื่องจากไม่สามารถเข้ารหัสอักขระเหล่านี้ได้)

หมายเหตุ:

  • นี่คือรหัสกอล์ฟ
  • คุณไม่จำเป็นต้องคำนึงถึงคำเช่นllongyfarchซึ่งngไม่ใช่ digraph แต่เป็นตัวอักษรสองตัวแยกกัน คำนี้มีตัวอักษรเก้าตัว แต่คุณสามารถแก้ไขได้แปดตัว (หากคุณสามารถอธิบายถึงคำเหล่านี้ได้มันช่างยอดเยี่ยม แต่อยู่นอกขอบเขตของการท้าทายนี้)
  • อินพุตนั้นรับประกันว่าจะไม่มีช่องว่าง (ยกเว้นว่าคุณจะชอบด้วยการขึ้นบรรทัดใหม่ต่อท้ายเดียว (หรือบางอย่างที่ลึกลับกว่า) ซึ่งในกรณีนี้สามารถให้ได้) แน่นอนจะไม่มีช่องว่างภายใน

กรณีทดสอบ:

  • Llandudno, 8
  • Llanelli, 6
  • Rhyl, 3
  • Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (จริง ๆ 51 แต่เราจะนับ 50)
  • ถึง, 3
  • Cymru, 5
  • Glyndŵr, 7

4
สามารถรับอินพุตในตัวพิมพ์เล็กทั้งหมดได้หรือไม่
ETHproductions

15
ภรรยาของฉันซึ่งเป็นเจ้าของภาษาชาวเวลส์จะแนะนำว่า J ถูกเพิ่มเข้าไปในส่วนของตัวอักษร "ยืม" เนื่องจากไม่ใช่ส่วนหนึ่งของตัวอักษรภาษาเวลส์
Rich Starkie

@RichStarkie บทความ Wikipedia ค่อนข้างคลุมเครืออยู่ข้างหน้า ความเข้าใจของฉันคือjถูกใช้ในคำที่ยืมมาแม้ว่าจะไม่ได้อยู่ในคำที่เป็นต้นฉบับดังนั้นมันจึงใช้สัทศาสตร์ซึ่งหมายความว่าในขั้นตอนนี้มันมีลักษณะเป็นภาษา ฉันเคยเห็นข้อโต้แย้งที่คล้ายกันเกี่ยวกับvในไอริช มันเป็นที่ยอมรับอย่างกว้างขวางไม่ได้เป็นส่วนหนึ่งของตัวอักษรไอริช แต่มันมีอยู่ในบางชาวไอริชชื่อเช่นÓCuív
TRiG

1
และเชิงอรรถในเวลส์แสดงรายการของบทความการันต์MH , NHและNGHเป็นgraphems methinks ฉันจำเป็นต้องเปิดคำถามเกี่ยวกับภาษาศาสตร์ SE
TRiG

3
อับอายสายเกินไป สัญลักษณ์รูปสามเหลี่ยมที่ "ngh" อาจทำให้ซับซ้อนขึ้นเล็กน้อย
megaflop

คำตอบ:


6

05AB1E , 24 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|.

ลองออนไลน์!

แม้แต่ Regar moar


อาจเป็นเพราะฉันไม่รู้ว่า Retina เป็นอย่างไร แต่การส่งออกของความยาวของข้อความอินพุตเป็นอย่างไร เอกสารบน Retina ดูเหมือนจะไม่อธิบายว่ามันทำงานอย่างไรใน "ลองออนไลน์!" เว็บไซต์.
Xaero Degreaz

2
ผลลัพธ์เป็นนัยเนื่องจากบรรทัดเดียวคือสเตจการแข่งขันส่งคืนจำนวนการจับคู่ ที่นี่ regex ตรงกับตัวอักษรภาษาเวลช์ทุกฉบับ
user48538

ดังนั้นด้วยเหตุผลนั้นทุกคำตอบด้านล่างที่ความยาวถูกเรียกอย่างชัดเจนในโค้ดสามารถย่อให้สั้นลงได้ไหม
Xaero Degreaz

2
@XaeroDegreaz Retina เป็นหนึ่งในภาษาเดียวที่นับการจับคู่โดยอัตโนมัติและพิมพ์ออกมา นี่คือวิธีที่ Retina ภาษาใช้งานได้ดี ไม่ใช่วิธีการทำงานของภาษาอื่นดังนั้นภาษาเหล่านั้นจำเป็นต้องเรียกใช้ฟังก์ชันความยาวอย่างชัดเจนเพื่อให้ได้ผลลัพธ์ที่ถูกต้อง
isaacg

ขอบคุณฉันเข้าใจแล้ว หลังจากอ่านข้อมูลเพิ่มเติมในเอกสารฉันเห็นว่า "การจับคู่" เริ่มต้นดำเนินการผลลัพธ์นี้
Xaero Degreaz


5

BASH 52 50 (sed + wc) 41

-9 ขอบคุณจอร์แดน

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

หากต้องการตัวอักษรตัวพิมพ์ใหญ่จำเป็นต้องมีiคำสั่ง at ท้ายคำสั่ง sed (ฉันทิ้งไว้เพราะ "ตัวอักษรเดียว" ทั้งหมดในคำถามเป็นตัวพิมพ์เล็กแม้ว่าจะไม่ใช่ตัวอย่างบางส่วน)


1
ทำไมgrep -o .|wc -lแทนwc -c?
Jordan

wc -c นับถึง through เป็นสอง
Riley

อ่าแน่นอน FWIW ถ้าคุณใช้ GNU หรือ BSD wcคุณสามารถใช้-mเพื่อนับตัวอักษรแทนไบต์
Jordan

คุณสามารถย้ายcจากchในด้วย[prt]หรือไม่ sed -r 's,dd|ff|ng|ll|[cprt]h,1,gi'|wc -m
megaflop

2
มันเป็นความอัปยศจะนานกว่า([dfl])\1 dd|ff|llพยัญชนะสองตัวที่เพิ่มขึ้นอีกสองเท่าจะสนับสนุนเวอร์ชั่นที่ฉลาด
Toby Speight

4

ฟาง , 30 58 35 33 ไบต์

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

แทนที่การเกิดขึ้นของ regex แต่ละครั้ง0และแปลงจาก unary เป็นทศนิยม

น่าเศร้าที่ฟางไม่สามารถส่งธงไปยัง regex ได้ ฉันลืมเกี่ยวกับการ?flags:สร้าง

ลองออนไลน์! (รหัสเพิ่มเติมคือการตรวจสอบกรณีทดสอบทั้งหมด)


ภาษานี้แตกต่างจากสิ่งที่คล้ายกับ Retina อย่างไร
Downgoat

@Downgoat Straw เป็นกองซ้อน: P
TuxCrafting


3

PowerShell v2 +, 52 50 48 ไบต์

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

ทำ a -replaceบนตัวอักษรสองสัญลักษณ์ - ตัวอักษรเดียวทั้งหมดเปลี่ยน 'em เป็น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 นั่นคือสิ่งที่ฉันไม่ดีเลยที่ regex : D ขอบคุณสำหรับการเล่นกอล์ฟ!
AdmBorkBork


2

PHP, 56 ไบต์

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

1
ฉันเชื่อว่าการ[dfl]{2}แข่งขันdfและldอื่น ๆ เช่นเดียวกับการแข่งขันที่ตั้งใจไว้ dd|ff|llมีความยาวเท่ากัน
ETHproductions

1
ฉันรู้ว่าความเชื่อของคุณเป็นจริง แต่ฉันคิดว่าความเชื่อของคุณไม่ใช่ประเภทของความเชื่อ มันดูมากกว่าประเภทของโควจ์จ์
JörgHülsermann

1
แทนecho(เว้นวรรคตอนท้าย) ให้ใช้งาน<?=ซึ่งจะช่วยประหยัด 2 ไบต์ นอกจากนี้ยัง$tไม่จำเป็นต้องมีช่วยให้คุณ 3 ไบต์มากขึ้น
Ismael Miguel

ขอบคุณคุณอิสมาเอล ฉันจะต้องสับสนมากขึ้นแล้วว่าฉันจะไม่ลบ $ t
JörgHülsermann

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 Matcherสามารถกำหนดได้ในสำหรับวง
Olivier Grégoire

1
ฉันมีความรู้สึกแข็งแกร่งที่return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()เป็นวิธีสั้นกว่า มันใช้งานไม่ได้เหรอ
Olivier Grégoire

ใช่มันใช้งานได้และเป็น 73 ไบต์สำหรับ Java 7 เวอร์ชัน ( int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}) และมีเพียง 51 สำหรับ Java 8 เวอร์ชัน ( s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length())
Olivier Grégoire

1
@ OlivierGrégoireขอบคุณ Matcherเป็นอุบัติเหตุ ฉันมีมันอย่างถูกต้องในรหัสทดสอบ แต่ไม่ใช่ในรหัส golfed .. >.> คุณใช้replaceAllงานได้ดีขึ้นขอบคุณ
Kevin Cruijssen

1

R, 54 ไบต์

คล้ายกันมากกับคำตอบอื่น ๆ จับคู่อักขระสองตัวใด ๆ และแทนที่ด้วย@แล้วนับจำนวนอักขระ อ่านอินพุตจาก stdin ใช้ตัวเลือกignore.case = TRUE(อาร์กิวเมนต์ที่สามถึงgsub) เพื่อจับคู่ทั้งอักขระบนและตัวพิมพ์เล็ก

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

โบนัส

ทั้งสองgsubและncharถูก vectorized ซึ่งหมายความว่าสิ่งนี้ยังทำงานบนเวกเตอร์อักขระเช่น:

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




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.