রেজেক্স গল্ফ: ইতালি বনাম আমেরিকা যুক্তরাষ্ট্রের অঞ্চলসমূহ


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 আছে And এটি নিয়মিত অভিব্যক্তিতে পাস করার আগে ইনপুটটি পড়তে হবে।

উদাহরণ সেশন

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

* আসলে, এটি একটি মিথ্যা। এ নিয়ে আমার কখনই কোনও ঝামেলা হয়নি।


আপনি দয়া করে ব্যাখ্যা করতে পারবেন, "ফিল্টারিং, কোনও প্রতিস্থাপন, কিছুই নেই ... এমনকি যদি এটি নিয়মিত প্রকাশের সাথেও করা হয়"। কেবল স্পষ্ট করে বলতে গেলে, এর অর্থ কি ফিল্টারিং, রাজ্য / অঞ্চলগুলির তালিকার প্রতিস্থাপন বা ফোকাস আরও প্রশস্ত?
অভিজিৎ

@ অভিজিৎ সম্পাদিত। এটা কি পরিষ্কার?
বুথবি


1
"স্ট্রিংগুলির জন্য আচরণটি অপরিজ্ঞাত হতে পারে যা তালিকায় আসে না।" এই নিয়মটি নষ্ট হয়েছে : এটি USAএমন স্ট্রিংয়ের ক্ষেত্রে একজনকে ফিরে আসতে দেয় , সুতরাং আপনাকে কেবল ইতালিয়ান অঞ্চলগুলি পরীক্ষা করতে হবে এবং USAঅন্যথায় ফিরে যেতে হবে।
o0 '

1
@ বুথবাই ভাল, না, এটি সাধারণ যুক্তি: এটি মূলত ইতালীয় অঞ্চলগুলির সাথে মিলে যাওয়ার জন্য কেবল একটি রেজিপেক্সকেই জিজ্ঞাসা করছে, তবে অযথা অজস্রভাবে আরও জটিল পদ্ধতিতে শব্দ করা হচ্ছে। পুরো আমেরিকান রাজ্যের সম্পর্কে বিন্দু সম্পূর্ণভাবে প্রাসঙ্গিক নয় প্রকৃত জিজ্ঞাসা করলেন, এই বাগ ধন্যবাদ। এটি প্রশ্নটিকে অনেক কম আকর্ষণীয় করে তোলে।
o0 '

উত্তর:


10

পার্ল - 51 ৩ by বাইট (রেজেেক্সের জন্য)

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

বিশেষ কিছু নয় তবে এটি পোস্টও করতে পারে কারণ এটি অন্যান্য 51 বাইট সমাধানের থেকে আলাদা different

অথবা বিকল্পভাবে, আমার ইতিমধ্যে সংক্ষিপ্ত সমাধানটি 15 বাইট দ্বারা সংক্ষিপ্ত করুন। এটি আপাতত জয়ী হয়, আমার ধারণা।


7

পার্ল, 40 টি অক্ষর

এটি অন্য দিক থেকে আসা, অর্থাত্ মার্কিন যুক্তরাষ্ট্রের সাথে মিলছে:

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

রিজেক্সেপ-এর একমাত্র পার্ল / পিসিআরই-নির্দিষ্ট বৈশিষ্ট্যটি হ'ল \bবাউন্ডারি অ্যাঙ্কর শব্দটি, যা আমি $"সাউথ ক্যারোলিনা" -র সাথে মিলে যাওয়ার জন্য এন্ড-অফ-স্ট্রিং অ্যাঙ্কারের পরিবর্তে ব্যবহার করেছি ।

পরীক্ষার জন্য পার্ল ওয়ান-লাইনারে রেজিপ্স্প এখানে রয়েছে:

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

এটি আরও গোল্ডি পরীক্ষার জোতা: পার্ল-পেপ '$ _ = / আবার /? "ইউএসএ \ n": "ইতালি \ n"'
ছদ্মনাম

3
@ ছদ্মনাম: মেহ। যতক্ষণ না এটি স্কোরের মধ্যে গণনা করে ততক্ষণে এটি এটিকে পঠনযোগ্য রাখে।
ইলমারি করোনেন

5

রুবি (প্লেইন রেজেক্স), 44

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

তুমি কি জান? কেস সংবেদনশীলতা শব্দের অ্যাঙ্কর সেরা শুরু।

আমি নিশ্চিত নই, তবে আমি মনে করি Hax0r778 এর উত্তরেরpa প্রতি আমি .ণী


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")

আমি প্রথমে মার্কিন যুক্তরাষ্ট্রে এই কাজটি করতে যাচ্ছিলাম, কারণ মার্কিন যুক্তরাষ্ট্রের তালিকা থেকে কেডাব্লুএক্সএইচকে বাদ দেওয়া অনেকগুলি রাজ্যকে দূরে সরিয়ে নিয়েছে ... তবে ইতালি এটি ভাল 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.