वेल्श शब्द कब तक है?


37

एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट के रूप में एक स्ट्रिंग प्राप्त करता है जो वेल्श शब्द (UTF-8 का प्रतिनिधित्व करता है जब तक कि आपके द्वारा निर्दिष्ट नहीं किया जाता है)।

वेल्श में निम्नलिखित सभी एकल अक्षर हैं :

ए, बी, सी, सी, डी, डी डी, ई, एफ, एफएफ, जी, एनजी, एच, आई, जे, एल, एल, एम, एन, ओ, पी, पीएच, आर, आर, एस, टी, वें, यू, डब्ल्यू, वाई

विकिपीडिया को उद्धृत करने के लिए ,

जबकि डिग्राफ्स ch , dd , ff , ng , ll , ph , rh , th प्रत्येक दो प्रतीकों के साथ लिखे गए हैं, इन सभी को एक अक्षर माना जाता है। इसका मतलब है, उदाहरण के लिए कि अंग्रेजी में आठ पत्रों की तुलना में, लानेली (दक्षिण वेल्स में एक शहर) को वेल्श में केवल छह अक्षर माना जाता है।

ये पत्र वेल्श में भी मौजूद हैं, हालांकि वे अन्य भाषाओं से उधार ली गई तकनीकी शब्दावली तक सीमित हैं:

के, क्यू, वी, एक्स, जेड

विकृति विज्ञान वाले पत्रों को अलग-अलग अक्षरों के रूप में नहीं माना जाता है, लेकिन आपके कार्य को उन्हें स्वीकार करना चाहिए और उन्हें गिनने में सक्षम होना चाहिए। संभावित ऐसे पत्र हैं:

एक, ê, î,,, î, î, á, é, í, ó, ú, ý, ý, ä, ë,,, ö, ü, ü, î, î, è, è, è, î, î, ẁ, ẁ

(इसका मतलब है कि ASCII एक स्वीकार्य इनपुट एन्कोडिंग नहीं है, क्योंकि यह इन वर्णों को एनकोड नहीं कर सकता है।)

टिप्पणियाँ:

  • यह कोड गोल्फ है।
  • आपको लॉन्गफ़ायर जैसे शब्दों का हिसाब नहीं देना है , जिसमें एनजी एक डिग्राफ नहीं है, बल्कि दो अलग-अलग अक्षर हैं। इस शब्द में नौ अक्षर हैं, लेकिन आप इसे आठ समझ सकते हैं। (यदि आप ऐसे शब्दों का हिसाब लगा सकते हैं, तो यह एक तरह का कमाल है, लेकिन इस चुनौती के दायरे से बाहर है।)
  • इनपुट की गारंटी है कि कोई व्हॉट्सएप नहीं है (जब तक कि आप इसे एक एकल अनुगामी न्यूलाइन (या कुछ और गूढ़) के साथ पसंद नहीं करते हैं, जिस स्थिति में यह प्रदान किया जा सकता है)। निश्चित रूप से कोई आंतरिक व्हाट्सएप नहीं होगा।

परीक्षण के मामलों:

  • लैंदुडनो, 8
  • लानेली, ६
  • राईल, ३
  • Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch, 50 (वास्तव में 51, लेकिन हम 50 की गिनती करेंगे)
  • तुअर, ३
  • सिमरू, ५
  • ग्लाइंड्र, 7

4
क्या सभी लोअरकेस में इनपुट दिया जा सकता है?
ETHproductions

15
मेरी पत्नी जो कि एक देशी वेल्श स्पीकर हैं, वे यह सलाह देंगी कि J को "बॉरोस्ड" अक्षरों के खंड में जोड़ा गया है क्योंकि यह वास्तव में वेल्श वर्णमाला का हिस्सा नहीं है
रिच स्टार्की

@RichStarkie विकिपीडिया लेख उस मोर्चे पर थोड़ा अस्पष्ट था। मेरी समझ यह है कि j का उपयोग उधार के शब्दों में तब भी किया जाता है जब यह मूल शब्द में मौजूद नहीं होता है, इसलिए इसका उपयोग ध्वन्यात्मक रूप से किया जाता है, जिसका अर्थ है कि इस स्तर पर यह भाषा में अनुभूत है। मैंने आयरिश में v के बारे में इसी तरह के तर्क देखे हैं । इसे व्यापक रूप से आयरिश वर्णमाला का हिस्सा नहीं माना जाता है, लेकिन यह कुछ आयरिश नामों में मौजूद है, जैसे कि । कुइव
21

1
और वेल्श ऑर्थोग्राफी लेख में एक फुटनोट में mh , nh और ngh को ग्रेफ़ेम्स के रूप में सूचीबद्ध किया गया है । मिथिंक्स मुझे भाषाविज्ञान एसई पर एक प्रश्न खोलने की आवश्यकता है ।
टीआरजी

3
शर्म की बात है कि बहुत देर हो चुकी है; उस ट्रिपल-ग्लिफ़ेड "एनजी" ने शायद इसे थोड़ा और जटिल बना दिया।
मेगाफ्लॉप

जवाबों:


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|.

इसे ऑनलाइन आज़माएं!

यहां तक ​​कि मोर रेगेक्स।


यह शायद रेटिना की मेरी अज्ञानता है, लेकिन इनपुट पाठ की लंबाई का आउटपुट कहां है? रेटिना पर दस्तावेज़ीकरण यह समझाने की कोशिश नहीं करता है कि "ऑनलाइन इसे आज़माएं!" साइट।
Xaero Degreaz

2
आउटपुट निहित है, क्योंकि एकमात्र रेखा एक मैच चरण है, जिसमें मैचों की संख्या लौटती है। यहाँ, रेगेक्स हर वेल्श पत्र से मेल खाता है।
user48538

तो उस तर्क से, फिर नीचे दिए गए प्रत्येक उत्तर को जहां लंबाई को स्पष्ट रूप से कोड में कहा जाता है, छोटा किया जा सकता है?
Xaero Degreaz

2
@XaeroDegreaz रेटिना एकमात्र ऐसी भाषाओं में से एक है जो स्वचालित रूप से मैचों की गणना करती है और उन्हें प्रिंट करती है। यह रेटिना, भाषा, कैसे काम करती है। यह नहीं है कि अन्य भाषाएं कैसे काम करती हैं, और इसलिए उन भाषाओं को सही उत्पादन प्राप्त करने के लिए स्पष्ट रूप से अपनी लंबाई के कार्यों को कॉल करने की आवश्यकता होती है।
isaacg

धन्यवाद, मुझे अब समझ में आया। प्रलेखन में अधिक पढ़ने के बाद मैं डिफ़ॉल्ट "मैच" चरण देखता हूं यह आउटपुट करता है।
Xaero Degreaz

5

जावास्क्रिप्ट (ईएस 6), 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

यदि अपरकेस अक्षर की आवश्यकता होती है तो यह ised कमांड के अंत में आवश्यक है । (मैंने इसे छोड़ दिया क्योंकि प्रश्न में सभी "एकल अक्षर" कम हैं, हालांकि कुछ उदाहरण नहीं हैं)।


1
grep -o .|wc -lइसके बजाय क्यों wc -c?
जॉर्डन

wc -c दो के रूप में through के माध्यम से मायने रखता है।
रिले

आह, बिल्कुल। 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। बस एक और दोगुना-व्यंजन चतुर संस्करण का पक्ष लेगा।
टोबी स्पाइट नाइट

4

स्ट्रॉ , 30 58 35 33 बाइट्स

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

रेगेक्स की प्रत्येक घटना को बदलें 0, और यूनिरी से दशमलव में परिवर्तित करें।

अफसोस की बात है, स्ट्रॉ regexs को झंडे पारित नहीं कर सकते। मैं ?flags:निर्माण के बारे में भूल गया

इसे ऑनलाइन आज़माएं! (सभी परीक्षण मामलों को सत्यापित करने के लिए जोड़ा गया कोड)


यह भाषा रेटिना जैसी किसी चीज़ से कैसे भिन्न है?
डाउनगेट

@Downgoat स्ट्रॉ स्टैक-आधारित है: P
TuxCrafting


3

PowerShell v2 +, 52 50 48 बाइट्स

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

एक है -replaceसब पर दो प्रतीक-एक अक्षर का पत्र, परिवर्तन उन्हें करने के लिए 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?
जॉर्डन

@ जोर्डन नहीं, मैं नहीं। यह एक पॉवरशेल चीज़ नहीं है, यह मैं-नहीं-रेगेक्स चीज़ है। : डी गोल्फ के लिए धन्यवाद!
AdmBorkBork 18

2

वी , 31 बाइट्स

Íã[cprt]hüddüffüngüllü./
Dé0@"

इसे ऑनलाइन आज़माएं , या सभी परीक्षण मामलों को सत्यापित करें!

इसमें कुछ अचूक अक्षर शामिल हैं, इसलिए यहाँ एक हेक्सडंप है:

0000000: cde3 5b63 7072 745d 68fc 6464 fc66 66fc  ..[cprt]h.dd.ff.
0000010: 6e67 fc6c 6cfc 2e2f 010a 44e9 3040 22    ng.ll../..D.0@"

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
मुझे पता है कि आपका विश्वास सही है लेकिन मुझे लगता है कि आपका विश्वास एक प्रकार का विश्वास नहीं है। यह एक प्रकार के कॉवेल्ड से अधिक दिखता है
जोर्ग हल्सरमन

1
इसके बजाय echo(अंत में स्थान) का उपयोग करें <?=, जो 2 बाइट्स बचाता है। इसके अलावा, $tवहाँ आवश्यक नहीं है, आपको 3 और बाइट्स बचा रहा है।
इस्माईल मिगुएल

थैंक यू इस्माइल। मुझे तब और अधिक उलझन में होना चाहिए कि मैं $ t नहीं निकालूं
Jörg Hülsermann

2

जावा 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लूप के लिए परिभाषित किया जा सकता है।
ओलिवियर ग्रेगोइरे

1
मुझे लगता है कि return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length()जिस तरह से मजबूत है, रास्ता छोटा है। क्या यह काम नहीं कर सकता?
ओलिवियर ग्रेगोइरे

खैर, हाँ, यह काम करता है, और यह जावा 7 संस्करण ( int c(String s){return s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length();}) के लिए 73 बाइट्स है । और जावा 8 संस्करण के लिए केवल 51 ( s->s.replaceAll("[cprt]h|dd|ff|ng|ll","a").length())।
ओलिवियर ग्रेजायर

1
@ ओलिवियरग्रेगायर धन्यवाद। Matcherएक दुर्घटना थी। मेरे पास परीक्षण कोड में यह सही था, लेकिन गोल्फ कोड में नहीं ..>> आपका replaceAllकाम हालांकि बेहतर है, धन्यवाद।
केविन क्रूज़सेन

1

आर, 54 बाइट्स

अन्य उत्तरों के समान। किसी भी दो अक्षर अक्षर से मेल खाता है और उन्हें बदल देता है @और बाद में वर्णों की संख्या गिनता है। स्टड से इनपुट पढ़ता है। ऊपरी और निचले दोनों वर्णों से मेल खाने के 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


0

XQuery, 77 बाइट्स

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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.