कोई थन नहीं है! …या यह है?


24

परिचय

स्ट्रीट टॉक को समझना वास्तव में मुश्किल हो सकता है, विशेष रूप से प्रोग्रामर्स के लिए, जो बहुत स्ट्रीटवाइज नहीं कहे जाते हैं।

शहरी वातावरण में हम सभी को जीवित रहने में मदद करने के लिए दुभाषिया बनाना आपका काम है।

चुनौती

इनपुट के रूप में अंग्रेजी वाक्य को देखते हुए, एक प्रोग्राम या फ़ंक्शन बनाएं जो यह निर्धारित करता है कि वाक्य का परिणाम सकारात्मक है या नकारात्मक।

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

No negative words  -> truthy
One negative word  -> falsey
Two negative words -> truthy

नकारात्मक शब्दों की सूची:

  • no, not,none
  • में कुछ भी समाप्त हो रहा है n't
  • never, neither,nor
  • nobody, nothing,nowhere

एक किनारे का मामला है। जब भी कोई वाक्य शुरू होता है No,, तो परिणाम निर्धारित करते समय उस शब्द को एक नकारात्मक शब्द के रूप में नहीं देखा जाता है (यह नकारात्मक शब्दों की संख्या की गणना करता है ताकि केवल एक और अधिक हो सके)।

वाक्य बुनियादी व्याकरण के नियमों का पालन करेगा (कैपिटलाइज़ेशन, विराम चिह्न) और इसमें केवल ऐसे शब्द होंगे जो किसी शब्दकोश से पाए जा सकते हैं (सौभाग्य से, यह प्रश्न शीर्षक को अमान्य नहीं करता है)। वाक्य में कोई उचित संज्ञा नहीं होगी (क्षमा करें, डॉ। नहीं, आप बाहर हैं)।

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

Truthy:

Yes.
It's noon.
Hello, World!
What is this?
Ain't no thang!
Never say never.
No, it's noon now.
Neither me nor you.
I didn't do nothing!
No, I am your father.
A non-alcoholic drink.
I can't get no satisfaction.
All your base are belong to us.

Falsey:

No.
No, no!
Not today.
Neither am I.
Don't do that!
That's no moon!
And none survived.
Is this not my car?
No man is an island.
Nosebleeds are no fun.
Nothing compares to you.
That's a no, I'm afraid.
No, I am not your mother.

यहाँ विडंबना यह है कि इनमें से कुछ की व्याख्या अलग तरीके से की जानी चाहिए । लेकिन हे, आप हमारे तर्क के अनुरूप नहीं होने के लिए स्पीकर को दोष नहीं दे सकते।

नियम

मानक खामियों को मना किया जाता है। यह , इसलिए संक्षिप्त रहें!


1
कोई भी न तो कहीं नहीं है और न ही कुछ भी नहीं है।
मैजिक ऑक्टोपस Urn

1
@MagicOctopusUrn: आप been100% नकारात्मक वाक्य के लिए खो सकते हैं !
एंटि .29

जवाबों:


10

रेटिना , 63 बाइट्स

No,

Mi`\bn(e(ith|v)er|o(|body|ne|r|t|thing|where))\b|n't\b
0|2

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

व्याख्या

No,

No,इनपुट से निकालें । पूंजीकरण नियमों के कारण, यह केवल इनपुट की शुरुआत में दिखाई दे सकता है, इसलिए हमें एक स्पष्ट की आवश्यकता नहीं है ^

Mi`\bn(e(ith|v)er|o(|body|ne|r|t|thing|where))\b|n't\b

केस-असंवेदनशील रेगेक्स के मैचों की संख्या के बाद गणना करें `। यह सिर्फ सभी प्रासंगिक शब्दों से मेल खाता है, जहां मैंने विकल्पों के साथ सामान्य उपसर्ग / प्रत्यय निकाले हैं।

0|2

गिनती 0या 2एस, तो हम भी मायने रखता है 1और विषम में मायने रखता है 0


क्या आप हाथ से सामान्य पत्र निष्कर्षण करते हैं या एक प्रोग्राम का उपयोग करते हैं जो आपके लिए इष्टतम समाधान ढूंढता है?
योना

@ जोना मैंने हाथ से किया। स्वचालित रेगेक्स मेटागॉल्फ के लिए उपकरण हैं, लेकिन वे आमतौर पर दो सूचियों को लेते हैं, एक को मेल करने के लिए और एक को विफल करने के लिए, और उसके लिए एक रेग्क्स उत्पन्न करते हैं। मुझे ऐसे किसी उपकरण के बारे में जानकारी नहीं है, जो किसी विशेष स्ट्रिंग को किसी बड़े स्ट्रिंग में सेट करने के लिए एक इष्टतम रेगेक्स उत्पन्न करता है।
मार्टिन एंडर

3
एक दिलचस्प चुनौती बना सकता है ...
योना

आपको यह मानने में सक्षम होना चाहिए कि इसके बाद की n'tजरूरत नहीं \bहै, क्योंकि शब्दों को एक शब्दकोश से आना है। इसके अलावा, मेरे पास एक ही बात थी, लेकिन मेरे पास जवाब का मांस नहीं था, एक जोड़े को और बाइट्स का उपयोग करके।
mbomb007

8

बैश, 115 107 99 98 97 95 85 बाइट्स

संकुल का उपयोग करता है कोर उपयोगिताएँ (के लिए wc) और grep। मान लें कि मानक इनपुट के माध्यम से वाक्य दिया गया है। इतिहास विस्तार द्वारा अक्षम किया गया है set +o histexpand

((~`grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er|.*n't)\b"|wc -l`%2))

परिणाम की जाँच करें: बैश में 0 सच के लिए है, 1 झूठ के लिए है

यह कैसे काम करता है?

((                       )) # Logical evaluation: non-zero to TRUE, zero to FALSE
  ~                    %2   # C-style arithmetic: Bit-Negate and Modulus 2
   $(                 )     # Output of the program chain
     grep -Pio "regex"      # PCRE match, ignore case, output matching part one-per-line
     | wc -l                # Pipe to `wc` and count number of lines

18 बाइट्स (115 99) से प्रेरणा द्वारा बचाया Qwertiy के जवाब और मार्टिन Ender के जवाबनाहुएल फौइलुल को 1 बाइट धन्यवाद ।


रेगेक्स सही नहीं है: मैच noonऔर नहींThat's a no, I'm afraid.
नहुएल फौइलुल

@NahuelFouilleul फिक्स्ड।
12

जांच करने के लिए: tio हालांकि परीक्षणों को पेस्ट नहीं कर सकता क्योंकि टिप्पणी की लंबाई सीमा
नहुएल फौइलुल

यह सही परिणाम देता है((~$(grep -Pio "(?!^no,)\b(no(|t|r|ne|body|thing|where)|ne(v|ith)er)\b|.*n't\b"|wc -l)%2))
नाहुएल फौइलुल

$(..)1 बाइट बचाने के बजाय वापस उद्धरण
नाहुएल फौइउल

5

जावास्क्रिप्ट ईएस 6, 89 87 86 चर

s=>s.match(/(?!^no,)\bn(o(|t|r|ne|body|thing|where)|e(v|ith)er)\b|n't\b|$/ig).length&1

परीक्षा:

f=s=>s.match(/(?!^no,)\bn(o(|t|r|ne|body|thing|where)|e(v|ith)er)\b|n't\b|$/ig).length&1

console.log(`Yes.
It's noon.
Hello, World!
Never say never.
Ain't no thang!
No, it's noon now.
Neither me nor you.
I didn't do nothing!
No, I am your father.
A non-alcoholic drink.
I can't get no satisfaction.
All your base are belong to us.`.split`
`.every(f))

console.log(`No.
No, no!
Not today.
Neither am I.
Don't do that!
That's no moon!
And none survived.
No man is an island.
Nosebleeds are no fun.
Nothing compares to you.
That's a no, I'm afraid.
No, I am not your mother.`.split`
`.every(s=>!f(s)))


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