रेगेक्स गोल्फ: संयुक्त राज्य अमेरिका बनाम इटली के क्षेत्र


23

हमें पहले से ही एक मेटा-रेगेक्स-गोल्फ समस्या है, जो कि xkcd कॉमिक से प्रेरित है

कॉपीराइट 2013 रान्डेल मुनरो

लेकिन, यह रेगेक्स गोल्फ मजेदार भी लगता है! मैं अमेरिका के राज्यों और इटली के क्षेत्रों के बीच अंतर करना चाहता हूं। क्यूं कर? मैं दोनों देशों का नागरिक हूं, और मुझे हमेशा इस * से परेशानी है ।

इटली के क्षेत्र हैं

Abruzzo, Valle d'Aosta, Puglia, Basilicata, Calabria, Campania, Emilia-Romagna, Friuli-Venezia Giulia, Lazio, Liguria, Lombardia, Marche, Molise, Piemonte, Sardegna, Sicilia, Trentino-Alto Adige/Südtirol, Toscana, Umbria, Veneto

और संयुक्त राज्य अमेरिका के राज्य हैं

Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, Wyoming

आपका काम एक प्रोग्राम लिखना है जो इन सूचियों को एक नियमित अभिव्यक्ति के साथ अलग करता है। यह एक नया खेल है, इसलिए यहाँ है

नियम

  • सूचियों के बीच अंतर एक एकल मिलान नियमित अभिव्यक्ति के साथ किया जाना चाहिए।
  • आपका स्कोर उस नियमित अभिव्यक्ति की लंबाई है, छोटा बेहतर है।

स्पष्ट होने के लिए: सभी कार्य नियमित अभिव्यक्ति द्वारा किए जाने चाहिए - कोई फ़िल्टरिंग, कोई प्रतिस्थापन नहीं, कोई कुछ भी नहीं ... भले ही वे नियमित अभिव्यक्ति के साथ भी किए गए हों। यही है, इनपुट को सीधे एक नियमित अभिव्यक्ति में पारित किया जाना चाहिए, और केवल बाइनरी उत्तर (मैच / कोई मैच) कोड के बाद के हिस्सों द्वारा उपयोग किया जा सकता है। इनपुट का कभी भी निरीक्षण या परिवर्तन नहीं किया जाना चाहिए लेकिन मिलान अभिव्यक्ति। अपवाद : रूबी के लिए कुछ के साथ एक नईलाइन खाने chompसे ठीक है।

आपके कार्यक्रम को एक ही प्रविष्टि लेनी चाहिए (वैकल्पिक रूप से \nया इसके बाद EOFयदि यह चीजों को आसान बनाता है) तो स्टड से सूची में से, और उस सूची के नाम को प्रिंट करने के लिए प्रिंट करें। इस मामले में, हमारी सूचियों के नाम Italyऔर हैं USA

अपने कोड का परीक्षण करने के लिए, बस इसके माध्यम से दोनों सूची चलाएं। सूची में जो तार नहीं होते हैं उनके लिए व्यवहार अपरिभाषित हो सकता है।

स्कोरिंग मुद्दे

यह भाषा-दर-भाषा के आधार पर किया जा सकता है। पर्ल में,

m/foobarbaz/

एक मिलान नियमित अभिव्यक्ति है। हालाँकि, पायथन में,

import re
re.compile('foobarbaz')

वही काम करता है। हम पायथन के लिए उद्धरणों की गणना नहीं करेंगे, इसलिए मैं कहता हूं कि हम पर्ल में m/अंतिम और अंतिम गणना नहीं करते हैं /। दोनों भाषाओं में, उपरोक्त को 9 का स्कोर प्राप्त करना चाहिए।

अभिजीत द्वारा उठाए गए एक बिंदु को स्पष्ट करने के लिए , मिलान अभिव्यक्ति की वास्तविक लंबाई स्कोर है, भले ही आप इसे गतिशील रूप से उत्पन्न करें। उदाहरण के लिए, यदि आपको एक जादुई अभिव्यक्ति मिली m,

n="foo(bar|baz)"
m=n+n

तब आपको 12 के स्कोर की सूचना नहीं देनी चाहिए: mलंबाई 24 है। और अतिरिक्त स्पष्ट होने के लिए, उत्पन्न नियमित अभिव्यक्ति इनपुट पर निर्भर नहीं हो सकती है। इसे नियमित अभिव्यक्ति में पास करने से पहले इनपुट को पढ़ना होगा।

उदाहरण सत्र

input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy

* वास्तव में, यह एक झूठ है। मुझे इससे कभी कोई परेशानी नहीं हुई।


क्या आप समझा सकते हैं कि आपके द्वारा "नो फिल्टरिंग, नो रिप्लेसमेंट, नो नथिंग ..." का क्या अर्थ है, भले ही वे नियमित अभिव्यक्तियों के साथ भी किए गए हों। " बस स्पष्ट करने के लिए, क्या इसका मतलब फ़िल्टरिंग, राज्यों / क्षेत्रों की सूची का प्रतिस्थापन या फ़ोकस व्यापक है?
अभिजीत

@ अभिजीत ने संपादित किया। क्या यह स्पष्ट है?
बूथबी


1
"व्यवहार स्ट्रिंग के लिए अपरिभाषित हो सकता है जो सूची में नहीं होता है।" यह नियम टूट गया है : यह USAइस तरह के एक स्ट्रिंग के मामले में लौटने की अनुमति देता है , इसलिए आपको बस इतालवी क्षेत्रों की जांच करनी होगी, और USAअन्यथा वापस लौटना होगा ।
ओ ० '।

1
@boothby अच्छी तरह से, नहीं, यह सरल तर्क है: यह मूल रूप से इतालवी क्षेत्रों से मेल करने के लिए केवल एक regexp पूछ रहा है, लेकिन अनावश्यक रूप से बहुत जटिल तरीके से शब्दबद्ध किया गया है। पूरे अमेरिकी राज्यों के बारे में बात पूरी तरह से प्रासंगिक नहीं है करने के लिए वास्तविक प्रश्न पूछा, इस बग के लिए धन्यवाद। यह सवाल को बहुत कम रोचक बनाता है।
ओ ० '।

जवाबों:


10

पर्ल - 51 36 बाइट्स (रेगेक्स के लिए)

print<>=~/.A|ise|net|te|z.o|[cp]a|[lr]ia|r[cd]/?"Italy
":"USA
"

कुछ खास नहीं, लेकिन साथ ही इसे पोस्ट भी कर सकते हैं, क्योंकि यह अन्य 51 बाइट्स समाधान के लिए अलग है।

या वैकल्पिक रूप से, मेरे पहले से ही छोटे समाधान को 15 बाइट्स से छोटा करें। यह अब के लिए जीतता है, मुझे लगता है।


7

पर्ल, 40 वर्ण

इसे दूसरी दिशा से स्वीकार करते हुए, यानी अमेरिकी राज्यों से मिलान:

[DNIOWy]|ss|M.n|^A.*a|or|[aguh]i|[sth]\b

Regexp में एकमात्र पर्ल / पीसीआरई-विशिष्ट विशेषता है \b शब्द सीमा एंकर है, जिसे मैंने $"साउथ कैरोलिना" से मैच करने के लिए एंड-ऑफ-स्ट्रिंग एंकर के बजाय उपयोग किया था ।

यहाँ परीक्षण के लिए एक पर्ल वन-लाइनर में regexp है:

perl -nE 'say /[DNIOWy]|ss|M.n|^A.*a|or|[aguh]i|[sth]\b/ ? "USA" : "Italy"'

यह एक अधिक गोल्फ टेस्ट हार्नेस है: perl -pe '$ _ = / re /? "USA \ n": "इटली \ n"'
छद्मनाम

3
@ छद्म नाम: meh। जब तक यह स्कोर में नहीं गिना जाता, तब तक इसे पढ़ने योग्य रखा जा सकता है।
इल्मरी करोनें

5

रूबी (सादा रेगेक्स), 44

$_ = gets.chomp
puts /'|-|(([^gn]i|gn|at)a|[hst]e|to|zo)$|To|La|pa/ ? "Italy" : "USA"

आपको पता है कि? केस सेंसिटिविटी सबसे अच्छा स्टार्ट-ए-वर्ड एंकर है।

मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन मुझे लगता है कि मैं देने paके लिए Hax0r778 का जवाब


3

पर्ल - 51

(<STDIN> =~ m/'|-|ru|pu|at|pa|az|gu|mb|rc|ie|rd|ci|os|abr|mol|ven/)?printf("Italy\n"):printf("USA\n");

3

जावास्क्रिप्ट 42

alert(/at|gn|mp|sc|-|'|((zi?|t)o|[hts]e|[lrd]ia)$/g.test(prompt())?"Italy":"USA")

मैं शुरू में यूएसए की तरफ से इस काम को करने जा रहा था, जैसा कि यूएसए सूची से KWXY को हटाकर बहुत सारे राज्यों को हटा दिया गया था ... लेकिन इटली ने इसे अच्छे 17 पात्रों में से सबसे अच्छा माना था ...

यदि हम वसा तीर संकेतन के साथ जाते हैं, तो हम इसे रिटर्न चर के साथ एक साधारण फ़ंक्शन में कम कर सकते हैं।

r=s=>/at|gn|mp|sc|-|'|((zi?|t)o|[hts]e|[lrd]ia)$/g.test(s)?"Italy":"USA"

> r("South Dakota") // USA
> r("Puglia") // Italy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.