चिड़ियाघर में इम्पोस्टर्स


42

आप एक नया चिड़ियाघर खोलना चाहते हैं। यह आश्चर्यजनक होगा। लेकिन आप जो चिसपकेट हैं, आप केवल तीन-अक्षर वाले जानवरों को वहन करना चाहते हैं (हर कोई जानता है कि एक जानवर की लागत उसके नाम की लंबाई के लिए आनुपातिक है)। वहाँ लोगों को देखने के लिए भुगतान करने का आपका सपना जाता है elephant। लेकिन अचानक आपके पास एक शानदार विचार है। यदि आप जानवरों को सही ढंग से कलम में रखते हैं, तो आप ऑप्टिकल भ्रम पैदा कर सकते हैं elephant! यहां आपके नए "हाथी कंपाउंड" का टॉप-डाउन दृश्य है:

elk
  eel
   pig
    hog
     ant

--------  (fence)
    ^
    | viewing direction

हा, उन भोला आगंतुकों!

हां, यह धारणा कैसे काम करती है।

चुनौती

एक गैर-रिक्त शब्द को देखते हुए, जिसमें केवल निचले अक्षरों में अंग्रेजी के अक्षर होते हैं, यह निर्धारित करें कि क्या यह निम्नलिखित 30 तीन-अक्षर वाले जानवरों को ओवरलैप करने से हो सकता है:

ant ape asp ass bat bee boa cat cod cow 
dab dog eel elk emu fly fox gnu hog ide 
jay kea kob koi olm owl pig rat ray yak

हां, 30 से अधिक हैं, लेकिन यह एक अच्छा दौर है।

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

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

यदि यह संभव है तो आउटपुट सत्य होना चाहिए , और मिथ्या अन्यथा।

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट लेने और STDOUT (या निकटतम वैकल्पिक), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम आउटपुट कर सकते हैं, एक प्रोग्राम या फ़ंक्शन लिख सकते हैं।

आपके कोड को परीक्षण के कुछ मामलों को कुछ सेकंड में संभालना चाहिए।

मानक नियम लागू होते हैं।

और ज्यादा उदाहरण

  • कोई भी एक या दो अक्षर का शब्द स्पष्ट रूप से मिथ्या है।
  • तो कोई भी तीन अक्षर का शब्द है जो उपरोक्त सूची में नहीं है।
  • भले ही हमारे पास है gnuऔर rat, gnatfalsy वहाँ उन्हें ऐसे आप केवल प्रत्येक के दो पत्र देखते हैं कि व्यवस्था करने के लिए कोई रास्ता नहीं है (हम तिहाई में पशुओं में कटौती नहीं करना चाहता) है, क्योंकि है।

कुछ सत्य उदाहरण:

pigment

    ant
  bee
 olm
pig
antioxidant

   fox
 koi  ide
ant     ant

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

अधिकांश परीक्षण मामलों को एक शब्दकोश के खिलाफ एक संदर्भ कार्यान्वयन चलाने से लिया गया था। पिछले कुछ "शब्द" बेतरतीब ढंग से उत्पन्न किए गए थे और यह सुनिश्चित करने के लिए बस हैं कि प्रस्तुतियाँ पर्याप्त रूप से कुशल हैं।

Truthy:

ant
owl
bass
pride
bobcat
peafowl
elephant
hedgehogs
crocodile
antidemocrat
aspidoganoidei
biodegradability
angioelephantiasis
propreantepenultimate
acategnukeaidabeleenaspcodcoidyakwakoasshogattkjaypigkobolcodidaskearaywelkwboaxbeeuflapaspoapemaassaaspeewoglmabiemuwjadogacagnuepigjaycownbatjaemuifoxkeaeekekeagratsseeluejdoghogaolmgpigbeaeelemulasphogjaydabemukgnunueifoasdoglrayyadogpewlayroassasslgnuaspyyakkbokeaodxilopgnuasppigkobelratelkolmakob
koigdgaspslycoyakehrdabowbatdkkeapogkobelrowlyarpidepetlfoxeboaiderbeefoxbgnuapeocowgiecowlkoieeltbategspemuideatdogbeeecatgeaoccattbbeassgnasolkeaflyelkaognubeeabrratoccolmobodoglyelraywelkoxantowleedrayflypeappigogatraoyakccpiganaaspkobabjaspkointantybjbeeanolmuijaylratojaynueidflyjarayabatmmpigtfly
eolmantjkobeeaorayogaowldfoxayeassapibatmflylyraelaspsseolmbelkkaoantlmufodasgnueantaidenthyakcodoxuepigodggnuantatlcatnuuelkpemucbapeeoiahdogplkowletbatdrayarayoaelkgrayodcatgkantewkobeljaybeeyfkobtbdabadoghbatfoxtflygaspdeidogtowlkeaolmyraelfleelejayehogowlccatoxeabiemkobpigolmdkobrcidekyakabboyidep

Falsy:

a
ox
ram
bear
koala
antelope
albatross
zookeeper
salamander
caterpillar
hippopotamus
koigdgaspslycoyakehrdabowbatdkkeapogkobelrowlyarpidepetlfoxeboaiderbeefoxbgnuapeocowgiecowlkoieeltbategspemuideatdogbeezcatgeaoccattbbeassgnasolkeaflyelkaognubeeabrratoccolmobodoglyelraywelkoxantowleedrayflypeappigogatraoyakccpiganaaspkobabjaspkointantybjbeeanolmuijaylratojaynueidflyjarayabatmmpigtfly
koigdgaspslycoyakehrdabowbatdkkeapogkobelrowlyarpidepetlfoxeboaiderbeefoxbgnuapeocowgiecowlkoieeltbategspemuideatdogbeeecatgeaoccattbbeassgnasolkeaflxelkaognubeeabrratoccolmobodoglyelraywelkoxantowleedrayflypeappigogatraoyakccpiganaaspkobabjaspkointantybjbeeanolmuijaylratojaynueidflyjarayabatmmpigtfly
beyeodpgspeclxlkbkaylldnceepkocbdmymsaogsowpbawbauaioluaaagaetdoaoialeoxaagspoelegflpylptylnolnatrjabaorkdteeydloiebbptatdtfdfgoodtbkoafmounbduaffcrfelcnawmxaskgaoenaattbaobgbgabnhkesbgaaaaotafkiiieatworginaeowaehuddegooaalowaoososaksahoimkulbtoadyyelkcmkacbuostadppcuglbnmotedfgfkoleldonknemomnmoutykg

मैं अभी भी एक बेहतर शीर्षक के लिए सुझाव ले रहा हूं ...
मार्टिन एंडर

You may optionally receive this list as input- इसका मतलब यह है कि यह स्कोर की ओर नहीं है, जबकि हार्ड-कोडिंग यह होगा?
मारिनस

@marinus हाँ। तो आप शायद इसे अतिरिक्त इनपुट के रूप में लेना चाहते हैं , जब तक कि इनपुट पर एक से अधिक स्ट्रिंग पढ़ना आपकी पसंद की भाषा में वास्तव में बोझिल न हो। (मैं हार्डकोडिंग + "यदि आप करते हैं, तो इसे अपने स्कोर से घटा दें" नहीं करना चाहते हैं, क्योंकि तब आप लोगों को इसमें हार्डकॉर्पिंग और इसे संपीड़ित करेंगे, जो अनिवार्य रूप से उनके स्कोर को बोनस देगा।)
मार्टिन एंडर

क्या " फ़ंक्शन (आउट) पैरामीटर " में संदर्भ द्वारा पैरामीटर शामिल हैं ?
15

5
मुझे विश्वास नहीं हो रहा है कि मैं सैंडबॉक्स में "राउंड नंबर" टिप्पणी से चूक गया। शर्म आनी चाहिए आपको, सर! इन भागों के आसपास 32 एक गोल संख्या है, 30 नहीं। (और यह पूरी तरह से कोशिश नहीं है कि आपने नर जानवरों के लिए नाम छोड़ दिया है - हॉग देखें)।
पीटर टेलर

जवाबों:


7

जाप, 51 48 45 36 33 19 बाइट्स

@PeterTaylor के लिए धन्यवाद 9 बाइट्स सहेजे गए

;!UeVrE"[$& ]" S² x

इसे ऑनलाइन टेस्ट करें!

परीक्षण के लिए स्ट्रिंग के रूप में इनपुट लेता है, इसके बाद तीन-अक्षर शब्दों की सूची दी जाती है, जिसके साथ सीमांकित किया जाता है |। नोट: यह दुभाषिया के नवीनतम संस्करण में काम नहीं करता है, इसलिए कृपया कोड को कॉपी-पेस्ट करने के बजाय लिंक का उपयोग करें।

यह काम किस प्रकार करता है

मूल विचार इनपुट स्ट्रिंग को लेना है और बार-बार इसमें 30 शब्दों में से किसी को दो भराव वर्णों से बदलना है। मैं फिलर चार के रूप में एक जगह का उपयोग करता हूं। इसके अलावा, हम antइन elephant, a  इन ela   ,  ntइन e   nt, आदि को बदलना चाहते हैं, इसलिए हम जो करना चाहते हैं, वह 30-शब्द स्ट्रिंग को रीगेक्स में बदलना है जो इनमें से किसी भी संयोजन से मेल खाता है:

ant|ape|asp|...
Becomes:
[a ][n ][t ]|[a ][p ][e ]|[a ][s ][p ]|...

हम यह बहुत आसानी से कर सकते हैं:

;VrE"[$& ]"
          // Implicit: V = "ant|ape|asp|..."
;         // Set the vars A-J to various values. E is set to "[a-z]".
VrE       // Take V and replace each lowercase letter with:
"[$& ]"   //  "[" + the char + " ]".

हालांकि, इसका तीन स्थानों से मिलान का अवांछित प्रभाव भी है, जिसका परिणाम पर कोई प्रभाव नहीं पड़ता है और इस प्रकार पुनरावर्ती प्रतिस्थापन समाप्त होता है। हम मैच को तीन के बजाय दो स्थानों से बदलकर इसे प्राप्त कर सकते हैं:

Ue    S²  // Take U, and recursively replace matches of the regex with " ".repeat(2).

यहां बताया गया है कि यह कैसे और क्यों काम करता है ( .एक स्थान के स्थान पर) का मूल प्रदर्शन :

First match at the end: 
eleant
ele..   (ant)
el..    (eel)
...     (elk)
..      (...)
true

First match at the beginning: 
antmua
..mua   (ant)
...a    (emu)
..a     (...)
..      (boa)
true

First match in the middle: 
cantay
c..ay   (ant)
..ay    (cat)
...     (jay)
..      (...)
true

सत्य परीक्षण-मामलों के लिए, यह हमें सभी स्थानों की एक स्ट्रिंग के साथ छोड़ देता है। झूठे परीक्षण-मामलों के लिए, हमारे पास मिश्रण में कुछ अक्षर बचे हैं। इसका अनुवाद इस तरह किया जा सकता है जैसे कि सच / झूठ

     x   // Trim all spaces off the ends of the resulting string.
!        // Take the logical NOT of the result.
         // Empty string -> true; non-empty string -> false.

और इसके बारे में है! इस पद्धति का एक बोनस यह भी है कि सबसे बड़े परीक्षण मामले 5 मिलीसेकंड से कम में खत्म होते हैं। ( यहां परीक्षण किया गया )


" अकेले रेगेक्स के साथ यह आसान बात नहीं है " - इसमें गलत क्या है (?!,,,)?
पीटर टेलर

@PeterTaylor facepalm धन्यवाद, कि 10 के बारे में बाइट्स ... बचाता है
ETHproductions

1
@PeterTaylor मुझे एक बहुत छोटा तरीका मिला है: बस तीन के बजाय दो स्थानों के साथ बदलें। डाउन टू 19 बाइट्स!
ETHproductions

एक और चेहरा पल?
नील

@ नील यप, बहुत ज्यादा। मैंने तीन के बजाय दो रिक्त स्थान की कोशिश करने के बारे में सोचा था, लेकिन मुझे नहीं पता था कि यह आज सुबह तक काम करेगा जब कई वैकल्पिक रणनीतियों के माध्यम से सोच रहा था।
ETHproductions

3

ग्नू ग्रीप, 62 + 1 = 63 बाइट्स

^(((.+)(?=.*!\3))*(...)(?=.*\4!)((.+)(?=.*\6!))*([^qvz]\B)?)+ 

इसके लिए Pविकल्प की आवश्यकता है । इनपुट के जानवर के संश्लेषित होने की उम्मीद है, इसके बाद एक स्थान है, जिसके बाद विस्मयादिबोधक चिह्नों द्वारा खोले गए, बंद किए गए और सीमांकित 3-अक्षर वाले जानवरों की सूची है। उदाहरण का उपयोग (कार्यक्रम को इस प्रकार सहेजा गया है zoo):

> grep -Pf zoo
hippopotamus !ant!ape!asp!ass!bat!bee!boa!cat!cod!cow!dab!dog!eel!elk!emu!fly!fox!gnu!hog!ide!jay!kea!kob!koi!olm!owl!pig!rat!ray!yak!

एक सच्चे इनपुट के लिए, इनपुट लाइन को प्रतिध्वनित किया जाता है। झूठे इनपुट के लिए, कोई आउटपुट नहीं है।

मार्टिन को बग दिखाने और मुझे \Bगैर-सीमा शब्द के अस्तित्व के लिए सचेत करने के लिए धन्यवाद ।


क्या ग्रीप में गैर-शब्द-सीमा नहीं है, \Bताकि आप अंतिम लुकहेड से छुटकारा पा सकें? (यदि यह नहीं होता है, तो रेटिना पर स्विच करने से कुछ बाइट्स बच जाएंगे। वास्तव में मुझे लगता है कि यह वैसे भी बाइट को बचा लेगा, क्योंकि इसके लिए Pविकल्प की आवश्यकता नहीं है ।)
मार्टिन एंडर

मैं अभी grep के साथ परीक्षण नहीं कर सकता, लेकिन क्या यह वास्तव में कुछ सेकंड में बड़े झूठे परीक्षण मामलों को संभालता है? रेटिना में बैकट्रैकिंग में काफी समय लगता है।
मार्टिन एंडर

1
@ मार्टिनबटनर झूठे मामलों के अंतिम जोड़े के लिए, यह वास्तव में छोड़ दिया और मुद्रित किया grep: exceeded PCRE's backtracking limit
feersum

1
इसे हल करने के लिए GNU का उपयोग करना बहुत ही उचित लगता है।
एंटि .29

2

ईएस 6, 122 121 119 104 बाइट्स

मैंने इस बात पर काम किया था कि जहां तक ​​ETHproduction के जवाब के बारे में बात है, लेकिन ,,,* समस्या को संभालने के तरीके के बारे में नहीं सोच सकता , इसलिए स्वाभाविक रूप से जब मैंने पीटर टेलर की टिप्पणी को देखा तो यह सब स्पष्ट हो गया। तब ETHproductions समस्या को संभालने के लिए एक बेहतर तरीका खोजने में कामयाब रहा जो मदद करता है 15 बाइट्स बचाता है।

इनपुट लक्ष्य शब्द और जानवरों के शब्दों की एक सरणी है।

(s,a)=>[...s].map(_=>s=s.replace(RegExp(a.map(a=>a.replace(/./g,"[&$&]")).join`|`),'&&'))&&!/\w/.test(s)

संपादित करें: 1 बाइट 3 बाइट्स सहेजे गए @ETHproductions के लिए धन्यवाद।

* सिवाय इसके कि मैंने उपयोग किया है और यह मेरे अंदर अच्छा लग रहा है replace


बहुत अच्छा! क्या इनमें से कोई भी चीज काम करेगी: 1) (`(?!&&&)(${a.map...})`)स्ट्रिंग के रूप में, 2) कोष्ठक को हटाने के बाद, 3) का उपयोग करते हुए eval`/(?!&&&).../` ?
ETHproductions

@ETHproductions मैंने बाहरी ()s को हटाने की गलती की है जो काम नहीं करता है; साथ ()यह काम करता है और मुझे एक बाइट बचाता है। evalयह भी जरूरत है ()तो यह आगे कुछ भी नहीं बचा है, माफ करना।
नील

मुझे लगता है कि आपके पास चारों ओर कोष्ठक की एक अतिरिक्त जोड़ी है a.replace(...)
ETHproductions

आप एक गुच्छा बचा सकते हैं: s=s.replace(RegExp(a.map(a=>a.replace(/./g,"[&$&]")).join`|`),'&&')तीन के बजाय दो वर्णों के साथ प्रतिस्थापित करने से एक ही तीन वर्णों की जगह पर अटक जाने की संभावना दूर हो जाती है।
ETHproductions

0

जेएस ईएस 6, 77 बाइट्स

s=>/^(((.+)(?=.*!\3))*(...)(?=.*\4!)((.+)(?=.*\6!))*([^qvz][^\b])?)+/.test(s)

(यह गुमनाम fn है)

इनपुट उपरोक्त grep उदाहरण इनपुट के समान है


यदि आप इनपुट prompt()का उपयोग कर रहे हैं तो क्या आपको आउटपुट का उपयोग नहीं करना चाहिए alert()? (वैकल्पिक रूप से इसे केवल एक फ़ंक्शन बनाएं।)
नील

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