চিড়িয়াখানায় ইমপোজাররা


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, gnatএটি মিথ্যাবাদী , কারণ এগুলি সাজানোর কোনও উপায় নেই যে আপনি কেবল দুটি বর্ণের দুটি দেখতে পান (আমরা প্রাণীকে তৃতীয়াংশে কাটাতে চাই না)।

কিছু সত্যবাদী উদাহরণ:

pigment

    ant
  bee
 olm
pig
antioxidant

   fox
 koi  ide
ant     ant

পরীক্ষার মামলা

একটি অভিধানের বিরুদ্ধে রেফারেন্স বাস্তবায়ন চালানো থেকে বেশিরভাগ পরীক্ষার কেস নেওয়া হয়েছিল। শেষ কয়েকটি "শব্দ" এলোমেলোভাবে উত্পন্ন হয়েছিল এবং জমাগুলি যথেষ্ট দক্ষ কিনা তা নিশ্চিত করার জন্য কেবল সেখানে রয়েছে are

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- এর অর্থ কি এটি স্কোরের দিকে গুনছে না, যেখানে হার্ড কোডিং হবে?
মেরিনাস

@ মারিনাস হ্যাঁ সুতরাং আপনি সম্ভবত এটি অতিরিক্ত ইনপুট হিসাবে নিতে চাইবেন , যদি না ইনপুটটিতে একাধিক স্ট্রিং পড়া আপনার পছন্দের ভাষায় সত্যই জটিল। (আমি হার্ডকোডিংকে অনুমতি দিতে চাই না + "যদি আপনি তা করেন তবে এটি আপনার স্কোর থেকে বিয়োগ করুন", কারণ এরপরে আপনি লোককে হার্ডকডিং এবং সংকোচন করতে পাবেন, যা তাদের স্কোরকে মূলত তাদের বোনাস দেয়।)
মার্টিন ইন্দার

" ফাংশন (আউট) পরামিতি " রেফারেন্স দ্বারা পরামিতি অন্তর্ভুক্ত করে ?
mınxomaτ

5
আমি বিশ্বাস করতে পারি না যে আমি স্যান্ডবক্সে "রাউন্ড নম্বর" মন্তব্যটি মিস করেছি। আপনাকে লজ্জা, স্যার! এই অংশগুলির চারপাশে 32 টি একটি গোলাকার সংখ্যা, 30 নয় it's
পিটার টেলর

উত্তর:


7

জাপট, 51 48 45 36 33 19 বাইট

@ পিটারটেলরকে 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 মিলিসেকেন্ডের নীচে শেষ হয়। ( এখানে পরীক্ষিত )


" একাকী রেজেক্সের সাথে এটি সহজ জিনিস নয় " - এতে কী দোষ আছে (?!,,,)?
পিটার টেলর

@ পিটারটেলর ফেসপাম ধন্যবাদ, যা প্রায় 10 বাইট সাশ্রয় করে ...
ইটিএইচ প্রোডাকশনগুলি

1
@ পিটারটেলর আমি একটি আরও সংক্ষিপ্ত পদ্ধতি পেয়েছি: কেবল তিনটির পরিবর্তে দুটি স্পেস দিয়ে প্রতিস্থাপন করুন। 19 বাইট ডাউন!
ETH প্রোডাকশনস

আর একটি ফেসপাল মুহুর্ত?
নিল

নিল ইয়েপ আমি তিনটির পরিবর্তে দুটি জায়গার চেষ্টা করার কথা ভেবেছিলাম, তবে বিকল্প বিকল্প কৌশলটি চিন্তা করে আজ সকাল পর্যন্ত এটি এতটা ভালভাবে কাজ করবে তা আমি বুঝতে পারি নি।
ETH প্রোডাকশনগুলি

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গ্রেপ-এর কী শব্দহীন সীমানা নেই তাই আপনি সর্বশেষ চেহারাটি থেকে মুক্তি পেতে পারেন? (যদি এটি না হয়, রেটিনায় স্যুইচ করা কয়েকটা বাইট সাশ্রয় করতে পারে Act আসলে আমি মনে করি এটি যে কোনও উপায়েই বাঁচাতে পারে, কারণ এটির Pবিকল্পের দরকার নেই ))
মার্টিন এন্ডার

আমি এখনই গ্রেপ দিয়ে পরীক্ষা করতে পারছি না, তবে এটি কি আসলে কয়েক সেকেন্ডের মধ্যে বড় ফালসি টেস্ট কেসগুলি পরিচালনা করে? রেটিনায় ব্যাকট্র্যাকিংয়ে বেশ সময় লাগে takes
মার্টিন এন্ডার

1
@ মার্টিনব্যাটনার সর্বশেষ দুর্বল মামলার ক্ষেত্রে, এটি ছেড়ে দিয়ে মুদ্রিত হয়েছে grep: exceeded PCRE's backtracking limit
ফেরসুম 27'16

1
এটি সমাধানের জন্য জিএনইউ কিছু ব্যবহার করা অত্যন্ত উপযুক্ত বলে মনে হয়।
এন্টি 29

2

ES6, 122 121 119 104 বাইট

আমি ইটিএইচ প্রডাকশনটির উত্তর পর্যন্ত কীভাবে এটি করব তা নিয়ে কাজ করেছিলাম তবে ,,,* সমস্যাটি কীভাবে পরিচালনা করা যায় তা ভাবতে পারিনি , তাই স্বাভাবিকভাবেই যখন আমি পিটার টেলরের মন্তব্য দেখলাম তখন এটি সমস্ত পরিষ্কার হয়ে গেল। তারপরে ইটিএইচ প্রডাকশনগুলি সমস্যাটি পরিচালনা করার জন্য আরও ভাল উপায় সজ্জিত করেছে যা সাহায্য করে 15 বাইট সংরক্ষণ করে।

ইনপুট হ'ল লক্ষ্য শব্দ এবং প্রাণী শব্দের একটি অ্যারে।

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

সম্পাদনা: @ বুদ্ধিমানের প্রডাকশনগুলির জন্য 1 বাইট 3 বাইট সংরক্ষিত

* আমি ব্যতীত ব্যবহার করেছি কারণ এটি আমার কাছে আরও সুন্দর দেখাচ্ছে replace


খুব সুন্দর! এইগুলির মধ্যে কোনটি কি কাজ করবে: 1) (`(?!&&&)(${a.map...})`)স্ট্রিং হিসাবে ব্যবহার করা, 2) এটি করার পরে প্রথম বন্ধনীর অপসারণ, 3) ব্যবহার করে eval`/(?!&&&).../` ?
ETH প্রোডাকশনগুলি

@ETH প্রোডাকশনগুলি আমি বহিরাগতগুলি সরানোর ভুল করেছিলাম ()যা কার্যকর হয় না; সঙ্গে ()এটি কাজ করে এবং আমাকে একটি বাইট পরিমাণ সঞ্চয় হয়। evalএটিরও দরকার ()তাই এটি আর কিছু বাঁচায় না, দুঃখিত।
নিল

আমার মনে হয় আপনার চারপাশে আরও একটি অতিরিক্ত বন্ধনী রয়েছে a.replace(...)
ETH প্রোডাকশনগুলি

আপনি একটি গুচ্ছ সংরক্ষণ করতে পারেন: s=s.replace(RegExp(a.map(a=>a.replace(/./g,"[&$&]")).join`|`),'&&')তিনটির পরিবর্তে দুটি অক্ষরের পরিবর্তে একই তিনটি অক্ষরের পরিবর্তে আটকে যাওয়ার সম্ভাবনা দূর হয় remove
ইটিএইচ প্রডাকশনগুলি

0

জেএস ইএস 6, 77 বাইট

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

(এটি বেনামে এফএন)

ইনপুট উপরের গ্রেপ উদাহরণ ইনপুট হিসাবে একই


আপনি যদি ইনপুট নিয়ে থাকেন তবে prompt()কি আপনার আউটপুট ব্যবহার করা উচিত নয় alert()? (বিকল্পভাবে কেবল এটি একটি ফাংশন করুন))
নীল

@ নীল ধন্যবাদ, আমি আনয়ন ব্যবহার করেছি। fn
ব্যবহারকারীর নাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.