আসুন কিছু বোর্ডগেম খেলি!


11

ভূমিকা

বোর্ডগেমগুলি বাচ্চাদের মধ্যে একটি ক্লাসিক খেলা, তবে কিছু বাচ্চা রয়েছে যা ধাপে ধাপে বোর্ডগেম খেলতে বিরক্ত বোধ করে। এখন তারা বোর্ডে হাত দেওয়ার আগে ফলাফলটি দেখানো চায়।

চ্যালেঞ্জ

ধরুন এই বোর্ডগেম: >---#<---X---<X<--#-$

>   means the start of the game
-   means a position without danger
<   means the player should return one step back
X   means the player won't move next round
#   means a portal where the player returns to the start position
$   the first player to get there or after there wins the game

ইনপুট উপরে বর্ণিত boardgame এর দিক এবং (থেকে কিছু মান সঙ্গে দুইটি অ্যারের সঙ্গে একটি স্ট্রিং নিয়ে গঠিত 1করার 6অনুক্রমে) যে উভয় খেলোয়াড় (ছাগলছানা Aএবং ছাগলছানা Bযখন এক ঘনক্ষেত্র বাজানো) পেয়েছিলাম ছিল।

উভয় অ্যারে সর্বদা একই দৈর্ঘ্য> = 1 থাকবে।

বাচ্চা Aসবসময় গেমটি শুরু করে।

আপনার অবশ্যই প্রথমে বাচ্চাটিকে আউটপুট দিতে হবে যা শেষ বা তার কাছাকাছি এসেছিল।

যদি 0কোনওরই শেষ না হয় এবং উভয় বাচ্চা একই অবস্থানের মুদ্রণ বা অন্য কোনও মিথ্যা মানে থাকে।

যদি একটি অ্যারে রান আউট হয়ে যায় এবং অন্যটিতে ডাইস রোলগুলি বাকী থাকে (এক খেলোয়াড়ের Xs- এ কয়েকটি টার্ন হারিয়ে যায়), তবে বাকি ডাইস রোলগুলি ব্যবহার করা উচিত।

এই কাজের জন্য, আপনি এমন একটি প্রোগ্রাম / ফাংশন তৈরি করতে পারেন, যা স্টিডিনের ইনপুট পড়তে পারে, বা পরামিতি / আর্গুমেন্ট এবং আউটপুট / রিটার্ন / বিজয়ী ছাগলছানা মুদ্রণ করতে পারে।

যেহেতু এটি , তাই বাইট জয়ের সংক্ষিপ্ত উত্তর!

উদাহরণ ইনপুট এবং আউটপুট

আপনি ইনপুট এর পৃথক ফর্ম্যাট ব্যবহার করতে পারেন, তবে আপনার কেবল বোর্ডগেম, ছাগল-এ এবং ছাগলছানা-বি মানগুলি নেওয়া উচিত।

উদাহরণ 1:

board:  >---#<---X---<X<--#-$
kid-A:  [3,6,6,5,2,1]
kid-B:  [4,5,3,5,5,5]

output: A

ব্যাখ্যা করে:

>---#<---X---<X<--#-$     # both kids in position
B--A#<---X---<X<--#-$     # kid-A moved 3 to -
B--A#<---X---<X<--#-$     # kid-B moved 4 to # and returned home
B---#<---A---<X<--#-$     # kid-A moved 6 to X and will wait one round
B---#<---A---<X<--#-$     # kid-B moved 5 to < returned one to # and returned home
>--B#<---A---<X<--#-$     # kid-B moved 3 to -
>--B#<---X---<A<--#-$     # kid-A moved 6 to < returned one to X and will wait again
>---#<--BX---<A<--#-$     # kid-B moved 5 to -
>---#<---X--B<A<--#-$     # kid-B moved 5 to < returned one to -
>---#<---X--B<X<--#A$     # kid-A moved 5 to -
>---#<---X---<X<-B#A$     # kid-B moved 5 to -
>---#<---X---<X<-B#-$A    # kid-A moved 2 and won the game!

উদাহরণ 2:

board:  >-<<<<<$
kid-A:  [1,2,3]
kid-B:  [5,5,4]

output: 0

উদাহরণ 3:

board:  >-<-<#<-<-<-$
kid-A:  [5,4,2]
kid-B:  [1,1,1]

output: B

ব্যাখ্যা করে:

>-<-<#<-<-<-$     # both kids in position
>-<-<#<-<-<-$     # kid-A moved 5 to # returned home
AB<-<#<-<-<-$     # kid-B moved 1 to -
>B<A<#<-<-<-$     # kid-A moved 4 to < returned one to -
>B<A<#<-<-<-$     # kid-B moved 1 to < returned one to -
AB<-<#<-<-<-$     # kid-A moved 2 to # returned home
AB<-<#<-<-<-$     # kid-B moved 1 to < returned one to -

Current position: (A:0, B:1) output: B

আমরা কী ধরে নিতে পারি যে দুটি অ্যারে (এ এবং বি এর জন্য) সর্বদা একই দৈর্ঘ্য হবে?
ট্রাইকোপল্যাক্স

যদি একটি অ্যারে রান আউট হয়ে যায় এবং অপরটিতে পাশা রোলগুলি বাকী থাকে (সম্ভবত এক প্লেয়ারের একসিতে বেশ কয়েকটি পালা হারিয়ে গেছে), তবে বর্তমান অবস্থানটি আউটপুট নির্ধারণের জন্য ব্যবহার করা উচিত, না বাকী পাশা রোলগুলি প্রথমে ব্যবহার করা উচিত?
ট্রাইকোপল্যাক্স

1
@trichoplax। হ্যাঁ, তারা সবসময় একই দৈর্ঘ্য হতে হবে .. আমি প্রশ্নে নির্মল হবে
মুছে

1
@trichoplax। বাকি পাশা রোলগুলি প্রথমে ব্যবহার করা উচিত
সরানো হয়েছে

উদাহরণ 3 সঠিক? আমি এটিকে আমার মাথায় চালাই এবং বি কখনই অতীতের স্থান 2 পায় না, যখন এ 4 এ স্থান পায়
ড্রাকো 18s আর বিশ্বাস করে না SE

উত্তর:


2

পার্ল, 188 180 + 2 = 182 বাইট

ওহুহু, ব্যবহার করতে পেলাম goto

@q=/.(?!$)/g,next if$w=$e=!@q;for(@F){a:$w+=$_;$_=$q[$w];/</?($_=-1,goto a):/X/?$e++:/#/?$w=0:!$_&&last;$e++}$r+=$"lt$r?-$w:$w;$t+=$"lt$t?-$e:$e-1}{say$w>@q?$t<0?B:A:!$r?0:$r<0?B:A

প্রয়োজন -aএবং -E| -M5.010:

$ echo $'>-<-<#<-<-<-<-$\n5 4 2\n1 1 1' | perl -M5.010 boardgame.pl
B

কিছুটা অবারিত সংস্করণ:

#!/usr/bin/perl -a

# Read all but last char from the board into an array
@board = /.(?!$)/g,next if $pos = $turns = !@board;
for (@F) {
    a:
    $pos+=$_;
    $_=$board[$pos];
    /</?($_=-1,goto a):
    /X/?$turns++:
    /#/?$pos=0:
    # End of Game (Victory!)
    !$_&&last;

    $turns++
}
# Make sure '$pos_diff' and '$turns_diff' are not zero by checking against [:space:]
# ' ' is less than 0 on the ascii table
$pos_diff += $"lt$pos_diff ? -$pos : $pos;
$turns_diff += $"lt$turns_diff ? -$turns : $turns-1;
}{
    say $pos>@board?
            $turns_diff<0?B
            :A
        :
        !$pos_diff?0:
        $pos_diff<0?B:
        A

1

হাস্কেল, 142

_![]=fail;g!(x:y)|x>length g=Just|1<2=g!fix(\f x->case(g!!x)of;'<'->f$x-1;'X'->(0:);'#'->map$(-)(-x);_->map(+x))x y;(g?a)b=(g!)a"A"<|>(g!)b"B"

ব্যবহার:

(?) "GAME" [kidA moves] [kidB moves]

আউটপুট:

(?) ">---#<---X---<X<--#-$" [3,6,6,5,2,1] [4,5,3,5,5,5]
Just "A"

সম্পাদনা করুন:
জিক্স, আমি এটিকে গল্ফ দিয়েছি; এটি শেষ উদাহরণে ব্যর্থ। আমি শীঘ্রই এটি পুনরুদ্ধার করব।


1
আমরা সাধারণত ওগুলির জন্য বাইটগুলিও গণনা importকরি এবং আমি মনে করি আপনার জন্য কিছু দরকার হবে fixএবং <|>কারণ তারা প্রিলেডে নেই (বা এমন কোনও সংস্করণ রয়েছে যা এতে অন্তর্ভুক্ত রয়েছে?)।
নিমি

আপনি ঠিক বলেছেন, তারা প্রিলিডে নেই, যদি আপনি দোভাষী হিসাবে ল্যাম্বডাবোট ব্যবহার করেন তবে সেগুলি ডিফল্টরূপে আমদানি করা হয় (আমি মনে করি আমদানি গণনাগুলি ন্যায্য; আমি যখনই এটি ঠিক করব)
ব্ল্যাকক্যাপ

1
দোভাষা ভাষা সংজ্ঞায়িত করে , তাই আপনি ভাষাটি lambdabot-Haskellবা অনুরূপটি কল করতে পারেন এবং আমদানির জন্য বাইট গণনাটি বাদ দিতে পারেন।
নিমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.