Introdução
Um acrônimo recursivo é um acrônimo que contém ou se refere a si mesmo, por exemplo:
Fish
poderia ser um acrônimo recursivo para Fish is shiny hero
, observe como isso também contém o próprio acrônimo. Outro exemplo é Hi
-> Hi igloo
. Ou até ppcg paints
->ppcg paints cool galaxies pouring acid into night time stars
Então, basicamente, uma frase é um acrônimo recursivo se as primeiras letras de cada uma das palavras soletrarem a primeira palavra ou palavras.
Desafio
Crie um programa que use uma sequência de 1 ou mais palavras separadas por um caractere de espaço e produza um acrônimo recursivo ou uma sequência vazia, se for impossível. É impossível criar um acrônimo recursivo para uma sequência como, por exemplo, ppcg elephant
porque você começaria com o p
from ppcg
e o adicionaria ao acrônimo, depois com o e
from elephant
. Mas agora temos uma contradição, já que atualmente o acrônimo indica "pe ..", que entra em conflito com "pp ..". Esse também é o caso, por exemplo hi
. Você pegaria o h
from hi
, mas a frase agora acabou e não há mais letras para soletrar hi
e ficamos apenas com o h
que não correspondehi
. (A sequência precisa de uma quantidade de palavras maior ou igual à quantidade de letras na sigla)
Entrada e saída não diferenciam maiúsculas de minúsculas
Restrições
- Qualquer coisa inserida no seu programa será válida em inglês. Mas você também deve fornecer palavras em inglês válidas (você pode usar um banco de dados ou apenas armazenar uma palavra para cada uma das 26 letras)
- Aplicam-se brechas padrão e regras de E / S padrão
Casos de teste
hi igloo -> hi
ppcg paints -> (impossible)
ppcg paints cool giraffes -> ppcg
ppcg paints cool galaxies pouring acid into night time stars -> ppcgpaints
ppcg paints cool galaxies pouring acid into night time -> ppcg
ppcg questions professional pool challengers greatly -> (impossible)
I -> I
Pontuação
Isso é código-golfe , então o menor código-fonte em bytes vence
ppcg paints cool galaxies pouring acid into night time
seria "ppcgpaint" quando convertido em um acrônimo, mas a saída deve serppcg
mesmo que seja apenas uma correspondência parcial?Respostas:
Japonês , 13 bytes
Experimente online!
fonte
ppcg paints cool galaxies pouring acid into night time stars
caso de teste #05AB1E , 16 bytes
Experimente online!
fonte
ð¡
vez de#
na sua última edição? Alguns casos de teste especiais que não estou levando em consideração?#
falharia se a entrada de uma única palavra produzisse a entrada em vez de uma sequência vazia.#
deve agir da mesma maneirað¡
.. Existe um caso de uso em que você pode dividir uma sequência em espaços, mas se não contiver um espaço, deve permanecer a sequência (em vez da sequência envolto em uma lista)? Outras pessoas lendo isso; FYI: Usar#
(dividir no espaço) em uma sequência sem espaços resulta na sequência como está (ie"test" -> "test"
). O usoð¡
(divisão no espaço) de uma sequência sem espaços resulta na sequência envolvida em uma lista (ou seja"test" -> ["test"]
).#
também ser usado comoquit if true
(que é sua principal função). Se#
retornado falso, você provavelmente não gostaria que o valor marcado fosse agrupado em uma lista, deixada na pilha.Haskell,
5148 bytesEdit: -3 bytes graças a @xnor.
Localiza a sigla.
Experimente online!
fonte
x
, a composição(\w-> ...).words
seria mais curta.Perl 6 ,
50 42 5849 bytes-9 bytes graças a nwellnhof
Experimente online!
Primeira opção.
Estou explorando o fato de que oOu o regex da resposta do moonheart é mais curtoord
único retorna o valor ordinal da primeira letra de uma string, enquantochrs
pega uma lista de ords e retorna uma string.:(
. Para referência, a resposta anterior foi em.words>>.ord.chrs
vez de[~] m:g/<<./
Explicação:
fonte
Retina 0.8.2 , 60 bytes
Experimente online! Localiza a sigla recursiva, se houver. Explicação:
Duplique a entrada.
Reduza as palavras da primeira linha para as letras iniciais.
Insira espaços para corresponder às palavras originais, se possível.
Emita a primeira linha se for um prefixo da segunda linha.
fonte
pp
única explicita uma parte da primeira palavra, em vez de tudo issoPerl 6 , 56 bytes
Experimente online!
Regexes anteriores eram confusos e inutilizáveis para mim. De repente eu os entendo perfeitamente. O que aconteceu comigo: P
Cumpre a escolha 1.
fonte
ppcgpaints
teste; caso contrário, eu sugeriria algo como$!∈.words
para a condição ifK (ngn / k) , 40 bytes
Primeira opção:
Experimente online!
fonte
Ferrugem, 155, experimente online!
Selecionado: Problema 1: Localizando Acrônimo
Ungolfed, apenas um pouco:
Ou, se pudermos supor que a entrada esteja em minúscula, apenas 130:
fonte
Geléia , 9 bytes
Um programa completo imprimindo a abreviação recursiva, se possível.
Experimente online!
Como?
fonte
JavaScript [ES6], 74 bytes
Cria uma expressão regular para combinar. Veja exemplos no código.
Todos os casos de teste:
fonte
increase i
Python 2 , 106 bytes
Primeira opção - encontrar acrônimo recursivo.
Retorna o resultado na lista.
Experimente online!
Python 2 , 120 bytes
Primeira opção - encontrar acrônimo recursivo.
Experimente online!
fonte
Javascript, 71 bytes
Abordagem 1
Ungolfed:
fonte
Ruby
-apl
, 57 bytesExperimente online!
fonte
Python 2 , 109 bytes
Experimente online!
fonte
Scala, 76 bytes
Solução para casos simples (acrônimos sem espaços em branco)
Scala,
144 bytes100 bytes (consulte a solução somente por ASCII nos comentários)Teste no REPL
fonte
:::
ser substituído por++
? Além disso,List[String]
->Seq[Any]
?