Ааааа! Звери HHHHere!

19

Как мы узнали из IBM PC AT, YouTube (см. Видео) , Википедии (см. Статью) и Улицы Сезам:

Письмо Hявляется самой беспощадной буквой алфавита !

(Даже если на самом деле он состоит из двух элементов в кодовой странице 437. На самом деле, это даже БОЛЬШЕ беспощадно.)

Как инопланетяне в ... э-э ... инопланетянах , звери безжалостно преследуют всех, кто осмелится приблизиться к своим яйцам. Там нет рассуждений с ними. Вы должны раздавить их, если не погибнуть.

Страшная встреча с 4H Club

В этом сценарии мы предполагаем, что вы дошли до своей последней жизни, и вы встретили простых животных в местности без яиц (как на скриншоте Википедии). У вас нет цифровой клавиатуры, и вы можете двигаться только вверх / вниз / влево / вправо ... но звери, очевидно, имеют такую ​​клавиатуру и могут перемещаться по диагонали в свой ход.

Ход движения Зверя среди его вариантов будет тот, который минимизирует расстояние от игрока. Если расстояния равны, то разрыв связи делается в пользу слева + вверх по сравнению справа + вниз, но вот матрица устранения неоднозначности, которая должна быть в явной форме ... наименьшее число для прерывания связи:

1 3 4
2 H 5
6 8 7

Зверь никогда не спит, но, к счастью, он немного медленнее, чем игрок. Они двигаются каждый второй ход (давая игроку преимущество, начиная чередование со второго хода). Они должны двигаться, если ход возможен, независимо от того, отводит ли он их от игрока.

Вы раздавите зверя, если вы двигаете поезд из подвижных стен, где он сидел в закрытой щели. Эти простые звери стоят 2 очка за голову.

вход

  1. Пара целых чисел, указывающая размер карты в столбцах, а затем в строках.

  2. Количество строк ввода, каждая из которых имеет размер столбца ... содержит либо сплошную стену ( #), подвижную стену ( ~), зверя ( H), игрока ( O) или просто пробел.

  3. Ввод будет U, D, L, R, указывающий на попытку игрока сделать ход ... или W, чтобы просто подождать. Обратите внимание, что попытка толкнуть подвижную стену, которая заблокирована, является законным вводом, это просто не приведет к каким-либо действиям.

Выход

  1. aHHHH! если звери убили игрока ... или ничего, если игрок выиграл без оставшихся зверей

  2. Результат

(Примечание: для целей отладки и / или развлечения вы, вероятно, захотите выводить состояние на каждом шаге; но это слишком долго для публикации здесь.)

Разъяснения

  • Карты гарантированно ограничены сплошными стенами.

  • Порядок того, кто движется в очереди, имеет значение для результата. Таким образом: игрок всегда идет первым, затем звери получают порядок, основанный на их начальной позиции на карте, если вы перемещаетесь по экрану сверху вниз слева направо. (Зверь 1-й строки движется перед зверьком 2-й строки, и два зверя в одном ряду - это будет тот, чей номер столбца наименьший, который будет двигаться раньше другого)

  • По диагонали движущиеся звери могут перемещаться в любое открытое смежное диагональное пространство, независимо от того, требует ли оно сжатия между стенами.

  • Игрок может протолкнуть любое количество подвижных стен в линию при условии, что на другом конце есть место или зверь. Но попытка протолкнуть череду стен в Зверя, который не закреплен между стенами, рассматривает Зверя как стену и не позволяет двигаться.

  • Решение о движении Зверя во время хода зависит от местоположения игрока в начале хода. Его желаемая оптимизация «расстояния до игрока» - это расчет «по прямой линии». Любое приближение, которое дало бы тот же самый результат, который измерен от центра его квадрата до центра квадрата игрока, хорошо.

  • Если Зверь не может сделать то, что было бы его первым предпочтительным ходом в ход, потому что Зверь с более высоким приоритетом занял свое место, он выберет следующий лучший выбор, а не останется на месте (если ход все еще возможен).

Примеры случаев

Простое раздавить

вход

5 3
#####
#O~H#
#####
R

Выход

2

Матрица предпочтений -> Смерть

вход

5 5
#####
#O  #
# ~ #
#  H#
#####
WWDW

Выход

aHHHH!
0

Матрица предпочтений -> Победа

вход

5 5
#####
#O  #
# ~ #
#  H#
#####
WRD

Выход

2

В ожидании жнеца

вход

5 5
#####
#O  #
# ~ #
#  H#
#####
WWW

Выход

aHHHH!
0

Успешное поражение в сценарии Википедии

вход

40 23
########################################
#~      ~ ~~  ~  ~ ~~   ~ ~~    ~ ~ ~~ #
#~~ ~          ~~   ~   ~ ~~         ~ #
#~# ~~   ~~~~      ~  ~~~~  ~    ~~~  ~#
# ~        ~   ~ ~~ #~~       ~        #
#~~  ~~~   ~ ~ ~      ~ ~~ ~  ~  ~  ~  #
#     ~~  ~  ~ ~ ~~~       H    ~  #~  #
#  O~  ~  #  ~~~ ~      ~ ~~  ~  ~ ~~  #
#       ~ ~H~~   ~~ ~ #        ~~   ~  #
# ~~         ~ ~~~  ~~   ~~~~      ~  ~#
#~  ~    ~~~  ~   ~        ~   ~ ~~  ~~#
#     ~      # ~ ~~  ~~~   ~ ~ ~ #    ~#
#~ ~ ~~  ~  ~   H     ~~  ~~ ~ ~ ~~~   #
#       ~   ~   ~   ~  ~     ~~~ ~     #
# ~~  ~  ~ ~~   ~       ~ ~ ~     ~    #
#      ~~   ~   ~  ~         ~      ~~ #
#~ ~     #    ~~~~  ~    ~~~H   # ~    #
#  ~   ~ ~   ~        ~          ~~  ~ #
#  ~   ~     #~  ~   ~~  ~  ~         ~#
# ~~ ~ ~  ~~                ~   ~      #
#    ~~~        ~ ~~  ~  ~  ~   ~      #
# ~ ~     ~            ~~   ~   ~  ~   #
########################################
RRRUWWWRRRURWWWWRDRRWWRDWWWWD

Выход

8

Карта предоставлена ​​мной, перемещается и выводится @bobbel, подтверждается мной и @Allbeert.

Критерии победы

Я думаю, что это игра в гольф, поэтому я буду придерживаться правил гольфа, если люди не будут жаловаться.

Дополнительный кредит

Воспроизводимая реализация Unicode с двойными широкими символами, напоминающими изображение!

Доктор Ребму
источник
Диагональные движения перепрыгивают через антидиагональные линии стен? Учитывая, что зверь делает ход каждый ход, как он нарушает дистанционные связи между двумя горизонтальными движениями или двумя вертикальными движениями? Он движется туда, где находился игрок в начале хода или после движения игрока? Когда вы говорите «череда подвижных стенок», означает ли это, что игрок может протолкнуть любое количество подвижных стенок в линию, если на другом конце есть место или зверь?
Питер Тейлор
2
Если я правильно понимаю, второй пример не так, потому что pastebin.com/raw.php?i=CqPJPjTR .
Ручка двери
1
@ Dr.Rebmu: как правило, мне очень нравится твоя задача, но есть много вопросов. Спасибо за разъяснение! Итак, следующий: как насчет ситуации с двумя зверями: pastebin.com/raw.php?i=FENVAkCH Правильно ли мое предположение?
Боббел
1
Другой вопрос: что если вы переместите череду стен в чудовище, которое не «пригвождено»? pastebin.com/raw.php?i=isN4L6pJ
Клавдиу
3
@bobbel Человек, писать вопросы сложнее, чем их решать! :-) Я говорю, учитывая, что звери склонны не стоять на месте, они сделают свой следующий лучший ход, если он будет доступен, вместо того, чтобы отказаться от своего хода в тот ход, если Зверь с более высоким приоритетом занял свое идеальное место. Уточнено.
Доктор Ребму

Ответы:

3

Perl 6: 741 символов, 758 байтов

Гольф версия находится внизу, так как это в основном льнуаз. Над ним моя предварительная версия для игры в гольф. Оба являются интерактивными (они будут читать столько команд из входного файла, сколько смогут, а затем перейдут к использованию STDIN для получения команд). Они стараются использовать оригинальные символы и цвета.

Использование как perl6 beast.p6 beast-input:

use Term::ANSIColor;
class BeastGame {
    enum BeastParts <None Player Beast M-Wall S-Wall>;

    has @.board;
    has Int $.turn = 0;
    has Int $.score = 0;

    method indices (\matcher) {
        @.board.pairs.map: {
            .key*i X+ .value[].pairs.map: {
                .key if .value ~~ matcher
            }
        }
    }
    multi postcircumfix:<[ ]> (BeastGame \SELF, Complex \c) is rw { SELF.board[c.im][c.re] }

    has Complex $!player;
    method player { $!player = $.indices(Player)[0] }
    method Bool { so $.indices(Player) & $.indices(Beast) }

    method new (@lines) {
        my @board = @lines.map:
            {[ %(' ',<O H ~ #> Z=> None, Player, Beast, M-Wall, S-Wall){ .comb } ]}

        self.bless: :@board
    }
    method gist {
        state @symbol-map = map {colored .key, .value~' on_black'},
            ('  ',<◄► ├┤ ▒▒ ██> Z=> <default cyan red green yellow>);

        @.board.map({ @symbol-map[@$_].join }).join("\n")
    }

    method step ($d) {
        my $direction = %(:W(0), :L(-1+0i), :R(1+0i), :U(-1i), :D(1i)){$d};
        $direction // return self;
        self.move($.player,$direction);

        if ++$!turn %% 2 {
            for $.indices(Beast).eager -> $c {
                for (-1-1i,-1+0i,-1i,1-1i,1+0i,-1+1i,1+1i,1i,0i)\
                        .sort({abs $c + $^d - $!player})
                {
                    last if self.move($c, $_).defined;
                }
            }
        }

        self;
    }
    method move ($cur, $by) {
        return $cur if $by == 0;

        my $to = $cur + $by;
        my &cur-is  = { self[$cur] ~~ $^o }
        my &next-is = { self[$to]  ~~ $^o }
        return if cur-is S-Wall;
        (self[$to], self[$cur]) = (self[$cur], None)
            if next-is None
            # Move wall
            or cur-is Player | M-Wall and next-is M-Wall and self.move($to, $by)
            # Kill Player
            or cur-is Beast  and next-is Player
            # Squish Beast
            or cur-is M-Wall and next-is Beast  and self[$to+$by] ~~ M-Wall|S-Wall and $!score += 2
    }
}
my $width = get.words[1];
my $game  = BeastGame.new(lines[^$width]);
my @commands = '',lines.comb,{$*IN.get.comb}...*;

while $game {
    $game.step: @commands.shift;
    print "\e[2J";
    print "\e[H";
    say $game;
}

say "aHHHH!" unless $game.player;
say $game.score;

Версия для гольфа:

my ($u,$s,$m)=0,0;my@b=lines[^get.words[1]].map:{[%(' ',<O H ~ #>Z=>^5){.comb}]}
my@a='',lines.comb,{$*IN.get.comb}...*;sub g(\c)is rw {@b[c.im][c.re]}
my&n=->\o{@b.kv.map:{$^k*i X+$^v[].kv.map:{$^l if $^w==o}}}
my&p={$m=n(1)[0]}
my&M=->$c,$b{my$t=$c+$b;my&c={$^o==g $c}
my&x={$^o==g $t}
c(4)??0!!$b??(($c,$t)».&g=(0,g $c)
if x(0)||c(1|3)&&x(3)&&M($t,$b)||c(2)&&x(1)||c(3)&&x(2)&&2 <g($t+$b)&&($s+=2))!!1}
while n(1)&n(2) {for 1
{M p,%(:W(0),:L(-1),:R(1),:U(-1i),:D(1i)){@a.shift}//last;if $u++%2
{for n(2).eager ->$c{last if M $c,$_
for(-1-1i,-1+0i,-1i,1-1i,1+0i,-1+1i,1+1i,1i,0i).sort({abs $c+$_-$m})}}}
say "\e[2J\e[H",join "\n",map {[~]
(map {"\e[$^v;40m$^k\e[0m"},'  ',<39 ◄► 36 ├┤ 31 ▒▒ 32 ██ 33>)[@$_]},@b}
say "aHHHH!" if !p;say $s;

Христос воскрес!

Mouq
источник
Это правила игры в гольф, поэтому, учитывая это, ваше решение выигрывает ... даже если я сам не очень люблю Perl. ;-) Хорошая работа с консолью и цветом!
Доктор Ребму
14

Ява, 1843

Моя первая попытка решить эту загадку с помощью Java. Я знаю, что есть много улучшений, чтобы сделать его короче. Но, в конце концов, это работает на данный момент.

Чтобы попробовать это, вы должны создать класс Cи вставить код. args[0](строго говоря a[0]) для ввода. Метод печати карты не включен, так как он не нужен для вывода головоломки.

class C{static char                    [][]C;static int A=
0,B=0,D=0,E=0,F=0,G                    = 0 ; public static
void main(String[]a                    ){String []b= a[0].
split("\n");int c =                    Byte. decode(b [0].
split(" ")[1]); G=a                    [ 0 ] . replaceAll(
"[^H]","").length()                    ; String d = b [ b.
length - 1 ] ;C=new                    char[c][];for(int e
=1;e<b.length-1;e++                    ) C [ e - 1 ]=b[e].
toCharArray ( ) ; f                    ();boolean X= 0> 1;
for ( char  g : d .                    toCharArray ( ) ) {
switch(g){case 'U':                    h(0,-1);break; case
'D':h(0, 1); break;                    case 'L':h( -1, 0);
break;case'R':h(1,0                    );}if(X)i();X=!X;f(
);}System.out.print                    (D);}static void f(
){for(int a= 0;a<C.                    length;a++)for( int
b=0;b<C[a].length;b                    ++)if(C[a][b]=='O')
{A=b;B= a;}}static void h(int x,int y){E =x;F =y;switch(C[
B +y][A +x]){case 'H':g();break;case ' ':j(A,B);break;case
'~':k();}}static void i(){if(G<1){return;}int[][]l=new int
[G][];int m=0;for(int r=0;r<C.length;r++){for(int c=0;c<C[
r].length; c++){if(C[r][c]=='H'){l[m++]=new int[]{c,r};}}}
for(int[]n:l){o(n[0],n[1]);}} static void o(int a, int b){
int[]c=d (a,b);E=c[0];F =c[1];if(E !=0||F !=0){ j(a,b);} }
static int[]d(int a,int b){int[][]d={{1,3,4},{2,0,5},{6,8,
7},};int[]e=new int[]{0,0};double f=999;for(int r=-1;r<2;r
++){for(int c=-1;c<2;c++){if(C[b+r][a+c]==' '||C[b+r][a+c]
=='O'){int g=a+c-A;                    int h=b+r-B; double
i=Math.sqrt(g*g+h*h                    );if(i<f){e=new int
[]{ c,r};f =i;}else                    if(i==f){if(d[r+1][
c+1]<d[e[1]+1][e[0]                    +1]){e=new int[]{c,
r};}}} }}return e;}                    static void k(){if(
p(E,F,false)){q(E,F                    );} }static void q(
int x,int y){switch                    (C[B+y][A+x]){ case
'~':q(x+E,y+F);case                    'H':case ' ':j(A+x-
E,B+y- F);}} static                    boolean p(int x,int
y,boolean h){switch                    (C[B+y][ A+x]){case
' ':return !h; case                    '~':return h?h:p(x+
E,y +F, false);case                    'H':return h?!h:p(x
+E , y+ F, true) ;}                    return h&&C[B+y][A+
x] == '#' ; }static                    void j(int a,int b)
{char c=C[b][a];if(                    C[b+F][a+E]=='O'){g
();}else if(C[b+F][                    a+E]=='H'){D+=2;G--
;c=C[b][a];C[b][a]=                    ' ';}else{C[b][a]=C
[b+F][a+E];}C[b+F][                    a+E]=c;}static void
g () { System .out.                    print("aHHHH!\n"+D)
;     System      .                    exit  ( 0  ) ;  } }

Чтобы запустить его, попробуйте, например:

root@host:/cygdrive/c/workspace/project/bin> java C "5 5
> #####
> #O  #
> # ~ #
> #  H#
> #####
> WWDW"
aHHHH!
0
root@host:/cygdrive/c/workspace/project/bin>

Вывод последнего большого сценария за ход до того, как зверь съест игрока:

████████████████████████████████████████████████████████████████████████████████
██▓▓            ▓▓  ▓▓▓▓    ▓▓    ▓▓  ▓▓▓▓      ▓▓  ▓▓▓▓        ▓▓  ▓▓  ▓▓▓▓  ██
██▓▓▓▓  ▓▓                    ▓▓▓▓      ▓▓      ▓▓  ▓▓▓▓                  ▓▓  ██
██▓▓██  ▓▓▓▓      ▓▓▓▓▓▓▓▓            ▓▓    ▓▓▓▓▓▓▓▓    ▓▓        ▓▓▓▓▓▓    ▓▓██
██  ▓▓                ▓▓      ▓▓  ▓▓▓▓  ██▓▓▓▓              ▓▓                ██
██▓▓▓▓    ▓▓▓▓▓▓      ▓▓  ▓▓  ▓▓            ▓▓  ▓▓▓▓  ▓▓    ▓▓    ▓▓    ▓▓    ██
██          ▓▓▓▓    ▓▓    ▓▓  ▓▓  ▓▓▓▓▓▓                        ▓▓    ██▓▓    ██
██          ▓▓▓▓    ██    ▓▓▓▓▓▓  ▓▓            ▓▓  ▓▓▓▓    ▓▓    ▓▓  ▓▓▓▓    ██
██              ▓▓  ▓▓  ▓▓▓▓      ▓▓▓▓  ▓▓  ██                ▓▓▓▓      ▓▓    ██
██  ▓▓▓▓                  ▓▓  ▓▓▓▓▓▓    ▓▓▓▓  ├┤  ▓▓▓▓▓▓▓▓            ▓▓    ▓▓██
██▓▓    ▓▓    ├┤◄►▓▓▓▓▓▓├┤  ▓▓      ▓▓                ▓▓      ▓▓  ▓▓▓▓    ▓▓▓▓██
██          ▓▓            ██  ▓▓  ▓▓▓▓    ▓▓▓▓▓▓      ▓▓  ▓▓  ▓▓  ██        ▓▓██
██▓▓  ▓▓  ▓▓▓▓    ▓▓    ▓▓                  ▓▓▓▓    ▓▓▓▓  ▓▓  ▓▓  ▓▓▓▓▓▓      ██
██              ▓▓      ▓▓      ▓▓      ▓▓    ▓▓├┤        ▓▓▓▓▓▓  ▓▓          ██
██  ▓▓▓▓    ▓▓    ▓▓  ▓▓▓▓      ▓▓              ▓▓  ▓▓  ▓▓          ▓▓        ██
██            ▓▓▓▓      ▓▓      ▓▓    ▓▓                  ▓▓            ▓▓▓▓  ██
██▓▓  ▓▓          ██        ▓▓▓▓▓▓▓▓    ▓▓        ▓▓▓▓▓▓        ██  ▓▓        ██
██    ▓▓      ▓▓  ▓▓      ▓▓                ▓▓                    ▓▓▓▓    ▓▓  ██
██    ▓▓      ▓▓          ██▓▓    ▓▓      ▓▓▓▓    ▓▓    ▓▓                  ▓▓██
██  ▓▓▓▓  ▓▓  ▓▓    ▓▓▓▓                                ▓▓      ▓▓            ██
██        ▓▓▓▓▓▓                ▓▓  ▓▓▓▓    ▓▓    ▓▓    ▓▓      ▓▓            ██
██  ▓▓  ▓▓          ▓▓                        ▓▓▓▓      ▓▓      ▓▓    ▓▓      ██
████████████████████████████████████████████████████████████████████████████████

Без пробелов: http://pastebin.com/raw.php?i=QhpxKcCT

Таким образом, путь игроков заканчивается после ходов RRDDDRRRWW, потому что во время последнего Wудара зверь слева уйдет направо, чтобы съесть игрока.


Еще один пример оригинальной большой карты, но с разными ходами:

http://pastebin.com/raw.php?i=nBWjC3PZ

Смотрите эту анимацию: http://youtu.be/0DIhEhjWd6s


И последний пример с оригинальной картой и различными ходами (согласно новым правилам движения зверя):

http://pastebin.com/raw.php?i=NNmgzx7U

Смотрите на YouTube: http://youtu.be/jXPzL88TU2A

bobbel
источник
1
HHHa! :-) Очень круто. Пока вы его получили, хотите поиграть в несколько игр и предоставить больше тестовых примеров на этой карте?
Доктор Ребму
Я добавил новый сценарий с оригинальной картой и различными ходами. Но вы не можете действительно следовать шагам, потому что я не хотел вставлять все 75 шагов в пастин :)
bobbel
Итак, я добавил видео, чтобы увидеть результат в виде анимации!
Боббель
Хорошее видео ... хотя кажется, что звери движутся слишком быстро, чтобы быть веселым! Должны ли мы изменить правило, чтобы они двигались через каждый ход вместо каждого?
Доктор Ребму
Я не против Еще около десяти байтов для меня! Но я полностью согласен. Трудно победить, как сейчас :)
bobbel
5

С - 1004 984 917

Ааа, красота C. Следуя духу другого ответа, я попытался отформатировать и мой :)

Я предполагаю, что есть кое-какие улучшения здесь и там, но это было действительно весело писать и играть в гольф. Количество символов включает все необходимые пробелы и новые строки.

#define M(y,x,c) {t[y][x]=32;t[p][q]=c;y=p;x=q;}
   #define E {printf("aHHHH!\n%d",Z);exit(0);}
    #define A sqrt(pow(X-Q,2)+pow(Y-P,2))*30
           #define L (char)(m[s]>>8)
            #define G (char)(m[s])
             #define B(b) if(T==b)
              #define J M(Y,X,79)
               #define T t[P][Q]

r,c,X,Y,H,i,j,k,Z,p,q,P,Q,u,v,s,w,m[99],b[8]={
-1,255,65280,65281,1,511,257,256},t[999][999],
x[99],y[99];main(){char N[99];m[85]=b[2];m[68]
=256;m[76]=255; m[82]=1; scanf("%d %d",&c,&r);
for(;P<r;P++)                    for(Q=0;Q<c&&
scanf("%c",&T                    );T-10&&T-13?
Q++:Q){B(79){                    Y=P;X=Q;}B(72
){y[H]=P ;x[H                    ++]=Q;}}scanf
("%s",N);for(                    ;i<strlen(N);
i++){s=N[i];P                    =p=Y+L;Q=q=X+
G;B(32)J B('~')                  {while(P+=L,Q
+=G,T=='~');B                    (72){u=P+L;v=
Q+G;if(t[u][v]                   ==35||t[u][v]
=='~'){Z+=2;T=                   '~';J}}B(32){
T='~';J}}else                    B(72)E if(r=!r)
for(j=0;j<H;j                    ++){P=y[j];Q=
x[j];if(T-72)continue;v=A;s=0;for(k=0;k<8;k++)
{P=y[j]+(char)(b[k]>>8);Q=x[j]+(char)(b[k]);u=
A;B(32)if((c=v-u+99)>s){s=c;q=Q;p=P;}B(79)E}if
(s)M(y[j],x[j],72)}}printf("%d",Z);}//////////

Я проверил это на всех примерах и еще нескольких, и похоже, что он работает правильно. Если кто-нибудь найдет ситуацию, в которой он не отвечает должным образом, пожалуйста, дайте мне знать.

Вход от stdin и выход для stdout. Там нет проверок на неправильный ввод. И это возвращает счет, если игрок съеден, или если игрок жив после того, как все движения выполнены (даже если вокруг все еще есть H).

Безголовая версия:

#define M(y,x,c) {t[y][x]=32;t[p][q]=c;y=p;x=q;}
#define E {printf("aHHHH!\n%d",Z);exit(0);}
#define A sqrt(pow(X-Q,2)+pow(Y-P,2))*30
#define L (char)(m[s]>>8)
#define G (char)(m[s])
#define B(b) if(T==b)
#define J M(Y,X,79)
#define T t[P][Q]

r, c, X, Y, H, i, j, k, Z, p, q, P, Q, u, v, s, w, m[99], b[8] = { -1, 255,
        65280, 65281, 1, 511, 257, 256 }, t[999][999], x[99], y[99];
main() {
    char N[99];
    m[85] = b[2];
    m[68] = 256;
    m[76] = 255;
    m[82] = 1;
    scanf("%d %d", &c, &r);
    for (; P < r; P++)
        for (Q = 0; Q < c && scanf("%c", &T);T-10&&T-13?Q++:Q) {
            B(79) {
                Y=P;
                X=Q;
            }
            B(72) {
                y[H]=P;
                x[H++]=Q;
            }
        }

    scanf("%s", N);
    for (; i < strlen(N); i++) {
        s = N[i];
        P = p = Y + L;
        Q = q = X + G;
        B(32)
            J
        B('~') {
            while (P += L, Q += G, T=='~');
            B(72) {
                u=P+L;
                v=Q+G;
                if(t[u][v]==35||t[u][v]=='~') {
                    Z+=2;
                    T='~';
                    J
                }
            }
            B(32) {
                T='~';
                J
            }
        } else B(72)E
        if (r = !r)
            for (j = 0; j < H; j++) {
                P = y[j];
                Q = x[j];
                if (T-72)
                continue;

                v = A;
                s = 0;

                for (k = 0; k < 8; k++) {
                    P = y[j] + (char) (b[k] >> 8);
                    Q = x[j] + (char) (b[k]);
                    u = A;
                    B(32)
                        if ((c = v - u + 99) > s) {
                            s = c;
                            q = Q;
                            p = P;
                        }

                    B(79)
                        E
                }
                if (s)
                    M(y[j], x[j], 72)
            }
    }
    printf("%d", Z);
}
Allbeert
источник
Ницца!! Хотя на вкладе @ bobbel RRRUWWWRRRURWWWWRDRRWWRDWWWWD на большой карте вы получаете 6, а он - 8. Он сделал видео , вы, возможно, могли бы распечатать каждый шаг и найти любую аномалию ...
Доктор Ребму
(заметив, конечно, что я изменил правило, заставляющее зверей двигаться каждый ход, когда я увидел, насколько
непригодным было играть звери, ходить
Если честно: я не уверен, что мое решение тоже работает на 100% правильно. Но это похоже на меня :)
bobbel
@ Dr.Rebmu Я понял, что вы редактировали вопрос примерно в то же время, когда я разместил мой. Так что я просто сделал быстрый взлом, который, казалось бы, сработал. Я проверю это в эти выходные и обновлю это. Я также
выложу
Я решил это сегодня в Rebol и тоже получаю ответ @ bobbel на 8.
Доктор Ребму