ট্রানজিটিভ সমতা


16

চ্যালেঞ্জ

আপনার প্রোগ্রামে 3 টি ইনপুট নেওয়া উচিত:

  • একটি ধনাত্মক পূর্ণসংখ্যা যা ভেরিয়েবলের সংখ্যা,
  • অ-নিরক্ষিত সংখ্যার অর্ডারযুক্ত জোড়াগুলির একটি সেট, যেখানে প্রতিটি জুটি ভেরিয়েবল এবং এর মধ্যে সমতার প্রতিনিধিত্ব করে
  • একটি ধনাত্মক পূর্ণসংখ্যা যা প্রারম্ভিক চলকের প্রতিনিধিত্ব করে,

এটি nonnegative পূর্ণসংখ্যার একটি সেট ফেরত পাঠানো উচিত যা সমস্ত ভেরিয়েবলগুলিকে উপস্থাপন করে যা প্রারম্ভিক ভেরিয়েবলের (যেমন প্রারম্ভিক ভেরিয়েবল নিজেই সহ) ট্রানজিটিভ সমান দেখানো যেতে পারে represent

অন্য কথায়, প্রদত্ত ইনপুট সালে N, Eএবং S, একটি সেট আসতে Q, এই ধরনের যে:

  • S ∈ Q
  • যদি Z ∈ Qএবং (Y = Z) ∈ E, তারপরY ∈ Q
  • যদি Z ∈ Qএবং (Z = Y) ∈ E, তারপর Y ∈ Q

এটি সমস্যা হিসাবেও প্রকাশ করা যেতে পারে :

গ্রাফটিতে একটি পুনর্নির্দেশিত গ্রাফ এবং একটি শীর্ষবিন্দু দেওয়া হয়েছে, এর সংযুক্ত উপাদানটির শীর্ষ সূচিগুলি তালিকাবদ্ধ করুন ।

বিশেষ উল্লেখ

  • আপনি 0-ভিত্তিক বা 1-ভিত্তিক সূচক ব্যবহার করতে চয়ন করতে পারেন।
  • প্রথম ইনপুটটি উপস্থিত ভেরিয়েবলের সংখ্যা গণনা করে, যেখানে ভেরিয়েবলগুলি সংখ্যা হিসাবে দেওয়া হয়। বিকল্পভাবে, আপনি এই ইনপুটটি নিতে পারবেন না, এক্ষেত্রে এটি আপনার ইনডেক্সিং স্কিমের উপর নির্ভর করে উপস্থিত সর্বোচ্চ চলক সূচক বা এর চেয়ে আরও একটির সমান বলে ধরে নেওয়া হয়।
  • আপনি ধরে নিতে পারেন ইনপুটটি সুগঠিত হয়েছে: প্রথম ইনপুট দ্বারা নির্দিষ্ট রেঞ্জের বাইরে আপনাকে ভেরিয়েবল দেওয়া হবে না। উদাহরণস্বরূপ, 3, [1 = 2, 2 = 0], 1এটি একটি বৈধ ইনপুট, যখন 4, [1 = 719, 1 = 2, 3 = 2], -3নেই।
  • আপনি ধরে নিতে পারবেন না যে কোনও ভেরিয়েবলের সাথে এর সাথে কোনও সমতা যুক্ত থাকবে। যদি কোনও তৃতীয় ইনপুট দেওয়া হয় যা "একাকী" হয় (এর কোনও সমতা নেই), সঠিক আউটপুটটি একটি সিঙ্গলটন সেট যা কেবলমাত্র সেই ইনপুটটি ধারণ করে (যেহেতু এটি নিজের সমান)।
  • আপনি ধরে নিতে পারেন যে সমতাগুলির মধ্যে একটি ভেরিয়েবল থেকে নিজের মধ্যে কোনও সমতা থাকবে না এবং একই সমতাটি একাধিকবার দেওয়া হবে না (এটি এর মতো জিনিসগুলি অন্তর্ভুক্ত করে 1 = 2এবং2 = 1 )।
  • আপনি ধরে নিতে পারেন যে প্রদত্ত সমস্ত পূর্ণসংখ্যাগুলি আপনার ভাষার প্রতিনিধিত্বযোগ্য সীমার মধ্যে থাকবে।
  • আপনি কোনও যুক্তিসঙ্গত ফর্ম্যাটে দ্বিতীয় ইনপুট নিতে পারেন।

এখানে কিছু যুক্তিসঙ্গত ফর্ম্যাট রয়েছে:

0 = 2
0 = 3
1 = 0

{(0, 2), (0, 3), (1, 0)}

[0, 2, 0, 3, 1, 0]

0 2 0 3 1 0

Graph[{{0, 2}, {0, 3}, {1, 0}}]

[0 = 2, 0 = 3, 1 = 0]
  • আপনি যেকোন যুক্তিসঙ্গত বিন্যাসে (যেমন সেট, তালিকা, ইত্যাদি) আউটপুট দিতে পারেন। আদেশ অপ্রাসঙ্গিক।

স্কোরিং

এটি , তাই সংক্ষিপ্ততম বৈধ প্রোগ্রাম (বাইটে) জয়লাভ করে।

পরীক্ষার কেস (0-সূচিযুক্ত)

3, [1 = 2, 2 = 0], 1                      -> {0, 1, 2}
5, [0 = 2, 0 = 3, 1 = 2], 3               -> {0, 1, 2, 3}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 4        -> {2, 4}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 5        -> {0, 1, 3, 5}
5, [0 = 1, 2 = 0, 0 = 3, 4 = 0], 2        -> {0, 1, 2, 3, 4}
6, [0 = 1, 1 = 2, 2 = 3, 3 = 4, 4 = 5], 3 -> {0, 1, 2, 3, 4, 5}
4, [0 = 1, 1 = 2, 2 = 0], 3               -> {3}
5, [0 = 2, 2 = 4], 2                      -> {0, 2, 4}
8, [], 7                                  -> {7}

পরীক্ষার কেস (1-ইনডেক্সড)

3, [2 = 3, 3 = 1], 2                      -> {1, 2, 3}
5, [1 = 3, 1 = 4, 2 = 3], 4               -> {1, 2, 3, 4}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 5        -> {3, 5}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 6        -> {1, 2, 4, 6}
5, [1 = 2, 3 = 1, 1 = 4, 5 = 1], 3        -> {1, 2, 3, 4, 5}
6, [1 = 2, 2 = 3, 3 = 4, 4 = 5, 5 = 6], 4 -> {1, 2, 3, 4, 5, 6}
4, [1 = 2, 2 = 3, 3 = 1], 4               -> {4}
5, [1 = 3, 3 = 5], 3                      -> {1, 3, 5}
8, [], 8                                  -> {8}


আমরা চাইলে কি আমরা প্রথম ইনপুটটি গ্রহণ করা ছেড়ে দিতে পারি? আমি মনে করি সঠিক আউটপুটটি পাওয়া দরকার নেই
ডাইলানান

@ এল্লানন "প্রথম ইনপুটটি উপস্থিত ভেরিয়েবলের সংখ্যা গণনা করে, যেখানে ভেরিয়েবলগুলি সংখ্যা হিসাবে দেওয়া হয় Al বিকল্পভাবে, আপনি এই ইনপুটটি নিতে পারবেন না, এই ক্ষেত্রে এটি বর্তমানের সর্বোচ্চ ভেরিয়েবলের সূচকের সমান বলে গণ্য হয়, বা একটি এর চেয়েও বেশি, আপনার ইনডেক্সিং স্কিমের উপর নির্ভর করে "" (
অনুমানের

দুঃখিত কখনও কখনও আমি পড়া শেষ করতে ভুলে যান
dylnan

আউটপুটটিতে নকল থাকতে পারে? (আমি দাবি করতে পারি যে এটি কোনও সেটকে উপস্থাপন করে ...)
টন হসপেল

উত্তর:


7

ব্র্যাচল্যাগ , 22 বাইট

{tc⊇,?k.&¬(t∋;.xȮ)∧}ᶠt

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

ব্যাখ্যা

{tc⊇,?k.&¬(t∋;.xȮ)∧}ᶠt  Input is a pair, say [2,[[1,3],[2,4],[5,2]]]
{                   }ᶠ   Find all outputs of this predicate:
 t                        Tail: [[1,3],[2,4],[5,2]]
  c                       Concatenate: [1,3,2,4,5,2]
   ⊇                      Choose a subset: [4,5]
    ,?                    Append the input: [4,5,2,[[1,3],[2,4],[5,2]]]
      k                   Remove the last element: [4,5,2]
       .                  This list is the output.
        &¬(      )∧       Also, the following is not true:
           t∋              There is a pair P in the second part of the input.
             ;.x           If you remove from P those elements that occur in the output,
                Ȯ          the result is a one-element list.
                      t  Take the last one of these outputs, which is the shortest one.



2

পরিষ্কার , 85 81 বাইট

import StdEnv
$l=limit o iterate(\v=removeDup(flatten[v:filter(isAnyMember v)l]))

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

ফাংশন সংজ্ঞায়িত করে $ :: [[Int]] -> ([Int] -> [Int])


মজাদার. কিভাবে limitকাজ করে?
ফলটি Esolanging

@ এসোলেংফ্রুট এটি একটি তালিকা নেয়, অসীম বলে ধরে নেওয়া হয় এবং এটি প্রথম উপাদানটি দেয় যা টানা দুবার ঘটে occurs
4urous

1
ওহ, এটি খুব দরকারী বলে মনে হচ্ছে!
ফল ফল Esolanging


1

অপারেশন ফ্ল্যাশপয়েন্ট স্ক্রিপ্টিং ভাষা, 364 বাইট

f={t=_this;r=t select 1;i=0;while{i<t select 0}do{call format["V%1=[%1]",i];i=i+1};i=0;while{i<count r}do{call format(["V%1=V%1+V%2;V%2=V%1"]+(r select i));i=i+1};l=call format["V%1",t select 2];g={i=0;c=count l;while{i<c}do{if(i<count l)then{e=l select i;call _this};i=i+1}};{l=l+call format["V%1",e]}call g;"l=l-[e]+[e];if(count l<c)then{c=count l;i=0}"call g;l}

সাথে কল করুন:

hint format
[
    "%1\n%2\n%3\n%4\n%5\n%6\n%7\n%8\n%9",
    [3, [[1, 2], [2, 0]], 1] call f,
    [5, [[0, 2], [0, 3], [1, 2]], 3] call f,
    [6, [[0, 3], [1, 3], [2, 4], [5, 1]], 4] call f,
    [6, [[0, 3], [1, 3], [2, 4], [5, 1]], 5] call f,
    [5, [[0, 1], [2, 0], [0, 3], [4, 0]], 2] call f,
    [6, [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]], 3] call f,
    [4, [[0, 1], [1, 2], [2, 0]], 3] call f,
    [5, [[0, 2], [2, 4]], 2] call f,
    [8, [], 7] call f
]

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন

Unrolled:

f =
{
    t = _this;
    r = t select 1;
    i = 0;
    while {i < t select 0} do
    {
        call format["V%1=[%1]", i];
        i = i + 1
    };

    i = 0;
    while {i < count r} do
    {
        call format(["V%1=V%1+V%2;V%2=V%1"] + (r select i));
        i = i + 1
    };

    l = call format["V%1", t select 2];

    g =
    {
        i = 0;
        c = count l;
        while {i < c} do
        {
            if (i < count l) then
            {
                e = l select i;
                call _this
            };
            i = i + 1
        }
    };

    {l = l + call format["V%1", e]} call g;
    "l = l - [e] + [e];

    if (count l<c)then
    {
        c = count l;
        i = 0
    }" call g;

    l
}

1

পাইথন 2 , 53 বাইট

e,s,n=input()
b={s}
for p in n*e:b|=b&p and p
print b

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

ফাংশন হিসাবে একই দৈর্ঘ্য:

lambda e,s,n:reduce(lambda b,p:b|(b&p and p),n*e,{s})

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

এটি শর্ট সার্কিট আপডেটটি ব্যবহার করে রডের দুর্দান্ত সমাধানের ভিত্তিতে তৈরি b|=b&p and p। ইনপুট হিসাবে ভেরিয়েবলের সংখ্যা নেওয়া nলুপ কোডটি সংক্ষিপ্ত করতে সহায়তা করে।


1

জেলি ,  12   11  10 বাইট

-১ এরিক দি আউটগল্ফারকে ধন্যবাদ (এর œ&সাথে পরমাণুর প্রতিস্থাপন করুন f)

⁹fÐfȯFµÐLQ

Eবামদিকে (দৈর্ঘ্য-দুই-তালিকার তালিকা হিসাবে) এবং Sডানদিকে (একটি পূর্ণসংখ্যা হিসাবে) একটি [ডি-সদৃশ] তালিকা ফিরিয়ে দেওয়া একটি ডায়াডিক লিঙ্ক ।

এটি অনলাইন চেষ্টা করুন! অথবা একটি পরীক্ষা-স্যুট দেখুন

কিভাবে?

⁹fÐfȯFµÐLQ - Link: list of lists, E; integer S
      µÐL  - repeat the monadic chain to the left until a fixed point is reached:
  Ðf       -   (for each pair in E) filter keep if:
 f         -     filter discard if in
⁹          -     chain's right argument
           -     (originally [S], thereafter the previous result as monadic)
    ȯ      -   logical OR with implicit right
           -   (force first pass to become S if nothing was kept)
     F     -   flatten to a single list
           -   (S -> [S] / [[1,4],[1,0]]->[1,4,1,0] / etc...)
         Q - de-duplicate

œ&এর এবং fতার ফেরতের মানগুলির সর্বদা একই বুলিয়ান সম্পত্তি থাকে।
এরিক আউটগল্ফার 21 '21

1

পার্ল 5 -n0 , 49 39 বাইট

সমতুল্য সংখ্যার জোড় জোড় লাইন দ্বারা STDIN এ একটি লাইনে প্রারম্ভিক মান দিন (বা শেষ মানটি শেষ বা মাঝখানে দিন বা একাধিক শুরুর মান দিন, এটি সব কাজ করে)

#!/usr/bin/perl -n0
s/
$1? | $1/
/ while/^(\d+
)/msg;say//g

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

এটি একাধিকবার ফলাফল সেটটিতে একটি উপাদান আউটপুট করতে পারে। এই 48 বাইটের প্রকরণটি প্রতিটি সমমানের উপাদানকে একবারে আউটপুট দেয়:

s/
$1? | $1/
/ while/^(\d+
)(?!.*^\1)/msg;say//g

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



1

কে (এনএনজি / কে) , 37 36 35 বাইট

{&a[z]=a:{y[x]&:|y x;y}[+y,,&2]/!x}

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

{ }আর্গুমেন্ট সহ ফাংশন x, yএবং zপ্রতিনিধিত্বমূলক N, EএবংS যথাক্রমে

!x তালিকাটি 1 1 ... x-1

&2 তালিকা হয় 0 0

y,,&2আমরা যুগল যোগ 0 0করার yএকটি খালি বিশেষ মামলায় এড়াতেy

+y,,&2 জোড়ের তালিকা থেকে এক জোড়া তালিকায় একই জিনিস স্থানান্তরিত হয়

{ }[+y,,&2]একটি অভিক্ষেপ, অর্থাত্ একটি ফাংশন যা হয় xমান হতে হবে +y,,&2এবং yযুক্তি যখন অভিক্ষেপ কলিং পাস হতে হবে

|y xহয় yসূচকের এ x, বিপরীত ( |)

@[y;x;&;|y x]বিদ্যমান উপাদানগুলির সর্বনিম্ন ( ) এবং এর থেকে কোনও উপাদান yনিয়ে সূচকে সংশোধন করুনx&|y x

/ কনভার্সেশন না হওয়া পর্যন্ত কল রাখা

a: একটি বরাদ্দ

a[z]=zউপাদানের বুলিয়ান মাস্ক aসমান z-th

& বুলিয়ান মাস্ককে সূচকের তালিকায় রূপান্তর করুন


1

অক্টাভা , 48 বাইট

t=@(A,u)find(((eye(size(A))+A+A')^nnz(A))(u,:));

, হিসাবে "অন্তিক-ম্যাট্রিক্স" ইনপুট লাগে উদাহরণ ব্যবহারের জন্য [0 0 0; 0 0 1; 1 0 0]জন্য [2 = 3, 3 = 1], এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

প্রথমে আমরা eye(size(A))(উপাদানগুলি প্রতিবিম্বযুক্ত), A(ইনপুট) এবং A'(সম্পর্কটি প্রতিসাম্য) এর যোগফল ব্যবহার করে ট্রান্সজিটিভ গ্রাফের জন্য সম্পূর্ণ সংলগ্ন ম্যাট্রিক্স তৈরি করি ।

আমরা সেই ক্ষমতাকে nnz(A)( nnz(A)পথের দৈর্ঘ্যের জন্য উপরের দিকে আবদ্ধ) গণনা করে ট্রানজিটি ক্লোজারটি গণনা করি , সুতরাং সেখান থেকে যে সমস্ত বাম রয়েছে তার সাথে ডান সারিটি পাওয়া যায়(u,:) এবং findসমস্ত শূন্য নথি প্রবেশ করা।




0

জাভাস্ক্রিপ্ট (ES6), 87 বাইট

(a,n)=>a.map(([b,c])=>[...d[b]||[b],...d[c]||[c]].map((e,_,a)=>d[e]=a),d=[])&&d[n]||[n]

বর্ধিত &&[...new Set(d[n]||[n])]14 বাইট ব্যয়ে ব্যবহার করা সম্ভব হবে ।

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