Entrada
Una cadena de caracteres ASCII imprimibles, por ejemplo:
This is an example string.
Salida
Para cada consonante ( BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz
) que no sea seguida por una vocal ( AEIOUaeiou
), agregue la última vocal anterior, en minúsculas.
Las consonantes antes de la primera vocal se dejan como están :
Thisi isi ana examapale seterinigi.
Casos de prueba
AN EXAMPLE WITH A LOT UPPERCASE (plus some lowercase)
=> ANa EXAMaPaLE WITiHi A LOTo UPuPEReCASE (pelusu some lowerecase)
And here comes a **TEST** case with 10% symbols/numbers(#)!
=> Anada here comese a **TESeTe** case witihi 10% siyimiboloso/numuberese(#)!
This is an example string.
=> Thisi isi ana examapale seterinigi.
abcdefghijklmnopqrstuvwxyz
=> abacadefegehijikiliminopoqorosotuvuwuxuyuzu
A pnm bnn
=> A panama banana
Tell me if you need more test cases!
=> Telele me ifi you neede more tesete casese!
Tanteo
Como se trata de código de golf , la respuesta con el recuento de bytes más bajo en cada idioma gana (no se aceptará ninguna respuesta).
A pnm bnn
!Respuestas:
Retina , 48 bytes
Pruébalo en línea! Explicación: la búsqueda anticipada busca un punto no seguido de una vocal, mientras que la búsqueda posterior busca una consonante inmediatamente anterior y una vocal anterior, que luego se inserta en minúsculas.
fuente
JavaScript (ES6),
108105bytes(Guardado 3 bytes gracias a @Shaggy.)
Busca vocales o consonantes sin vocal siguiente:
(No necesitamos buscar consonantes explícitamente, porque las vocales se excluyen en función del
/[aeiou]|...
.)Las vocales se almacenan
v
y se hanv
insertado consonantes sin vocal siguiente :(Si
r[1]
existe, hemos encontrado una consonante más no vocal).Si no se ha cambiado nada, devolvemos la entrada. De lo contrario, recurrimos en la cadena reemplazada.
Mostrar fragmento de código
fuente
s=>s.replace(/[aeiou][^a-z]*([a-z](?![aeiou]))+/gi,s=>s.replace(/(?!^)./g,a=>a+s[0].toLowerCase()))
aunque parece que no puedo tener problemas con las secuencias de no letras(s+=' ')
debería guardar algunos bytes.Python 2 ,
134119 bytesPruébalo en línea!
EDITAR: 15 bytes thx a Lynn
fuente
<vowels>.count
.ML estándar ,
225223 bytesPruébalo en línea!
Menos golfizado:
Pruébalo en línea!
fuente
it
y el uso del$
nombre de la variable.it
también, pero aún no he podido hacerlo.sed 4.2.2 , 64 bytes
Pruébalo en línea!
fuente
Perl 5,
686759 bytesAquí hay un gran ejemplo de la utilidad de
\K
, y no puedo creer que no supiera sobre esta característica antes de que Dom Hastings lo señalara.No he podido obtener el comportamiento correcto con solo usarlo
s///g
, por lo que parece necesario un bucle real. (Es posible que el uso correcto de una afirmación retrospectiva funcione sin un explícitowhile
, pero no lo he encontrado).fuente
[aeiou])
a variable: ¡ Pruébelo en línea!JavaScript ES6, 115 bytes
Ahorra 8 bytes gracias a @ETHProductions
He logrado inflar esto más en el proceso de jugar golf O_o pero también soluciona un error
fuente
JavaScript,
8882 bytesHecho con una sola expresión regular:
Versión original (88 bytes):
Versión actualizada (82 bytes) después de mirar la expresión regular de Neil :
fuente
Japt
-P
, 28 bytesPruébalo en línea!
Desempaquetado y cómo funciona
La
ó
función gana sobre cualquier tipo de expresiones regulares.fuente
JavaScript (Node.js) ,
146143132127125 bytesPruébalo en línea!
fuente
Perl 6 ,
75 73 7169 bytesIntentalo
Intentalo
Intentalo
Intentalo
Expandido:
fuente
Python 3 , 125 bytes
Pruébalo en línea!
Python 3.6 nos permite (ab) usar cadenas f para reutilizar nuestro conjunto de vocales (y para cuatro caracteres más guardados, el comienzo de una clase de caracteres regex invertida) a bajo costo (un
f
prefijo en cada cadena, luego{v}
según sea necesario, en lugar del'+v+'
necesitarías con concatenación, o la[^aeiouAEIOU
insertarías literalmente.La expresión regular que no coincide con ningún carácter, solo una posición, evita problemas con las coincidencias no superpuestas que requieren las expresiones regulares, y elimina la necesidad de hacer referencia a cualquier parte de la coincidencia; todo lo que usamos para el objeto de coincidencia es obtener el índice de corte que usamos para encontrar la vocal anterior.
Parcialmente fuera de golf, sería algo así como:
fuente
TSQL, 500 bytes
La tabla
i
se usa para entradafuente
SWI-Prolog, 593 bytes
Solo se usaron predicados integrados (sin expresiones regulares ni biblioteca de manipulación de listas).
Uso:
fuente
Haskell ,
142130 bytesPruébalo en línea!
La inicial
""&
es una aplicación parcial de la(&)
función definida más adelante, y se coloca de manera extraña para que TIO cuente los bytes""&
, pero no cuente los bytes que, en un programa completo, serían necesarios para asignar eso a cualquier valor con nombre.Menos golfizado:
Realmente debería haber una manera de hacer esto de manera más concisa con un pliegue en lugar de recurrencia, pero no pude resolverlo.
fuente
f
no aparezca en el cuerpo: ¡ Pruébelo en línea!v = (
y puede definirg
como un operador infijo .g _""=""
en la última posición guarda un byte:g _ x=x
(dos bytes si cambia a infijo como sugiere Laikoni).""&
para que sea una función.05AB1E , 34 bytes
Pruébalo en línea!
Retiro eso. Solo puedo eliminar 3 bytes de esta monstruosidad ... Creo que podría reducir el valor booleano, pero DEBE haber 3 casos. 1 para vocales. 1 para consonantes. 1 para el caso de que exista un dígito / símbolo.
fuente
Powershell, 104 bytes
basado en la expresión regular de Neil .
guárdelo como
get-rememebere.ps1
. Guión para probar:fuente
$t
. Meta publicación relevante: codegolf.meta.stackexchange.com/a/8731/78123Rojo , 276 bytes
Pruébalo en línea!
Legible:
fuente
Yabasic , 180 bytes
Un programa completo que toma entradas de STDIN y salidas a STDOUT
Pruébalo en línea!
fuente