Предыстория
Познакомьтесь с моим другом Джимми:
/o\
Джимми - маленький персонаж, который любит стоять на платформах. Вот Джимми, благополучно стоящий на платформе:
/o\
-------------
Теперь у Джимми хорошее чувство равновесия, поэтому он может спокойно стоять одной ногой с платформы, вот так:
/o\
-------------------
Хотя, если он стоит с двумя или более частями тела с платформы, он упадет. Оба из этих примеров, где Джимми упадет:
/o\ /o\
---------- ----------------------
Соревнование
Ваша задача состоит в том, чтобы написать программу для определения, учитывая строку с платформой и положением Джимми, может ли Джимми стоять на платформе, не падая.
Входные данные: две строки, показывающие положение Джимми и положение платформы под ним. Это может быть два отдельных входа, один вход или какой-то массив.
- Вы можете принять ввод через любую разумную форму, включая функции и стандартный ввод. Используйте жесткое кодирование только в том случае, если ваш язык не поддерживает другие методы ввода.
Вывод: логические значения true и false или целые числа 1 или 0 для представления true / false соответственно.
- Логическое значение основано на том, может ли Джимми оставаться на платформе или нет - истина, если Джимми может оставаться на платформе, или ложь, если он упадет.
Размер платформы произвольный и может быть изменен по желанию. Ваша программа должна учитывать это.
Платформа не может иметь нулевую длину, и платформа должна быть полной (в платформе нет отверстий).
Помните, что Джимми падает, когда две его части тела свисают с платформы. Часть тела является одним из символов ASCII его тела.
Конечный пробел в конце платформы не требуется, но ваша программа должна учитывать обе ситуации, когда после платформы есть пробел, а где нет.
Помните о стандартных лазейках , которые запрещены.
Контрольные примеры
/o\ ✔️ TRUE
-------------
/o\ ✔️ TRUE
----------
/o\ ❌ FALSE
------------------
/o\ ❌ FALSE
-------
/o\ ❌ FALSE
-
счет
Это код-гольф , поэтому выигрывает меньшее количество байтов.
Leaderboard
Вы можете просмотреть список лидеров этого поста, развернув виджет / фрагмент ниже. Чтобы ваше сообщение было включено в рейтинг, вам нужен заголовок ( # header text
) со следующей информацией:
Название языка (заканчивайте его запятой
,
или тире-
), а затем ...Количество байтов, как последнее число в заголовке.
Например, JavaScript (ES6), 72 bytes
допустимо, но Fortran, 143 bytes (8-bit)
недопустимо, потому что число байтов не является последним числом в заголовке (ваш ответ будет распознан как 8 байтов - не используйте это в своих интересах).
<!-- Run the snippet to see the leaderboard. Report any bugs to @xMikee1 on Github --> <iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=187586" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
Ответы:
Желе , 6 байт
Попробуйте онлайн!
Объяснение:
источник
S
сумма столбцов, а не строк? : S Если я правильно посмотрел вики-код, код делает:n⁶
проверяет для каждого символа, что он не равен пробелу (то есть['/o\\', ' -'] -> [[1,1,1],[0,1]]
);S
список сумм (но по какой-то причине это суммирует столбцы вместо строк .. так[[1,1,1],[0,1]] -> [1,2,1]
);ċ2
посчитать сумму 2с;Ẓ
проверьте, является ли это простое число (т. е. 2 или 3), после того, как результат выведен неявно. Но я бы рассчитывал[[1,1,1],[0,1]]
подвести итог[3,1]
..S
эквивалентно0;+/Ɗ
, то есть, уменьшению путем сложения (которое векторизует) с начальным значением0
.§
делает то, что вы ожидалиS
сделать.JavaScript (ES6), 38 байт
Принимает вход как0 1
(a)(b)
. Возвращает или .Попробуйте онлайн!
Как?
Мы ищем положение средней части
"o"
тела Джимми в первой строке и тестируем, есть ли черта во второй строке в той же позиции.Единственный случай, когда Джимми был бы небезопасен в этой ситуации, это платформа с одним штрихом:
Поэтому мы дополнительно следим за тем, чтобы ширина платформы была не менее :2
JavaScript (ES6), 36 байт
Альтернативная версия, если мы предполагаем, что под Джимми всегда есть или тире, или пробелы (т. Е. Ввод прямоугольный).
Попробуйте онлайн!
Использует тот факт, что приведение к числовому значению равно для пробела и NaN для тире.0
источник
"/o\\\n__"
Excel,
674544 байтаПоложите Джимми
A1
на платформуA2
.2 условия проверены:
o
) на платформе?-
?источник
<>
на>
Python 3,
8843 байтаВходные данные даны в виде списка, содержащего две строки: первая строка - первая строка; вторая строка - вторая строка.
Попробуйте онлайн!
Другая версия, привязанная к 43 байтам (я не смог получить ее короче 43):
Попробуйте онлайн!
Уменьшено на 42 байта благодаря совету от Джо Кинга.
Старая версия:
-2 байта благодаря сриотчизму О'Зайку.
Это работает, принимая два отдельных ввода, затем соединяя соответствующие буквы. Он подсчитывает количество пар, в которых ни один символ не является пробелом, а затем возвращает True, если это число больше 1.
источник
Perl 6 , 18 байт
Попробуйте онлайн!
Принимает два параметра и возвращает логическое значение того, останется ли Джимми на платформе. Это работает, соединяя две строки вместе и проверяя, все ли части Джимми все еще находятся на платформе.
Объяснение:
источник
Python 2 ,
4237 байтПопробуйте онлайн!
5 байтов спасибо минус семь
источник
"--"in [...]
для -5 байтовHaskell , 34 байта
Попробуйте онлайн!
Я получил это, объединив мою технику ниже с другим ответом на Haskell .
Haskell , 45 байт
Попробуйте онлайн!
Это подсчитывает количество частей тела (непробельные символы), которые находятся на вершине платформы, а затем проверяет, что оно больше 1. Причина, по которой мы считаем части тела на платформе, а не части тела, состоит в том, что
zipWith
будет разделять верхнюю строку быть длиной дна и, таким образом, может отрубить части тела Джимми. Это избавляет нас от необходимости делать что-то вродеcycle" "
дополнения списка.источник
MathGolf ,
614 байтовПопробуйте онлайн!
8 байтов пришлось добавить для учета крайнего случая, представленного Ником Кеннеди.
Проверяет,
"-o-"
является ли подстрока заархивированной строки обеих строк и заархивированной строки, где в первой строке ввода удален первый символ. Принимает ввод как две отдельные строки, единственное изменение заключается в том, что символ вводится как/o\\
, поскольку\\
это правильный способ ввода обратной косой черты в строку в MathGolf.объяснение
источник
05AB1E (наследие) ,
987 байт-1 байт благодаря @ Mr.Xcoder с приближением
ðм2ù
.Ввод в виде списка из двух строк.
Работает только в устаревшей версии 05AB1E, поскольку
ζ
может транспонировать список строк, а также 2D-список символов, тогда какζ
в новой версии 05AB1E работает только с 2D-списком символов.Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
bytes
кодовую страницу, чтобы вы знали, что она не кодируется в UTF-8, а вместо этого использует пользовательскую кодировку. ;) Если вы хотите, я могу отредактировать свой ответ так, чтобы кодировка была ниже заголовка, но, честно говоря, код таблицы лидеров должен быть в состоянии справиться с ним imho.https://github.com/Adriandmen/05AB1E/wiki/Codepage?7
сделать 7 последним номером без аннулирования URL-адреса?Рубин , 28 байт
Попробуйте онлайн!
источник
Dyalog APL Extended,
11108 байтПопробуйте онлайн!
Объяснение:
-2 благодаря Адаму.
источник
2≤1⊥∧⌿⍤<
Excel, 36 байт
Джимми
A1
, на платформеA2
.Находит позицию Джимми, берет 3 байта платформы и усекает пробелы. Если полученная длина платформы достаточно велика, Джимми встает.
источник
EXCEL,
9471 байт.VBA (Excel), 87 байтA1
= Джимми,A2
= платформа-23 байта. Спасибо @Wernisch.
?[(FIND("-",A2)-FIND("/",A1)<2)*(FIND("\",A1)-LEN(A2)<2)]*(len(replace([A2]," ",""))>1)
источник
trim
вместоlen(replace
?/// ,
85 9387 байтПопробуйте онлайн!
Вывод равен 1, если Джимми в безопасности. В противном случае ничего не выводит. (Унарные 1 и 0.) Поскольку нет другого способа получить ввод в ///, он должен быть жестко закодирован:
Например:
( Попробуйте онлайн! )
Обратите внимание на пробел после
<INPUT HERE>
.Объяснение:
НОТА! Код объяснения не может быть выполнен из-за комментариев. Комментарии заключены в фигурные скобки. Кроме того, оригинальный код использует гольф, где
//
заменяется~
. Этот код опущен в объяснении.///
игру в гольф.источник
R 35 байт
Попробуйте онлайн!
На основании превосходного ответа Jelly от @ EriktheOutgolfer, пожалуйста, добавьте его тоже!
Ввод представляет собой двумерную матрицу символов.
источник
Haskell, 59 байт
Попробуйте онлайн!
Функция называется так:
f "/o\\ " " -- "
Как это работает (для
f "/o\\" " -"
):b++cycle" "
- Добавляет бесконечное количество пробелов после,b
чтобы убедиться, что Джимми всегда выше a-
или(
" -"
→" - ..."
zip a$b++cycle" "
- Застегивает две строки вместе ([('/',' '), ('o','-'), ('\\',' ')]
)(p,q)<-zip a$b++cycle
- для каждой пары в заархивированном списке[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Создает список1
s, длина которого является количеством пар, удовлетворяющих условиям:elem p"/o\\"
- Символ в верхней строке является одной из частей тела Джимми. (Удовлетворено всеми тремя парами в этом примере)q==' '
- Символ в нижней строке является пробелом. (Удовлетворен('/', ' ')
и('\\', ' ')
)Итак, пара должна быть такой, где одна из частей тела Джимми находится над пробелом.
Поскольку в этом примере две пары удовлетворяют обоим условиям, список
[1,1]
sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']
- Возьмите сумму тех1
s (то есть длину списка), который в этом примере есть2
.sum[1|(p,q)<-zip a$b++cycle" ",elem p"/o\\",q==' ']<2
- Проверьте, не превышает ли количество частей тела над пробелом 2. В этом примере это не так, поэтому Джимми отвалится. :(источник
C (gcc) , 73 байта
Попробуйте онлайн!
источник
index()
вместоstrchr()
Котлин, 60 байт
Объяснение:
источник
/// , 57 байт
Попробуйте онлайн!
Добавьте ввод в конец программы для запуска. Возвращает пустую строку, если Джимми падает с платформы, в противном случае - строка восклицательных знаков.
/|/\/\//
заменяет|
на//
, что делает код более коротким и более читаемым (|
используется для разграничения каждой замены)/\/o\\/J| J/J*/
заменяет ДжиммиJ
на краткость и меняет пространство слева от него*
справа от него/* /| -/ | //
отменяет*
s и с пробелом слева от платформы. Если осталось два или более пробелов, Джимми падает влево, и платформа удаляется. Эта часть также удаляет любые пробелы справа от платформы./*-/|--/!/
отменяет*
с и с длиной платформы. Если осталось хотя бы два-
, Джимми не падает справа, поэтому они заменяются на!
./-/|*/|J//
удаляет все оставшиеся символы, которые не!
источник
Japt , 8 байт
Попытайся
источник
Сетчатка 0.8.2 , 16 байт
Попробуйте онлайн! Ссылка включает тестовый набор. Объяснение:
Хотя в первой строке все еще есть пробел, а в обеих строках по-прежнему содержится более одного символа, удалите пробел и первый символ следующей строки. Примечание: предполагается, что после Джимми нет пробела. +1 байт необходим, если необходимо разрешить завершающий пробел.
Убедитесь, что под Джимми есть как минимум две части платформы.
источник
Perl 5
-pl
, 42 байтаПопробуйте онлайн!
источник
Ruby 2.5.3, 44 байта
Ввод принимается как два массива. Определенно не самый удобный подход к игре в гольф (см. Ответ GB), но мне нравится любое оправдание использованию этой
zip
функции.источник
PowerShell ,
63..5553 байта-1 байт благодаря маззи
Попробуйте онлайн!
Принимает ввод в виде двух строк.
раскатали:
источник
C # (интерактивный компилятор Visual C #) ,
444039 байт-4 байта благодаря Джо Кингу
Попробуйте онлайн!
источник
Python 3,7 ,
7156 байтОчень простая версия и самая короткая, которую я мог придумать, используя этот подход. Ввод
s
- это список из двух строк: первая для строки Jimmy, вторая для платформы. Застегните символы, которые находятся выше друг друга, а затем проверьте,-
находится ли ниже части Джимми хотя бы в двух случаях.РЕДАКТИРОВАТЬ: Уменьшено на несколько байтов благодаря Blue!
источник
s
должно быть два списка, один для jimmy и один для платформы?). Также есть несколько мест, где вы можете сохранять байты: вместо суммирования списка, вы можете суммировать необработанный итератор (убрать скобки); вместо проверки>=2
, проверьте>1
; Вы можете суммироватьTrue
иFalse
как 1 и 0, нет необходимости для if-else. Наконец, прежде чем публиковать новый ответ на том же языке, вы должны посмотреть на предыдущие, чтобы увидеть, можете ли вы улучшить.Шеврон,
8487 байтЭто довольно новый язык моего собственного создания - интерпретатор прототипов, документация и примеры программ можно найти по адресу https://github.com/superloach/chevron .
Объяснение:
>^__>^j
- принять Джимми в качестве ввода TXT^i<<0
- инициализировать индекс до 0^i<<^i+1
- индекс приращения^h<^i>^j
- получить символ Джимми по индексу->+2??^h=/
- выпрыгнуть из петли на левой ноге Джимми->-3
- вернуться к началу цикла>^__>^p
- принять платформу в качестве ввода TXT^q<^i|2>^p
- вырезать 3 символа под Джимми->+2??^q<--
- если 2 черты под Джимми, перейти к правдивому выходу><0
- ложный выход><1
- правдивый выходисточник
C (gcc), 103 байта
Попробуйте онлайн!
Будет намного короче ( 75 байт ), если предположить, что после платформы есть пробелы.
источник
Japt
-¡
, 9 байт-1 байт, если вход может быть изменен.
Попробуйте онлайн
источник
V , 18 байт
Попробуйте онлайн!
Выведите пробел, только если Джимми упадет с платформы. Выведите что-нибудь незаполненное, если Джимми останется на платформе.
источник