Dada una dirección de correo electrónico, el resultado de una transformación aplicada a esa dirección de correo electrónico, y una segunda dirección de correo electrónico, devuelve el resultado de la misma transformación aplicada a la segunda dirección de correo electrónico.
Todas las direcciones de correo electrónico tendrán la siguiente estructura:
Una cadena de longitud positiva que contiene caracteres alfanuméricos y como máximo uno .
(la parte local), seguido de un @
símbolo, seguido de una cadena de longitud positiva que contiene símbolos alfanuméricos (el dominio), seguido de un .
símbolo y una cadena final de longitud positiva que contiene caracteres alfanuméricos (el TLD).
Hay cuatro transformaciones permitidas:
- Identidad (sin cambio). (
[email protected] -> [email protected]
) - Devolver solo la parte local (todo antes de
@
) sin modificar ([email protected] -> a.b
). - Devolver la parte local dividida en el
.
si está presente, con el primer símbolo de cada mitad en mayúscula. ([email protected] -> A B
). - Devolver solo el dominio (todo entre el
@
y el final.
) sin modificar. ([email protected] -> c
).
Cuando es posible más de una transformación, puede dar el resultado de cualquiera de las posibilidades. Los espacios en blanco al inicio y al final de la salida no importan, pero en el medio sí (es decir, si se divide a.b
en A B
debería haber solo un espacio en el medio [y cualquier número al inicio y al final de la salida], pero si se divide a.
, entonces, A
con cualquier número de espacios a cada lado, todos son aceptables).
Ejemplos ( input | output
):
[email protected], John Doe, [email protected] | Phillip Maini
[email protected], John Doe, [email protected] | Phillip Maini
[email protected], foo.bar, [email protected] | gee.whizz
[email protected], foo.bar, [email protected] | gEe.Whizz
[email protected], comedy, [email protected] | office
[email protected], Jones, [email protected] | A
[email protected], [email protected], [email protected] | [email protected]
[email protected], .jones, [email protected] | a.
[email protected], x, [email protected] | 3
[email protected], [email protected], [email protected] | [email protected]
[email protected], John Jones, [email protected] | 1in Thehand
[email protected], Chicken Soup, [email protected] | Fab
[email protected], lange, [email protected] | fat.so
[email protected], Lange, [email protected] | {fat.so, Fat So} # either acceptable
[email protected], chicken, [email protected] | {horse, pig} # either acceptable
Se aplican las reglas habituales y las lagunas.
@
y final.
). Dado que la parte local y el dominio son amboschicken
, es ambiguo si se trata de la segunda o cuarta transformaciónA
[con un espacio final] que la segunda entrada seaJones
[con un espacio inicial])?[email protected], Jones, [email protected]
es asíA
: sijones
coincide, significa que la parte coincidente es la parte entre el primer período y el símbolo @. Pero eso daría como resultado una cadena vacía porquea
es anterior al primer período y no después.Respuestas:
Java 8,
254240236 bytes-4 bytes gracias a @LukeStevens .
Explicación:
Pruébalo aquí
fuente
(p.charAt(0)+"").toUpperCase()
lugar deCharacter.toUpperCase(p.charAt(0))
.(char)(p.charAt(0)&~32)
principio tenía , pero esto no funcionó debido al1in Thehand
caso de prueba. Pero ponerlo en mayúsculas como String es realmente más corto queCharacter.toUpperCase
, ¡así que gracias!Haskell , 208 bytes
Pruébalo en línea!
Es triste que tuve que gastar 59 bytes en reinventar
split
(s
).La solución crea una lista de transformaciones y devuelve la primera que conduce al resultado esperado.
fuente
Jalea , 40 bytes
Gracias preventivas a Erik the Outgolfer por notar la falla en el uso
Œt
(title-case) y porŒu1¦€K
lo tantoŒtK
-1 byte gracias a Erik the Outgolfer (reordenamiento de
⁵⁸ç⁹¤Ŀ
açµ⁵⁸Ŀ
)Una toma de programa completo
exampleEmail
,exampleOutput
,realEmail
e imprimir el resultado.Pruébalo en línea!
¿Cómo?
Realiza las cuatro transformaciones (más una precursora), encuentra la primera que proporciona el ejemplo del primer correo electrónico y luego la aplica al segundo correo electrónico:
Notas:
Asume que la entrada exampleOutput es estrictamente la misma que la salida sería.
Se prueba que el "precursor" (el resultado del enlace 3) coincide
exampleOutput
, pero no coincidirá a menos queexampleOutput
sea una lista de listas de caracteres. Como tal, las entradas probablemente deberían citarse (el formato de Python se puede usar aquí) para evitar la posibilidad de interpretarlo como tal.fuente
Python 2 , 135 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 145 bytes
Invocar con sintaxis curry, p. Ej.
f('[email protected]')('Chicken Soup')('[email protected]')
Mostrar fragmento de código
fuente
Mathematica, 217 bytes
Pruébalo en línea!
fuente
Rubí ,
117106102 bytesPruébalo en línea!
fuente
CJam, 42
Pruébalo en línea
Explicación:
fuente
PHP 7.1, 176 bytes
Pruébalo en línea!
PHP <7.1, 180 bytes
Las versiones anteriores a 7.1 tendrían que cambiar el
[,$p,$q,$r]=$argv
alist(,$p,$q,$r)=$argv
, agregando 4 bytes.fuente
GNU sed , 105 + 1 (r flag) = 106 bytes
Los primeros tres
s
comandos verifican la identidad , la parte local y las transformaciones de dominio respectivamente. Si una transformación coincide, se aplica a la segunda dirección de correo electrónico y los siguientess
comandos fallarán debido a la falta del formato de entrada.Pruébalo en línea!
La transformación de división de parte local (último
s
comando) es la más costosa de verificar, en términos de bytes, por lo tanto, la coloqué al final y asumí que coincide (ya que las otras fallaron en ese momento), yendo directamente a su aplicación.fuente
Jalea , 43 bytes
Pruébalo en línea!
fuente
ŒtK
Funcionaría en lugar deŒu1¦€K
guardar 3?Œl
?1in.thehand
no funcionaríaŒtK
.str.title
).