El idioma geobitsiano es una nueva perversión del inglés donde una palabra se divide en segmentos que cada uno debe comenzar con una letra diferente. Luego, cada vez que una de esas letras iniciales aparece en otra cadena, se reemplaza por todo su segmento correspondiente, manteniendo el uso de mayúsculas.
Este proceso se llama Geobitsizing .
Por ejemplo, la palabra " Geobits " podría dividirse geo bits
, y el poema sin sentido
Algy met a Bear
A Bear met Algy
The Bear was bulgy
The bulge was Algy
sería Geobitsized con él como
Algeoy met a Bitsear
A Bitsear met Algeoy
The Bitsear was bitsulgeoy
The bitsulgeoe was Algeoy
porque cada se g
convierte geo
, cada G
(aunque no haya ninguno) se convierte Geo
, cada se b
vuelve bits
y cada se B
vuelve Bits
.
Tenga en cuenta que cada sustitución se realiza con respecto a la cadena original, no a ningún paso intermedio. por ejemplo, si geo
hubiera sido en su gbo
lugar, los b
creados no se reemplazarían por bits
.
Desafío
Escriba un programa o función que pueda generar lenguaje geobitsiano.
Tome una cadena de una sola línea hecha de letras minúsculas (az) y espacios. Esta será la palabra utilizada como argumento de Geobitsizing, con los espacios que separan los segmentos. Puedes asumir:
- Los segmentos no estarán vacíos. Por lo tanto, los espacios no serán vecinos ni estarán al principio o al final de la cadena.
- Cada segmento comienza con una letra diferente. Por lo tanto, no puede haber más de 26.
Por ejemplo, algunas cadenas segmentados válidos debe apoyar son geo bits
, butt ner
, alex
, y do o r k nob
(segmentos de una sola letra no tienen ningún efecto, pero son válidos). Pero geo
, butt ner
, Alex
, y do o r k n ob
no son válidos.
Su programa o función también necesita incluir otra cadena arbitraria para aplicar el Geobitsizing e imprimir o devolver el idioma geobitsiano resultante.
Puede suponer que esta cadena solo contiene nuevas líneas y ASCII imprimible.
Recuerde que las mayúsculas y minúsculas deben conservarse de la entrada a la salida.
Aquí hay algunos ejemplos más que se usan no pro gr am m ing
como argumento de Geobitsizing:
[empty string]
→ [empty string]
i
→ ing
I
→ Ing
Mmmm, mmm... MmmmMMM: m&m!
→ Mmmm, mmm... MmmmMMM: m&m!
(sin cambios)
People think bananas are great, don't you?
→ Proeoprole thingnok bamnoamnoams amre grreamt, dono't you?
Pet a Puppy
Google Wikipedia
↓
Proet am Prouproproy
Groogrle Wingkingproedingam
Tenga en cuenta que los resultados deben ser idénticos sin importar cómo esté organizado el argumento, por ejemplo, ing pro m no am gr
deben producir los mismos resultados que anteriormente.
El código más corto en bytes gana.
["no", "pro", "gr", "am", "m", "ing"]
\\b${l}(\\S+)
aunque eso te cuesta 5 bytes.abra cadabra
,!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
, que cubra todos los casos límite, y hay muchos de ellos, si uno intenta utilizar expresiones regulares ...Respuestas:
Jalea , 18 bytes
Pruébalo en línea!
Versión alternativa, 15 bytes (no competitiva)
La función del caso del título de Jelly tenía un error; no capitalizó la primera palabra. Eso se ha solucionado, por lo que lo siguiente funciona ahora.
Este código hace lo mismo que en la versión de la competencia, excepto que
Œt
(caso de título) reemplaza la mayúscula condicional lograda porŒu1¦€
.Cómo funciona
fuente
Python 3, 71 bytes
Pruébalo en Ideone .
Cómo funciona
En Python 3 , el incorporado
str.translate
toma una cadena y un diccionario, y reemplaza cada carácter en la cadena cuyo punto de código es una clave de ese diccionario con el valor correspondiente, que puede ser una cadena, un número entero o Ninguno (equivalente al cuerda vacía).Al convertir la cadena de palabras w en mayúsculas (es decir, poner en mayúscula la primera letra de cada palabra) y agregarla al resultado de, se
w+' '
crea una cadena de palabras separadas por espacios con una versión en mayúsculas y minúsculas (primera letra). Sin un segundo argumento, sestr.split
divide en espacios en blanco, por lo que(w+' '+w.title()).split()
crea la lista de todas las palabras.Finalmente, la comprensión del diccionario
{ord(t[0]):t for t in...}
convierte cada palabra t en una entrada del diccionario con claveord(t[0])
(punto de código de la primera letra) y valor t , porstr.translate
lo que realizará las sustituciones previstas.fuente
Python,
126999581 bytesMuchas gracias a Dennis:
Edit1: no es necesario agregar a un archivo temporal
Edit2:
S
puede contener mayúsculas ...Edit3: no duplique G
Edit4: comprimido un poco más y lo empujó en una línea
Edit5: usando lambda sin nombre y
j=join' '
fuente
Pyth, 19 bytes
Pruébalo en línea!
fuente
Vim, 46 pulsaciones de teclas
Feo y Hacky.
fuente
Retina , 36 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
fuente
Pyth
18 añosdieciséisPruébalo aquí
Define una función
g
que realiza la geobitsising. Como programa, esto sería un poco más corto si la segunda cadena es de una sola línea, pero la entrada multilínea no vale la pena:La idea general aquí era titular el caso de la cadena geobitsiana y agregarla a la cadena original. Luego divídalo en espacios y para cada cadena, tome la primera letra y asignela a la cadena que representa. De esa manera
X
, la primera letra de cada palabra se convertirá en la palabra completa.fuente
Python 2,
8378 bytesPruébalo en Ideone .
Cómo funciona
Nos iterar sobre todos los caracteres c en la cadena s .
Anteponemos un espacio a la cadena de palabras w , luego buscamos una aparición de c minúscula , precedida por un espacio.
Si existe tal ocurrencia,
find
devolverá el índice del espacio en la cadena' '+w
, que coincide con el índice de c en w .w[...:]
por lo tanto, devuelve la cola de w , comenzando por la palabra con la primera letra c .split()
divide la cola en espacios,[0]
selecciona el primer fragmento (la palabra) y[1:]
elimina su primera letra.Después de anteponer c al resultado anterior, obtenemos la palabra correctamente en mayúscula que comienza con c .
Si ninguna palabra comienza con c ,
find
devolverá -1 .Por lo tanto,
w[...:]
produce el último carácter de w , losplit()
envuelve en una matriz,[0]
deshace el ajuste y[1:]
elimina el único carácter de la cadena.Después de anteponer c , obtenemos la cadena singleton cuyo carácter es c , por lo que toda la operación es no operativa.
Finalmente,
''.join
concatena todas las cadenas resultantes, devolviendo la versión Geobitsized de s .fuente
Julia,
7268 bytesPruébalo en línea!
fuente
CJam, 19 bytes
Pruébalo aquí.
Explicación
fuente
JavaScript ES6,
676370 bytesPrueba esto en Firefox. los errores hacen que esto sea más largo de lo que me gustaría
Explicación
fuente
f("abracadabra")("1Dbw")
vuelve"1abracadabraDbracadabrababracadabrawbracadabra"
.Ruby,
656058 bytesPruébalo en línea!
fuente