ভ্যাম্পায়ার সামঞ্জস্য


28

ভ্যাম্পায়ার সম্পর্কে একটি সামান্য জ্ঞাত তথ্য হ'ল তাদের অবশ্যই শিকারের রক্ত ​​পান করতে হবে যা একটি উপযুক্ত রক্তদাতা রক্তের ধরণযুক্ত। ভ্যাম্পায়ারগুলির জন্য সামঞ্জস্যের ম্যাট্রিক্স নিয়মিত লাল রক্ত ​​কোষ দাতা / প্রাপক ম্যাট্রিক্সের মতো । নিম্নলিখিত আমেরিকান রেড ক্রস টেবিল দ্বারা এটি সংক্ষিপ্ত করা যেতে পারে

Type    You Can Give Blood To    You Can Receive Blood From
A+      A+, AB+                  A+, A-, O+, O-
O+      O+, A+, B+,AB+           O+, O-
B+      B+, AB+                  B+, B-, O+, O-
AB+     AB+                      everyone
A-      A+, A-, AB+, AB-         A-, O-
O-      everyone                 O-
B-      B+, B-, AB+, AB-         B-  O-
AB-     AB+, AB-                 AB-, A-, B-, O-

চ্যালেঞ্জ

কোনও ফাংশন বা প্রোগ্রাম লিখুন যা রক্তের টাইপটিকে ইনপুট হিসাবে গ্রহণ করে এবং দুটি তালিকা আউটপুট করে:

  1. ইনপুট প্রকারের অনুদান পেতে পারে এমন ধরণের অযৌক্তিকর তালিকা
  2. ইনপুট টাইপটিকে অনুদান দিতে পারে এমন আনঅর্ডারার্ড তালিকা

আপনি যদি কোনও ফাংশন লিখেন তবে দয়া করে কয়েকটি ফাংশনটি কল করে একটি পরীক্ষা প্রোগ্রাম সরবরাহ করুন, যাতে আমি এটি সহজেই পরীক্ষা করতে পারি। এই ক্ষেত্রে, পরীক্ষা প্রোগ্রামটি আপনার স্কোরের সাথে গণনা করবে না।

ইনপুট

ইনপুট অবশ্যই 8 টি সম্ভাব্য লাল রক্তকণিকার ধরণের মধ্যে একটির প্রতিনিধিত্ব করে একটি স্ট্রিং হতে হবে O− O+ A− A+ B− B+ AB− AB+। সাধারণ পদ্ধতিগুলির মাধ্যমে ইনপুট দেওয়া যেতে পারে (এসটিডিআইএন, কমান্ড-লাইন আর্টস, ফাংশন আরগস, ইত্যাদি)।

যদি অন্য কোনও ইনপুট দেওয়া হয় তবে প্রোগ্রাম / ফাংশনটি অবশ্যই খালি আউটপুট ফেরত বা ত্রুটি নিক্ষেপ করতে হবে। সাধারণত প্রশ্নগুলিতে কঠোর ইনপুট-চেকিং দুর্দান্ত হয় না তবে রক্তের ধরণের ভুল-ভোগের জীবন-মৃত্যুর ফলে আমার এই নিয়মটি যুক্ত করা উচিত বলে মনে হয়েছিল।

আউটপুট

আউটপুট হ'ল রক্তের জন্য দুটি ধরণের মানব-পঠনযোগ্য তালিকা যা আপনার ভাষার জন্য উপযুক্ত format বিশেষ ক্ষেত্রে যেখানে আউটপুট তালিকার একটিতে সমস্ত 8 প্রকার থাকে, এই তালিকাটি বিকল্পভাবে একটি একক আইটেমের তালিকা সহ প্রতিস্থাপন করা যেতে পারে everyone

সাধারণ আউটপুট স্বাভাবিক জায়গাগুলির একটিতে চলে যাবে (STDOUT, ফাংশন রিটার্ন ইত্যাদি)।

অন্যান্য বিধি

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ করা হয়েছে
  • আপনার প্রয়োজন মতো প্রাক-বিদ্যমান তৃতীয় পক্ষের 3 টি লাইব্রেরি ব্যবহার করতে পারেন, যতক্ষণ না তারা এ উদ্দেশ্যে সুস্পষ্টভাবে নকশাকৃত না হয়।

উদাহরণ

  • ইনপুট জন্য AB-, দুটি আউটপুট তালিকা হবে:{AB+, AB-}, {AB-, A-, B-, O-}
  • ইনপুট জন্য AB+, দুটি আউটপুট তালিকা হবে: {AB+}, {O−, O+, A−, A+, B−, B+, AB−, AB+}বা{AB+}, {everyone}

ব্যক্তিগত দ্রষ্টব্য: আপনি যদি সক্ষম হন তবে রক্তদানের বিষয়টি বিবেচনা করুন। কয়েক বছর আগে আমি যে সংক্রমণ পেয়েছি তা ছাড়া আমি আজ এখানে নাও থাকতে পারি, তাই যারা অনুদান দিতে সক্ষম তাদের প্রতি আমি খুব কৃতজ্ঞ বোধ করি!


@ মার্টিনবাটনার আসলে আমি উভয়ই গ্রহণ করব। সম্ভবত ২ য় ফর্ম বেশিরভাগ ভাষায় সংক্ষিপ্ত কোড আনবে, তবে সম্ভবত এমন কোনও বিশেষ ক্ষেত্রে রয়েছে যেখানে প্রথম ফর্মটি ব্যবহার করা আরও ছোট হতে পারে।
ডিজিটাল ট্রমা

3
স্পর্শকাতরভাবে সম্পর্কিত - এই উজ্জ্বল উত্তর Worldbuilding.stackexchange.com/a/11203/2094
ডিজিটাল ট্রমা


1
@ বামফ্রন্টাবাউট ধন্যবাদ - একটি বিট অফ ফ্রাই এবং লরি সর্বদা আমার প্রিয়!
ডিজিটাল ট্রমা

1
একটি পিকি ভ্যাম্পায়ার, তাই না? ড্র্যাকুলা তার কাসকেটে ঘুরিয়ে দিচ্ছে। এছাড়াও, শিরোনামটি অবসরপ্রাপ্ত গোথ-রক-ব্যান্ডের নামের মতো শোনাচ্ছে।
রেনে লিডার

উত্তর:


9

ক্লিপ , 69

*cTx\{fFx`Tf[tFtx}T`[Fx[y!VVx"O-"Vy"O-"}[TC"A+ B+ AB+ O+ A- B- AB- O-

ইনপুট: AB-

আউটপুট: {{"AB+", "AB-"}, {"A-", "B-", "AB-", "O-"}}

ব্যাখ্যা

রক্তের ধরণ যদি সমস্ত অ্যান্টিজেন অন্তর্ভুক্ত থাকে তবে তা xদিতে পারে । প্রোগ্রামটি ফাংশনটিকে দিতে পারে কিনা এবং প্রকারের তালিকা হিসাবে সংজ্ঞায়িত করে ।yxyFxyT

*cTx                 .- If T contains x (the input)         -.
    \                .- Print                               -.
     {             ` .- a list of                           -.
      fFx`T          .- filter each t in T with F(x,t)      -.
           f[tFtx}T  .- filter each t in T with F(t,x)      -.

[Fx[y              } .- F is a function of x and y          -.
     !V              .- all letters of ... are included in ...   -.
       Vx"O-"        .- x, with O and - removed             -.
             Vy"O-"  .- y, with O and - removed             -. 

[TC"A+ B+ AB+ O+ A- B- AB- O-   .- T is the list of types -.

6

জাভা 8, 373

import java.util.*;void f(String s){List<String>l=new ArrayList(Arrays.asList("A+,B+,AB+,O+,A-,B-,AB-,O-".split(","))),m=new ArrayList(l);int i=l.contains(s)?1:0/0;l.removeIf(x->g(s,x)<1);m.removeIf(x->g(x,s)<1);System.out.print(l+","+m);}int g(String s,String t){for(char c:s.replaceAll("O|-","").toCharArray())if(!t.replaceAll("O|-","").contains(""+c))return 0;return 1;}

ব্যাখ্যা

void f(String s) {
    List<String> l = new ArrayList(Arrays.asList("A+,B+,AB+,O+,A-,B-,AB-,O-".split(","))),
                 m = new ArrayList(l);
    int i = l.contains(s) ? 1 : 0 / 0;
    l.removeIf(x -> g(s, x) < 1);
    m.removeIf(x -> g(x, s) < 1);
    System.out.print(l + "," + m);
}

int g(String s, String t) {
    for (char c : s.replaceAll("O|-", "").toCharArray()) {
        if (!t.replaceAll("O|-", "").contains("" + c)) {
            return 0;
        }
    }
    return 1;
}

এটি এখানে চালান: http://repl.it/e98/1

নোট যে staticমূল পদ্ধতি থেকে তাদের কল করতে প্রতিটি পদ্ধতিতে যুক্ত করতে হয়েছিল।


2
আমি আপনার জন্য একটি সহজে চালিত প্রোগ্রামে একটি লিঙ্ক যুক্ত করেছি। অন্যান্য ইনপুটগুলির ফলাফলগুলি দেখতে প্রধান পদ্ধতিতে ফাংশন কলের অভ্যন্তরে স্ট্রিং প্যারামিটারটি সম্পাদনা করুন Edit
mbomb007

5

পাইথ, 61 59 50

L-{b"O-"M!-yGyHJmsd*c"A O B AB"d"+-"I}zJfgzTJfgYzJ

এটি এখানে চালান।

ব্যাখ্যা:

L-{b"O-"                         Create function y(b) that makes a set from b's 
                                 characters minus O and -.
M!-yGyH                          Create function g(G,H) that checks if y(G) is 
                                 a subset of y(H).
J                                Assign to J...
 msd                             The concatenation of every element in...
    *c"A O B AB"d"+-"            The Cartesian product of A O B AB and + -.
I}zJ                             If input in J then...
    fgzTJ                        Print all elements e in J if g(input, e).
    fgYzJ                        Print all elements e in J if g(e, input).

@ user23013 সম্পাদনার জন্য ধন্যবাদ। এটি অবশ্যই কার্টেসিয়ান হওয়া উচিত ছিল :)
orp

4

সিজেম, 64 বাইট

"AB"_a+'O+"+-"m*:s:TT{}+Tqa#=a+T4=f&_)f{\-!}\)f-:!]{T]z::*La-p}/

m*:sঅংশ থেকে আসে মার্টিন CJam উত্তর । (আমি অন্যান্য অংশগুলি এখনও পড়িনি।)

এখনও কিছু গুরুতর সমস্যা হবে কারণ তারা দুটি তালিকার ক্রম সম্পর্কে কখনই নিশ্চিত হবে না। এবং Block ArrayList &সিজেমের পরবর্তী সংস্করণগুলিতে প্রয়োগ করা হতে পারে।

ব্যাখ্যা

"AB"_a+'O+         " Generate ['A 'B \"AB\" 'O]. ";
"+-"m*:s:T         " Generate the list of blood types and store in T. ";
T{}+
    Tqa#           " Find the input in T. ";
=                  " Find the blood type by the index.
                     If not found, return a block to cause an error. ";
a+                 " Append the verified input to T. ";
T4=                " AB+. ";
f&                 " Intersect each blood type with AB+. ";
_)f{\-!}           " Check emptiness of input - each item. ";
\)f-:!             " Check emptiness of each item - input. ";
]{                 " For both lists: ";
    T]z::*         " Replace items in T where there is a 0 with empty strings. ";
    La-            " Remove empty strings. ";
    p              " Print. ";
}/

3

জাভাস্ক্রিপ্ট, 167

p=function(t){o="";if((x=(l="O- O+ B- B+ A- A+ AB- AB+".split(" ")).indexOf(t))<0)return;n=2;while(n--){y=8;while(y--)if([y,x][n]-(y&x)==0)o+=" "+l[y];o+=";"}return o}

ungolfed:

function p(btype){
    output = "";
    btypeList = "O- O+ B- B+ A- A+ AB- AB+".split(" ");

    btypeInt = btypeList.indexOf(btype);
    // thus we have the scheme
    // btypeInt = 0b(has A antigen)(has B antigen)(has rhesus antigen)

    if(btypeInt < 0) // i.e. broken blood type string
        return;

    for(receiving = 7; receiving >= 0; receiving--)
        if(giving - (receiving & btypeInt) == 0)
            // i.e. the receiving person has at least all the antigens of our donor
            output += " " + btypeList[receiving];

    output += ";";

    for(giving = 7; giving >= 0; giving--)
        if(btypeInt - (receiving & btypeInt) == 0)
            // i.e. the giving person has no antigens that our patient doesn't have
            output += " " + btypeList[receiving];

    return output;
}

পরীক্ষার ফাংশন:

function tester(){
    btypeList = "O- O+ B- B+ A- A+ AB- AB+".split(" ");
    for(i=0; i<8; i++){
        console.log("Patient is " + btypeList[i])
        console.log(p(btypeList[i]))
    }
    console.log("Erroneous blood type => returns void:")
    console.log(p("asdf"))
}

বাইনারিতে রক্তের প্রকারের এনকোডিংয়ের সুবিধাটি রয়েছে যে অন্য একটি অ্যান্টিজেন (যেমন কেল অ্যান্টিজেন ) সহজেই আরেকটি বিট যুক্ত করে কোডে সহজেই সংযুক্ত হয়ে যায়।


জুরিখ, সিএইচে রক্ত দান করুন: ব্লুটস্পেন্ডে জুরিখ


আপনি 2 টি অক্ষর সংরক্ষণ করার "O-O+B-B+A-A+AB-AB+".match(/\w+\W/g)পরিবর্তে ব্যবহার করতে পারেন "O- O+ B- B+ A- A+ AB- AB+".split(" ")
ওরিওল

অথবা আপনি ডিলিমিটারকে একটি সংখ্যা তৈরি করে ঠিক একই সংরক্ষণ করতে পারেন "O-1O+1B-1B+1A-1A+1AB-1AB+".split(1)এবং =>ফাংশনটি ব্যবহার করে কিছুটা সংরক্ষণ করা উচিত।
red-X

হ্যাঁ, তবে @ /\w+./g
ওরিওলগুলিকে

সর্বদা (;;) এর পরিবর্তে () ব্যবহার করুন। কমপক্ষে একই দৈর্ঘ্য, তবে কম হতে পারে। n=2;while(n--)=>for(n=2;n--;)
edc65

সব মিলিয়ে খুব চালাক। স্ট্যান্ডার্ড গল্ফ ট্রিকস ব্যবহার করে 147-এ সংক্ষিপ্ত করা যেতে পারে:http://jsfiddle.net/j2hep8e8/2/
edc65

2

সিজেম, 94 বাইট

বাহ, এটি দীর্ঘ ... যদিও আমি মনে করি আমি সম্ভবত 80 এর নিচে এই পদ্ধতিটি গল্ফ করতে পারি, আমি মনে করি আমি প্রথমে ম্যাট্রিক্সের কম্পিউটিং করে আরও ভাল করতে পেরেছিলাম এবং তারপরে সঠিক সারি এবং কলামটি বেছে নিয়েছিলাম। যাইহোক, এটি এখানে:

'O'A'B"AB"]:A"+-"m*:sq_a@&!!*_)'++_&\"AB"&A{1$\-!},\;\m*::+p)'-+_&\"AB"&A1>{1$-!},'O+\;\m*::+p

এটি এখানে পরীক্ষা করুন।

আমি যখন গল্ফিং করি তখন আমি একটি ব্যাখ্যা যুক্ত করব।


2

গ্রোভি, 115

x={i=(l=('O-O+B-B+A-A+AB-AB+'=~/\w+./)[0..7]).indexOf(it);f=(0..7).&findAll;i<0?[]:[l[f{!(~it&i)}],l[f{!(it&~i)}]]}

ধারণাটি হ'ল এ, বি এবং রিসাস ফ্যাক্টরকে প্রতিটি বিট হিসাবে এনকোড করা। এরপরে আমরা গ্রহণকারী পক্ষের সমস্ত অ্যান্টিজেন পেতে বিটগুলি বিপরীত করতে পারি এবং এটি দেওয়ার জন্য এটি ব্যবহার করতে পারি যে প্রদত্ত পক্ষের কোনও অনুরূপ অ্যান্টিবডি নেই। এটি বিদ্যমান জাভাস্ক্রিপ্ট সমাধান হিসাবে কম-বেশি একই same

নমুনা কার্যকর

groovy> println x("AB+") 
groovy> println x("AB-") 
groovy> println x("A+") 
groovy> println x("A-") 
groovy> println x("B+") 
groovy> println x("B-") 
groovy> println x("O+") 
groovy> println x("O-") 
groovy> println x("X") 

[[AB+], [O-, O+, B-, B+, A-, A+, AB-, AB+]]
[[AB-, AB+], [O-, B-, A-, AB-]]
[[A+, AB+], [O-, O+, A-, A+]]
[[A-, A+, AB-, AB+], [O-, A-]]
[[B+, AB+], [O-, O+, B-, B+]]
[[B-, B+, AB-, AB+], [O-, B-]]
[[O+, B+, A+, AB+], [O-, O+]]
[[O-, O+, B-, B+, A-, A+, AB-, AB+], [O-]]
[]

2

প্রোলোগ, 119 110 বাইট

u(A,B):-member(A:B,[a:ab,b:ab,o:a,o:b,o:ab]);A=B,member(A,[a,ab,b,o]).
g(X,Y):-(X= -A;X=A),(Y= -B;Y=B),u(A,B).

মন্তব্য :

  1. রক্তের ধরণের নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে: প্রতিবার আপনার কাছে -যেমন একটি (উদাঃ a-) থাকে আপনি সেই একই ব্যক্তিকে আপনার গ্রুপের ধনাত্মক সমতুল্য (যেমন a) হিসাবে দিতে পারেন, পাশাপাশি তাদের নেতিবাচক সমষ্টি (যেমন aদেয় ab, তাই a-দেয়) abএবং ab-)। এই সম্পত্তির উপর ভিত্তি করে, এবং বিয়োগ এবং প্লাস অপারেটরগুলি ব্যবহার করতে কিছুটা স্বরলিপিগুলি অপব্যবহার করে আমরা অনেকগুলি ক্ষেত্রে ফ্যাক্টর করতে পারি। আপনি যদি এটি গ্রহণযোগ্য মনে করেন তবে আমাকে বলুন । যদি আপনি মূল (পোস্টফিক্স) বাক্য গঠনটি পছন্দ করেন তবে এখানে একটি নন-গল্ফযুক্ত সংস্করণ রয়েছে:

    blood(X):-member(R,['a+','o+','b+','ab+','a-','b-','ab-']).
    give('o-',R):-blood(R).
    give(X,X):-blood(X).
    give('a+','ab+').
    give('b+','ab+').
    give('o+','a+').
    give('o+','b+').
    give('o+','ab+').
    give('a-','a+').
    give('a-','ab+').
    give('a-','ab-').
    give('b-','b+').
    give('b-','ab+').
    give('b-','ab-').
    give('ab-','ab+').
    
  2. এটি প্রোলোগ, সুতরাং ইন্টারেক্টিভ পরিবেশটি অনুরোধ অনুসারে সমস্ত কিছু জিজ্ঞাসা করতে দেয় (নীচে উদাহরণ দেখুন)। মঞ্জুর, আউটপুট হিসাবে আমাদের কঠোরভাবে তালিকা নেই, তবে এটি সমতুল্য। আমরা স্বাভাবিকভাবেই ফলস্বরূপ ত্রুটি কেসগুলি পরিচালনা করি।

উদাহরণ

donors(X,L) :- findall(Y,g(Y,X),L).
receivers(X,L) :- findall(Y,g(X,Y),L).

test :-
    member(X,[a,o,b,ab,-a,-o,-b,-ab]),
    donors(X,D),
    receivers(X,R),
    writeln(X:give_to(R):receive_from(D)),
    fail.
test.

তারপরে, আমরা কার্যকর করি test:

a : give_to([ab, a]) : receive_from([o, a])
o : give_to([a, b, ab, o]) : receive_from([o])
b : give_to([ab, b]) : receive_from([o, b])
ab : give_to([ab]) : receive_from([a, b, o, ab])
-(a) : give_to([+(ab), +(a), -(ab), -(a)]) : receive_from([-(o), -(a)])
-(o) : give_to([+(a), +(b), +(ab), +(o), -(a), -(b), -(ab), -(o)]) : receive_from([-(o)])
-(b) : give_to([+(ab), +(b), -(ab), -(b)]) : receive_from([-(o), -(b)])
-(ab) : give_to([+(ab), -(ab)]) : receive_from([-(a), -(b), -(o), -(ab)])

... যা সঠিক বিন্যাস ছাড়াই প্রশ্নটিতে দেওয়া ম্যাট্রিক্সের মতো।

বিস্তারিত

সম্পৃক্ত g/2হয় দিতে সম্পর্ক: g(X,Y)মানে রক্তের গ্রুপ এক্স মানুষের রক্তের গ্রুপ ওয়াই মানুষের রক্ত দিতে পারে

গোষ্ঠীর জন্য রিসিভারগুলি সন্ধান করুন a:

[eclipse]: g(a,R).    

R = ab
Yes (0.00s cpu, solution 1, maybe more) ? ;

R = a
Yes (0.00s cpu, solution 2)

এর জন্য রিসিভারগুলি সন্ধান করুন orange_juice(ব্যর্থ হওয়া উচিত):

[eclipse] g(orange_juice,L).

No (0.00s cpu)

এর জন্য দাতাদের সন্ধান করুন O-:

[eclipse] g(X,-o).

X = -(o)
Yes (0.00s cpu)

কে দিতে পারে? :

[eclipse] g(X,Y).

.... 27 answers ....

আমরা অসীম পুনরাবৃত্তি লুপে যাই না (প্রাথমিক পরীক্ষাগুলিতে এটি ছিল)।


1

পাইথন, 187 বাইট

বিভিন্ন পদ্ধতির:

def D(a,b):X=lambda c:c in a and 1-(c in b);return(X('A')+X('B')+X('+'))<1
T="O- O+ A- A+ B- B+ AB- AB+".split()
X=lambda t:(0,([u for u in T if D(t,u)],[u for u in T if D(u,t)]))[t in T]

সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে।

টেস্ট:

for t in T + ["zz"]:
    print t, X(t)

আউটপুট:

O- (['O-', 'O+', 'A-', 'A+', 'B-', 'B+', 'AB-', 'AB+'], ['O-'])
O+ (['O+', 'A+', 'B+', 'AB+'], ['O-', 'O+'])
A- (['A-', 'A+', 'AB-', 'AB+'], ['O-', 'A-'])
A+ (['A+', 'AB+'], ['O-', 'O+', 'A-', 'A+'])
B- (['B-', 'B+', 'AB-', 'AB+'], ['O-', 'B-'])
B+ (['B+', 'AB+'], ['O-', 'O+', 'B-', 'B+'])
AB- (['AB-', 'AB+'], ['O-', 'A-', 'B-', 'AB-'])
AB+ (['AB+'], ['O-', 'O+', 'A-', 'A+', 'B-', 'B+', 'AB-', 'AB+'])
zz 0

1

রুবি, 237 232 223 221 210 207 বাইট

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

o=->b{Regexp.new b.gsub(?O,?.).gsub(?+,'.?\\\+').gsub'-','.?(\W)'};b=gets.chop;t=["A+","B+","AB+","O+","A-","B-","AB-","O-"];exit if !t.include? b;p t.reject{|x|!x.match o.(b)};p t.reject{|x|!b.match o.(x)}

Ungolfed:

#!/usr/bin/ruby
b=gets.chomp;
types = ["A+","A-","B+","B-","AB+","AB-","O+","O-"];
exit if !types.include?(b);
regex1 = Regexp.new b.gsub("O",".").gsub('+','.?\\\+').gsub('-','.?(\\\+|\\\-)')
donate = types.reject {|x|!x.match(regex1)};
p donate;
receive = types.reject {|x| regex2 = Regexp.new x.gsub("O",".").gsub('+','.?\\\+').gsub('-','.?(\\\+|\\\-)'); !b.match(regex2)};
p receive;

মূলত, আমি রক্তের প্রকারের জন্য কাস্টম নিয়মিত প্রকাশ করি যা আপনি অন্য কোনও রক্তের ক্ষেত্রে অনুদান দিতে পারেন কিনা তা পরীক্ষা করার জন্য regular আমি তারপরে রক্তের প্রকারগুলি পুনরুক্তি করি এবং তাদের সাথে একই একই রেজেক্স প্রয়োগ করি এবং নির্ধারিত কোনওকে তারা অনুদান দিতে পারে কিনা তা পরীক্ষা করে নিই।

এটি সম্ভবত আরও বেশি গল্ফ করা যেতে পারে। এই প্রথম কোড গল্ফ চেষ্টা, হি।


1

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

এটি ব্ল্যাকহোলের উত্তর হিসাবে একই পদ্ধতি। ধরণের তালিকায় প্যারামিটারটি পাওয়া না গেলে একটি ত্রুটি সহ প্রস্থান করে।

def f(t):l='A+ O+ B+ AB+ A- O- B- AB-'.split();c=[9,15,12,8,153,255,204,136];i=l.index(t);print[s for s in l if c[i]&1<<l.index(s)],[s for s in l if c[l.index(s)]&1<<i]

কম গল্ফড:

def f(t):
    l = 'A+ O+ B+ AB+ A- O- B- AB-'.split()
    c = [9, 15, 12, 8, 153, 255, 204, 136]
    i = l.index(t)
    x = [s for s in l if c[i] & 1 << l.index(s)]
    y = [s for s in l if c[l.index(s)] & 1 << i]
    print x, y

এটি এখানে চালান: http://repl.it/eaB

আমি আরও কয়েকটি হালকা পরিবর্তন চেষ্টা করেছিলাম, তবে এর চেয়ে ছোটও পাইনি ...

#172 bytes
def f(t):l='A+ O+ B+ AB+ A- O- B- AB-'.split();c=[9,15,12,8,153,255,204,136];a=lambda x:l.index(x);i=a(t);print[s for s in l if c[i]&1<<a(s)],[s for s in l if c[a(s)]&1<<i]

#171 bytes
def f(t):l='A+ O+ B+ AB+ A- O- B- AB-'.split();c=[9,15,12,8,153,255,204,136];a=lambda x:l.index(x);print[s for s in l if c[a(t)]&1<<a(s)],[s for s in l if c[a(s)]&1<<a(t)]

1

পিএইচপি (২৮7 বাইট):

হ্যাঁ, এটি বেশ দীর্ঘ, তবে এটি প্রত্যাশার মতো কাজ করে।

অনেকটা ছোট করা সম্ভব হতে পারে:

!preg_match('@^(AB?|B|O)[+-]$@',$t=$_GET[T])&&die("$t invalid");$S=array_flip($D=split(0,'O+0A+0B+0AB+0O-0A-0B-0AB-'));$L=[[1230,40],[13,1504],[23,2604],[3,$r=12345670],[$r,4],[1537,54],[2637,64],[37,7564]];for($j=0;$j<2;){foreach(str_split($L[$S[$t]][$j++])as$v)echo$D[$v].' ';echo'
';}

এটি পড়া সহজ নয় এবং লিখতেও সহজ ছিল না।

এটি উদ্দেশ্য হিসাবে কাজ করে, আপনি যেটিকে দিতে পারেন এবং অন্য লাইনে আপনি যেটি পেতে পারেন সেটিকে আউটপুট করে।

এর জন্য T=টাইপ সহ একটি URL প্যারামিটার প্রয়োজন ।


1

সিজেম, 80 বাইট

এটি এখনও অনেক দীর্ঘ। সম্ভবত আমি আরও 4 থেকে 5 বাইট শেভ করতে পারি।

U1023_XKC30D]2/La+"AB"a"OAB"1/+:Mr):P;a#=_P"+-":G&+!!{AfbMff=G1/Pf|]z{~m*:s}%}*`

যে কোনও অবৈধ ইনপুটের জন্য, হয় ফাঁকা অ্যারে প্রিন্ট করে, বা ত্রুটি নিক্ষেপ করে।

এটি এখানে অনলাইনে চেষ্টা করুন বা পুরো টেস্ট স্যুটটি চালান


ভিক্ষাবৃত্তির এক্স কেসিডি কি উদ্দেশ্য?
Ypnypn

@Ypnypn ভিক্ষা? প্রাথমিকভাবে আমার উদ্দেশ্য ছিল না, তবে এটির মতোই পরিণত হয়েছিল। সম্ভবত বিশ্ব আমাদের কিছু বলার চেষ্টা করছে ...
অনুকূল

দুঃখিত, আমি মানে শুরু
Ypnypn

1

এপিএল, 66

(↓⊃∧/(↓t∘.∊v)(≥,[.5]≤)¨t∊⊃v⌷⍨v⍳⊂⍞)/¨⊂v←,'+-'∘.,⍨('O'∘,,⊂)2↑t←'AB+'

এখানে চেষ্টা করুন।


সম্ভবত এটি 66 টি অক্ষর, তবে অবশ্যই 66 বাইট নয়। প্রশ্নটি স্কোর করতে কী ব্যবহৃত তা বলে না।
orp

1
@orlp কোড-গল্ফ ডিফল্টরূপে বাইটে স্কোর হয় ( ট্যাগ উইকি দেখুন )। তবে বলা হয় একটি এপিএল কোড পৃষ্ঠা রয়েছে যেখানে একটি অক্ষর একটি বাইট is যদিও আজকাল ঠিক এপিএল কোড পৃষ্ঠাটি ব্যবহৃত হয় তা আমি জানি না।
jimmy23013

@orlp "বাইটস", তবে "ইউটিএফ -8 বাইটস" নয়। এখানে এই অক্ষরগুলির সমস্ত সহ একটি কোড পৃষ্ঠা রয়েছে।
মার্টিন ইন্ডার

1

সি, 224

#define d(x)for(i=0;i<8;i++)if((i x j)==j)printf("%s%s%s%c ",i&2?"A":"",i&4?"B":"",i&6?"":"0","-+"[i&1]);puts("");
main(i,j){char d[4],*c=&d;scanf("%s",c);j=(c[2]?c++,2:0)+(c[1]-'+'?0:1)+(*c>='A'?2:0)+(*c>'A'?2:0);d(&)d(|)}

ডি-গল্ফ করা এটি দেখায়:

/* j = 1*(has+) + 2*(hasA) + 4*(hasB) */
#define d(x) for(i=0;i<8;i++) \
                 if((i x j)==j) \
                      printf("%s%s%s%c ",i&2?"A":"",i&4?"B":"",i&6?"":"0","-+"[i&1]); \
             puts("");

main(i,j)
{
    char d[4], *c=&d;
    scanf("%s",c);

    j= (c[2]? (c++,2):0)            /* ABx */
            + (c[1]-'+'?0:1)
            + (c[0]>='A'?2:0)
            + (c[0]>'A'?2:0);

    // print possible receipients, and then donators
    d(&)
    d(|)
}

1

পিএইচপি - 215 212 206 বাইট

function($t){$c=[9,15,12,8,153,255,204,136];if(($a=array_search($t,$l=split(1,'A+1O+1B+1AB+1A-1O-1B-1AB-')))===!1)die;foreach($l as$k=>$v){if($c[$a]&1<<$k)$x[]=$v;if($c[$k]&1<<$a)$y[]=$v;}var_dump($x,$y);}

নিখরচায় সংস্করণটি এখানে:

function ($type)
{
    $typesList = ['A+', 'O+', 'B+', 'AB+', 'A-', 'O-', 'B-', 'AB-'];
    $donationCompatibilityList = [
        0b00001001,
        0b00001111,
        0b00001100,
        0b00001000,
        0b10011001,
        0b11111111,
        0b11001100,
        0b10001000,
    ];

    $idType = array_search($type, $typesList);
    if ($idType === false) {
        die;
    }

    $canGiveToList = [];
    $canReceiveFromList = [];
    foreach ($typesList as $currentIdType => $currentType)
    {
        if ($donationCompatibilityList[$idType] & 1 << $currentIdType ) {
            $canGiveToList[] = $currentType;
        }

        if ($donationCompatibilityList[$currentIdType ] & 1 << $idType) {
            $canReceiveFromList[] = $currentType;
        }
    }

    var_dump($canGiveToList, $canReceiveFromList);
}

4 বাইট সংরক্ষণের জন্য মান্যাটওয়ার্ককে ধন্যবাদ ।


পূর্ণসংখ্যা কৌতুক দ্বারা বিভক্ত পিএইচপি খুব কাজ করে: explode(1,'A+1O+1B+1AB+1A-1O-1B-1AB-')। এবং আমরা অগত্যা সুন্দর কোডিংয়ের অভ্যাসটি বজায় রাখি না, কখনও কখনও আমরা split()ফাংশনের মতো অবচিত বৈশিষ্ট্যও ব্যবহার করি ।
manatwork

@ মান্যাটওয়ার্ক ভাল দাগী! আমি আমার উত্তর সম্পাদনা করেছি, ধন্যবাদ।
ব্ল্যাকহোল

0

পার্ল, 107 112

পরিশেষে সংখ্যার প্রকারের নামগুলি এনকোডিং করে সংক্ষিপ্ত কোড দেওয়া।

#!perl -p
$x=y/AB+/421/r%9;@a=grep{~$x&$_%9||push@b,$_;!($x&~($_%9))}map{("$_-",$_.1)}0,2,4,42;$_="@a
@b";y/421/AB+/

পুরানো সংস্করণ

#!perl -p
$x=y/AB+/421/r%9;@a=grep!($x&~$_),0..7;@b=grep!(~$x&$_),0..7;$_="@a
@b";s/\d/(map{("$_+","$_-")}0,A,B,AB)[$&]/eg

0

পাইথ, 58

আংশিকভাবে orlp এর সমাধান হিসাবে একই , তবে কিছুটা পৃথক এবং সম্পূর্ণ স্ব-নকশাকৃত।

M&n+eGeH"+-"!f!}T+H\OPGJsm,+d\++d\-c"O A B AB"dfgzYJfgZzJJ

ব্যাখ্যা

M                          create a function g(G,H) that returns
  n+eGeH"+-"                 G[-1] + H[-1] is not "+-"
 &                          and
            !f!}T+H\OPG      chars of G[:-1] not in H + "O" is falsy (empty)
J                          J =
 s                          merge
  m                          map
   ,+d\++d\-                  lambda d: (d + "+", d + "-")
            c"O A B AB"d      over ["O", "A", "B", "AB"]
fgzYJ                      print all J's items x where g(input, x)
fgZzJ                      print all J's items x where g(x, input)

0

জে, 120 বাইট

   f=.3 :';"1(2 8$,(s-:"*<y,'' '')#8 2 8$#:213472854600871062656691437010712264449x)#s=.<;.2''A+ B+ AB+ O+ A- B- AB- O- '''

   f 'A+'
A+ AB+      
A+ O+ A- O- 

   f 'AB-'
AB+ AB-      
A- B- AB- O- 

ফাংশনটি অবৈধ ইনপুটগুলিতে ব্যর্থ হয়। বড় দশমিক সংখ্যা হ'ল সম্পূর্ণ সামঞ্জস্যের ম্যাট্রিক্সের এনকোডিং।

(একাধিক কারণে খুব দীর্ঘ সমাধান।)

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


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