ডোমিনিয়নে দ্বিগুণ এবং ট্রিপলিং ক্রিয়াগুলি সমাধান করুন


14

প্রেরণা

এই প্রশ্নটি জনপ্রিয় ডেক-বিল্ডিং কার্ড গেম ডোমিনিয়ন থেকে কার্ডগুলি থ্রোন রুম এবং কিং কোর্ট দ্বারা অনুপ্রাণিত ।

সিংহাসন ঘর কিং কোর্ট

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

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

আপনার লক্ষ্য হ'ল কোড লিখুন যা যথাসম্ভব কয়েকটি বাইট ব্যবহার করে এই চেইনগুলিকে সঠিকভাবে সমাধান করে। চীনগুলি ডোমিনিয়ন বিধিগুলিতে কীভাবে সমাধান হয় তা ব্যাখ্যা করার আগে আমি প্রোগ্রামের প্রয়োজনীয়তাগুলি বর্ণনা করব describe

* প্রযুক্তিগতভাবে, আপনি সিংহাসন ঘর বা কিং কোর্ট সমাধানের অংশ হিসাবে ক্রিয়াকলাপটিকে প্রভাবিত করেন তবে এই চ্যালেঞ্জের জন্য এই মতামত পরিষ্কার।

প্রোগ্রাম প্রয়োজনীয়তা

একটি প্রোগ্রাম লিখুন বা নামকরণ ফাংশন । এটি খেলানো ক্রিয়াকলাপগুলির (এসটিডিআইএন বা ফাংশন ইনপুট) গ্রহণ করা উচিত এবং দ্বিগুণ এবং ট্রিপলিংয়ের প্রভাবগুলি থেকে ক্রিয়াকলাপের ফলে তৈরি শৃঙ্খলের আউটপুট বা মুদ্রণ করা উচিত। সবচেয়ে কম বাইট জেতা

ইনপুট

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

অক্ষরের সংখ্যা (ক্রিয়াগুলি) সমেত 1 এবং 30 এর মধ্যে হবে। আপনি যদি চান তবে একটি নতুন লাইনে ইনপুট শেষ হতে পারে।

উদাহরণ ইনপুট: WA23G3GA

আউটপুট

বড় হাতের অক্ষরে একটি স্ট্রিং Aথেকে Z। এটি জেনেরিক ক্রিয়াকলাপগুলির ক্রম হওয়া উচিত যা দ্বিগুণ এবং ট্রিপলিং এফেক্টগুলি ঘটবে তার চেয়ে ক্রম অনুযায়ী সমাধান করে।

আপনি ইচ্ছা করলে একটি নতুন লাইনে আউটপুট শেষ হতে পারে। অন্যথায় কোনও অতিরিক্ত অক্ষর থাকা উচিত।

উদাহরণ আউটপুট: WAGGGGGGAAA

ডোমিনিয়নে ডাবলিং এবং ট্রিপলিং কীভাবে কাজ করে

এখানে, আমি কীভাবে ডমিনিয়ন বিধি অনুসারে আরন রুম ( 2গুলি) এবং কিং কোর্টস (গুলি) এর চেইনগুলি 3কাজ করব work

আপনি একটি বাজানোর পরে 2, সমাধান করা পরবর্তী ক্রিয়াটি দু'বার ঘটে। সুতরাং, আপনি যদি প্রথম খেলেন 2, তবে A, আপনি Aদু'বার হয়ে যাবেন।

2A -> AA

একইভাবে,

A2BC -> ABBC
3DE -> DDDE
3N2BC3XY2 -> NNNBBCXXXY

সর্বশেষ উদাহরণে নোট করুন যে ফাইনালের 2দ্বিগুণ করার কিছুই ছিল না, সুতরাং এর কোনও প্রভাব ছিল না।

আকর্ষণীয় জিনিসটি ঘটে যখন দ্বিগুণ বা ত্রিগুণ প্রভাবগুলি নিজেরাই দ্বিগুণ হয় বা তিনগুণ হয়। উদাহরণ স্বরূপ,

22AB -> AABB

প্রথম, আপনি খেলুন 2। তারপরে, আপনি অন্য খেলুন 2, যা আগের থেকে দ্বিগুণ 2। ফলস্বরূপ, পরবর্তী দুটি ক্রিয়া দ্বিগুণ হয়। প্রথমে দুই কপি Aসংকল্প। তারপরে, সংকলনের অনুলিপিগুলি B

লক্ষ্য করুন Aহয় চারগুণ না: প্রথম কপি পর 2প্রথম কাজ A, পরবর্তী কপি পরবর্তী অমীমাংসিত কর্ম, যা উপর কাজ করে B। ছাড়া B, আমরা চাই

22A -> AA

যেখানে দ্বিতীয় অনুলিপি 2পরবর্তী ক্রিয়াটি দ্বিগুণ হওয়ার জন্য অপেক্ষা করছে, কিন্তু কোনও পদক্ষেপ আসেনি।

পরিশেষে, আসুন একটি জটিল উদাহরণটি দেখুন।

223BCDE -> BBBCCCDDE

আগের 2মতই প্রথমটি দ্বিতীয়টিকে 2দ্বিগুণ করার কারণ দেয় । সুতরাং, পরবর্তী দুটি ক্রিয়া দ্বিগুণ হবে। প্রথম কপিটি 2পরবর্তী ক্রিয়াকে দ্বিগুণ করে 3, যার পরবর্তী কপিটি সমাধান করার আগে অবশ্যই সম্পূর্ণ সমাধান করা উচিত 23ট্রিপলগুলির প্রথম কপি B, এবং দ্বিতীয় অনুলিপি ট্রিপল C। এখন, অপেক্ষায় থাকা দ্বিতীয় অনুলিপিটি 2পরবর্তী স্থির-অমীমাংসিত ক্রিয়াকে দ্বিগুণ করে D। এর পরে, কোনও দ্বিগুণ বা ত্রিগুণ প্রভাব নেই এবং চূড়ান্ত ক্রিয়াটি Eকেবল ঘটে।

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

এই হিসাবে দেওয়া হয় (input,output)

(FY, FY)
(A2BC, ABBC)
(3DE, DDDE)
(3N2BC3XY2, NNNBBCXXXY)
(WA23G3GA, WAGGGGGGAAA)
(32, )
(33RST, RRRSSSTTT)
(2A32B2CDEFG, AABBCCDDEEFG)
(A2A323AB2CD2D2E3ABC, AAAAAABBBCCDDDDEEAAABBBC)
(P22LL3Q2Q22T, PLLLLQQQQQTT)
(322322ABCDEFGHIJKLMN, AABBCCDDEEEFFGGHHIJKLMN)

উত্তর:


5

গল্ফস্ক্রিপ্ট ( 29 26 বাইট)

](1/{\1+(3&@*.23-\1$-@+}/;

অনলাইন ডেমো

ব্যবচ্ছেদ

এটি গল্ফস্ক্রিপ্টের আলগা টাইপটিকে সামান্য ব্যবহার করে। কতবার পরবর্তী ক্রিয়া পুনরাবৃত্তি এর স্ট্যাক একটি অ্যারের একটি স্ট্রিং মধ্যে পরে পালাক্রমে হিসেবে শুরু হয় - কিন্তু 1+একটি 1 appends এবং (3&প্রথম মান এবং সঠিকভাবে এটা সীমার মধ্যে রাখে পপ 0করতে 3প্রকার পরিবর্তন নির্বিশেষে।

](         # Push an empty array under the input string to serve as rep stack
1/{        # Loop over the input string as a series of 1-char strings
           #   Stack is ... reps ch
           #   where the ... covers zero or more strings which will be output
  \        #   Bring the rep stack to the top
  1+(      #   Push a `1` on the bottom of it to avoid underflow and then pop
  3&       #   Coerce to correct range, because if rep stack is a string then
           #   we just got an ASCII value
  @*       #   Apply repetition to the 1-char string: it's now an n-char string
  .23-     #   Duplicate it and remove chars '2' and '3': this becomes output
  \1$-     #   Get the original copy and remove the output string's chars
           #   So the stack is now ... reps output non-output
           #   where non-output is either an empty string or a string of '2's
           #   or '3's
  @+       #   Push non-output onto the repetition stack
}/         # Loop
;          # Pop whatever's left of the repetition stack

1বহুগুণিত ক্রিয়াগুলি বহুগুণিতের মতো একই আচরণ করার জন্য আমি আপনার স্ট্যাকের নীচে চাপ দেওয়ার কৌশলটি পছন্দ করি । আপনি কীভাবে বিভিন্ন স্ট্যাকের জালিয়াতি করেন সে সম্পর্কে আরও ব্যাখ্যা করতে পারেন? বিশেষত, "রিপ স্ট্যাকটি শীর্ষে আনতে" does কী করে?
xnor

@ এক্সনর, এখানে বিল্টিনস রেফারেন্স । the স্ট্যাকের শীর্ষ দুটি আইটেম অদলবদল করে।
পিটার টেলর

ধন্যবাদ, আমি বুঝতে পারি নি যে প্রতিটি স্ট্যাক উপাদানটি তার নিজস্ব স্ট্যাক; আমি একটি একক কনটেনেটেড স্ট্যাকের কল্পনা করছিলাম।
xnor

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

4

জাভাস্ক্রিপ্ট - 162 152 বাইট

minified:

F=I=>{L=c=>S.length;p=c=>L()?S.shift():d=>{};S=[(x=>/\d/.test(x)?(c,b)=>{for(c=p(),b=x;b--;)c();}:c=>s+=x)(m)for(m of I)];for(s='';L();)p()();return s;}

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

F = I => {
    L = c => S.length;
    p = c => L() ? S.shift() : d => {};
    S = [ (x => /\d/.test( x ) ?
        (c,b) => {
            for( c = p(), b = x; b--; )
                c();
        } : c =>
            s += x
        )(m) for( m of I ) ];

    for( s = ''; L(); )
        p()();

    return s;
}

আমি ধারণা করছি স্ট্যাক-ভিত্তিক গল্ফ ভাষাগুলি এটিকে হত্যা করবে, কারণ এটি মূলত ফাংশন স্ট্যাকিংয়ের একটি অনুশীলন। : P: P

নমুনা আউটপুট

F('3N2BC3XY2')
"NNNBBCXXXY"

F('WA23G3GA')
"WAGGGGGGAAA"

F('A2A323AB2CD2D2E3ABC')
"AAAAAABBBCCDDDDEEAAABBBC"

F('322322ABCDEFGHIJKLMN')
"AABBCCDDEEEFFGGHHIJKLMN"

F('FY')
"FY"

F('')
""

1
আপনার কার্ডগুলির কার্যকারিতা হিসাবে সমান্তরাল ব্যাখ্যাটি কতটা সমান্তরাল তা দেখে আমি অবাক হয়েছি। আমি স্ট্যাকের প্রত্যাশা করেছি, তবে আক্ষরিক কল স্ট্যাক ফাংশন নয়! কোনও ফাংশনকে একাধিকবার কল করার কী আরও সংক্ষিপ্ত উপায় নেই? আরও ভাল, 2/3কেসগুলি একসাথে পরিচালনা করার জন্য একটি পরিবর্তনশীল সংখ্যক বার ?
xnor

@ এক্সনর: আমি ভেবেছিলাম এটি চালাক। ;) আপনার পরামর্শ হিসাবে, আপনার স্বজ্ঞাত সঠিক ছিল আমি 10 টি বাইট সঞ্চয় করার জন্য দুটি কেস একত্রিত করেছি। এটি আদর্শভাবে 18 বছর হবে তবে আমি যা বিশ্বাস করি তাতে হোঁচট খেয়েছি ফায়ারফক্সের একটি বাগ। আমার xপ্রথমে এটি bকোনও অভ্যন্তরের ল্যাম্বডায় ভেরিয়েবলের মধ্যে অনুলিপি না করে সরাসরি হেরফের করতে সক্ষম হওয়া উচিত , তবে ফায়ারফক্স লুপের অবস্থাটি সঠিকভাবে মূল্যায়ন করতে পারে না। বিশেষত, xনেতিবাচক যায় এবং ব্রাউজারটি স্তব্ধ হয়। প্রতিস্থাপন করার চেষ্টা করুন , b = x; b--;সঙ্গে ; x--;এবং ইনপুট চালানো A2A323AB2CD2D2E3ABC। কেউ যদি এটি পড়তে পারে তবে তা কেন বুঝতে পারে, ...
COTO

... আমি জানতে খুব আগ্রহী হতে হবে। ক্লোজারগুলি কীভাবে কাজ করবে বলে মনে করা হচ্ছে সে সম্পর্কে আমি কিছু মিস করছি।
COTO

3

সি, 115 111 বাইট

স্ট্যান্ডার্ড ইনপুট / আউটপুট ব্যবহার করে।

memsetস্ট্যাকটিকে অন্য দিকে চালিয়ে দিয়ে 4 ব্যবহার করে সংরক্ষণ করা হয়েছে ।

char*i,X[222],*s=X+99;main(){for(gets(i=X);*i;i++)*i<55?s=memset(s-*s,*i-49,*s+1):putchar(*i)**s?--*s,--i:++s;}

Ungolfed

#include <stdio.h>
#include <stdlib.h>
char I[99], S[99], *i = I, *s = S+66;
int n;
int main()
{
    gets(I);
    for(;*i;)
    {
        if(*i < '5') {
            n = *s;
            s[0] = s[1] = s[2] = *i - '1';
            s += n;
            i++;
        } else {
            putchar(*i);
            if(*s)
                --*s;
            else
                --s, ++i;
        }
    }
    return 0;
}

0

পাইথন (84)

S='1'*99
R=''
for c in input():q=int(S[0])*c;S=q*(c<'A')+S[1:];R+=q*(c>'3')
print(R)

Sমাল্টিপ্লায়ার্সের স্ট্যাক (সামনে থাকলে শীর্ষে)। এটি 1সীমাহীন ক্রিয়াকলাপ পরিচালনা করার জন্য পর্যাপ্ত পর্যায়ে শুরু হয়েছে ।

বর্তমান ক্রিয়াটি cজেনেরিক কিনা তা নির্ভর করে , আমরা এর গুণগত ফলাফলকে আউটপুট Rবা বহু গুণকগুলির স্ট্যাকে যুক্ত করি S

অক্ষরের তালিকার পরিবর্তে সমস্ত কিছু স্ট্রিং হিসাবে উপস্থাপিত হয়। স্ট্রিংগুলি পরিবর্তনযোগ্য না হওয়ার কারণে, দুর্ভাগ্যক্রমে আমরা popসেগুলি ব্যবহার করতে পারি না বা সেগুলিতে অ্যাসিমেন্ট অ্যাসাইনমেন্টও দিতে পারি না।

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