Você recebe uma sequência e dois caracteres. Você precisa imprimir a sequência entre esses caracteres a partir da sequência.
Entrada
A entrada primeiro conterá uma sequência (não vazia ou null
). Na próxima linha, haverá dois caracteres separados por um espaço.
Desafio
Retorna a string entre os dois caracteres
Exemplo
Hello! What's your name?
! ?
deve resultar na saída:
" What's your name"
Regras
- A cadeia não terá mais de 100 caracteres e conterá apenas caracteres ASCII no intervalo
(espaço) a
~
(til) (códigos de caracteres 0x20 a 0x7E, inclusive). Consulte a tabela ASCII para referência. - Você deve receber informações da
stdin
(ou alternativa mais próxima). - A saída deve estar entre aspas (
"
). - Você pode escrever um programa completo ou uma função que recebe entrada e gera a sequência final
- Os dois caracteres conterão apenas caracteres ASCII no intervalo
(espaço) a
~
(til) (códigos de caracteres 0x20 a 0x7E, inclusive). Consulte a tabela ASCII para referência. - Não há garantia de que ambos os caracteres estejam na sequência.
- Se algum dos caracteres não for encontrado na sequência, imprima
"null"
. - Se algum dos caracteres for encontrado mais de uma vez (a menos que os dois sejam iguais) em uma sequência, imprima
"null"
. - Se os dois caracteres forem o mesmo, imprima a sequência
"null"
.
Casos de teste
1)
<HTML>code</HTML>
> < --> "null"
2)
What's what?
' ' --> "null"
3)
abcdefghijklmnopqrstuvwxyz
n k --> "lm"
4)
Testing...
e T --> ""
5)
Last test-case
- --> "test"
Pontuação
Isso é código de golfe, então a submissão mais curta (em bytes) vence.
"
? Devemos apenas cercá-lo com outro par de citações e não nos importar com isso?one"two-three \n" -
output:"two"
(\n
is newline)Respostas:
CJam,
343332 bytesExperimente online no intérprete CJam .
Idéia
Remova o segundo caractere da linha 2.
Forme uma sequência que consiste em uma única cópia de todos os caracteres que ambas as linhas têm em comum.
Repita a sequência resultante duas vezes e descarte seus dois primeiros caracteres.
Isso resulta em uma cadeia de dois caracteres (se os caracteres da linha 2 forem diferentes e ocorrerem na linha 1) ou em uma cadeia vazia.
Substitua os caracteres da sequência resultante na linha 1 pelos feeds de linha.
Divida a linha 1 nos feeds de linha.
O segundo elemento da matriz resultante será a sequência desejada se a matriz contiver exatamente três pedaços.
Substitua o primeiro elemento da matriz pela sequência nula .
Recupere o segundo elemento da matriz se seu comprimento for 3 e o primeiro caso contrário.
Anexe e adicione uma aspas duplas.
Código
fonte
CJam, 38 bytes
Demasiado longo...
Explicação
fonte
Pitão,
373634 bytesObrigado a @isaacg pelos dois bytes salvos.
Experimente online: Pyth Compiler / Executor
Explicação:
fonte
*2]1
é mais curto que[1 1)
e- ... 1
ainda é mais curto.-...1
não funciona, pois também preciso verificar se existem exatamente dois números.[1 1)
:jT9
.Python 3, 149 bytes
Versão Ungolfed:
Esta é a minha primeira resposta aqui, por isso dicas e críticas são muito apreciadas.
fonte
Ruby,
1089594E para a versão ungolfed
fonte
->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>",?>,?<]
O[...]
final é o que chama a função.->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
, você pode substituirraise
por uma variável indefinida como_
ouy
. Isso gera um NameError. Além disso, eu acho que você poderia salvar um pouco mais bytes sem um resgate explícita:->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 bytes
Código não destruído:
Teste aqui
fonte
Python 3, 172 bytes
fonte
Javascript ( ES6 ),
125123 bytesIdéia roubada pesadamente da solução da @ edc65.
fonte
[a,,b]=
, vou usá-lo na próxima vez. Como regexs são um aborrecimento, aqui é uma solução gratuita regex:[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 bytes
A solução geralmente usa apenas uma expressão regular para extrair a string. Para acomodar que as letras possam corresponder em qualquer direção, o início e o final da parte correspondente permitem uma das letras. A verificação de que as letras que realmente corresponderam a diferentes exclui que a mesma letra seja correspondida duas vezes, e as duas letras na entrada sejam iguais.
Esta é minha primeira tentativa de usar o Python para obter uma resposta aqui. Portanto, o feedback sobre possíveis melhorias é muito bem-vindo. Sinto particularmente que deve haver uma maneira de reduzir a condição na declaração impressa.
fonte
Python 3, 155 bytes
Experimente online
fonte
golflua, 132 bytes
Resposta muito feia. O bit de entrada é um pouco áspero (e requer duas linhas, primeiro com a string e segundo com os caracteres de fatia). Encontrar os locais das bandeiras é simples, mas é muito longo para competir com outras respostas. A saída é bem fácil. Um programa Lua equivalente seria
fonte
Perl, 65
Isso requer que não haja caracteres de nova linha na segunda linha da entrada.
fonte
null
caso.