En este desafío, debe tomar una cadena que coincida con la expresión regular ^[a-zA-Z]+$
o lo que sea razonable (no tiene que considerar letras mayúsculas o minúsculas si lo desea) (puede suponer que la cadena es lo suficientemente larga y tiene la estructura correcta para todos los operaciones), y genera otra cadena, producida de manera similar a la palabra al final de un reciente tweet dadaísta por POTUS ( "Despite the constant negative press covfefe"
).
Cómo codificar una cadena:
Primero, obtenga el primer grupo de sonido (terminología compuesta).
¿Cómo haces esto? Bien:
Encuentra la primera vocal (
y
también es una vocal)v creation
Encuentra la primera consonante después de eso
v creation
Retira el resto de la cuerda
creat
Ese es tu primer grupo de sonido.
Próximo paso:
Obtener la última consonante del grupo de sonido.
t
y reemplácelo con la versión con voz o sin voz. Para hacer esto, encuentre la letra en esta tabla. Reemplace con la letra dada (que puede ser la misma letra)
b: p
c: g
d: t
f: v
g: k
h: h
j: j
k: g
l: l
m: m
n: n
p: b
q: q
r: r
s: z
t: d
v: f
w: w
x: x
z: s
entonces, obtenemos
d
Luego, toma la siguiente vocal después de esa consonante. Puede suponer que esta consonante no está al final de la cadena. Une estos dos juntos, luego repítelo dos veces:
didi
Concatena esto con el primer grupo de sonido:
creatdidi
Ya ha terminado: la cadena está codificada y ahora puede generarla.
Casos de prueba:
coverage: covfefe
example: exxaxa
programming: progkaka (the a is the first vowel after the g, even though it is not immediately after)
code: codtete
president: preszizi
Este es el código de golf , ¡así que haga su programa lo más corto posible!
Respuestas:
Jalea ,
5857 bytesUn programa completo que acepta una lista de caracteres en minúscula e imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6),
107103 bytesGuardado 4 bytes gracias a GOTO 0
Casos de prueba
Mostrar fragmento de código
fuente
s=>([,a,b,c]=s.match`(.*?[aeiouy]+(.)).*?([aeiouy])`,a+(b=(a="bcdfgszkvtgp")[11-a.search(b)]||b)+c+b+c)
Jalea ,
4539 bytesPruébalo en línea!
Cómo funciona
fuente
CJam ,
59585756 bytesPruébalo en línea!
Explicación
fuente
C,
219213206179175 bytesPruébalo en línea!
fuente
#define
sy la función con banderas de preprocesador (-D...
).Perl 5 ,
8172 bytesPruébalo en línea!
fuente
\K
, pero lo hiciste 9 bytes mejor que yo. ¡Buena respuesta!PHP, 121 bytes
Pruébalo en línea!
fuente
echo$t[1],$z=strtr($t[2].$t[3],bcdfgkpstvz,pgtvkgbzdfs),$z;
$argn
a algo más corto?$a
, por ejemplo, eso es -3 bytesPyth, 54 bytes
Esto define una función
y
, que espera una cadena. Pruébelo en línea: Test Suitefuente
Python 3,
155139 byteseliminado 16 bytes gracias a @ovs
eliminado 1 byte gracias a Gábor Fekete
fuente
'aeiouy]'
, tal vez eso ahorrará algunos bytes. También puede eliminar algunos caracteres de las cadenas de reemplazo, ya que son los mismos.IndexError
, y guardaraeiouy])
no guarda ningún byte.s='aeiouy])'
, podrías usarlob,c,v=re.findall('(.*?[%s([^%s.*?([%s'%(s,s,s)
. No es más corto, pero podría conducir a una forma de acortarlo en general.k='aeiouy])'
yf'(.*?[{k}([^{k}.*?([{k}'
Java 8,
243236222 bytesUtiliza
.replaceAll
expresiones regulares con grupos de captura para filtrar las partes que no queremos.Explicación:
Pruébalo aquí
fuente
Haskell ,
143141138137136 bytesPruébalo en línea!
fuente
nx
con algo de una letra ahorrará 2 bytes.z
fueraf
y cambiar a guardias en lugar delet
guardar otros dos bytes: ¡ Pruébelo en línea!(s,v)<-break z i,(m,c:x)<-span z v
en(s,(m,c:x))<-span z<$>break z i
.let
, ¡gracias!z
def
?Python,
261260 bytesUna solución no regex, no esotérica. Tomó unos 20 minutos para hacer, y una hora más para jugar al golf.
Probablemente tiene más comprensión de la lista que toda la biblioteca estándar de Python, principalmente porque no sé expresiones regulares ...
Pruébalo en línea! (Con estuches)
fuente
Rubí , 90 bytes.
Pruébalo en línea!
Desafiando un poco, tenemos algo equivalente a:
fuente
Python 2,
251246245239237234229211 bytesPrimera presentación aquí.
Pruébalo en línea!
Compañeros de golf que me ayudaron:
fuente
not n
an<1
de 2 bytes, ya que usted saben
que nunca será negativo. También puede cambiarn==3
an>2
ya que saben
que nunca será mayor que3
. También puede utilizar los trucos Python para los condicionales para acortar la primera y segunda pasada aún más:n=[n,1][i in w and n<1]
;r+=[0,r][n<2]
r,v,c=('',)*3
ar=v=c=''
, ya que las cadenas son inmutables. He intentado muchos otros trucos inteligentes, pero frustrantemente son exactamente igual de largos. También puede valer la pena agregar un ¡ Pruébelo en línea! enlace a su publicaciónRubí ,
175141110 bytesPruébalo en línea!
tr
argumentos sugeridos optimizadosSin golf
fuente
Hash[*"bpcgdtfvgkkgpbsztdvfzs".chars]
c=[^aeiou]
es más corta. Tiene la primera interpolación para cada variable se asigna simultáneamente durante -2 bytes:/^(.*?${v='[aeiou]'}+(#{c='[^aeiou]})).../
. Finalmente, en$2.tr("b-z","pgtevkhijgl-obqrzdufwxys")
lugar de la solución Hash.\g<n>
) en lugar de la interpolación, más otros 14 usando @ de ValueInk[^aeiou]
sugerencia:s=~/^(.*?([aeiouy])+([^aeiou]))\g<3>*(\g<2>)/
.programming
->progkaka
, que no puedo entender.\g<3>
actualiza el valor de $ 3, por lo que no podemos usar este acceso directo.Crystal,
203194187186184163 bytesfuente
c=v
o+=<...>
MATLAB / Octave -
159158bytesLo siguiente funciona asumiendo que la cadena de entrada está en minúsculas.
Explicación
a = input('','s');
: Obtiene una cadena de STDIN y la almacena en la variablea
.m=ismember(a,'aeiouy');
: Devuelve una matriz booleana que tiene el mismo tamaño que la cadena quea
determina dónde se encuentran las vocaless='pgt vkh jglmn bqrzd fwx s';
Elcovfefe
mapeo de consonantes como una cadena. Esta cadena tiene 25 caracteres y omite las vocales. La primera posición donde'a'
se supone que está la vocal se elimina, mientras que las otras posiciones donde se ubican las vocales se colocan con un carácter de espacio ficticio. Esto es así cuando determinamos la primera consonante que aparece después de la vocal, convertiremos la consonante a una posición para acceder a un carácter en esta cadena para determinar el primer componente de la palabra convertida.m(1:find(m,1))=1
: Establece la primera posición de la matriz booleana hasta donde encontramos la primera vocal como todas las vocales. Esto será para que cuando busquemos la siguiente consonante que sigue a la primera vocal, ignoremos estos caracteres.i=find(~m,1);
: Encuentra la primera posición de la cuerda que es una consonante después de la primera vocal.f=a(1:i)
: Elimina la cuerda después de la primera consonante que sigue a la vocal. Simplemente muestreamos desde la primera posición de la cadena hasta este punto.d=s(f(end)-97);
: Toma el último carácter de la cadena que queda y encuentra dónde necesitamos muestrear de la cadena de búsqueda y obtiene ese carácter. Restando un carácter y un número en MATLAB u Octave se une para formar un número entero al convertir el carácter en su código ASCII. En este caso, restamos el último carácter por el carácter al comienzo del alfabeto para darnos la posición relativa al comienzo. Sin embargo, en lugar de restar porb
(98), restamos pora
cuando MATLAB comienza a indexar por 1 en lugar de 0.'a'
El código ASCII es 97.m(1:i)=0;
: Toma la máscara booleana y establece todos los caracteres en la cadena de entrada desde la primera posición hasta la primera consonante después de una vocal en falso.v=a(find(m,1));
: Encuentra la siguiente vocal que sigue a la primera consonante de la cadena de entrada.[f d v d v]
: Salida de nuestracovfefe
cadena ied.Ejecuciones de ejemplo
Pruébalo en línea!
http://www.tutorialspoint.com/execute_octave_online.php?PID=0Bw_CjBb95KQMdjROYVR0aFNrWXM
Cuando presione el botón Ejecutar en la parte superior, espere unos momentos, luego ingrese la cadena deseada. Ingrese la cadena lentamente ya que parece haber un retraso al ingresar texto.
fuente
Clojure,
182156caracteresCómo funciona
Devuelve una secuencia de
((\p \r) (\e) (\s) (\i) (\d) (\e) (\n \t))
Desestructura la SEC en
s=(\p \r)
,m=(\e)
,c=\s
,n=\i
.O "ejemplo" que es
s=[]
,m=(\e)
,c=\x
,n=\a
.Devuelve la cadena de salida concatenando las piezas juntas y encadenándolas.
Y luego eliminé tanto espacio en blanco como pude mientras lo hacía compilar.
De-uglified:
fuente
c
, por ejemplo. (También permitimos funciones anónimas, que son más cortas en muchos idiomas; no estoy seguro de si están en Clojure). Sin embargo, veo que ya ha realizado esa mejora en el interior de su código, por lo que probablemente no sea necesario cambiar mucho aquí.R, 341 caracteres
Horrendo intento de R, ¿por qué las cuerdas son tan duras?
Versión legible:
fuente
BlitzMax, 190 bytes
Toma una palabra de stdin e imprime el resultado en stdout. Se supone que la palabra de entrada es minúscula y contiene al menos una vocal seguida de una consonante.
Una versión más legible del programa con formato y declaraciones variables:
Cómo funciona:
BlitzMax no tiene ninguna funcionalidad de expresión regular incorporada o similar, por lo que se usa un bucle para iterar sobre los caracteres de la palabra de entrada hasta que encuentre una vocal seguida de una cadena de al menos una consonante. La variable c almacena la posición de la última de esas consonantes, v la de la vocal. El ciclo continúa para ver si hay otra vocal después de la cadena y, de ser así, v se actualiza en consecuencia. Luego, la consonante en c se busca en la cadena "bpdtfvgkcgsz", que actúa como una tabla de reemplazo. Si la consonante se encuentra en la tabla en cualquier posición, entonces esa posición es XOR-ed con 1 y el carácter en la posición resultante se usa como su reemplazo. La operación XOR convierte 0 en 1, 2 en 3, 4 en 5, etc. y viceversa, de modo que b se intercambia con p, d con t y así sucesivamente. Finalmente, la cadena original hasta c,
Resultados de ejemplo:
fuente
Perl, 71 bytes
También corre con
perl -pe
. Unos pocos bytes menos que la solución Perl anterior. Es cierto que también obtuve algo de inspiración.fuente
05AB1E ,
10110488 bytes-16 bytes gracias a Okx
De alguna manera espero que esto se pueda hacer de manera más eficiente.
Pruébalo en línea!
Explicación
fuente
"bpcgdtfvgkhhjjkgllmmnnpbqqrrsztdvfwwxxzs"
con.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•
para guardar 15 bytesžOÃćIsk
conžOÃ0èk
para guardar otro byte.žOÃнk>[DIs£¤žPså#\>]©s[DIsèDžOså#\>]s\.•7¶ëÒ—Öb´ƒ≠Ä“šʒƵJ^ÝV“Îpи•S2ôDí«ø`®θkèìDJ
Pruébalo en línea. Principalmente eliminé todos los intercambios y triples intercambios utilizando una variable en su lugar. Y0è
puede serн
, y he reemplazado2׫
conDJ
unirse a toda la pila juntos. PD: También publiqué una respuesta 05AB1E de 55 bytes usando una técnica diferente. (Que también incluye un enlace para comprender mejor la compresión en 05AB1E.: D)Cristal, 130 bytes
Cómo funciona
almacenar una expresión regular para buscar la primera vocal
c
.divide el primer argumento en tres partes {"", cadena hasta un carácter antes de la primera consonante después de la primera vocal, resto de la cadena} y almacena cada uno de los elementos en x, y y z.
obtener el primer carácter, la consonante relevante.
obtener el índice de la consonante dentro de la cadena izquierda o
nil
.si
i
no es asínil
, use este índice para la segunda cadena (una especie de hash de golf).si
i
es asínil
, usa el carácter original.a continuación, agregue la primera vocal de
z
.finalmente, imprime la primera parte de la primera expresión regular
y
, la primera consonantek
y dos veces la cadena calculada anteriorb
.Pruébalo en línea .
fuente
Retina , 68 bytes
Pruébalo en línea!
fuente
LUA,
164157 bytesEdición 1: se eliminaron 7 bytes buscando cualquier carácter después de las consonantes (ver expresiones regulares)
Pruébalo en línea!
Este programa toma una cadena en el argumento CLI e imprime su versión codificada.
Esta es mi primera presentación a un código de golf! No verifiqué los otros en detalle, por lo que podría haber perdido algunas optimizaciones comunes (y caer en algunas trampas). Usé Lua porque me ha gustado este pequeño lenguaje e intenté encontrar una expresión regular que se adaptara a mis necesidades.
Aquí hay una versión más limpia, usando una función (¡pretendía usar una, pero las palabras clave en Lua son demasiado largas!):
Siéntase libre de dar algunos comentarios :)
Nota: Si se lo pregunta, ¡tiene 149 bytes de largo con MoonScript!
fuente
JavaScript (ES5),
237229 bytesPruébalo en línea!
Probablemente no sea el más golfista, pero es ES5.
Recientemente arreglado un error. Salida de ejemplo:
fuente
sed, 106 (105 + 1) bytes
Esto se deposita con la
-E
bandera, que aparentemente cuenta con un byte.Pruébalo en línea!
fuente
C #,
584581 bytes-3 bytes gracias a Destructible Lemon
Esta es mi primera presentación en Code Golf y en Stack Exchange en general. Sé que C # no es un gran lenguaje de golf y esto probablemente no está completamente optimizado, pero quería darle una oportunidad: p. Cualquier consejo es bienvenido!
Versión de golf:
Versión legible:
fuente
x++ < l
, o algo (tal vezl > x++
si el primero no funciona). aunque no estoy seguroSmileBASIC 3, 195 bytes
Muy tarde a esta pregunta, pero ¿cómo podría resistir un buen desafío para SmileBASIC 3? Las características como iterar sobre una secuencia o manipular una cadena no son tan robustas como otros lenguajes, por lo que es un poco difícil hacerlo lo más pequeño posible. Asume que las palabras son MAYÚSCULAS.
Explicación detallada aquí!
fuente
05AB1E , 55 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Vea estos consejos míos 05AB1E (sección ¿Cómo comprimir cadenas que no forman parte del diccionario? ) Para comprender por qué lo
.•gÍĆdQ¸G•
es"bcdfkszgvtgp"
.fuente