Nota: La respuesta ganadora se seleccionará el 12/04/17, el ganador actual es Jolf, 1 byte .
Me sorprende que todavía no hayamos tenido un desafío para mi segundo nombre en este sitio. Hice mucha búsqueda pero no encontré nada. Si se trata de un duplicado, márquelo como tal.
Tu reto
Analiza una cadena que se parece Jo Jean Smith
y regresa Jean
.
Casos de prueba
Input: Samantha Vee Hills
Output: Vee
Input: Bob Dillinger
Output: (empty string or newline)
Input: John Jacob Jingleheimer Schmidt
Output: Jacob Jingleheimer
Input: Jose Mario Carasco-Williams
Output: Mario
Input: James Alfred Van Allen
Output: Alfred Van
(Ese último es incorrecto técnicamente, pero arreglarlo sería demasiado difícil).
Notas:
- Los nombres siempre tendrán al menos 2 partes separadas por espacios, con nombres intermedios ilimitados entre ellos o pueden ser una lista / matriz de cadenas.
- Los nombres pueden contener el alfabeto (no distingue entre mayúsculas y minúsculas) y - (
0x2d
) - Puede generar una nueva línea final.
- Es posible que necesite una entrada para tener una nueva línea final.
- Se permite la entrada de STDIN, un parámetro de función o un argumento de línea de comandos, pero no se permite codificarlo.
- Lagunas estándar prohibidas.
- La salida puede ser el valor de retorno de la función, STDOUT, STDERR, etc.
- Se permiten espacios finales / líneas nuevas / pestañas en la salida.
- ¿Alguna pregunta? ¡Comenta abajo!
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
una solución válida?Respuestas:
Jolf, 1 byte
Obtiene el interior de la entrada. Pruébalo aquí!
fuente
Ohm , 2 bytes (CP437)
Acepta y devuelve una lista de cadenas.
Explicación:
fuente
Vim,
65 bytesPruébalo en línea!
(salidas con un espacio final)
Como Vim es inversamente compatible con V, he incluido un enlace TIO para V.
Explicación
fuente
dWWD
te ahorra un byte.dW
elimina hasta el espacio en blanco.dw
elimina hasta caracteres que no sean palabras.Python , 24 bytes
Pruébelo en línea de entrada de cadena!
Formato de entrada: cadena
Python 2 , 16 bytes
¡Pruébelo en línea de entrada!
Formato de entrada: Lista
fuente
Python
lugar dePython 2
, porque también funcionaPython 3
, estaba a punto de publicar eso.must be a string
, y dado que el formato de entrada puede ser una lista, ¡imprimir una lista no puede considerarse como un resultado incorrecto!lambda n:n[1:-1]
input()
(solo Python 3)Brain-Flak , 133 bytes
Pruébalo en línea!
132 bytes de código, más 1 byte para el
-c
indicador que permite la entrada y salida ASCII.Desafortunadamente, esto contiene muchos códigos duplicados, pero sería realmente difícil de reutilizar. Lo investigaré más tarde. Aquí hay una explicación:
fuente
05AB1E , 2 bytes
Pruébalo en línea!
Si no se permite generar una lista de segundos nombres, la cambiaré.
fuente
Haskell,
23,179 bytesToma y devuelve una lista de cadenas. Pruébalo en línea!
Soltar la primera cuerda, soltar la última cuerda.
Editar: @Generic Display Name señaló, que la entrada puede ser una lista de cadenas, que ahorró 6 bytes.
Edición II: devuelve la lista de cadenas en lugar de una sola cadena
fuente
unwords.
-8 bytes.Mathematica, 10 bytes
Una función sin nombre que acepta y devuelve una lista de cadenas.
Rest
descarta el último elemento,Most
descarta el primer elemento,@*
es composición de funciones. CambiarRest
y /Most
o usar la composición correcta en su/*
lugar también funcionaría. Esto supera la indexación a través#[[2;;-2]]&
de un byte.fuente
Brain-Flak , 86 bytes
Pruébalo en línea!
La mayor parte de este código proviene de esta respuesta . Si te gusta mi solución, también deberías votarla.
fuente
Java 7, 74 bytes
Java 8, 49 bytes
Función que identifica la primera aparición del carácter de espacio y la última y extrae el medio. La cadena resultante tiene como prefijo un carácter de espacio (en el momento de la publicación, OP no ha aclarado si se permiten espacios iniciales), que se pueden eliminar agregando
.trim()
al código un costo adicional de 7 bytes.En comparación con C #, Java tiene la ventaja de especificar el índice final en lugar de la longitud de la subcadena, lo que reduce el recuento de bytes.
fuente
JavaScript (ES6), 22 bytes
Toma y emite una serie de cadenas.
Casos de prueba
Mostrar fragmento de código
Versión de cadena (27 bytes)
Toma y emite una cadena. La cadena de salida es un espacio único si no se encontró un segundo nombre, o los segundos nombres con espacios iniciales y finales.
Mostrar fragmento de código
fuente
/./.exec.bind(/ .* /)
parece imitar # 2, exceptonull
por ningunoAWK ,
1710 bytesGuardado 7 bytes gracias a @steve!
Pruébalo en línea!
Explicación:
fuente
$NF=$1="";1
$NF=$1=x;1
1
? No soy tan bueno en AWK :)Groovy , 19 bytes
Explicación:
Una función de cierre / anónimo
fuente
.split()
?PHP, 37 bytes
-4 bytes para una salida como matriz
PHP, 42 bytes
PHP, 50 bytes
fuente
Retina , 11 bytes
Pruébalo en línea!
Coincide con la primera palabra (incluido el espacio después) y la última palabra, y elimina ambas.
Si la E / S puede ser una lista separada por salto de línea, puede hacerse en 8 bytes:
Pruébalo en línea!
fuente
Perl 5 ,
2718 bytesNecesito correr con
-n
opción.Pruébalo en línea!
Quería hacer algo similar en sed primero, pero, desafortunadamente, no admite un cuantificador no codicioso.
Es necesario en caso de que el segundo nombre sea más de una palabra.Editar
-9 bytes gracias a Dada .
El cuantificador no codicioso ya no es necesario, entre otras cosas.
fuente
/ (.+) /&&print$1
Debería ser clasificador. ¡Es genial ver a gente nueva jugando golf con Perl!print if s| (.+) |\1|
no funciona? Para mí, se parece a lo que escribiste.print if s| (.+) |\1|
reemplaza la parte del medio con ... la parte del medio! (menos los espacios antes y después), por lo que no funciona. Por otro lado, lo que sugerí solo coincide con la parte media e imprime solo ($1
).Javascript (ES6)
4916 bytesEditar:
Pruébalo en línea!
sin golf:
Olvidé algunas de las propiedades simples de
slice
, y que la entrada puede ser una matriz. Gracias a @Neil y @ fəˈnɛtɪk pude eliminar 27 bytes. Todavía no compite realmente.Original:
Esto no es realmente competitivo, pero aquí hay una solución Javascript:
Esto crea una función anónima igual a:
Cómo lo jugué
Este es un golf bastante simple. Convertí la función en una función de flecha . Luego "minifiqué" el código. Esto incluyó renombrar
name
en un solo carácter (a
en este caso) y eliminar lalet
decoloración de la variable.Retazo
Mostrar fragmento de código
Espero que esto ayude a cualquiera que esté atrapado en el desafío.
fuente
length -
es innecesario,slice
ya que acepta longitudes negativas como relativas al final. Esto significa que ya no necesita la variable intermedia, por lo que puede convertir su función de flecha de un bloque en una expresión.-1
es la última pero que necesitas aquí.Röda , 9 bytes
Pruébalo en línea!
No es una solución muy interesante. Toma una lista de la secuencia y devuelve los segundos nombres.
21 bytes y E / S:
Pruébalo en línea!
Esto usa
/
(dividir) y&
(unir).fuente
Jalea , 2 bytes
Pruébalo en línea!
Esto funciona como un enlace no en línea (es decir, función), no como un programa completo.
'John','Jacob','Jingleheimer','Schmidt'
→'Jacob','Jingleheimer'
Como programa completo, sería de 3 bytes:
ḊṖK
que imprime un segundo nombre separado por espacios.fuente
Pyth, 2 bytes
Intérprete en línea
fuente
C #, 67 bytes
Función anónima que identifica la primera aparición del carácter de espacio y la última y extrae el medio. También extrae un espacio final, que puede eliminarse a costa de 2 bytes.
Programa completo con casos de prueba:
fuente
Kotlin , 39 bytes
Pruébalo en línea!
es decir
fuente
VBA, 69 bytes
fuente
R,
302722 bytes¡Solución actual debido al usuario 11599!
Toma la entrada de stdin, devuelve cada segundo nombre como una cadena separada. Devuelve
character()
en el caso de que no haya segundo nombre; es decir, un vector de clasecharacter
de longitud0
.Explicación:
Leer stdin en una lista de cadenas, separadas por espacios
Eliminar el último elemento.
head
devuelve los primerosn
elementos de una lista, con el valorn
predeterminado de6
. Sin
es-1
, devuelve todo menos el último elemento.Ahora, elimine el primer elemento de esta lista.
Esto produce el segundo nombre (s).
fuente
head()
ytail()
, pero no sabía que podías pasar un número negativo como segundo argumento. ¡Agradable!Ruby,
2413 bytesAhorró 11 bytes gracias a Piccolo que señala que se permite una salida tipo matriz
Toma el nombre como argumentos de línea de comando separados, por ejemplo:
o
Código anterior (genera una cadena adecuada):
fuente
$><<ARGV[1..-2].join" "
eso se queja de" "
ser inesperado, por lo que tendría que agregar paréntesis, lo que agregaría 1 byte al final.puts ARGV[1..-2]
, para que lo sepa.p ARGV[1..-2]
de 13 bytes - sólo se parece en nada a la producción en los PO poner en entredichoGolang ,
15281 bytesToma la entrada como "Samantha Vee Hills" (con comillas dobles) y devuelve el segundo nombre al stdout.
Pruébalo en línea!
Editar: @Dada, tenga en cuenta que la "función como respuesta está permitida" acorta mi código 71 bytes. muchas gracias!
fuente
Matlab,
81,79,78, 55 bytesToma una cadena de entrada,
s
, se divide (por el delimitador predeterminado, espacio en blanco char) en una matriz de celdas, desde la cual se accede al elemento central. Luego, los elementos intermedios se concatenan o se devuelve una cadena vacía.Editar: gracias a Luis Mendo por guardar 3 bytes!
Edición 2: ¡Mejor solución de Ankit!
fuente
nnz
en una matriz de celdas, pero hice los otros dos cambios :)function x=a(s) s=strsplit(s);x=strjoin(s(2:end-1));end
C, 42 bytes
El parámetro es una matriz terminada en NULL de punteros a char.
Míralo funcionar aquí .
Los argumentos de la línea de comando también se pueden usar con la misma función .
C, 51 bytes
Un programa completo La entrada se realiza a través de argumentos de línea de comando.
Míralo funcionar aquí .
C, 54 bytes
El parámetro es un parámetro de entrada / salida.
Véalo funcionar aquí .
fuente
Python 2,
421916 bytesPruébalo en línea! ¡Gracias a @Kritixi Lithos por guardar 23 bytes! Gracias @math_junkie por guardar 3 bytes más. Para la entrada, coloque cada parte del nombre como una cadena dentro de una lista así:
Y sí, el OP ha aprobado una lista para ser una entrada válida.
Explicación
fuente
print input()[1:-1]
es más cortolambda n:n[1:-1]
es aún más cortoSamantha Vee Hills
como entrada en el enlace repl.it que has compartido, esto simplemente imprime,amantha Vee Hill
que definitivamente no es la salida requerida.Names will always have at least 2 space-separated parts
Es el primer punto de la pregunta correcta.C ++, 91 bytes
Toma la entrada como referencia a una lista de cadenas y modifica la lista directamente.
Pruébalo en línea!
fuente