এমআইটিতে প্রফেসরের একজন এপি দরকার!


14

5-কার্ডের ম্যাজিক ট্রিকটিতে এমন একজন যাদুকর জড়িত যার সহকারী তাদের এই ক্রমে 4 টি দেখানো কার্ড এবং একটি লুকানো কার্ড দেয় এবং যাদুকরটিকে অবশ্যই লুকানোটির অনুমান করতে হবে।

সতর্কতা: নীচে সমাধান! এখনই ছেড়ে দিন বা এটির সাথে খারাপ হয়ে যান।


সমাধান

এখানে কৌশলটি এই যে পাঁচটি কার্ড একটি নির্দিষ্ট ক্রমে দেওয়া হয় !

1,,5 প্রদত্ত ক্রমে 5 টি কার্ড।

এক্সএন এর কার্ড নম্বরএন মধ্যেএনহে=[A,2,3,4,5,6,7,8,9,T,J,Q,K] (নম্বর অর্ডার)।

a+b , যেখানেa একটি কার্ড সংখ্যা এবংb একটি পূর্ণসংখ্যা, কার্ড নম্বর সমানb ডানদিকে পদক্ষেপa মধ্যেNO , শুরুতে মোড়ানো প্রয়োজনে।

sn = এস = [ , , , ] (স্যুট অর্ডার)এরcn এরস্যুট।SO=[,,,]

ab , যেখানেa একটি কার্ড নম্বর এবংb একটি স্যুট, কার্ড নম্বরa এবং স্যুটb সহ কার্ডকে বোঝায়।

a<b , যেখানেa এবংb কার্ড হয়, সত্য হলেa 'র মামলা-এর বাঁদিক থেকেb মধ্যে গুলি মামলা'SO , অথবা তাদের মামলা সমান এবং a 'র কার্ড নম্বর-এর বাঁদিক থেকে b s' এর মধ্যে কার্ড নম্বর NO

a>b , কোথায়a এবংb কার্ড হয়, সত্য যদিa<b মিথ্যা।

PI(a,b,c) , যেখানেa ,b এবং কার্ড রয়েছে, তাদের নীচের টেবিল দ্বারা নির্দিষ্ট করে দেওয়া এই ক্রমের ক্রম সূচক:
ComparisonPI(a,b,c)a<b<c1a<b>c>a2a>b<c>a3a<b>c<a4a>b<c<a5a>b>c6

5-কার্ড যাদু কৌতুক সমাধান সমস্যা হল:

c5=(x1+PI(c2,c3,c4))s1

চ্যালেঞ্জ

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

  • s5=s1
  • x5=x1+PI(c2,c3,c4) (এটি অবশ্যই সম্ভব হতে পারে)।

উদাহরণ

আসুন সেট বিবেচনা করা যাক 7H,2D,6D,5C,6C। প্রথমত, আমরা 25 জোড়া নিই:

7H,7H 7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,2D 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,6D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,5C 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C 6C,6C

তারপরে, আমরা স্পষ্টতই 5 টি জোড়া সরিয়ে ফেলি যা একই কার্ডে দু'বার রয়েছে, সেগুলি একটি ডেকে উপস্থিত নেই:

      7H,2D 7H,6D 7H,5C 7H,6C
2D,7H       2D,6D 2D,5C 2D,6C
6D,7H 6D,2D       6D,5C 6D,6C
5C,7H 5C,2D 5C,6D       5C,6C
6C,7H 6C,2D 6C,6D 6C,5C      

এরপরে, যেহেতু স্যুটগুলি অবশ্যই একই হতে হবে, তাই একটি জোড়ায় বিভিন্ন স্যুট হ'ল নো:

                             
            2D, 6D            
      6D, 2D                  
                        5C, 6c
                  6c, 5C      

অবশেষে, আমরা যাচাই করবো যে প্রথম কার্ড থেকে দ্বিতীয়টিতে আরও বেশি যোগ করে 6 টি যোগ করে বাকি জোড়াগুলির অর্ধেক সরানো সম্ভব:

                             
            2D, 6D            

                        5C, 6c
                             

এখন আমরা বৈধ জোড় আছে: 2D,6Dএবং 5C,6C। প্রতিটি জোড়ার প্রথম কার্ডটি কার্ড 1, আর শেষটি কার্ড 5।

আমরা 5C,6Cএখানে স্বাচ্ছন্দ্যের জন্য যেতে যাচ্ছি । পুরো সেটটি হ'ল 7H,2D,6D,5C,6C, সুতরাং, আমরা যে জোড়াকে বেছে নিয়েছি তার মধ্যে 2 টি কার্ড মুছে ফেলা হচ্ছে 7H,2D,6D। এই কার্ডগুলি উপস্থাপন করবে 6 - 5 = 1, সুতরাং আমাদের তাদের "মিনিট, মাঝ, সর্বোচ্চ" এর মতো অর্ডার করতে হবে।7H > 2D < 6D < 7H, বা সহজভাবে 2D < 6D < 7H, তাই এখন আমাদের আছে 2D,6D,7H

শেষ পদক্ষেপটি এই সমস্ত একসাথে রাখা, যাতে আমাদের ফলাফল হবে 5C,2D,6D,7H,6C

ব্যাখ্যা

  • আপনি ব্যবহার করতে পারেন 10 পরিবর্তেT
  • তোমাদের মধ্যে একজন ব্যবহার করতে পারেন ♠♥♦♣, ♤♡♢♧অথবা♠♡♢♣ পরিবর্তে CDHSযথাক্রমে।
  • এটি , সংক্ষিপ্ততম কোড জয়ী।

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

আপনি প্রতিটি পরীক্ষার ক্ষেত্রে অন্তর্ভুক্ত বৈধ সমাধানগুলির এক বা একাধিক আউটপুট নিতে পারেন।

8S,TD,5C,QS,TS -> 8S,5C,QS,TD,TS
              ... 8S,TD,TS,5C,QS
              ... TS,5C,8S,TD,QS

JD,KH,4S,9D,8S -> 9D,KH,8S,4S,JD
              ... 4S,JD,KH,9D,8S

4H,4D,TH,KH,2C -> 4H,KH,4D,2C,TH
              ... TH,4D,2C,4H,KH
              ... KH,4D,TH,2C,4H

3S,KS,8S,KH,9H -> 9H,8S,KS,3S,KH
              ... 3S,KS,9H,KH,8S
              ... 8S,3S,9H,KH,KS
              ... KS,KH,9H,8S,3S

KH,TS,3C,7H,JD -> 7H,TS,JD,3C,KH

4C,KC,TD,JD,QS -> KC,JD,QS,TD,4C
              ... TD,4C,KC,QS,JD

AC,5H,8D,6D,8S -> 6D,AC,8S,5H,8D

AS,TC,3S,2H,9C -> 9C,2H,AS,3S,TC
              ... AS,9C,2H,TC,3S

4C,JS,AS,8H,JC -> JC,JS,AS,8H,4C
              ... JS,JC,4C,8H,AS

4H,QS,TH,QC,AC -> QC,4H,QS,TH,AC
              ... 4H,QS,QC,AC,TH

উদাহরণ কলাম যুক্ত করে অনুমতিগুলি কল্পনা করা আরও সহজ হতে পারে ।
আর্নল্ড


ইনপুট কতটা নিখরচায়? দৈর্ঘ্য -2 স্ট্রিংয়ের পরিবর্তে কার্ড নম্বর এবং বাড়ির টিপলগুলি গ্রহণযোগ্য?
4urous

@ Οurous এটি চ্যালেঞ্জের মধ্যে নির্দিষ্ট করা হয়নি; যতক্ষণ না এটি যুক্তিসঙ্গত (আপনার ক্ষেত্রে এটি যথেষ্ট যুক্তিসঙ্গত বলে মনে হয়), এটি অনুমোদিত allowed
এরিক দি আউটগল্ফার

উত্তর:


3

নোড.জেএস , 190 186 180 বাইট

f=(a,p,g=c=>"A23456789TJQK".search(c[0])+10,[A,B,C,D,E]=a.sort(_=>p>>i++&1,i=0))=>A[k=1]!=E[1]|[B,C,D].sort((a,b)=>k=k*2|a[1]+g(a)>b[1]+g(b))|(k^4)%6+1-(g(E)-g(A)+13)%13?f(a,-~p):a

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

কিভাবে?

কার্ড নম্বরগুলি সনাক্ত এবং তুলনা করা

g = c => "A23456789TJQK".search(c[0]) + 10

101022

একটি"NS"

a[1] + g(a) > b[1] + g(b)

ইনপুট এর ক্রমবর্ধমান উত্পাদন

120একটিপিএকজনবিসিডি

[A, B, C, D, E] = a.sort(_ => p >> i++ & 1, i = 0)

699

স্যুট পরীক্ষা করা হচ্ছে

প্রথম সুস্পষ্ট পরীক্ষাটি নিশ্চিত করা হয় যে প্রথম এবং শেষ কার্ডগুলি একই স্যুটের। যদি অনুমতি সমান না হয় তবে আমরা তা প্রত্যাখ্যান করি।

A[k = 1] != E[1] // we also initialize k, which is used right after that

দূরত্ব পরীক্ষা করা হচ্ছে

আমরা প্রথম কার্ড নম্বর এবং শেষ কার্ড নম্বর সহ এর সাথে দূরত্বটি গণনা করি:

(g(E) - g(A) + 13) % 13

বিসিডি

এই পরীক্ষাটি sort()নোড.জেএস এর অ্যালগরিদম যেভাবে কাজ করছে তার উপর নির্ভর করে ।

sort()[একজন,বি,সি]

  1. তুলনা করুনএকজনবি
  2. তুলনা করুনএকজনসি
  3. তুলনা করুনবিসি

আসুন নীচের কোডটি বিবেচনা করুন:

[1, 2, 3].sort((a, b) => k = k * 2 | (a > b), k = 1)

একজন<বি1<2একজন<সি1<3বি<সি2<323=8

এখন, আমরা যদি:

[3, 2, 1].sort((a, b) => k = k * 2 | (a > b), k = 1)

=15

প্রতিটি ক্রিয়াকলাপ একটি অনন্য বিটমাস্ক উত্পন্ন করে, যা একটি অনন্য দূরত্বে ম্যাপ করা হয়:

 A, B, C | A>B | A>C | B>C | k  | distance
---------+-----+-----+-----+----+----------
 1, 2, 3 |  0  |  0  |  0  |  8 |    1
 1, 3, 2 |  0  |  0  |  1  |  9 |    2
 2, 1, 3 |  1  |  0  |  0  | 12 |    3
 2, 3, 1 |  0  |  1  |  1  | 11 |    4
 3, 1, 2 |  1  |  1  |  0  | 14 |    5
 3, 2, 1 |  1  |  1  |  1  | 15 |    6

=((XOR4)গেলিক ভাষার6)+ +1

  k | xor 4 | mod 6 | +1
----+-------+-------+----
  8 |   12  |   0   |  1
  9 |   13  |   1   |  2
 12 |    8  |   2   |  3
 11 |   15  |   3   |  4
 14 |   10  |   4   |  5
 15 |   11  |   5   |  6

সব কিছু একসাথে রাখলে আমাদের নিম্নলিখিত পরীক্ষা রয়েছে:

[B, C, D]
.sort((a, b) =>
  k = k * 2 | a[1] + g(a) > b[1] + g(b)
)
| (k ^ 4) % 6 + 1
- (g(E) - g(A) + 13) % 13

1

পাইথন 3 , 260 248 232 বাইট

N="A23456789TJQK".find
D=lambda x,y="KC":(N(y[0])+~N(x[0]))%13+15*abs(ord(x[1])-ord(y[1]))
def f(l):a,e,b,c,d=[[x,y]+sorted({*l}-{x,y},key=D)for x in l for y in l if D(x,y)<6][0];print(a,*map(eval,"bbccddcdbdbcdcdbcb"[D(a,e)::6]),e)

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

-12 বাইটস একটি তালিকা বোঝার অপসারণ করে এরিক দি আউটগল্ফার -14 বাইটকে ধন্যবাদ


0

পরিষ্কার , 225 220 209 বাইট

import StdEnv,Data.List
n=['A23456789TJQK':n]

filter(\[[x,s],b,c,d,e]#[p,q,r:_]=map snd(sort(zip2[(elemIndices a n,b)\\[a,b]<-[b,c,d]][1..]))
=[snd(span((<>)x)n)!!(p+if(p>q)0if(q<r)(q+r)q),s]==e)o permutations

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

একটি রচিত ফাংশন হিসাবে :: [[Char]] -> [[Char]], কিছু সহায়ক সহ।

সম্প্রসারিত:

n = ['A23456789TJQK': n] // infinitely repeating card number list

filter (...) o permutations // filter the permutations of the argument by ...
  \[[x, s], b, c, d, e] // deconstruct each permutation via pattern matching
    #[p, q, r: _] = ... // define p, q, r as ...
      map snd (...) // the second component of every element in ...
      sort (...) // the sorted list of ...
      zip2 ... [1..] // pairs of ... and the numbers 1, 2, 3, ..
      [... \\ [a, b] <- [b, c, d]] // ... for every pair of number a and house b in [b, c, d]
      (elemIndices a n, b) // pair of the value of that card number and the house
    = ... == e // check ... for equality against the last card
      [..., s] // ..., paired with house s
      snd (span ((<>) x) n) !! (...) // the card number ... places from x
      p + ... // this is kinda obvious
      if(p > q) 0 ... // if p is greater than q, zero, else ...
      if(q < r) (q + r) q // if q is less than r, q + r, else q

0

রুবি , 175 বাইট

->a{g=->j{j.tr('ATJQKCHS','1:;<=)_z').sum}
e=b=a.sort_by{|i|g[i]}
4.times{|i|(d=g[b[i+1]]-g[b[i]])<13&&(a=b[i,2];e=d)}
[a[e/7],*(b-a).permutation.to_a[e<7?e-1:12-e],a[e/7-1]]}

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

স্ট্রিং হিসাবে কার্ডের অ্যারে নিয়ে যাওয়া একটি ল্যাম্বদা ফাংশন

মন্তব্য

->a{g=->j{j.tr('ATJQKCHS','1:;<=)_z').sum}
#helper function converts card to integer, ATJQK to 1:;<= and CHS to )_z then sum ascii values 

e=b=a.sort_by{|i|g[i]}  
#sort according to g. we declare 2 variables here in order to avoid undefined variable error at pre-interpretation check stage.

4.times{|i|(d=g[b[i+1]]-g[b[i]])<13&&(a=b[i,2];e=d)}
#compare each pair of values. if in same suit, store the pair of cards to a
#and the value difference to e. Loop exits with the last suitable pair stored

[a[e/7],*(b-a).permutation.to_a[e<7?e-1:12-e],a[e/7-1]]}
#return array containing the two cards of the same suit in the correct order
#with the correct permutation of the remaining cards (b-a) in the middle

0

জেলি , 41 বাইট

ØD;“TJQK”¤io2)1¦€µUḊỤ3R¤œ¿+""Om4%13E
Œ!ÇƇ

একটি মোনাডিক লিঙ্ক একই ফর্ম্যাটে সমস্ত বৈধ বিন্যাসের তালিকা প্রত্যাখ্যানকারী অক্ষরের তালিকার একটি তালিকা গ্রহণ করে।

এটি অনলাইন চেষ্টা করুন! (ফুটার পুরো ফলাফল হিসাবে চালানোর সময় লিঙ্কের কোড দ্বারা সম্পাদিত অন্তর্নিহিত স্ম্যাশিং প্রিন্ট এড়ানোর জন্য ফলাফলকে গ্রিড হিসাবে ফর্ম্যাট করে)

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

আমার মনে সন্দেহজনক ধারণা রয়েছে যে অন্য একটি পদ্ধতির ফলে অনেক বেশি ক্ষয় হবে। আমাকে পরে এই চ্যালেঞ্জটি পুনর্বিবেচনা করতে হবে!

... হুম, আমার চারপাশে আরও একটা ঝাঁকুনি ছিল এবং আমি আরও একটি 41 বাইটার পেয়েছি ( পরীক্ষা ):

O¹*@<74$?€€29%⁽:0%⁴UµṪ_Ḣ%13Ḍ⁼Ụ3R¤œ¿Ɗ
Œ!ÇƇ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.