Su desafío es tomar un nombre (cadena) como entrada, como
Albert Einstein
y salida:
Einstein, Albert
Pseudocódigo:
set in to input
set arr to in split by " "
set last to the last element of arr
remove the last element of arr
set out to arr joined with " "
prepend ", " to out
prepend last to out
output out
Más casos de prueba:
John Fitzgerald Kennedy => Kennedy, John Fitzgerald
Abraham Lincoln => Lincoln, Abraham
Reglas
- La entrada siempre coincidirá con la expresión regular
^([A-Z][a-z]+ )+([A-Z][a-z]+)$
. - No necesita manejar nombres extraños , incluso si la salida es técnicamente incorrecta, aquí está bien.
- El espacio en blanco al final / nueva línea está bien.
- ¿Alguna pregunta? ¡Comenta abajo!
le
con descuido,
y usted tiene esta preguntale
con,
.Respuestas:
05AB1E , 7 bytes
Código:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
fuente
JavaScript (ES6), 34 bytes
Manifestación:
fuente
Retina ,
191716 bytesEditar: Gracias a Riker por guardar 3 bytes
Pruébalo en línea!
fuente
(.+)
funciona también para ambos.\w
en primer lugarJalea , 7 bytes
Pruébalo en línea!
No conozco a Jelly muy bien, pero al leer otras respuestas parecía que no usaban un algoritmo óptimo ... así que aquí está:
Explicación
fuente
Vim, 10 bytes / pulsaciones de teclas
Pruébalo en línea!
fuente
<esc>
no aparece en su código. Para avisar a otros que quieran probar: Esto supone que el nombre está escrito en el editor y que actualmente se encuentra al principio del archivo en modo normal.V / vim,
98 bytesPruébalo en línea!
Guardado un byte gracias a
Tenga en cuenta que hay un carácter de espacio final. Deja un espacio final, que está permitido según las reglas.
Explicación:
fuente
<esc>
. Puede guardar un byte haciendo en$bD
lugar de$diw
. :)$bD
sin embargo, no maneja nombres de un carácter, le pregunté a OP si eso está permitido.Python 2 , 39 bytes
Pruébalo en línea!
Sí,
rsplit
.fuente
input
lugar deraw_input
jugar al golf - vea esta meta publicaciónMathematica,
5240 bytesfuente
> <> , 27 bytes
Pruébalo en línea!
fuente
C, 45 bytes
EDITAR: Acabo de notar el requisito de que la entrada posiblemente tenga más de dos palabras. Lo dejaré como está con una nota de que esto solo funciona para dos palabras.
EDITAR: eliminado
\n
. Agregue 2 bytes si lo considera necesario.Compila con
gcc name.c
GCC 6.3.1. Ignorar las advertencias. Uso:Abuso de lenguaje:
int
de retorno implícitomain
y nada devuelto.printf
. GCC lo incluirá de todos modos.b
. No importa con%s
Gracias a @ Khaled.K por los consejos sobre el uso en
main(a,b)int**b;
lugar demain(int a, int **b)
.fuente
main(a,**b){printf("%s, %s",b[2],b[1]);}
es de 40 bytesmain(a,b)int**b;{printf("%s, %s\n",b[2],b[1]);}
Ruby , 22 bytes
Pruébalo en línea!
fuente
sed, 19 + 1 para -E = 20 bytes
Debe usar -r (GNU) o -E (BSD, GNU recientes) para evitar tener que escapar del paréntesis de agrupación.
Si está escrito en la línea de comandos, debe estar entre comillas para evitar que el shell lo analice como tokens múltiples:
fuente
C, 68 bytes
Espero que no esté mal agregar otra publicación, pero aquí hay una solución ligeramente diferente a mi solución C publicada anteriormente. Este acepta cualquier número de nombres.
Compile con
gcc name.c
(GCC 6.3.1) e ignore las advertencias. Uso:Gracias a @ Khaled.K por los consejos sobre
main(a,b)int**b;
Gracias por el consejo sobre el bucle for a @Alkano.
fuente
main(a,b)int**b;{for(printf("%s,",b[--a]);++b,--a;printf(" %s",*b));}
main(a,b)int**b;{a&&printf("%s,"b[a-1])&&main(a-1,b);}
main(a,b)int**b;{--a&&printf("%s, ",b[a])&&main(a,b);}
. Es 2 bytes más corto y se asegura de que no imprima el nombre del programa, pero aún usa una coma entre cada nombre.Mathematica, 45 bytes
Se guardaron algunos bytes sobre la respuesta de ngenisis tomando la entrada como una lista de caracteres en lugar de como una cadena. Función pura que usa una regla de reemplazo de patrones.
Mathematica, 49 bytes
Otra función pura que toma una lista de caracteres como entrada y devuelve una lista de caracteres. Éste añade
","
y" "
a la entrada y luego gira la lista de caracteres hasta el último espacio se encuentra al final. (Por lo tanto, la salida tiene un espacio final, a diferencia de la primera función anterior).fuente
#/.{a__,s=" ",b:Except@s..}->{b,",",s,a}&
es4
bytes más cortos, pero descubrí que noExcept
es necesario para los patrones de cadena, lo que me ahorra12
bytes.x
en tu respuesta?C #,
7672 bytesGuardado 4 bytes con la ayuda de @KevinCruijssen
Versión antigua que usa subcadenas para 76 bytes:
fuente
System.Text.RegularExpressions.Regex
sea tan largo en C # ..s=>new System.Text.RegularExpressions.Regex("(.+) (.+)").Replace(s,"$2, $1");
es solo un byte más.Regex
para guardar 4 bytesAwk, 18 personajes
Ejecución de muestra:
Pruébalo en línea!
fuente
Jalea , 8 bytes
Pruébalo en línea!
fuente
05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
Pyth , 11 bytes
Explicación:
¡Pruébalo en línea!
fuente
PHP, 45 bytes
Pruébalo en línea!
fuente
\pL+
lugar de.+
?.
o\pL
MATLAB / Octave , 37 bytes
Pruébalo en línea!
Basado en la respuesta Retina de @ngenisis, también podemos jugar el juego de expresiones regulares tanto en Octave como en MATLAB, ahorrando unos pocos bytes sobre mi respuesta anterior.
Vieja respuesta:
Voy a dejar esta respuesta aquí también teniendo en cuenta que es una forma más única de hacerlo en comparación con una simple expresión regular.
Octava ,
4947 bytes¡Inténtalo en línea!
Una función anónima para generar la salida.
Básicamente, el código primero encuentra el último espacio en la cadena usando
b=find(a==32)(end)
. Luego toma la parte final de la cadena (después del espacio) usandoa(b+1:end)
, dondeb
es la salida de encontrar el último espacio. También toma el inicio de la cadena cona(1:b-1)
, y concatena ambos junto con un', '
en el medio.Ya he guardado algunos bytes en comparación con el típico
find(a==32,1,'last')
. No estoy seguro de que haya mucho más para ahorrar.fuente
Jalea , 9 bytes
Explicado, ish:
Pruébalo en línea!
Probar en todos los casos de prueba.
fuente
Python 3, 52 bytes
Muy simple, podría usar ayuda de golf. Simplemente pone la última palabra al frente y las une con ",".
Caso de prueba:
fuente
Japt, 14 bytes
Un puerto de la respuesta de JavaScript de @ programmer5000 .
Pruébalo en línea!
fuente
Java,
11062 bytesMétodo no estático.
-48 bytes gracias a Kevin Cruijssen
fuente
String c(String s){int i=s.lastIndexOf(' ');return s.substring(i+1)+", "+s.substring(0,i);}
es más corto ( 91 bytes ).String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}
es aún más corto ( 62 bytes ).PHP ,
6259 bytes-3 bytes, gracias Jörg
Pruébalo en línea!
Solución anterior, 63 bytes
No funciona si la persona tiene 3 nombres repetidos.
Pruébalo en línea
fuente
$argn
lugar de$argv[1]
Excel,
174170168 bytesGuardado 2 bytes gracias a Wernisch
Esto no es elegante ni inteligente. Es un método bastante básico. Parece que debería haber una forma más corta con las fórmulas de matriz, pero no puedo encontrar una que funcione.
fuente
-1
función LEFT.JS (ES6),
5244 bytesfuente
MATL , 10 bytes
Pruébalo en línea!
Explicación
fuente
Gema, 23 personajes
Lo único notable aquí es cómo el desafío logró golpear la debilidad de la no codicia de los patrones Gema.
Ejecución de muestra:
fuente