সম্ভাব্য টেট্রিস ক্রম


11

অফিসিয়াল টেট্রিস অ্যালগরিদম দ্বারা টেট্রিস টুকরো টুকরো রান উত্পন্ন হতে পারে কিনা তা জানতে কোড লিখুন। সবচেয়ে কম বাইট জেতা


অফিসিয়াল টেট্রিস গেমগুলি একটি বিশেষ উপায়ে টুকরো টুকরো হওয়ার ক্রম তৈরি করে। সাতটি টুকরো IJLOSTZএকটি এলোমেলো ক্রমে ফেলে দেওয়া হয়, তারপরে আরেকটি এলোমেলো ক্রমুয়েশন বাদ দেওয়া হয় ইত্যাদি।

JTLOISZ STJOLIZ LISJOTZ ...

এই উদাহরণে টুকরো টুকরো সংযুক্ত রান রয়েছে

SZSTJOLIZLIS

মনে রাখবেন যে এটি 7. এর একটি গ্রুপের সীমানা জুড়ে কেটে দেয় But তবে, টুকরো টুকরো

SZOTLZSOJSIT

কোনও টেট্রিস ক্রমের সাবস্ট্রিং হতে পারে না, তাই এটি কোনও অফিসিয়াল টেট্রিস গেমটিতে কখনও দেখা যায় না।


ইনপুট: একটি খালি অক্ষরের স্ট্রিং IJLOSTZ

আউটপুট: ইনপুটটি সরকারী টেট্রিস র‌্যান্ডম জেনারেটর দ্বারা উত্পন্ন করা যেতে পারে, অর্থাৎ সাতটি অক্ষরের ক্রমোচনকরণের একঝাঁক অঙ্কনের একটি অনুক্রমের একটি স্ট্রিং কিনা তার জন্য সত্যবাদী বা ফলসী মান।

পরীক্ষার কেস:

সত্য:

T
JJ                        (unique breakdown: J J)
JTJ                     (possible breakdown: JT J)
LTOZIJS
SZSTJOLIZLIS            (possible breakdown: SZ STJOLIZ LIS)
JTLOISZSTJOLIZLISJOTZ   (possible breakdown: JTLOISZ STJOLIZ LISJOTZ)  
LIJZTSLIJZTS              (unique breakdown: LIJZTS LIJZTS)

মিথ্যা:

SZOTLZSOJSIT
ZZZ
ZIZJLJ
ZJLJLZITSOTLISOJT
JTLOISZSTJOLIZLISJOTZLJTSZLI
IOJZSITOJZST
LIJZTSLIJZTSL

লিডারবোর্ড

সৌজন্যে মার্টিন বাটনার

উত্তর:


6

পাইথ, 16 15 বাইট

sm*F.{Mc+>Gdz7T

মিথ্যা জন্য 0 প্রিন্ট করে, সত্যের জন্য ধনাত্মক পূর্ণসংখ্যা।


6

সিজেম, 23 20 16 বাইট

q7{\+_7/_Lf|=},&

4 বাইট বন্ধ শেভ করার জন্য Sp3000 ক্রেডিট!

এটি সত্যের মান হিসাবে কিছু সংখ্যার মুদ্রণ বা মিথ্যা মান হিসাবে কিছুই মুদ্রণ করে না (মুদ্রণের আগে এগুলি আসলে একটি খালি বা খালি তালিকা যা সিজেমে সত্যই সত্য এবং মিথ্যা)।

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

ব্যাখ্যা

এটি খণ্ডে ইনপুটটির সমস্ত 7 টি সম্ভাব্য পার্টিশন পরীক্ষা করে।

q      e# Read the input
7{     e# Select the numbers from 0 to 6 for which the following block is true.
  \+   e#   Prepend the number to the input. This shifts the string by one cell
       e#   without adding non-unique elements.
  _7/  e#   Make a copy and split into chunks of 7.
  _Lf| e#   Remove duplicates from each chunk.
  =    e#   Check if the last operation was a no-op, i.e. that there were no duplicates.
},
&      e# The stack now contains the input with [6 5 ... 1 0] prepended as well as a list
       e# of all possible splittings. We want to get rid of the former. To do this in one
       e# byte we take the set intersection of the two: since we've prepended all the
       e# integers to the list, this will always yield the list of splittings.

4

রেটিনা , 61 55 বাইট

^((.)(?<!\2.+))*((){7}((?<-4>)(.)(?!(?<-4>.)*\4\6))*)*$

যেহেতু এটি কেবলমাত্র একটি একক রেজেক্স, রেটিনা ম্যাচ মোডে চলবে এবং এটি মিলবে এমন মিলগুলির সংখ্যা প্রতিবেদন করবে যা 1বৈধ ক্রম এবং 0অন্যথায় হবে will গল্ফিং ভাষাগুলির সাথে এটি তুলনামূলক নয়, তবে 260 বাইটের দৈত্য দিয়ে শুরু করে দেখে আমি এতে বেশ খুশি।

ব্যাখ্যা

^((.)(?<!\2.+))*

এই বিটটি পরিবর্তনশীল দৈর্ঘ্যের স্বতন্ত্র অক্ষরের একটি উপসর্গ গ্রহণ করে, এটি সম্ভাব্য অসম্পূর্ণ নেতৃস্থানীয় অংশের সাথে মেলে। নজরদারিটি নিশ্চিত করে যে এই বিটের সাথে মেলে এমন কোনও চরিত্র এর আগে স্ট্রিংয়ে হাজির হয়নি।

এখন বাকি ইনপুটটির জন্য, আমরা অক্ষরের পুনরাবৃত্তি না করে of টির সাথে মিল রাখতে চাই match আমরা এই জাতীয় খণ্ডের সাথে মিল রাখতে পারি:

(.)(?!.{0,5}\1)(.)(?!.{0,4}\2)(.)(?!.{0,3}\3)...(.)(?!.?\5).

অর্থাৎ আমরা এমন একটি চরিত্রের সাথে মেলে যা অন্য 6 টি অক্ষরের জন্য প্রদর্শিত না হয়, তারপরে এমন একটি যা অন্য 5 টি অক্ষরের জন্য প্রদর্শিত না হয় এবং এরকম আরও কিছু। তবে এর জন্য মোটামুটি ভয়াবহ কোড পুনরাবৃত্তি প্রয়োজন এবং আমাদের আলাদাভাবে একটি ট্রেলিং (সম্ভাব্য অসম্পূর্ণ) খণ্ডটি মিলাতে হবে।

দলগুলোকে উদ্ধারে উদ্ধার! মেলানোর আলাদা উপায়

(.)(?!.{0,5}\1)

হ'ল 5 টি খালি ম্যাচ ক্যাপচার স্ট্যাকের দিকে ঠেলে এবং এটি খালি করার চেষ্টা করুন:

(){5}(.)(?!(?<-1>.)*\2)

*শূন্য পুনরাবৃত্তির কমপক্ষে পারবেন, ঠিক {0,5}, এবং কারণ আমরা পাঁচটি যেমনটি ধাক্কা করেছি, এটা হয় চেয়ে বেশি 5 বার পপ সক্ষম হবে না। এটি এই প্যাটার্নের একক উদাহরণের জন্য দীর্ঘতর তবে এটি আরও পুনরায় ব্যবহারযোগ্য। যেহেতু আমরা নেতিবাচক চেহারাতে পপিং করছি , সুতরাং একবার চেহারা শেষ হয়ে গেলে এটি আসল স্ট্যাককে প্রভাবিত করবে না। তাকাবার পরে, আমরা এখনও স্ট্যাকের মধ্যে 5 টি উপাদান পেয়েছি, ভিতরে কী ঘটেছে তা বিবেচনা করুন। তদ্ব্যতীত, আমরা প্রতিটি ত্রুটিযুক্ত লোকের আগে স্ট্যাক থেকে কেবল একটি উপাদান পপ করতে পারি, এবং একটি লুপে কোডটি চালাতে পারি, যাতে স্বয়ংক্রিয়ভাবে চূড়ান্ত প্রস্থটি 5 থেকে নীচে 0 পর্যন্ত হ্রাস করা যায় So সুতরাং সেখানে দীর্ঘতর বিট আপ আসলে সংক্ষিপ্ত করা যেতে পারে

(){7}((?<-1>)(.)(?!(?<-1>.)*\1\3))*

(আপনি দুটি পার্থক্য লক্ষ্য করতে পারেন: আমরা 5 এর পরিবর্তে 7 চাপ দিচ্ছি One একটি অতিরিক্ত ক্যাপচার কারণ আমরা প্রতিটি পুনরাবৃত্তির আগে পপ করি , তার পরে নয় The অন্যটি আসলে প্রয়োজনীয় যাতে আমরা times বার স্ট্যাক থেকে পপ করতে পারি (যেহেতু আমরা চাই লুপটি times বার চালানোর জন্য), আমরা \1স্ট্যাকের মধ্যে কমপক্ষে একটি উপাদান এখনও রয়ে গেছে তা নিশ্চিত করে লুপহেডের অভ্যন্তরে একের পর এক ত্রুটিটি ঠিক করতে পারি ))

এর সৌন্দর্য এটি হ'ল এটিও শেষের অসম্পূর্ণ খণ্ডটির সাথে মিলে যায়, কারণ আমাদের কখনই এটি 7 বার পুনরাবৃত্তি করার প্রয়োজন হয়নি (এটি কেবলমাত্র সর্বোচ্চ প্রয়োজনীয়, কারণ আমরা স্ট্যাক থেকে প্রায়শই পপ করতে পারি না)। সুতরাং আমাদের যা করতে হবে তা হ'ল এটি অন্য লুপে মোড়ানো এবং এটি নিশ্চিত করার জন্য আমরা স্ট্রিংয়ের শেষে পৌঁছেছি

^((.)(?<!\2.+))*((){7}((?<-4>)(.)(?!(?<-4>.)*\4\6))*)*$
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.