Я постоянно слышу, что нестандартное мышление - это цель, которую стоит достичь, но как я могу определить, успешно ли я это делаю?
Чтобы решить эту дилемму, я уже написал переводчик Brainwave-to-ASCII, который в теории должен давать такие результаты, как
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
или же
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
что позволяет довольно легко определить, мыслит ли человек нестандартно или нет. (Не #
являются частью вывода и представляют новые строки.)
Однако из-за ошибки иногда возвращается только меньшая часть вывода:
| | #
+---------+ #
thinking #
#
+#
|#
inking |#
#
#
Задание
Пожалуйста, помогите мне автоматически классифицировать выходные данные Brainwave-to-ASCII -translator, написав программу или функцию, которая читает ascii-reprensentation и возвращает информацию о том, thinking
находится ли она в поле, вне ее или не может определить по входным данным.
вход
Набор строк одинаковой длины в виде списка или разделенных символами новой строки, содержащих
- строка
thinking
или ее действительные пре- или суффиксы - символы,
+-|
образующие прямоугольник или действительные его части - пространства
- НЕТ
#
, они включены только в задачу, чтобы отметить концы входных строк.
Выход
- truthy значение , если
thinking
находится вне коробки - falsy значение , если
thinking
в коробке - особым третий , может быть значение , если оно не может быть определена из входного ли
thinking
находится в коробке или нет
Примеры
Truthy:
#
+------+ #
| | thinking #
| | #
| | #
+------+ #
#
| | #
+---------+ #
thinking #
#
+#
|#
|#
inking |#
thinking #
-------+ #
++ # (thinking is not in the box, so it must be outside)
++ # (this is also the smallest possible box)
+ #
t#
+----+# (The box is not wide enough to contain "thinking")
---# (The box is not high enough to contain "thinking")
---#
Как ввод строки:
" \n +------+ \n | | thinking \n | | \n | | \n +------+ \n "
" | | \n +---------+ \n thinking "
" \n +\n |\n |\ninking |"
"thinking \n-------+ "
" ++ \n ++ "
"+ \n t"
"+----+"
"---\n---"
"g++"
"k\n+"
Falsy:
#
+------------+ #
| thinking | #
| | #
+------------+ #
#
+---------------#
| #
| #
| thinking #
| #
king | #
------+ #
+---#
|thi#
+---#
-#
n#
-#
Как ввод строки:
" \n +------------+ \n | thinking | \n | | \n +------------+ \n "
" +---------------\n | \n | \n | thinking "
" | \nking | \n------+ "
"+---\n|thi\n+---"
"-\nn\n-"
Может быть:
thinking#
g|#
think#
-----#
| |# (box large enough to possibly contain the string)
| |#
+--#
| #
# (empty input)
Как ввод строки:
"thinking"
"g|"
"|t"
"-\ni"
"h\n-"
"think\n-----"
"| |\n| |"
" +--\n | "
""
правила
- Это код-гольф , поэтому старайтесь использовать как можно меньше байтов.
- Может быть , значение может быть выбрано свободно , как долго , как это отличается от truthy / falsy значения и является одинаковым для всех , может быть-входов. Это также может быть ошибкой.
- Вы можете предположить, что входные данные всегда действительны (например, не содержит никаких других символов кроме
+-ghiknt|
, не более одного поля, ...).
источник
+\n+
коробка, слишком маленькая для словаОтветы:
Javascript (ES6),
274263 байтаФункция
f
возвращаетtrue
,false
или-1
как ее «возможно» значение. Он должен вызываться с одним аргументом: вход. Два других параметра существуют только для сокращения кода.Вот менее удачная версия с комментариями:
Было очень весело с этим. Спасибо!
Изменить: Сохранено 6 байтов благодаря @L. Serné, изменив
b
для использования аргумента по умолчанию, сохранив 3 байта, и изменив[a-z]
на\w
, сохранив еще 3 байта. Также сохраняются более 5 байт путем замены слова неглобальной, сэкономив 1 байт, а также изменения"a"
в5
и","
к4
, сэкономив 4 байта.источник
console.log(f("input"))
. Кажется, работает. Отличная работа по гольфу это.b=(b,c)
наb=(b,c="")
, и затем вы можете удалить последний аргумент двух вызовов tob
с пустой строкой в качестве второго аргумента, сохранив (2 * 3-3 =) 3 байта. Кроме того, вы можете сократить слово regex от[a-z]+
до\w+
(сделайте это до замены других, потому что это также будет соответствовать цифрам), сохранив еще 3 байта.Python 2.7,
532494453 байтаУ этого наверняка было много особых случаев. Моими истинными и ложными значениями являются строки «True» и «False» соответственно. Моё значение «возможное значение» - это ошибка индекса, поскольку их легко вызвать, и один из моих тестовых примеров запускает его, если на входе есть пустая строка, что в любом случае может быть случаем. Я довольно часто использовал регулярные выражения.
Я не часто играю в гольф на питоне, поэтому я уверен, что это может быть больше, но вот мой код:
В моей версии для гольфа я показываю ответ True / False по телефону
exit(bool as string)
. Вот закомментированная версия, в которой операторы выхода заменены на операторы возврата, и все было перенесено в функцию:Мое решение предполагает, что ввод действителен, то есть «Мышление» (или его подстроки) написаны правильно, есть только один блок и т. Д.
Изменить: Сохранено 10 байтов благодаря предложению @ ais523 изменить
c
наi.count('+')
3 байта благодаря предложению @ Pavel заменитьTrue
на1<2
иFalse
с2>1
23 байтов путем удаления ненужного блока else, и 2 байта путем удаления некоторых пробелов.Редактировать 2: Сохранено 36 байт благодаря @Wheat Wizard, который любезно указал, что мои «вкладки» на самом деле были 5 пробелами (черт!) И предложил некоторые другие улучшения.
источник
i
никогда не меняется, верно? Таким образом, вы, вероятно, могли бы сохранить несколько байтов, сохраняяi.count('+')
в,c
а неi.count
, как вы никогда не вызываете это ни с каким аргументом, кроме+
.Befunge, 535 байт
Это не красиво, и не близко конкурировать с существующими ответами, но это лучшее, что я мог достичь в Befunge.
Возвращает ,
1
если мышление вне коробки,0
если думать , внутри коробки, и-1
для возможно .Попробуйте онлайн!
источник