보드 게임을하자!


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

입력은 위에서 설명한 보드 게임의 측면을 가진 문자열과 하나의 큐브를 플레이 할 때 플레이어 (kid 및 kid )가 얻었 을 수 1있도록 일부 값 (에서 ~까지 6)을 갖는 두 개의 배열로 구성 됩니다.AB

두 배열의 길이는 항상 같거나> 1입니다.

아이는 A항상 게임을 시작합니다.

당신은 먼저 끝을 얻거나 더 가까운 아이를 출력해야합니다.

어느 쪽도 끝이 없어서 두 아이가 같은 자세를 유지한다면 0 되거나 다른 잘못된 값을 유지한다면.

한 플레이어가 남은 주사위 롤을 가지고있는 동안 (한 플레이어가 여러 차례 턴을 잃었 기 때문에) 한 어레이가 떨어지면 나머지 주사위 롤을 모두 사용해야합니다.

이 작업을 위해 stdin에서 입력을 읽거나 매개 변수 / 인수를 사용하여 승자 아이를 출력 / 반환 / 인쇄하는 프로그램 / 기능을 만들 수 있습니다.

이것은 이므로 바이트 단위의 최단 답변이 승리합니다!

입력 및 출력 예

다른 형식의 입력을 사용할 수도 있지만 보드 게임, 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

두 배열 (A와 B의 경우)이 항상 같은 길이라고 가정 할 수 있습니까?
trichoplax

만약 한 플레이어가 남은 주사위 롤을 가지고있는 동안 (아마도 한 플레이어가 여러 차례 턴을 잃었 기 때문에) 한 어레이가 떨어지면 현재 위치를 사용하여 출력을 결정해야합니까, 아니면 나머지 주사위 롤을 먼저 사용해야합니까?
trichoplax

1
@trichoplax. 그렇습니다, 그들은 항상 같은 길이 일 것입니다. 나는 질문에서 명확히 할 것입니다
제거됨

1
@trichoplax. 나머지 다이 롤 먼저 표기
제거

예 3이 맞습니까? 나는 이것을 내 머리에
싣고

답변:


2

펄, 188180 + 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도들 그리고 당신이 몇 가지가 필요합니다 생각 fix<|>그들이 서곡에 있지 않기 때문에, (또는이를 포함하는 버전이?).
nimi

당신이 맞습니다. Prelude에 있지 않습니다. 람다 봇을 통역사로 사용하면 기본적으로 가져옵니다. (수입 계산이 공정하다고 생각합니다. 고칠 때마다 그렇게하겠습니다)
BlackCap

1
인터프리터는 language를 정의하므로 언어 등을 호출 lambdabot-Haskell하고 가져 오기의 바이트 수를 제외 할 수 있습니다 .
nimi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.