Introdução
Quando você recebe um texto chato, só quer acabar com isso o mais rápido possível. Vamos observar o seguinte texto:
Ens colligi timenda etc priorem judicem. De quascunque ii at contingere
repugnaret explicetur intellectu. Adjuvetis hoc fortassis suspicari opportune
obversari vix eam? Dei praemia prudens hominum iii constet requiri haberem. Ima
sane nemo modi fuit lus pro dem haud. Vestro age negare tactum hoc cui lor. Ne et
ut quod id soli soni deus. At constare innumera is occurret ea. Nia calebat seu
acquiro fraudem effingo dicimus.
Nota: Este texto possui novas linhas para facilitar a leitura, enquanto os casos de teste que você precisa manipular não possuem caracteres de nova linha.
Uma maneira de vasculhar o texto é encontrar perguntas que o escritor colocou no texto. Por exemplo, há 1 pergunta no texto acima. Nomeadamente:
Adjuvetis hoc fortassis suspicari opportune obversari vix eam?
Isso pode ser feito dividindo o texto em frases. Uma frase sempre terminará com um dos seguintes símbolos de pontuação: .?!
(outros não precisam ser manipulados). Outros símbolos além desses fazem parte da frase.
A tarefa
Dada uma linha de texto que consiste apenas
- letras (A-Za-z)
- números (0-9)
- espaços
- pontuação (
,.;:?!
) (uma frase não pode começar com uma delas).
Envie as perguntas que estão no texto em qualquer formato razoável. Você pode assumir que o texto sempre terá pelo menos 1 pergunta . A saída de espaços à direita e à esquerda antes e depois de uma pergunta é permitida.
Importante : Ao lado de um símbolo de pontuação , nunca haverá outro símbolo de pontuação (por exemplo, ??
é inválido e não será necessário manipulá-lo).
Casos de teste
No formato:
Input
Output(s)
Os casos de teste:
Huh? I haven't heard what you just said. Could you repeat that please?
Huh?
Could you repeat that please?
plz can i haz cheesburgr? i am cat pls.
plz can i haz cheesburgr?
This is a badly formatted question.Can u please help me,or my friends,with formatting this question ?thankyou.
Can u please help me,or my friends,with formatting this question ?
a.b.c.d?
d?
Does this question have a question mark? yes
Does this question have a question mark?
Why example.com resolves to 127.0.0.1 in 99.9 percent of cases?
9 percent of cases?
A? b? c? d!
A?
b?
c?
Isso é código-golfe , então a submissão com o menor número de bytes vence!
fonte
.?!
Outros não devem ser manipulados, como especificam suas regras, mas você disse que outros não precisam ser manipulados.Respostas:
Retina,
1311 bytesExperimente online!
Obrigado a @MartinEnder por 2 bytes!
fonte
Python, 46 bytes
Ligue para:
saída em testes:
outra idéia, 77 bytes (em python3, você precisaria de uma lista em torno do filtro):
Eu sou novo nisso, então isso, provavelmente poderia ser muito mais curto.
-17 (!) Bytes graças a Martin
-2 bytes, correspondendo a qualquer coisa que não seja "!", "?" ou "." (Aproximando-me das soluções shell, mas duvido que poderia economizar muito mais)
fonte
[\w,:; ]*
filme ingrato (porque esse grupo não pode passar de um caractere de pontuação de qualquer maneira), e então você também não precisa acrescentar.
sua entrada. Você também reduz a classe de personagem restante para[^.!?]
.JavaScript,
3524 bytesRetorna todas as substrings que iniciam após a
.
,?
ou!
(ou o início do texto) e terminam em a?
.fonte
V , 12 bytes
Experimente online!
Uma resposta muito direta.
Felizmente, lidar com novas linhas ou verificar todos os casos de teste não adiciona nenhum bytes.
fonte
Gelatina , 16 bytes
Experimente online! ou verifique todos os casos de teste
fonte
Utilitários Shell,
4338 bytesObrigado a rexkogitans por cortar 5 bytes!
Entrada de tubulação, assim:
Se importa, estou usando:
tr
5.3.0sed
4.2.1cmd.exe
, fornecido com o Windows 5.1.2600fonte
tr ? "\n"|sed "s/.*[\.!]//;s/.\+/&?/"
salva 5 bytes (dois adicionadostr
e sete salvos emsed
- isso foi testado no bash)./g
não é necessário, pois é processado linha por linha.[]
; minha primeira tentativa de fazer isso foi algo parecido\(\.|!\)
.Perl 5.10,
2118 bytes (com sinalizador -n )Implementação direta da questão.
Experimente aqui!
fonte
m
do seu regex e, em seguida, poderá remover o espaço entresay
e/
Ruby 1.9, 17 bytes
Um programa de 5 bytes que deve ser chamado com as seguintes opções de linha de comando:
fonte
Lote, 174 bytes
Ler uma linha do STDIN é um byte mais curto que o uso
set s=%*
.fonte
PowerShell v4 +, 43 bytes
Realmente simples. Recebe a entrada
$args
e alimenta isso como o primeiro parâmetro para uma[regex]::Matches(...)
função estática do .NET . O regex que estamos correspondendo é[^?!.]*\?
- ou seja, qualquer número de caracteres que não terminem a frase que é seguido por um ponto de interrogação. A função estática retorna uma matriz de objetos detalhando qual grupo de captura, índice etc., mas queremos apenas os.Value
s; portanto, o retorno é encapsulado em parênteses e chamamos essa propriedade. É aqui que o requisito v4 + entra em jogo, pois nas versões anteriores você precisaria fazer algo como um loop|%{$_.Value}
ou|Select Value
obter as propriedades apropriadas.Exemplo sem os parênteses e
.Value
Exemplo com os parênteses e
.Value
fonte
Python 3, 91 bytes
Salva 1 byte em Python 2:
fonte