পিকোমিনো বাজানো


10

খেলা Pickomino , বহু একটি ভিন্ন ধনাত্মক পূর্ণসংখ্যা তাদের উপর টেবিল, প্রতিটি মাঝখানে মিথ্যা টাইলস হয়। প্রতিটি পালা, প্লেয়াররা একটি নির্দিষ্ট উপায়ে dice রোল এবং একটি স্কোর পেতে, যা একটি nonnegative পূর্ণসংখ্যা হয়।

এখন প্লেয়ারটি সর্বোচ্চ সংখ্যার সাথে টাইলটি নেয় যা এখনও তাদের স্কোরের চেয়ে কম বা সমান, টাইলটি মাঝখানে থেকে সরিয়ে এবং তাদের স্ট্যাকের সাথে যুক্ত করে। যদি এটি সম্ভব না হয় কারণ মাঝের সমস্ত সংখ্যা প্লেয়ারের স্কোরের চেয়ে বেশি হয় তবে প্লেয়ার তাদের স্ট্যাক (যা সর্বশেষে যোগ করা হয়েছিল) থেকে শীর্ষতম টাইলটি হারিয়ে ফেলে, যা মাঝখানে ফিরে আসে। খেলোয়াড়ের যদি কোনও টাইলস না থাকে তবে কিছুই ঘটে না।

চ্যালেঞ্জ

খেলোয়াড়কে নিজের বিরুদ্ধে খেলা খেলতে অনুকরণ করুন। আপনি মাঝখানে টাইলগুলির একটি তালিকা এবং প্লেয়ারটি যে স্কোর পেয়েছিলেন তার একটি তালিকা পান। সমস্ত টার্নগুলি মূল্যায়ন করার পরে প্লেয়ারের টাইলগুলির একটি তালিকা ফেরত দিন।

চ্যালেঞ্জ বিধি

  • আপনি ধরে নিতে পারেন যে টাইলগুলির সাথে তালিকার অর্ডার দেওয়া হয়েছে এবং এতে কোনও সংখ্যার দু'বার অন্তর্ভুক্ত নেই।
  • আপনি যে কোনও ক্রমে ইনপুট দুটি তালিকা নিতে পারেন
  • আউটপুটটিকে স্টাইলের টাইলগুলির ক্রম রাখতে হবে, তবে তালিকাটি উপরে থেকে নীচে বা নীচে থেকে শীর্ষে বাছাই করা হবে তা আপনি সিদ্ধান্ত নিতে পারেন।

সপ্তাহের দিন

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার জন্য যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • আপনার উত্তরটির জন্য ডিফল্ট আই / ও বিধিগুলির সাথে মানক বিধিগুলি প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং ফিরতি-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে।
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে দয়া করে আপনার কোডের (যেমন টিআইও ) একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন ।
  • আপনার উত্তরের জন্য একটি ব্যাখ্যা যুক্ত করার পরামর্শ দেওয়া হচ্ছে।

উদাহরণ

(6th ষ্ঠ টেস্টকেস থেকে নেওয়া)

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]

প্রথম স্কোর 22, সুতরাং মাঝের সর্বোচ্চ টাইলটি নিন <= 22, যা নিজেই 22 22

Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22] 

পরের স্কোরটি 22, তাই মাঝের সর্বোচ্চ টাইলটি নিন <= 22. কারণ ইতিমধ্যে 22 টি নেওয়া হয়েছে, খেলোয়াড়কে 21 নিতে হবে।

Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]

পরবর্তী স্কোরটি 22, তবে সমস্ত সংখ্যা <= 22 ইতিমধ্যে নেওয়া হয়েছে। অতএব, খেলোয়াড় স্ট্যাকের উপরের শীর্ষতম টাইলটি হারিয়ে (21), যা মাঝখানে ফিরে আসে।

Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]

পরবর্তী স্কোরগুলি 23, 21 এবং 24, তাই প্লেয়ার মাঝ থেকে এই টাইলগুলি নিয়ে যায়।

Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]

প্লেয়ারের বাস্ট এবং স্কোর শূন্য। সুতরাং, 24 নম্বর (স্ট্যাকের শীর্ষে) সহ টাইলটি মাঝখানে ফিরে আসে is

Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]

শেষ স্কোরটি 22, তবে সমস্ত টাইল <= 22 ইতিমধ্যে নেওয়া হয়েছে, তাই প্লেয়ার স্ট্যাকের শীর্ষস্থানীয় টাইল হারাতে (21)।

Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]

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

(আউটপুট তালিকার সর্বশেষতম টাইল সহ)

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: []
Output: []

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output: []

Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]

Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]

Tiles: []
Scores: [4, 6, 1, 6]
Output: []

স্যান্ডবক্স


আমরা কি ধরে নিতে পারি যে মাঝখানে শূন্যের মান সহ কোনও টাইল নেই?
অজ্ঞতার

@ এম্বোডিমেন্টোফিজেন্স এটি "পজিটিভ ইন্টিজার" বলে, তাই হ্যাঁ।
janrjan জোহানসেন

টাইলস যেহেতু অনন্য, তাই তাদের বিটমাস্ক হিসাবে গ্রহণ করা কি গ্রহণযোগ্য হবে?
আর্নৌল্ড

@ ট্র্যাটিসিম্যাগভিস হ্যাঁ, যদি মাঝের স্তূপটি খালি থাকে তবে প্লেয়ার মাঝের দিক থেকে টাইল নিতে পারে না, তাই তারা একটি টাইল হারাবে (যদি তাদের থাকে)
ব্ল্যাক আউল কাই

@ আর্নল্ড এটি গ্রহণযোগ্য
ব্ল্যাক আউল কাই

উত্তর:


3

হাস্কেল , 119 111 104 103 বাইট

1 বাইট সংরক্ষণ করেছেন janrjan জোহানসেনকে ধন্যবাদ thanks

(#)=span.(<)
(a%(b:c))d|(g,e:h)<-b#d=(e:a)%c$g++h|g:h<-a,(i,j)<-g#d=h%c$i++g:j|1>0=a%c$d
(a%b)c=a
([]%)

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

ধরে নিই টাইলগুলি ক্রমহ্রাসমান ক্রমে সাজানো হয়েছে।

এখানে খুব বেশি অভিনবতা চলছে না। প্রথম যুক্তিটি খেলোয়াড়দের গাদা, দ্বিতীয়টি তাদের স্কোর এবং তৃতীয়টি মাঝের স্তূপের স্তূপ।


1
এটি সঠিক হতে পারে না কারণ sortআরোহী। যদিও টিআইও পরীক্ষার কেসটি সেই শাখায় কখনও আঘাত করে না। এই জাতীয় পুনরাবৃত্তির সময় আমি প্রতিবার সমস্ত ক্ষেত্রে পরীক্ষার দৃ strongly় পরামর্শ দিচ্ছি।
janrjan জোহানসেন

@ আরজান জোহানসেন ধন্যবাদ! এখনই স্থির। অন্তত আমাকে আর আমদানি করতে হবে না!
অ্যাডহক গার্ফ হান্টার

সাথে একটি বাইট সংরক্ষণ করুন (#)=span.(<)
janrjan জোহানসেন

@ JanrjanJohansen পরিবর্তন হয়েছে। মজার বিষয়টি আমি এর আগে চেষ্টা করেছি এবং ভেবেছিলাম এটি একটি বাইট যুক্ত করেছে।
অ্যাডহক গার্ফ হান্টার

3

জাপট, 24 বাইট

নগদ টাকা! এটি যেমন কাজ করে নি তেমনি ভেবেছি এটিও হবে!

বিপরীত ক্রমে ইনপুট নেয়।

®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤

এটি ব্যবহার করে দেখুন বা টিআইও-তে সমস্ত পরীক্ষার কেস চালান

®=Va§Z)Ì?NpVjZ:VpNo)nÃN¤     :Implicit input of N=[U=scores, V=tiles]
®                            :Map each Z in U
 =                           :  Reassign to Z
  Va                         :    0-based index of last element in V (-1 if not found)
    §Z                       :      Less than or equal to Z
      )                      :  End reassignment
       Ì                     :  Sign of difference with -1 (1 if found, 0 if not)
        ?                    :  If truthy (not zero)
         Np                  :    Push to N
           VjZ               :      Remove and return the element at index Z in V
              :              :  Else
               Vp            :    Push to V
                 No          :      Pop the last element of N
                   )         :    End Push
                    n        :    Sort V
                     Ã       :End map
                      N¤     :Slice the first 2 elements (the original inputs) off N


2

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 159 158 154 বাইট

হিসাবে ডাকা হয় f(tiles)(scores)

n=>m=>{var s=new Stack<int>();m.Add(0);n.ForEach(k=>{var a=m.Except(s).Where(x=>x<=k).Max();if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a);});return s;}

যদি কেবল System.Voidপ্রকৃতপক্ষে রিটার্নের ধরণ হয় এবং প্রতিবিম্বের জন্য কেবল স্থানধারক নয়। আমি দুটি বাইট সংরক্ষণ করে এর if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a);সাথে প্রতিস্থাপন করতে সক্ষম হব var t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);

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

//Function taking in a list and returning
//another function that takes in another list and returns a stack
n=>m=>{
//Initialize the stack
var s=new Stack<int>();
//Add a zero to the tiles, to ensure no exceptions appear due to accessing
//non-existent elements in an empty collection later
//when we try to filter it later and getting the biggest element
m.Add(0);
//Iterate through our scores
n.ForEach(k=>{
//Create a variable called a, which we will use later
var a=
//Get all the elements in the middle that haven't appeared in our stack
m.Except(s).
//And throw away all elements that are bigger than our current score
Where(x=>x<=k).
//And get the biggest element there, and that is now the value of a
//Without the m.Add(0), we would get an exception here
Max();
//Self-explanatory, if a is less than 1 aka if a equals 0
//Checks if all elements in the middle are bigger than our score 
//Except for our self added 0, of course
if(a<1)
//Add 0 to the middle if the stack is empty
//Remember, zeros don't affect the list
m.Add(s.Count<1?0:
//Else pop the stack and add that to the middle
s.Pop());
//If a isn't 0, add a to the stack
else s.Push(a);});
//Afterwards, return the stack
return s;}


2

জাভাস্ক্রিপ্ট (নোড.জেএস) , 80 বাইট

ES6 সংস্করণ হিসাবে একই যুক্তি, তবে টাইলসটিকে বিগআইন্ট বিটমাস্ক হিসাবে এবং স্কোরগুলি বিগআইন্টসের অ্যারে হিসাবে নেয়।

m=>s=>s.map(g=x=>!x||m>>x&1n?m^=1n<<(x?r.push(x)&&x:r.pop()||~x):g(--x),r=[])&&r

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


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

হিসাবে ইনপুট লাগে (tiles)(scores)। টাইলস যে কোনও ক্রমে পাস করা যেতে পারে।

t=>s=>s.map(g=x=>m[x]?m[x?r.push(x)&&x:r.pop()]^=1:g(x-1),t.map(x=>m[x]=1,m=[r=[]]))&&r

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

মন্তব্য

t => s =>                 // t[] = tiles; s[] = scores
  s.map(g = x =>          // for each score x in s[]:
    m[x] ?                //   if m[x] is set:
      m[                  //     update the 'middle':
        x ?               //       if x is not equal to 0:
          r.push(x) && x  //         push x in the stack r[] and yield x
        :                 //       else:
          r.pop()         //         pop the last value from the stack
                          //         (may be undefined if the stack is empty)
      ] ^= 1              //     toggle the corresponding flag in m[]
    :                     //   else:
      g(x - 1),           //     try again with x - 1
    t.map(x =>            //   initialization of the 'middle': for each value x in t[]:
      m[x] = 1,           //     set m[x]
      m = [r = []]        //     the stack r[] is stored as the first entry of m[],
                          //     which ensures that g will always stop when x = 0
    )                     //   end of initialization
  ) && r                  // end of main loop; return r[]

1

কাঠকয়লা , 35 বাইট

Fη«≔⌈Φ講κιι¿ι«≔Φθ⁻κιθ⊞υι»¿υ⊞θ⊟υ»Iυ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

Fη«

স্কোর ওভার লুপ।

≔⌈Φ講κιι

সর্বাধিক উপলব্ধ টাইল সন্ধান করুন।

¿ι«

যদি তা থাকে তবে ...

≔Φθ⁻κιθ

... মাঝখানে থেকে টালি সরান ...

⊞υι

... এবং এটি স্ট্যাকের সাথে যুক্ত করুন।

»¿υ

অন্যথায়, যদি স্ট্যাকটি খালি না হয় ...

⊞θ⊟υ

স্ট্যাক থেকে সর্বশেষতম টাইলটি সরান এবং এটি মাঝখানে ফিরিয়ে দিন।

»Iυ

ফলস্বরূপ স্ট্যাকটি প্রাচীন থেকে নতুনতে মুদ্রণ করুন।



1

05 এ বি 1 ই , 27 22 বাইট

vÐy>‹ÏDgĀià©K®së\sª])¨

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

v            # Loop `y` over the (implicit) input-list of scores:
 Ð           #  Triplicate the tiles list (takes it as implicit input in the first iteration)
  y>‹        #  Check for each if `y` <= the value in the tiles list
     Ï       #  Only leave the values at the truthy indices
 D           #  Duplicate the remaining tiles
  ¯Êi        #  If this list is not empty:
     à       #   Pop the list, and push its maximum
      ©      #   Store it in the register, without popping
       K     #   Remove it from the tiles list
        ®    #   Push the maximum again
         s   #   Swap the maximum and tiles-list on the stack
    ë        #  Else:
     \       #   Remove the duplicated empty tiles-list from the stack
      sª     #   Add the last tile to the tiles-list
]            # Close the if-else and loop
 )           # Wrap everything on the stack into a list
  ¨          # Remove the last item (the tiles-list)
             # (and output the result implicitly)

1

পাইথ, 32 বাইট

VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y

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

এখানে কোথাও উন্নতির জায়গা থাকতে হবে - যে কোনও পরামর্শের প্রশংসা করা হবে!

VE ?JeS+0f!>TNQ=-QeaYJaQ.)|Y]0;Y   Implicit: Q=input 1 (middle), E=input 2 (scores), Y=[]
VE                            ;    For each score, as N, in the second input:
         f    Q                      Filter Q, keeping elements T where:
          !>TN                         T is not greater than N 
                                       (less than or equal is the only standard inequality without a token in Pyth, grrr)
       +0                            Prepend 0 to the filtered list
     eS                              Take the largest of the above (_e_nd of _S_orted list)
    J                                Store the above in J
   ?                                 If the above is truthy:
                   aYJ                 Append J to Y
                  e                    Take last element of Y (i.e. J)
               =-Q                     Remove that element from Q and assign the result back to Q
                                     Else:
                          |Y]0         Yield Y, or [0] if Y is empty
                        .)             Pop the last element from the above (mutates Y)
                      aQ               Append the popped value to Q
                               Y   Print Y

1

পার্ল 5 -apl -MList:Util=max, 97 বাইট

$_=$".<>;for$i(@F){(($m=max grep$_<=$i,/\d+/g)&&s/ $m\b//?$s:$s=~s/ \d+$//?$_:$G).=$&}$_=$s;s/ //

Tio

পরের লাইনে স্কোর এবং টাইলগুলি পড়ে এবং আউটপুট প্রিন্ট করে।

কিভাবে

  • -apl: ইনপুট থেকে চম্প করতে -pলাইনের -aওপরে লুপ এবং মুদ্রণ, অটোস্প্লিট, -lআউটপুটে নিউলাইন চরিত্র যুক্ত করতে
  • $_=$".<> : পরের লাইনে (টাইলস) পড়তে এবং একটি স্থানকে ডিফল্ট ভারে প্রেন্ডিং করতে $_
  • for$i(@F){... }লুপ $iশেষ@F বর্তমান লাইন ক্ষেত্র (স্কোর)
  • (.. ?.. :..).=$& পূর্ববর্তী ম্যাচটি টার্নারি এল-ভ্যালুতে যুক্ত করুন
  • ($m=max grep$_<=$i,/\d+/g)&&s/ $m\b//?$sটাইলস থেকে সর্বাধিক মান খুঁজে পাওয়া এবং অপসারণের ক্ষেত্রে ( $_) এল-মান স্কোর ($s )
  • $s=~s/ \d+$//?$_ অন্যথায় যদি শেষ সংখ্যাটি স্কোরগুলি থেকে সরানো যায় তবে এটি টাইলস
  • :$G অবশেষে এটি আবর্জনা কারণ ঘটতে পারে না
  • $_=$s;s/ // স্কোরকে ডিফল্ট ভারে সেট করতে এবং শীর্ষস্থানীয় স্থান সরিয়ে দিতে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.