ボードゲームをプレイしましょう!


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

入力は、上記のボードゲームのアスペクトを含む文字列と、1つのキューブをプレイするときに両方のプレイヤー(kid とkid )が取得するためのいくつかの値(from 1から6)を持つ2つの配列で構成されます。AB

両方の配列の長さは常に1以上です。

子供はA常にゲームを開始します。

最初に終わりまたは終わりに近づいた子供を出力する必要があります。

どちらにも終止符が打たれず、両方の子供が同じ位置に留まっている0場合、プリントまたは他の偽の値。

片方のアレイのサイコロが残り、もう片方のサイコロが残っている場合(1人のプレイヤーがXを数ターン失ったため)、残りのサイコロを使い切る必要があります。

このタスクでは、標準入力から入力を読み取るプログラム/関数を作成するか、パラメータ/引数を取り、勝者の子供を出力/返却/印刷できます。

これはなので、バイト単位の最短回答が勝ちです!

入力と出力の例

異なる形式の入力を使用することもできますが、ボードゲーム、kid-A、kid-Bの値のみを使用する必要があります。

例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

2つの配列(AとBの)が常に同じ長さになると仮定できますか?
-trichoplax

一方のアレイが残りのサイコロを振っている間に(おそらく1人のプレイヤーがXで数ターンを逃したため)、現在の位置を使用して出力を決定する必要がありますか、または残りのサイコロを最初に使い切る必要がありますか?
-trichoplax

1
@trichoplax。はい、それらは常に同じ長さです。私は質問で明確にします
削除

1
@trichoplax。残りのサイコロを最初に使い切る必要があります
削除

例3は正しいですか?私は私の頭の中でこれを実行しないとAは、空間4に到達しながら、Bは、過去のスペース2を取得したことがない
Draco18sはもはやSE信頼

回答:


2

Perl、188 180 + 2 = 182バイト

Wuhuu、を使用するようになりました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"

編集:
Jikes、私はそれを死ぬまでゴルフした。最後の例では失敗します。すぐに復活させます。


1
私たちは、通常のバイトカウントimportすぎ、sおよび私はあなたのためにいくつかを必要とすると思うfix<|>、彼らはプレリュードではないので(またはそれらを含んでいるバージョンがあります?)。
-nimi

あなたは正しい、彼らはプレリュードではなく、ラムダボットをインタープリターとして使用する場合、デフォルトでインポートされます(インポートのカウントは公平だと思います。これを修正するたびに行います)
-BlackCap

1
インタープリターは言語を定義するため、言語lambdabot-Haskellまたは類似の言語を呼び出して、インポートのバイトカウントを除外できます。
-nimi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.