Допустим, я что-то писал и случайно написал не в том поле:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
| Truck | |
| eat | Banana |
| | Car |
+-------+--------+
Поэтому я, будучи ленивым, просто рисую стрелку в том месте, где она должна быть:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
|[Truck]---> |
| eat | Banana |
| | Car |
+-------+--------+
Ваша задача - сделать так, чтобы это выглядело красиво - превратить это в это:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
| | Truck |
| eat | Banana |
| | Car |
+-------+--------+
правила
- Фразы или слова заключены в квадратные скобки ([...])
Многострочные записи обозначаются как [...](многострочный удален), перевод строки, [...] --...-->. Таким образом, стрелка всегда выходит изнижнейправой скобки
Например:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
|[is a noun]-> |
| eat | Banana |
| | Car |
+-----------+----------+
Превращается в:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
| | is a noun|
| eat | Banana |
| | Car |
+-----------+----------+
- Ящики ограничены плюсом («+»), и следует предположить, что стрелки не пройдут над плюсом
- В конце стрелки всегда будет место для подходящего слова или фразы
- Порядок имеет значение - слово должно появляться там, куда указывает стрелка, хотя вертикальное выравнивание не имеет значения
- Стрелки могут поворачиваться на 90 градусов за раз, но только между "/" и "\" (см. Ниже)
Например:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| [Truck]--\| |
/------------/| <--\
| | eat | Banana ||
| | /--\ | Car ||
| +--|--|-----+----------+|
\----/ \-----------------/
Соревнование
Допустим любой ввод (текстовый файл, STDIN и т. Д.).
Любой читаемый вывод приемлем (текстовый файл, STDOUT и т. Д.).
Вот еще несколько примеров:
Это код гольф, поэтому выигрывает самый короткий код!
Некоторые тестовые случаи:
+--------+----------+-------------+
| Colors | Foods | Countries |
+--------+----------+-------------+
| red | pizza | Switzerland |
/--> /----> | |
| |[kale]/ | hot dogs | Brazil |
| | <----------------------\ |
| | orange |[yellow]\ | [green]/ |
| +--------+--------|-+-------------+
\-------------------/
/------------------------------------------\
| |
| +------------------+----------+-------+ |
| | frog | | | |
| | forge | dog | eagle | |
| | foundation | diligent | ease | |
| |[Brother]--\ | down | elf | |
| | | |[egg]--\ |[fort]---/
\----> | | | | |
| \-\ | \-----> |
+-------------|----+----------+ |
| Boy \--> | |
| Bull | |
| Browser | |
+-----------------------------+-------+
/--------------------------------------\
| /---------------\|
/------------|---------------------/ ||
| | /---------------\ ||
| +---------|-+-----------+-|------+--------|+ ||
\----> | | clarinet | \> | [drums]/| ||
| [viola]\\---> | +---------+ ||
| \-----> | | |/---/|
+-----------+ [violin]\ | | [cello]--/ |
| <------------/ | +---------+ |
| +-----------+ <----------\| |
| | | | [tuba]/| |
| | [piano]\ | | | |
| <-----------/ | | | |
| +-----------+--------+ | |
| | |[trumpet]------/
| [flute]-----> | |
| | saxaphone | |
+-----------+--------------------+---------+
Ответы:
Python,
700681676667 знаковПока еще не полностью в гольф, но хотел поставить ответ.
Стратегия :
Я превращаю вход в матрицу. Затем я сканирую его построчно, находя
[
s. Для каждого[
я нахожу совпадение]
, затем вызываю функцию трассировкиT
с точкой сразу справа от]
. Функция trace следует за строкой, заменяя путь на' '
s и возвращая туда, куда должно идти слово. Затем я стираю слово в старом месте и помещаю слово в новое место.Наконец, я звоню
F
, который рекурсивно восстанавливает коробки.Тесты :
источник