Вам дана строка и два символа. Вы должны напечатать строку между этими символами из строки.
вход
Сначала ввод будет содержать строку (не пустую или null
). В следующей строке будет два символа, разделенных пробелом.
Вызов
Вернуть строку между двумя символами
пример
Hello! What's your name?
! ?
должен привести к выводу:
" What's your name"
правила
- Строка не должна быть длиннее 100 символов и будет содержать только символы ASCII в диапазоне
(от пробела) до
~
(тильда) (коды символов от 0x20 до 0x7E включительно). См. Таблицу ASCII для справки. - Вы должны принять входные данные
stdin
(или ближайший альтернативный вариант). - Вывод должен быть заключен в кавычки (
"
). - Вы можете написать полную программу или функцию, которая принимает данные и выводит последнюю строку
- Два символа будут содержать только символы ASCII в диапазоне
(пробел) -
~
(тильда) (коды символов от 0x20 до 0x7E включительно). См. Таблицу ASCII для справки. - Нет гарантии, что оба символа будут в строке.
- Если какой-либо из символов не найден в строке, выведите
"null"
. - Если какой-либо из символов найден в строке более одного раза (если оба символа не совпадают), выведите
"null"
. - Если оба символа совпадают, выведите строку
"null"
.
Тестовые случаи
1)
<HTML>code</HTML>
> < --> "null"
2)
What's what?
' ' --> "null"
3)
abcdefghijklmnopqrstuvwxyz
n k --> "lm"
4)
Testing...
e T --> ""
5)
Last test-case
- --> "test"
счет
Это код гольф, поэтому выигрывает самое короткое представление (в байтах).
"
? Должны ли мы просто окружить это другой парой кавычек и не заботиться об этом?one"two-three \n" -
output:"two"
(\n
Ответы:
CJam,
343332 байтаПопробуйте онлайн в интерпретаторе CJam .
идея
Удалите второй символ из строки 2.
Сформируйте строку, состоящую из единственной копии всех символов, общих для обеих строк.
Повторите полученную строку дважды и отбросьте первые два символа.
В результате получается двухсимвольная строка (если символы из строки 2 отличаются и оба встречаются в строке 1) или пустая строка.
Замените символы результирующей строки в строке 1 на перевод строки.
Разделить строку 1 на перевод строки.
Второй элемент результирующего массива будет желаемой строкой, если массив содержит ровно три блока.
Замените первый элемент массива строкой null .
Получить второй элемент массива, если его длина равна 3, а первый - в противном случае.
Добавить и добавить двойную кавычку.
Код
источник
CJam, 38 байт
Слишком долго...
объяснение
источник
Pyth,
373634 байтаСпасибо @isaacg за сохранение двух байтов.
Попробуйте онлайн: Pyth Compiler / Executor
Объяснение:
источник
*2]1
короче[1 1)
, и- ... 1
короче еще.-...1
не работает, так как мне также нужно проверить, что есть ровно два числа.[1 1)
:jT9
.Python 3, 149 байт
Безголовая версия:
Это мой первый ответ здесь, поэтому советы и критика очень ценятся.
источник
Рубин,
1089594И для негольфированной версии
источник
->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["<html>test</html>",?>,?<]
В[...]
конце вызывается функция.->s,f,l{begin a,b=[f,l].map{|u|raise if f==l||s.count(u)>1;s.index u}.minmax;p s[a+1...b];rescue;p'null'end}["Last test-case"," ","-"]
raise
, вы можете заменитьraise
неопределенную переменную, такую как_
илиy
. Это вызывает NameError. Кроме того, я думаю, что вы могли бы сэкономить еще несколько байтов без явного спасения:->s,f,l{a,b=[f,l].map{|u|(f==l||s.count(u)!=1)&&p('null')&&exit;s.index u}.minmax;p s[a+1...b]}
C 192 байта
Ungolfed код:
Проверьте это здесь
источник
Python 3, 172 байта
источник
Javascript ( ES6 ),
125123 байтаИдея сильно украдена у решения @ edc65.
источник
[a,,b]=
, я буду использовать это в следующий раз. Так как регулярные выражения являются проблемой, вот бесплатное решение для регулярных выражений:[a,,b]=(P=prompt)(s=P()), P((s=s.split(a)).length==2& (s=[].concat(...s.map(s=>s.split(b)))).length==3 ?``"${s[1]}"``:null)
Python, 161 байт
Решение в основном использует регулярное выражение для извлечения строки. Для того, чтобы буквы могли совпадать в любом направлении, начало и конец сопоставляемой части допускают любую букву. Проверка того, что буквы, которые фактически совпадают, должны быть разными, исключает совпадение одной и той же буквы дважды, а также то, что две буквы во входных данных совпадают.
Это моя первая попытка использования Python для ответа здесь. Так что отзывы о возможных улучшениях очень приветствуются. У меня, в частности, есть ощущение, что должен быть способ сделать условие в выражении print короче.
источник
Python 3, 155 байт
Попробуйте онлайн
источник
golflua, 132 байта
Довольно некрасивый ответ. Входной бит немного грубоват (и требует две строки, первая со строкой и вторая со знаками среза). Найти расположение флагов просто, но слишком долго, чтобы конкурировать с другими ответами. Вывод довольно прост. Эквивалентная программа Lua будет
источник
Perl, 65
Это требует, чтобы во второй строке ввода не было символа новой строки.
источник
null
случая.