কিসের জন্য নির্ধারিত?


10

সংশ্লিষ্ট


কিসের জন্য নির্ধারিত?

এই প্রতিদ্বন্দ্বিতায় আপনাকে দুই ধরনের দেওয়া হবে, Aএবং Bএবং নির্ধারণ যদি Aকরতে হস্তান্তরযোগ্য নয় B, Bহস্তান্তরযোগ্য হয় A, অথবা তন্ন তন্ন।

টাইপ সিস্টেম

(আমি যে tকোনও ধরণের প্রতিনিধিত্ব করতে ব্যবহার করব )

বেসিক প্রকার

বেসিক প্রকারগুলি একটি একক মূলধন বর্ণ দ্বারা প্রতিনিধিত্ব করা হয়, যেমন X। তারা মূলত ক্লাস হয়।

  • Xথেকে হস্তান্তরযোগ্য নয় Yযদি Yপারেন হিসাবে একই, বা একটি পিতা বা মাতা ক্লাস হয় X

ছেদ প্রকারের

ছেদ করার ধরণগুলি প্রতিনিধিত্ব করে intersect<X, Y>এবং <এর (উদাঃ intersect<X, Y, Z, D, E>) এর মধ্যে যে কোনও ধরণের সংখ্যক প্রকার থাকতে পারে ।

  • tintersect<X1, X2... Xn>যদি tসকলের জন্য নির্ধারিত হয় তবে তা নির্ধারিত হয় X
  • intersect<X1, X2... Xn>যদি কোনটি অর্পণযোগ্য হয় tতবে Xতা নির্ধারিত হয় t

ইউনিয়ন প্রকার

ইউনিয়ন ধরণের দ্বারা প্রতিনিধিত্ব করা হয় union<X, Y>এবং <এর (উদাঃ union<X, Y, Z, D, E>) এর মধ্যে যে কোনও ধরণের সংখ্যা থাকতে পারে ।

  • tযদি কোনটি অর্পণযোগ্য হয় union<X1, X2... Xn>তবে tতা নির্ধারিত হয় X
  • union<X1, X2... Xn>tযদি সবাইকে অর্পণযোগ্য হয় তবে Xতা নির্ধারিত হয় t

ইনপুট

আপনি ইনপুট হিসাবে পাবেন:

  • শ্রেণি শ্রেণিবিন্যাস। ক্লাস শ্রেণিবদ্ধের জন্য আপনি ইনপুট পদ্ধতিটি চয়ন করতে পারেন। আপনি কোনও গাছের প্রতিনিধিত্ব, বা প্রতিটি ধরণের এর পিতামাতার একটি তালিকা সহ বা শ্রেণীর শ্রেণিবিন্যাসের সঠিকভাবে প্রতিনিধিত্ব করে এমন অন্য কোনও বিষয় ইনপুট করতে পারেন।
  • দুই ধরণের (ইনপুটটি নমনীয়, যতক্ষণ স্বরলিখনের সাথে সামঞ্জস্য থাকে তবে আপনি চাইলে এই ধরণেরগুলি পেতে পারেন)।

আউটপুট

আপনি তিনটি সামঞ্জস্যপূর্ণ এবং স্বতন্ত্র মান আউটপুট এক হবে তাদের কল X, Yএবং, Z। দুই ধরনের দেওয়া Aএবং Bআউটপুট, Xযদি Aথেকে হস্তান্তরযোগ্য নয় B, আউটপুট Yযদি Bকরতে হস্তান্তরযোগ্য নয় Aএবং আউটপুট Zঅন্যথায় (যদি Aথেকে হস্তান্তরযোগ্য নয় Bএবং Bকরতে হস্তান্তরযোগ্য নয় A, আপনি may আউটপুট X, Yউভয়, অথবা একটি চতুর্থ মান)।


পরীক্ষার কেস

বিন্যাস:

# of types
[type, parents...]
[type, parents...]
Type a
Type b

2
[A,B]
[B]
A
B
--
A is assignable to B


3
[A,B,C]
[B,C]
[C]
intersect<A,C>
A
--
A is assignable to intersect<A,C>


3
[A,B,C]
[B,C]
[C]
union<A,C>
A
--
A is assignable to union<A,C>


3
[A,B,C]
[B,C]
[C]
intersect<B,C>
A
--
A is assignable to intersect<B,C>


3
[A,B,C]
[X,Y,Z]
[T,U,V]
intersect<union<A,T,X>,intersect<A,B>,Y>
intersect<T,C,X>
--
intersect<T,C,X> and intersect<union<A,T,X>,intersect<A,B>,Y> are not assignable to each other    

1
[A]
A
A
--
A is assignable to A


3
[A,B,C]
[X,Y,Z]
[T,U,V]
intersect<A,intersect<A,B>,Y>
intersect<T,C,X>
--
intersect<T,C,X> and intersect<A,intersect<A,B>,Y> are not assignable to each other


2
[A]
[B]
A
B
--
B and A are not assignable to each other

3
[A,B,C]
[X,Y,Z]
[T,U,V]
intersect<union<A,X>,intersect<A,B>,Y>
intersect<T,C,X>
--
intersect<T,C,X> and intersect<union<A,X>,intersect<A,B>,Y> are not assignable to each other

আপনি পরীক্ষার জন্য এটি ব্যবহার করতে পারেন এমন একটি ভার্চুয়াল জাভা সমাধানের একটি লিঙ্ক রয়েছে (এটি পরীক্ষার ক্ষেত্রে একইভাবে ইনপুট নেয়)


এটি কোড-গল্ফ, তাই প্রতিটি ভাষার ন্যূনতম বাইটগুলি সেই ভাষার জন্য জয়ী হয়!



@ হ্যাঁ না, এ-এর মা-বাবার বি এবং সি রয়েছে
ফিনিক্স

@ হালওয়ার্ডহ্ম্মেল ক্ষমা চেয়েছেন; আমি পোস্টটি সম্পাদনা করেছি
সকরাটিক ফিনিক্স

উত্তরাধিকারী হবে একটি বৃত্ত গঠন?
tsh

A এবং B উভয়কে Assignable হয় তবে আউটপুট কী হওয়া উচিত?
tsh

উত্তর:


3

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

cপ্রতিটি ধরনের বাবা অভিধান হয়, aএবং bচেক করতে দুই অভিব্যক্তি হয়। প্রকারগুলি স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হয়, যখন ছেদ করে এবং ইউনিয়নগুলি প্রথম উপাদানটিকে 0ছেদ করার জন্য এবং 1ইউনিয়নের জন্য সেট করে প্রকাশের সাথে তালিকা দ্বারা উপস্থাপিত হয়

রিটার্নস 0যদি তারা একে অপরের সাথে হস্তান্তরযোগ্য নয় 1যদি aকরতে হস্তান্তরযোগ্য নয় b, 2যদি bথেকে হস্তান্তরযোগ্য নয় aএবং 3উভয় যদি একে অপরের সাথে হস্তান্তরযোগ্য হয়

lambda c,a,b:y(a,b,c)+2*y(b,a,c)
y=lambda a,b,c:(b in c[a]or a==b if b[0]in c else[all,any][b[0]](y(a,x,c)for x in b[1:]))if a[0]in c else[any,all][a[0]](y(x,b,c)for x in a[1:])

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


3

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

(p,a,b,g=(a,b)=>a==b||(p[a]||a.i||a.u||[])[a.u?'every':'some'](t=>g(t,b))||(b.i||b.u||[])[b.i?'every':'some'](t=>g(a,t)))=>g(a,b)||+g(b,a)

pপ্যারেন্ট মানচিত্র, যা একটি জাভাস্ক্রিপ্ট অবজেক্ট যার কীগুলি পিতামাতার সাথে প্রকার এবং যার মান পিতা বা মাতার (গুলি) অ্যারে। উদাহরণস্বরূপ, যদি সেখানে দুই ধরনের হয় Aএবং Bএবং Bঅভিভাবক হয় Aতারপর pহবে {A:['B']}

ছেদগুলি ধরণের জাভাস্ক্রিপ্ট অবজেক্টে aএবং এর মানগুলির bএকটি কীগুলির একটি কী সহ একটি প্রতিনিধিত্ব করা হয় i, যখন ইউনিয়নের ধরণের কী থাকে u। উদাহরণস্বরূপ, দুটি ধরণের ছেদটি হবে Aএবং Bহবে {i:['A','B']}

প্রত্যাবর্তন মান হ'ল trueযদি aতা নির্ধারিত হয় b, 1তবে aযদি তা বরাদ্দ নাও হয় bতবে bনির্ধারিত হয় a, বা 0না হয় একে অপরের জন্য নির্ধারিত হয়।


2

সি ++ 17, 595 বাইট

#include<type_traits>
#define p(x)template<class...T>class x;
#define d(a,b)disjunction<s<a,b>...>{};
#define c(a,b)conjunction<s<a,b>...>{};
#define u(x)u<x...>
#define i(x)i<x...>
#define k struct s
#define e ...A
#define t(a,b)template<class a,class b>
using namespace std;p(i)p(u)t(B,D)k:disjunction<is_base_of<B,D>,is_same<B,D>>{};t(a,e)k<a,u(A)>:d(a,A)t(a,e)k<a,i(A)>:c(a,A)t(a,e)k<u(A),a>:c(A,a)t(a,e)k<i(A),a>:d(A,a)t(e,...B)k<i(A),i(B)>:d(A,i(B))t(e,...B)k<u(A),u(B)>:c(A,u(B))t(e,...B)k<i(A),u(B)>:d(A,u(B))t(e,...B)k<u(A),i(B)>:c(A,u(B))t(A,B)int f=s<A,B>::value?-1:s<B,A>::value?1:0;

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

একটি পরিবর্তনশীল টেমপ্লেট fযে হিসাবে ইনপুট কিছু ধরনের এবং ছেদ গ্রহণ i<...>বা ইউনিয়ন u<...>তাদের এবং আয় -1যদি Aকরতে হস্তান্তরযোগ্য নয় B এবং 1যদি Bকরতে হস্তান্তরযোগ্য নয় Aএবং 0অন্যথায়।

Ungolfed:

#include <type_traits>
using namespace std;

template<class...T>class Intersect;
template<class...T>class Union;

template<class A,class B>
struct is_assignable_to:
    disjunction<is_base_of<A,B>,is_same<A,B>>{};

template<class a,class...A>
struct is_assignable_to<a,Union<A...>>:
    disjunction<is_assignable_to<a,A>...>{};

template<class a,class...A>
struct is_assignable_to<a,Intersect<A...>>:
    conjunction<is_assignable_to<a,A>...>{};

template<class a,class...A>
struct is_assignable_to<Union<A...>,a>:
    conjunction<is_assignable_to<A,a>...>{};

template<class a,class...A>
struct is_assignable_to<Intersect<A...>,a>:
    disjunction<is_assignable_to<A,a>...>{};

template<class...A,class...B>
struct is_assignable_to<Intersect<A...>,Intersect<B...>>:
    disjunction<is_assignable_to<A,Intersect<B...>>...>{};

template<class...A,class...B>
struct is_assignable_to<Union<A...>,Union<B...>>:
    conjunction<is_assignable_to<A,Union<B...>>...>{};

template<class...A,class...B>
struct is_assignable_to<Intersect<A...>,Union<B...>>:
    disjunction<is_assignable_to<A,Union<B...>>...>{};

template<class...A,class...B>
struct is_assignable_to<Union<A...>,Intersect<B...>>:
    conjunction<is_assignable_to<A,Intersect<B...>>...>{};

template <class A,class B>
int f = is_assignable_to<A,B>::value?-1:is_assignable_to<B,A>::value?1:0;

ব্যবহার:

#include <iostream>
int main(){
    struct B{};
    struct C{};
    struct Y{};
    struct Z{};
    struct U{};
    struct V{};
    struct A:B,C{};
    struct X:Y,Z{};
    struct T:U,V{};
    std::cout << f<Intersect<A,Intersect<A,B>,Y>,Union<T,C,X>>; 
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.