Introducción
Un acrónimo recursivo es un acrónimo que contiene o se refiere a sí mismo, por ejemplo:
Fishpodría ser un acrónimo recursivo para Fish is shiny hero, observe cómo también contiene el acrónimo. Otro ejemplo es Hi-> Hi igloo. O incluso ppcg paints->ppcg paints cool galaxies pouring acid into night time stars
Básicamente, una oración es un acrónimo recursivo si las primeras letras de cada una de las palabras deletrean la primera palabra o palabras.
Desafío
Cree un programa que tome una cadena de 1 o más palabras separadas por un carácter de espacio y genere un acrónimo recursivo o una cadena vacía si es imposible. Es imposible hacer un acrónimo recursivo para una cadena como, por ejemplo, ppcg elephantporque comenzaría tomando el pde ppcgluego agregando eso al acrónimo, luego tomando el ede elephant. Pero ahora tenemos una contradicción, ya que el acrónimo actualmente deletrea "pe ..", que entra en conflicto con "pp ..". Ese es también el caso con, por ejemplo hi,. Tomarías el hde hi, pero la oración ha terminado y no hay más letras para deletrear hiy solo nos queda hlo que no coincidehi. (La cadena necesita una cantidad de palabras mayor o igual que la cantidad de letras en el acrónimo)
La entrada y la salida no distinguen entre mayúsculas y minúsculas
Restricciones
- Todo lo que ingrese en su programa será palabras válidas en inglés. Pero también debe asegurarse de escribir palabras en inglés válidas (puede usar una base de datos o simplemente almacenar una palabra para cada una de las 26 letras)
- Se aplican las lagunas estándar y las reglas de E / S predeterminadas
Casos de prueba
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
Puntuación
Este es el código de golf , por lo que gana el código fuente más pequeño en bytes

ppcg paints cool galaxies pouring acid into night timesería "ppcgpaint" cuando se convierte en un acrónimo, pero la salida debería serppcgaunque solo sea una coincidencia parcial.Respuestas:
Japt , 13 bytes
Pruébalo en línea!
fuente
ppcg paints cool galaxies pouring acid into night time starscaso de prueba05AB1E , 16 bytes
Pruébalo en línea!
fuente
ð¡lugar de#en su última edición? ¿Algunos casos de prueba especiales que no estoy teniendo en cuenta?#fallaría la entrada de una sola palabra que genera la entrada en lugar de una cadena vacía.#debería actuar igual queð¡... ¿Hay un caso de uso en el que puedas pensar dónde quieres dividir una cadena en espacios, pero si no contiene un espacio, debería seguir siendo la cadena (en lugar de la cadena envuelto en una lista)? Otras personas que leen esto; FYI: Usar#(dividir en espacio) en una cadena sin espacios da como resultado la cadena tal como está (es decir"test" -> "test"). El usoð¡(dividir en espacio) en una cadena sin espacios da como resultado la cadena envuelta en una lista (es decir"test" -> ["test"]).#también se usa comoquit if true(que es su función principal). Si se#devuelve falso, es probable que no desee que el valor marcado se incluya en una lista y se deje en la pila.Haskell,
5148 bytesEditar: -3 bytes gracias a @xnor.
Encuentra acrónimo.
Pruébalo en línea!
fuente
x, la composición(\w-> ...).wordssería más corta.Perl 6 ,
50 42 5849 bytes-9 bytes gracias a nwellnhof
Pruébalo en línea!
Primera opción.
Estoy explotando el hecho de queO la expresión regular de la respuesta de moonheart es más cortaordsolo devuelve el valor ordinal de la primera letra de una cadena, mientras quechrstoma una lista de ords y devuelve una cadena.:(. Como referencia, la respuesta anterior fue en.words>>.ord.chrslugar de[~] m:g/<<./Explicación:
fuente
Retina 0.8.2 , 60 bytes
Pruébalo en línea! Encuentra el acrónimo recursivo, si lo hay. Explicación:
Duplicar la entrada.
Reduzca las palabras en la primera línea a sus letras iniciales.
Inserte espacios para que coincidan con las palabras originales, si es posible.
Salida de la primera línea si es un prefijo de la segunda línea.
fuente
ppsolo deletrea una parte de la primera palabra, en lugar de todoPerl 6 , 56 bytes
Pruébalo en línea!
Anteriormente, las expresiones regulares eran confusas e inutilizables para mí. De repente los entiendo perfectamente. Lo que me pasó a mí: P
Cumple con la elección 1.
fuente
ppcgpaintsprueba, de lo contrario habría sugerido algo así como$!∈.wordspara la condición ifK (ngn / k) , 40 bytes
Primera opción:
Pruébalo en línea!
fuente
Rust, 155, ¡ pruébalo en línea!
Seleccionado: Problema 1: Encontrar siglas
Ungolfed, solo un poco:
O si podemos suponer que la entrada está en minúsculas, solo 130:
fuente
Jalea , 9 bytes
Un programa completo que imprime la abreviatura recursiva si es posible.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript [ES6], 74 bytes
Crea una expresión regular para que coincida. Ver ejemplos en el código.
Todos los casos de prueba:
fuente
increase iPython 2 , 106 bytes
Primera opción: encontrar siglas recursivas.
Devuelve el resultado en la lista.
Pruébalo en línea!
Python 2 , 120 bytes
Primera opción: encontrar siglas recursivas.
Pruébalo en línea!
fuente
Javascript, 71 bytes
Enfoque 1
Sin golf:
fuente
Ruby
-apl, 57 bytesPruébalo en línea!
fuente
Python 2 , 109 bytes
Pruébalo en línea!
fuente
Scala, 76 bytes
Solución para caso simple (acrónimos sin espacios en blanco)
Scala,
144 bytes100 bytes (ver solución por ASCII solo en los comentarios)Prueba en REPL
fuente
:::puede reemplazar con++? Además,List[String]->Seq[Any]?