উদ্ভাবনী স্পেলগুলির জন্য আইকন গণনা করা


11

উদ্ভাবন এমন একটি কার্ড গেম যেখানে খেলোয়াড়রা তাদের প্রতিপক্ষের চেয়ে দ্রুত অর্জনের প্রয়াসে প্রাগৈতিহাসিক থেকে আধুনিক যুগে যুগে যুগে যুগে লড়াই করে।

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

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

গেমটিতে 6 ধরণের আইকন রয়েছে (দুর্গ, মুকুট, পাতা, লাইটবুলস, কারখানা এবং ঘড়ি), যা আমরা চরগুলি ব্যবহার করে নির্বিচারে উপস্থাপন করব 012345। ব্যবহার #কালো ষড়ভূজ প্রতিনিধিত্ব করতে, আমরা প্রতিটি কার্ডে আইকন প্রতিনিধিত্ব করতে চার অক্ষর ব্যবহার করতে পারেন। উদাহরণস্বরূপ, উপরের কার্ডগুলি হ'ল

0.. #.. 3.. 1..  -> 03#0 #331 355# 144#
3#0 331 55# 44#

এখন, ইনোভেশনতে, খেলার ক্ষেত্রের কার্ডগুলিকে পাইলগুলিতে বিভক্ত করা হয়েছে * যা চারটি উপায়ে একটির মধ্যে ছড়িয়ে পড়ে। প্রতিটি উদাহরণের জন্য আমরা উপরের কার্ডগুলি ব্যবহার করব, ধরে নিচ্ছি বামতম কার্ডটি, গাদাটির 03#0শীর্ষে রয়েছে।

কোনও স্প্লে নয়: কেবল শীর্ষ কার্ডটি দৃশ্যমান

0..
3#0

বাম দিকে স্প্লে করুন : উপরের কার্ডটি সম্পূর্ণরূপে দৃশ্যমান, পাশাপাশি নীচের সমস্ত কার্ডের ডান তৃতীয়

0..|.|.|.|
3#0|1|#|#|

ডান স্প্লে : উপরের কার্ডটি সম্পূর্ণরূপে দৃশ্যমান, পাশাপাশি নীচের সমস্ত কার্ডের বাম তৃতীয়

1|3|#|0..
4|5|3|3#0

স্প্লে আপ : উপরের কার্ডটি সম্পূর্ণরূপে দৃশ্যমান, পাশাপাশি নীচের সমস্ত কার্ডের নীচের অর্ধেক।

0..
3#0
---
331
---
55#
---
44#

চ্যালেঞ্জ

ইনপুটটি দুটি অংশের সমন্বয়ে একক স্পেস-বিভাজিত স্ট্রিং হবে:

  • একটি স্প্লে দিক, যা একটির মধ্যে !<>^যথাক্রমে কোনও স্প্লে, স্প্লে বাম, স্প্লে ডান বা স্প্লে আপ উপস্থাপন করে।
  • কার্ডগুলির একটি খালি খালি তালিকা, যার মধ্যে প্রতিটি অক্ষরের সমন্বয়ে 4 টি অক্ষর দীর্ঘ 012345#। বামতম কার্ডটি স্তূপের শীর্ষে এবং প্রতিটি কার্ডে হুবহু একটি থাকে #

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

> 03#0 #331 355# 144#
03#0 #331 355# 144# >

আউটপুট হ'ল প্রতিটি আইকনের জন্য গণনা উপস্থাপন করে ছয় সংখ্যার একটি তালিকা, যেমন উপরের উদাহরণ কার্ডগুলির জন্য:

! 03#0 #331 355# 144#  ->  2 0 0 1 0 0
< 03#0 #331 355# 144#  ->  2 1 0 1 0 0
> 03#0 #331 355# 144#  ->  2 1 0 3 1 1
^ 03#0 #331 355# 144#  ->  2 1 0 3 2 2

উদাহরণস্বরূপ, কোনও স্প্লে ক্ষেত্রে দুটি 0আইকন এবং একটি 3আইকন দেখানো ছিল, প্রথম লাইনটি দেয়। দ্রষ্টব্য যে আমরা #কালো গণনা করি না , যেহেতু কালো হেক্সাগন আইকন নয়।

আপনি তালিকাটি উপস্থাপনের যে কোনও যুক্তিসঙ্গত এবং দ্ব্যর্থহীন উপায় বেছে নিতে পারেন, যেমন- সীমানা-বিচ্ছিন্ন বা আপনার ভাষার প্রাকৃতিক তালিকা উপস্থাপনা ব্যবহার করে।

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

! 113#  ->  0 2 0 1 0 0
< 113#  ->  0 2 0 1 0 0
> 113#  ->  0 2 0 1 0 0
^ 113#  ->  0 2 0 1 0 0
! 000# 12#2  ->  3 0 0 0 0 0
< 000# 12#2  ->  3 0 1 0 0 0
> 000# 12#2  ->  3 1 1 0 0 0
^ 000# 12#2  ->  3 0 2 0 0 0
! 000# 111# 222#  ->  3 0 0 0 0 0
< 000# 111# 222#  ->  3 0 0 0 0 0
> 000# 111# 222#  ->  3 2 2 0 0 0
^ 000# 111# 222#  ->  3 2 2 0 0 0
! 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2  ->  0 0 0 2 0 1
< 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2  ->  1 1 2 5 1 1
> 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2  ->  0 3 3 7 1 1
^ 335# #101 21#2 333# 2#20 3#33 4#54 #133 3#33 32#2  ->  2 4 4 10 1 2

নোট করুন যে !জাতীয় কিছুটি অবৈধ ইনপুট, যেহেতু তালিকাটি খালি নয়।


* এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা গাদা রঙ উপেক্ষা করছি।

উত্তর:


5

সিজেম, 44 37 36 বাইট

স্পি 3000 কে আমি মনে করিয়ে দেওয়ার জন্য ধন্যবাদ যে আমি জিনিসগুলিকে অতিরিক্ত জটিল করে তুলছি এবং 7 বাইট সংরক্ষণ করছি।

rci7%"3>0<2<1>"2/=6,slS%{W$~+}*fe=p;

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

ব্যাখ্যা

কিছু পর্যবেক্ষণ:

  • আমরা সর্বদা পুরো প্রথম কার্ডটি গণনা করতে চাই।
  • সমস্ত স্প্লাল ফলস্বরূপ হয় উপসর্গ বা আইকনগুলির প্রত্যয় সরানো। !তাদের সকলকে সরিয়ে দেয় (যা হয় একটি উপসর্গ বা চারটি অক্ষরের প্রত্যয়), <প্রথম তিনটি অক্ষর >সরিয়ে দেয়, শেষ দুটি অক্ষর ^সরিয়ে দেয়, প্রথম অক্ষর সরিয়ে দেয়।

সুতরাং আমাদের প্রয়োজন কেবলমাত্র স্প্লে মোডটি সঠিক কাটাকাটিতে ম্যাপ করার জন্য একটি ছোট উপায়:

rci   e# Read the splay mode and convert to its character code.
7%    e# Take modulo 7. This maps "<!>^" to [4 5 6 3], respectively. Modulo 4 those are
      e# are all distinct (namely [0 1 2 3], respectively).
"3>0<2<1>"
      e# Push this string.
2/    e# Split it into chunks of 2, ["3>" "0<" "2<" "1>"]. Each chunk is CJam code which
      e# performs one of the truncations.
=     e# Select the correct snippet. This works, because array indexing is cyclic in CJam.
6,s   e# Push the string "012345".
lS%   e# Read the remainder of the input and split into space-separated tokens.
{     e# Now we're abusing the fold operation to apply our snippet to every card except
      e# the first, while also combining them all back into a single string.
  W%  e#   Copy the bottom of the stack (the truncation snippet).
  ~   e#   Evaluate it.
  +   e#   Append it the string we're building.
}*
fe=   e# For each character in "012345", count the occurrences in our new string.
p     e# Pretty-print the array.
;     e# Discard the truncation snippet which was still at the bottom of the stack.

আমরা লক্ষ্য করতে পারি যে ছাঁটাইয়ের স্নিপেটগুলির আসলে অনেকগুলি কাঠামো রয়েছে। প্রতিটি স্প্লে মোড মানচিত্রে একটি সংখ্যায় [0 1 2 3](বিশেষত, ক্রম "!^><"), এবং তাদের মধ্যে দুটি রয়েছে >এবং দু'জনের রয়েছে <। আমি দুটি হ্যাশ খুঁজে পাওয়ার আশায় ছিলাম যা যাদুকরীভাবে পৃথকভাবে এই অংশগুলি তৈরি করে, কারণ এটি একগুচ্ছ বাইট সংরক্ষণ করবে, কিন্তু এখনও আমি কিছুই খুঁজে পাইনি। আমি (এর থেকে সঠিক চরিত্রটি নির্বাচন করার জন্য ) "!^><"সাথে বিকল্প প্যারিটির সংখ্যায় ম্যাপ করতে পারি, তবে আমি সেগুলিতে খুব সুন্দরভাবে মানচিত্রের কোনও কিছুই পাইনি । (নিষ্পাপ সমাধান ব্যতীত যা দুর্ভাগ্যক্রমে কোনও বাইট সংরক্ষণ করে না))31%"<>"[0 1 2 3]"!^><"#

এছাড়াও লক্ষ করুন যে এটি আসলে কিছুটা নমনীয়। !যে n>কোনও হিসাবে প্রয়োগ করা যেতে পারে n > 3(সমস্ত কিছু উপসর্গ হিসাবে ত্যাগ করা)। দুর্ভাগ্যক্রমে, আমি এই জাতীয় মানচিত্রের জন্য কোনও সাধারণ ক্রিয়াকলাপ খুঁজে পাইনি।


0

পাইথ, 39 36 33 31 বাইট

Jtczdm/s+hJm@yk%*%Chz33T19tJ`d6

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ব্যাখ্যা

  • Jtczd: ফাঁকা ফাঁকে ইনপুট বিভক্ত করুন, প্রথম অংশটি সরিয়ে ফেলুন এবং বাকীটি সংরক্ষণ করুন J
  • m6: 0 থেকে 5 সংখ্যার জন্য নিম্নলিখিতটি পুনরাবৃত্তি করুন।
    • mtJ: প্রথম কার্ড ব্যতীত সমস্ত কার্ডের জন্য নিম্নলিখিতটি পুনরাবৃত্তি করুন।
      • Chz: ইনপুটটিতে প্রথম অক্ষরের কোড পয়েন্ট পান।
      • %*%... 33T19: কোড পয়েন্ট মানচিত্র !<>^(33, 60, 62, 94) সংখ্যার 0, 4, 5, 14 সঠিক হিসাব সঞ্চালিত হয় cp % 33 * 10 % 19
      • yk: বর্তমান কার্ডের পাওয়ারশিট পান। এটি কার্ডের সমস্ত অনুচ্ছেদের একটি তালিকা।
      • @: পূর্বে গণনা করা সূচকের সাথে সম্পর্কিত পাওয়ারশিটের আইটেমটি পান।
    • +hJ: ফলাফলটিতে প্রথম কার্ড যুক্ত করুন।
    • s: প্রক্রিয়াজাত কার্ডগুলি একসাথে সংযুক্ত করে নিন।
    • /`d: ফলাফলটিতে বর্তমান সংখ্যার উপস্থিতি গণনা করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.