Introducción
Un acrónimo recursivo es un acrónimo que contiene o se refiere a sí mismo, por ejemplo:
Fish
podrí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 elephant
porque comenzaría tomando el p
de ppcg
luego agregando eso al acrónimo, luego tomando el e
de 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 h
de hi
, pero la oración ha terminado y no hay más letras para deletrear hi
y solo nos queda h
lo 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 time
sería "ppcgpaint" cuando se convierte en un acrónimo, pero la salida debería serppcg
aunque solo sea una coincidencia parcial.Respuestas:
Japt , 13 bytes
Pruébalo en línea!
fuente
ppcg paints cool galaxies pouring acid into night time stars
caso 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-> ...).words
serí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 cortaord
solo devuelve el valor ordinal de la primera letra de una cadena, mientras quechrs
toma una lista de ords y devuelve una cadena.:(
. Como referencia, la respuesta anterior fue en.words>>.ord.chrs
lugar 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
pp
solo 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
ppcgpaints
prueba, de lo contrario habría sugerido algo así como$!∈.words
para 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 i
Python 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]
?