Кто-нибудь был лишен свободы?


26

Дефенестрация - это акт выброса кого-то или чего-либо из окна.
- Википедия

вход

Вход будет состоять из двух частей:

  • План этажа и человек внутри дома / здания.

    • v><^представляет человека, указывающего в направлении, обозначенном стрелкой. Вход будет содержать ровно одного человека.

    • -и |представляют стены, и #представляет окно. пустое пространство.

    Эта часть ввода может быть принята либо в виде отдельной строки, либо в виде массива / списка / и т. Д. линий. Там никогда не будет никаких пробелов или пробелов, а вход всегда будет прямоугольником.

    Пример:

    -----###---
    |         |
    |     ^   |
    -----------
    
  • Целое число ≥ 1, обозначающее, как далеко (в символах) человек путешествует.

Выход

Выход должен быть

  • 1если человек оказывается «внутри» окна (т. е. после перемещения вперед на расстояние, указанное во входных данных, человек оказывается сверху #).

  • 2если человек был очищен (вступил в контакт с #и затем продолжил далее).

  • 3если человек ударился о стену (вступите в контакт с -или |. После удара о стену человек останавливается и не проходит сквозь нее).

  • 0 если ничего из вышеперечисленного не является правдой (и все, что человек сделал, это путешествовал по пустому пространству).

Предположения

Можно предположить, что все следующее верно:

  • Человек никогда не будет путешествовать «за пределы» области ввода.

  • После освобождения человек никогда не соприкоснется с другим #или с -/ |(так что вам не нужно беспокоиться о том , истинны ли они 2 и / 1 или 3оба).

Контрольные примеры

Для следующего «плана этажа»:

-----
|   |
|###|
|   |
| ^ |
In   Out
1    0
2    1
3    2

Для этого плана этажа:

> | # |
In   Out
1    0
2-99 3    * that is, any input 2-99 outputs 3

Для этого плана этажа:

||####|#|#|##|<
In   Out
any  3

Финальный тестовый пример:

|v|
|#|
| |
| |
| |
| |
In   Out
1    1
2-5  2  

7
Я предлагаю изменить название этого испытания на Тест
кот

1
Дополнительный вопрос: это, кроме ям.
Конор О'Брайен

2
@ CᴏɴᴏʀO'BʀɪᴇɴHas someone been for-sparta'd?
кот

Почему мое изменение было отклонено):
кошка

@cat Потому что это редактирование чьего-то вопроса, о котором они должны знать.
Конор О'Брайен

Ответы:


10

JavaScript (ES6), 147 146 байт

(p,n)=>eval('l=p.search`\n`+1;m=p.match`[<>v^]`;for(r=d=i=0;i++<n&r<3;r-1?0:d=2)r=(c=p[m.index+i*({v:l,"<":-1,">":1}[m]||-l)])>"#"?3:c>" ";+r||d')

Сохранено 1 байт благодаря @NinjaBearMonkey !

объяснение

Принимает план этажа в виде строки и количество ходов. Возвращает число.

(p,n)=>                               // p = floor plan as string, n = number of moves
  eval(`                              // use eval to enable for loop without {} or return
    l=p.search\`\n\`+1;               // l = line length
    m=p.match\`[<>v^]\`;              // m = the position and orientation of the person
    for(
      r=                              // r = result at the current step
        d=                            // d = 2 if the person has been defenestrated
          i=0;                        // i = current step
      i++<n&r<3;                      // for each step while the person has not hit a wall
      r-1?0:d=2                       // set d to 2 once the person enters the window
    )
      r=(                             // r = 0 if on " ", 1 if on "#" or 3 if on "|" or "-"
        c=p[m.index+i*                // c = character after current step
          ({v:l,"<":-1,">":1}[m]||-l) // get the index offset of each step
        ]
      )>"#"?3:c>" ";
    +r||d                             // return the result of the current step or d
  `)

Тест


3
Мне нравится ваш тестовый фрагмент!
GamrCorps

ಠ_ಠ Я как раз собирался опубликовать почти то же самое.
Конор О'Брайен

@ CᴏɴᴏʀO'Bʀɪᴇɴ Ха-ха, я знаю, что слишком хорошо себя чувствую ...
user81655

Хороший ответ, кстати! Очень умно.
Конор О'Брайен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.