Para los propósitos de este desafío, un polifongo se define como una porción contigua de una Cadena, que solo contiene vocales, y tiene una longitud de al menos 2. Dada una Cadena no vacía como entrada, su tarea es generar todos los polifongos que contiene .
Por ejemplo, "abeoic"
tiene los siguientes sectores contiguos (separados por espacios):
a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic
Eliminando aquellos que contengan algo que no sean vocales, o que tengan una longitud menor a 2, obtenemos nuestros polifonos:
eo oi eoi
Sus presentaciones deben cumplir con las siguientes reglas:
Puede elegir minúsculas o mayúsculas para E / S, pero el caso de salida debe coincidir con el caso de entrada.
Las vocales son
aeiou
(para minúsculas) yAEIOU
(para mayúsculas).y
/Y
no se considera una vocal.La entrada solo contendrá ASCII imprimible.
Si un polifongo aparece varias veces, puede optar por generarlo solo una vez o generar todas sus ocurrencias.
Se permite cualquier formato y método de E / S razonable (las listas de caracteres también están bien, tanto para entrada como para salida).
Casos de prueba
Entrada -> Salida (minúsculas) r67 ^^ () * 6536782! 87 -> [] programación de rompecabezas y código de golf -> [] aaand ... gané! -> ['aa', 'aa', 'aaa'] abeoic -> ['eo', 'oi', 'eoi'] yah eioo ala -> ['ei', 'io', 'oo', 'eio', 'ioo', 'eioo'] @yabeeeayio__e -> ['ee', 'ee', 'ea', 'io', 'eee', 'eea', 'eeea'] 0ioen0aaiosnjksd -> ['io', 'oe', 'aa', 'ai', 'io', 'ioe', 'aai', 'aio', 'aaio']
Tenga en cuenta que para los casos de prueba 3 y 6, puede generar 'aa'
y 'ee'
respectivamente solo una vez (consulte la cuarta regla).
Este es el código de golf , ¡el envío más corto en bytes en cada idioma gana!
'aa'
aparece dos veces. ¿Se debe generar la misma cadena varias veces si aparece en varias ubicaciones o solo se pueden generar polifongos únicos?Respuestas:
Python 2 ,
10297 bytesgracias a @JonathanFrech por -5 bytes
Pruébalo en línea!
E / S en minúsculas
fuente
...AEIOU'
, ya que solo puede tomar letras minúsculas como entrada.print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])
trabaja para 93.JavaScript (ES6),
7775 bytesEspera entrada en minúsculas. Produce polifongos únicos sin repetir.
Casos de prueba
Mostrar fragmento de código
¿Cómo?
Construimos recursivamente el árbol de todos los polifongos posibles, podamos ramas tan pronto como el nodo actual ya no está contenido en la entrada y guardamos todos los nodos coincidentes de al menos 2 caracteres.
fuente
Retina ,
2320 bytesPruébalo en línea!
Esto imprime todas las ocurrencias de un polifongo.
Explicación
La retina tiene una manera de obtener todas las coincidencias superpuestas , pero lo que esto realmente significa es que buscará una coincidencia desde cada posición. Entonces, si hay múltiples coincidencias desde la misma posición, esto solo devolverá una de ellas. La única forma de obtener realmente todas las coincidencias superpuestas es usar esta función dos veces, una vez que coincida de izquierda a derecha y una vez de derecha a izquierda (para que primero obtengamos la coincidencia más larga posible de cada posición de inicio posible, y luego también obtengamos todas las coincidencias para las posibles posiciones finales).
Entonces el programa real:
Obtén todas las series de vocales superpuestas Lo que esto realmente significa es obtener todos los sufijos de todas las vocales.
Ahora obtenga todos los prefijos que tengan al menos la longitud 2, haciendo coincidir de derecha a izquierda. El
M
está implícito aquí, porque es la última línea del programa.fuente
!&`[aeiou]{2,}
está tan cerca de ser correcto , ¿hay alguna manera de hacerlo más codicioso para que coincidaio
?&
puede hacer es intentar una coincidencia desde cada posición, por lo que no puede tener múltiples coincidencias de diferente longitud desde la misma posición. Por eso necesito una segunda etapa.QuadS , 20 + 1 = 21 bytes
con la
o
banderaPruébalo en línea!
En orden de cosas que suceden:
[aeiou]+
en cada partido de este PCRE,\⍵M
prefijos del partido1↓
soltar el primero (que tiene una vocal),/⍵
concatenar todas las listas de prefijos⊃
revelar (porque las reducciones/
incluyen)Esto es equivalente a la función tácita Dyalog APL:
Pruébalo en línea!
fuente
Mathematica, 92 bytes
Pruébalo en línea!
fuente
Java (OpenJDK 8) ,
138135134 bytesPruébalo en línea!
fuente
i<y-1
puede seri<=y
yString#matches
comprueba implícitamente toda la cadena, por lo que no necesita el^
y$
. +1 por vencerme, sin embargo. Estaba a punto de publicar mi propia respuesta de 138 bytes (pero con estos cambios propuse que la suya es más corta). :)J ,
3429 bytesPruébalo en línea!
fuente
Jalea , 9 bytes
Pruébalo en línea!
Explicación
-4 bytes gracias al Sr. Xcoder
fuente
L>1$$
conL’$
.L’$
conḊ
de 9 bytes . Un equivalente seríaẆṫLḊḟÐḟØc
.C (gcc) , 104 bytes (99 bytes solo en minúsculas o mayúsculas)
Sí, se filtra, ¿y qué?
Pruébalo en línea!
fuente
#include
, y solo necesita manejar una letra mayúscula, por lo que puede acortarlo a 80 bytes.R , 137 bytes
superado por Mark !
Pruébalo en línea!
fuente
unique
.Perl 5, 53 +1 (-p)
Pruébalo en línea
fuente
PowerShell ,
9388 bytesPruébalo en línea!
Utiliza E / S en minúsculas o mayúsculas (¡o una mezcla!).
Toma prestado el código de mi respuesta en Subcadenas explotadas para obtener todas las subcadenas, luego extrae las que tienen expresiones regulares
-match
contra^[aeiou]{2,}$
, es decir, aquellas que tienen al menos dos vocales de longitud y solo vocales. Esas cadenas se dejan en la tubería y la salida es implícita.fuente
Haskell ,
148137130123118 bytesGracias a @Laikoni por -11 bytes, más -7 bytes al señalarme consejos de golf, otros -7 bytes y otros -5 bytes, para un total de -30 bytes.
Esto parecía una buena opción para Haskell, pero el resultado no parece estar de acuerdo.Supongo que Haskell fue una elección aceptable después de todo. Sin embargo, todavía estoy molesto por la forma en quesubsequences
funciona.Pruébalo en línea!
fuente
;
, pero aumentan la legibilidad del código. Siempre se usae
junto conv
, por lo que puede declarar directamentee=(
elem"aeiou")
.y!!0
es más corto quehead y
. Hay enconcatMap
lugar deconcat.map
, pero aún más corto es(=<<)
de la lista mónada que tiene el mismo efecto.Data.Lists
lugar deData.List
. El primero tiene todas las funciones del segundo, pero también cosas adicionales comopowerslice
, que proporciona una lista de todas las subsecuencias continuas.y@(h:_:_)
dejar caerlength y>1
y acortarv(y!!0)
av h
.(\x y->v x&&v y)
se puede acortar convirtiéndolo en sin puntos, ya sea manualmente usando este consejo o usando pointfree.io . (2) La lista mónada también se puede usar con lado
notación, esdo x<-l;[...]
decir, la mismal>>=(\x->[...])
. Por cierto, en TIO puede poner sumain
en el campo de encabezado o pie de página para que el recuento de bytes coincida con el envío real.Perl, 45 bytes
fuente
R ,
120 bytes110 bytesPruébalo en línea!
Cómo funciona
fuente
C, 119 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 105 bytes
Probablemente tiene mucho golf por hacer.
fuente
Perl 5 , 44 + 1 (
-n
) = 45 bytesPruébalo en línea!
fuente
05AB1E , 10 bytes
Pruébalo en línea!
Explicaciones:
fuente
ŒʒžMм_}ʒg≠
ŒD1ùKʒžMм_
para 10 bytes. Sin embargoC,
10575 bytesUna función que acepta un puntero a la entrada en minúsculas y produce cadenas separadas por espacios en la salida estándar:
Programa de prueba
Manifestación
Explicación
Usando GCC en Debian Linux, parece que me salgo con las declaraciones implícitas incompatibles de
strchr()
yprintf()
. Otras plataformas pueden requerir<stdio.h>
y<string.h>
ser incluidas.Pruébelo en línea (requiere Javascript).
fuente
f(p)char*p;
puede serf(char*p)
?f(s,d)char*s,*d
.APL (Dyalog) , 53 bytes
Esta es una
Dfn
( d directo teléfono f unctio n ). El uso esp '<argument>'
. Advertencia justa: esto no es muy eficiente y se agota el tiempo de esperainput > 8 characters
en TIO, pero funciona normalmente cuando se le da suficiente tiempo.Pruébalo en línea!
¡Gracias a @ Adám por 16 bytes!
Cómo funciona:
Esto es más fácil de entender si dividimos el código en porciones más pequeñas:
G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵
: esta parte de la función toma la longitud del argumento (derecho) y mezcla el vectoraeiou
consigo mismo tantas veces, produciendo todas las combinaciones posibles de[2, length(right arg)]
vocales.(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/
: esta parte verifica qué elemento (s) de G son miembros de las subcadenas de la entrada. Esto devuelve un vector booleano, con1
's en los índices de las combinaciones de vocales que están presentes en la entrada y0
' s donde no están. El vector resultante se mapea (/
)G
, devolviendo los elementos correspondientes a los valores de verdad.Todo esto se asigna a
p
.p←
no está incluido en el recuento de bytes porque no es necesario , solo facilita el uso de la función.fuente
⊆
para filtrar. Uso/
.Haskell , 74 bytes
Pruébalo en línea!
fuente
Ruby 2.4, 100 bytes
Este es mi primer intento de jugar al golf, y estoy seguro de que hay muchas maneras de acortar este código.
fuente
Rubí , 80 bytes.
Pruébalo en línea!
fuente
.compact
puede ser-[nil]
Pyth , 15 bytes
Pruébalo en línea!
Definitivamente golfable, quiero mejorarlo antes de escribir una explicación.
fuente
T-SQL (SQL Server 2014), 281 bytes
Entrada dada por
Utiliza una expresión de tabla común
s
para separar la entrada en letras individuales ordenadas y luego una segunda expresión de tabla comúnc
para generar todas las combinaciones ordenadas, arrojando no vocales.Violín de SQL
fuente
PHP, 139 bytes
Demostración en línea
Cómo funciona
Seleccione subcadenas (comenzando con la longitud de 2) que consisten en caracteres adyacentes y muévase a lo largo de la cadena. Recoge cualquier subcadena que solo contenga vocales. Repita con subcadenas más largas.
Para la cadena 'abcdef', estas son las subcadenas generadas y verificadas:
fuente