চারদিকের দেশগুলি


54

দেশগুলি 1D বিশ্বে একাধিক অঞ্চল অঞ্চলগুলির মালিক। প্রতিটি দেশ একটি সংখ্যা দ্বারা স্বতন্ত্রভাবে চিহ্নিত করা হয়। অঞ্চলগুলির মালিকানা নীচে হিসাবে একটি তালিকা দ্বারা প্রতিনিধিত্ব করা যেতে পারে:

1 1 2 2 1 3 3 2 4

উভয় প্রান্তের নিকটতম দুটি অঞ্চল হিসাবে আমরা একটি দেশের প্রান্ততম অঞ্চলটিকে সংজ্ঞায়িত করি। যদি উপরের তালিকাটি শূন্য 1সূচকযুক্ত হয় তবে দেশের সর্বাধিকতম অঞ্চলগুলি অবস্থান 0এবং অবস্থিত 4

একটি দেশ অন্যটিকে ঘিরে যদি তার দুটি প্রান্ততম অঞ্চলের মধ্যে সাবলিস্টে অন্য দেশের সমস্ত অঞ্চল থাকে। উপরের উদাহরণে, দেশের 2প্রান্ততম অঞ্চলগুলির মধ্যে সাবলিস্টটি হ'ল:

2 2 1 3 3 2

এবং আমরা দেখতে পাচ্ছি যে দেশের সমস্ত অঞ্চলগুলি দেশের 3শীর্ষতম অঞ্চলের মধ্যে 2, সুতরাং দেশটি দেশকে 2ঘিরে 3

একটি মাত্র উপাদান সহ একটি দেশ আর কখনও ঘিরে থাকবে না।

চ্যালেঞ্জ

ইনপুট (যে কোন ফর্ম্যাটে) এবং আউটপুট হিসেবে পূর্ণসংখ্যার একটি তালিকা নিন truthy যদি কোনো দেশের অন্যের দ্বারা বেষ্টিত মান, এবং একটি falsy মান অন্যথায়।

আপনি ধরে নিতে পারেন যে ইনপুট তালিকাটি অমানবিক, কেবল ধনাত্মক পূর্ণসংখ্যা রয়েছে এবং কোনও সংখ্যা 'এড়িয়ে যায় না': উদাহরণস্বরূপ, 1 2 1 5অবৈধ ইনপুট হবে।

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

+----------------------+--------+
|        Input         | Output |
+----------------------+--------+
| 1                    | False  |
| 2 1 3 2              | True   |
| 2 1 2 1 2            | True   |
| 1 2 3 1 2 3          | False  |
| 1 3 1 2 2 3 2 3      | True   |
| 1 2 2 1 3 2 3 3 4    | False  |
| 1 2 3 4 5 6 7 8 9 10 | False  |
+----------------------+--------+

21
পিপিসিজিতে আপনাকে স্বাগতম! আপনার প্রথম প্রশ্নের জন্য অভিনন্দন; এই সত্যিই ভাল দেখাচ্ছে!
মেগো

উত্তর:


33

পাইথ, 7 বাইট

n{Q_{_Q

পরীক্ষার ক্ষেত্রে কোড চালান।

n      Check whether the following are not equal:
 {Q     The unique elements in order of first appearance
 _{_Q   The unique elements in order of last appearance
         (done by reversing, taking unique elts, then reversing again)

আশেপাশের এড়ানোর একমাত্র উপায় হ'ল দেশগুলির বামতম অঞ্চলগুলিকে তাদের ডানদিকের অঞ্চলগুলির মতো একই ক্রমে সাজানো। যদি দুটি দেশ এই ক্রমে অদলবদল হয় তবে একটির একটি অঞ্চল অন্যের চেয়ে আরও বাম এবং আরও ডান দিকের থাকে এবং তাই এটি ঘিরে রয়েছে।

বামতম অঞ্চলের ক্রম অনুসারে অনন্য দেশগুলি পেতে, আমরা কেবল অনুলিপি করি, যা এই ক্রমটি সংরক্ষণ করে। উল্টো, ডুপ্লিকেট করে, এবং আবার বিপরীত হয়ে ডানদিকের অঞ্চলটির জন্য একই কাজ করা হয়। এগুলি যদি আলাদা ফলাফল দেয় তবে একটি দেশ ঘিরে রয়েছে।


12

রেটিনা , 61 60 বাইট

আমার চেয়ে অনেক বেশি দীর্ঘ ...

(\b(\d+)\b.* (?!\2 )(\d+) .*\b\2\b)(?!.* \3\b)(?<!\b\3 .*\1)

কমপক্ষে অন্য একটি দেশকে ঘিরে যে দেশের সংখ্যা প্রিন্ট করা হয়।

এটি অনলাইনে চেষ্টা করুন।

এটা তোলে বৈশিষ্ট খুব সহজবোধ্য বাস্তবায়ন আছে: আমরা প্যাটার্ন জন্য চেহারা A...B...Aযেমন যে Bতন্ন তন্ন আগে বা খেলা শেষে প্রদর্শিত হবে।


11

পাইথন, 64 বাইট

lambda l,S=sorted:S(l,key=l.index)!=S(l,key=l[::-1].index)[::-1]

আশেপাশের এড়ানোর একমাত্র উপায় হ'ল দেশগুলির বামতম অঞ্চলগুলিকে তাদের ডানদিকের অঞ্চলগুলির মতো একই ক্রমে সাজানো। যদি দুটি দেশ এই ক্রমে অদলবদল হয় তবে একটির একটি অঞ্চল অন্যের চেয়ে আরও বাম এবং আরও ডান দিকের থাকে এবং তাই এটি ঘিরে রয়েছে।

ফাংশনটি পরীক্ষা করে যে বামতম চেহারা এবং ডানদিকের উপস্থিতি অনুসারে অঞ্চলগুলিকে বাছাই করা একই ফলাফল দেয়। দুর্ভাগ্যক্রমে, পাইথন তালিকাগুলির সাথে rindexসাদৃশ্য নেই rfind, তাই আমরা তালিকাটি বিপরীত করি, তারপরে সাজানো আউটপুট বিপরীত করি।

সহায়ক ফাংশন সহ একই দৈর্ঘ্য (64৪):

g=lambda l:sorted(l,key=l.index)
lambda l:g(l)[::-1]!=g(l[::-1])

6

সি #, 113 বাইট

public bool V(int[] n){var u1=n.Distinct();var u2=n.Reverse().Distinct().Reverse();return !u1.SequenceEqual(u2);}

Ungolfed:

public bool ContainsSurroundedCountry(int[] numbers)
{
    int[] uniqueLeftmost = numbers.Distinct().ToArray();
    int[] uniqueRightmost = numbers.Reverse().Distinct().Reverse().ToArray();

    return !uniqueLeftmost.SequenceEqual(uniqueRightmost);
}

সংক্ষিপ্ত LINQপদ্ধতির ব্যবহার


1
পিপিসিজিতে আপনাকে স্বাগতম। এটি একটি খুব ভাল অবলম্বন সমাধান; আমাকে প্রায়শই নতুন ব্যবহারকারীদের জানাতে হবে যে লোকেরা প্রায়শই তাদের কোডের বর্ণহীন (পঠনযোগ্য, মন্তব্য করা) সংস্করণ দেখতে পছন্দ করে। তবে, আপনি একটি গল্ফ সংস্করণ অন্তর্ভুক্ত করতে ভুলে গেছেন! 1Char ভেরিয়েবলের নাম, সাদা স্থান সরিয়ে এবং "ভেরিয়েবলগুলি intআপনি যদি অন্যথায় না বলে থাকেন তবে" তাত্ক্ষণিক বলে ধরে নেওয়া হয়েছে এমন অনেকগুলি কৌশল আপনি ব্যবহার করতে পারেন । অ্যালগরিদম এবং বাস্তবায়নের জন্য +1।
wizzwizz4

2
আহ্, দেখছি। হ্যাঁ, আমি এটিতে নতুন। কিছুটা ফ্যাট ছাঁটাই করে আবার চেষ্টা করবে। পরামর্শের জন্য ধন্যবাদ.
জেসন ইভান্স

এক-চরিত্রের ভেরিয়েবল নাম ব্যবহার করে আপনি দুটি বাইট সংরক্ষণ করতে পারেন — বাস্তবে আপনি ভেরিয়েবলগুলি ব্যবহার না করে এবং এটিকে একটি একক অভিব্যক্তি তৈরি করে আরও সঞ্চয় করতে পারেন।
ডোরকনবব

আমি সন্দেহ করতে পারি যে আপনি বাদ দিতে পারেন .ToArray()
ভ্লাদ

1
আমি জানি এটি প্রায় 2.5 বছর হয়ে গেছে, তবে আপনি এটি 82 বাইটে গল্ফ করতে পারেন : using System.Linq;+ n=>!n.Distinct().SequenceEqual(n.Reverse().Distinct().Reverse())(লিঙ্ক আমদানি দুর্ভাগ্যক্রমে বাধ্যতামূলক)) এটি অনলাইনে চেষ্টা করুন। ভাল উত্তর, আমার কাছ থেকে +1!
কেভিন ক্রুইজসেন


4

জাপট, 12 বাইট

Uâ ¬¦Uw â ¬w

এটি অনলাইন চেষ্টা করুন!

অ্যালগরিদম বের করার জন্য @ এক্সনোরকে ধন্যবাদ Thanks ইনপুট অ্যারে স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হয় U, âঅবিচ্ছিন্ন, wবিপরীত, এবং ¦হয় !=¬খালি স্ট্রিং ( [1,2,3] => "123") এর সাথে যোগ দেয় ; এটি প্রয়োজনীয় কারণ জাভাস্ক্রিপ্টের তুলনা দুটি অ্যারিকে সমান নয় হিসাবে গণনা করে যদি না তারা একই অবজেক্ট হয়। উদাহরণস্বরূপ (জেএস কোড, জাপট নয়):

var a = [1], b = [1]; alert(a==b); // false
var a = [1], b = a;   alert(a==b); // true

যদি এটি না হয় তবে আমরা প্রতিটি অ্যারেটিতে কেবল যোগ না দিয়ে দুটি বাইট সরিয়ে ফেলতে পারি:

Uâ ¦Uw â w

জাপ্টের মতো শব্দগুলি মান সমতাটি প্রয়োগ করতে চায়।
isaacg

4

ES6, 76 75 65 64 বাইট

 a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r|i))+a)()!=f(-1)

@ Xnor এর উত্তরের সোজা বন্দর।

সম্পাদনা: প্রতিস্থাপন 1 বাইট সংরক্ষিত a.lastIndexOf(x)==iসঙ্গে a.indexOf(x,i+1)<0

সম্পাদনা করুন: @ ব্যবহারকারী81655 এর জন্য 10 বাইট সংরক্ষণ করা হয়েছে।

সম্পাদনা: প্রতিস্থাপন 1 বাইট সংরক্ষিত r||iসঙ্গে r|i


2
কোনও ফাংশন ব্যবহার করে 65 বাইট:a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r||i))+a)()!=f(-1)
ব্যবহারকারী 81655

<0 এর পরিবর্তে use ব্যবহার করুন।
মামা ফান রোল

@ ՊՓԼՃՐՊՃՈԲՍԼ না, আমি এটি -1 হতে চাই। ~হিসাবে একই >=0
নীল

ওহ কিছুক্ষণ অপেক্ষা করুন: পি
মামা ফান রোল

@ ব্যবহারকারী81655 দুঃখিত আমি কোনও কারণে এর আগে আপনার মন্তব্যটি লক্ষ্য করিনি। কৌশল, তবে আমি এটি পছন্দ করি!
নিল


1

জাভা, ২৮১ টি অক্ষর

class K{public static void main(String[]a){System.out.println(!k(a[0]).equals(new StringBuffer(k(new StringBuffer(a[0]).reverse().toString())).reverse().toString()));}static String k(String k){for(char i=49;i<58;i++){k=k.replaceFirst(""+i,""+(i-9)).replaceAll(""+i,"");}return k;}}

1

পাইথন 3, 90 বাইট

পাইথন তালিকার হিসাবে ইনপুটটি গ্রহণ করে এই ফাংশন। দুঃখের বিষয়, পাইথন তালিকাগুলি স্ট্রিংগুলির মতো শেষ থেকে অনুসন্ধানগুলি সরাসরি সমর্থন করে না rindex(), তবে ওহ ভাল।

def t(c):i,I=c.index,c[::-1].index;return any(i(n)<i(m)and I(n)<I(m)for m in c for n in c)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.