Nota: A resposta vencedora será selecionada em 12/04/17, o vencedor atual é Jolf, 1 byte .
Estou surpreso por ainda não termos enfrentado o desafio do meu nome do meio neste site. Eu fiz muita pesquisa, mas não encontrei nada. Se este é um dup, sinalize-o como tal.
Seu desafio
Analise uma string com aparência Jo Jean Smith
e retorne Jean
.
Casos de teste
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
(Esse último está incorreto tecnicamente, mas corrigir isso seria muito difícil.)
Notas:
- Os nomes sempre terão pelo menos duas partes separadas por espaço, com nomes intermediários ilimitados entre elas ou podem ser uma lista / matriz de cadeias.
- Os nomes podem conter o alfabeto (sem distinção entre maiúsculas e minúsculas) e - (
0x2d
) - Você pode gerar uma nova linha à direita.
- Você pode precisar de entrada para ter uma nova linha à direita.
- A entrada de STDIN, um parâmetro de função ou argumento de linha de comando é permitida, mas a codificação não é permitida.
- Falhas padrão proibidas.
- A saída pode ser um valor de retorno da função, STDOUT, STDERR, etc.
- Espaços finais / novas linhas / guias na saída são permitidos.
- Alguma pergunta? Comente abaixo!
Isso é código-golfe , então a resposta mais curta em bytes vence!
["John", "Jacob", "Jingleheimer", "Schmidt"]
->["Jacob", "Jingleheimer"]
uma solução válida?Respostas:
Jolf, 1 byte
Obtém o interior da entrada. Experimente aqui!
fonte
Ohm , 2 bytes (CP437)
Aceita e retorna uma lista de cadeias.
Explicação:
fonte
Vim,
65 bytesExperimente online!
(saídas com um espaço à direita)
Como o Vim é compatível reversamente com o V, incluí um link TIO para V.
Explicação
fonte
dWWD
economiza um byte.dW
exclui até o espaço em branco.dw
exclui até caracteres que não sejam palavras.Python , 24 bytes
Experimente a entrada de string online!
Formato de entrada: string
Python 2 , 16 bytes
Experimente a entrada da lista online!
Formato de Entrada: Lista
fonte
Python
vez dePython 2
, porque também funcionaPython 3
, estava prestes a publicá-lo.must be a string
e, como o formato de entrada pode ser uma lista, imprimir uma lista não pode ser considerada um resultado errado!lambda n:n[1:-1]
input()
(Python 3 apenas)Flacidez Cerebral , 133 bytes
Experimente online!
132 bytes de código, mais 1 byte para o
-c
sinalizador que permite entrada e saída ASCII.Infelizmente, isso contém muito código duplicado, mas seria muito difícil reutilizá-lo. Vou dar uma olhada mais tarde. Aqui está uma explicação:
fonte
05AB1E , 2 bytes
Experimente online!
Se a saída de uma lista de nomes do meio não for permitida, vou alterá-la.
fonte
Haskell,
23,179 bytesPega e retorna uma lista de strings. Experimente online!
Solte a primeira string, solte a última string.
Edit: @Generic Display Name observado, que a entrada pode ser uma lista de strings, que salvou 6 bytes.
Editar II: retornar lista de strings em vez de uma única string
fonte
unwords.
para -8 bytes.Mathematica, 10 bytes
Uma função sem nome que aceita e retorna uma lista de seqüências de caracteres.
Rest
descarta o último elemento,Most
descarta o primeiro elemento,@*
é a composição da função. TrocarRest
e /Most
ou usar a composição correta/*
também funcionaria. Isso supera a indexação#[[2;;-2]]&
por um byte.fonte
Flacidez Cerebral , 86 bytes
Experimente online!
A maior parte desse código vem dessa resposta . Se você gosta da minha solução, também deve votar nessa.
fonte
Java 7, 74 bytes
Java 8, 49 bytes
Função que identifica a primeira ocorrência do caractere de espaço e a última e extrai o meio. A sequência resultante é prefixada por um caractere de espaço (no momento da postagem, o OP não esclareceu se espaços iniciais são permitidos), que podem ser eliminados adicionando-
.trim()
se ao código por um custo extra de 7 bytes.Comparado ao C #, o Java tem a vantagem de especificar o índice final em vez do comprimento da sub-cadeia, o que reduz a contagem de bytes.
fonte
JavaScript (ES6), 22 bytes
Pega e gera uma matriz de seqüências de caracteres.
Casos de teste
Mostrar snippet de código
Versão da string (27 bytes)
Pega e gera uma string. A cadeia de saída é um espaço único se nenhum nome do meio foi encontrado ou os nomes do meio com espaços à esquerda e à direita.
Mostrar snippet de código
fonte
/./.exec.bind(/ .* /)
parece imitar # 2, com excepçãonull
para nenhumAWK ,
1710 bytesGuardado 7 bytes graças a @steve!
Experimente online!
Explicação:
fonte
$NF=$1="";1
$NF=$1=x;1
1
faz? Eu não sou tão bom em AWK :)Groovy , 19 bytes
Explicação:
Uma função de fechamento / anônima
fonte
.split()
?PHP, 37 bytes
-4 bytes para uma saída como matriz
PHP, 42 bytes
PHP, 50 bytes
fonte
Retina , 11 bytes
Experimente online!
Corresponde à primeira palavra (incluindo o espaço após ela) e à última palavra e remove as duas.
Se a E / S puder ser uma lista separada por avanço de linha, poderá ser feita em 8 bytes:
Experimente online!
fonte
Perl 5 ,
2718 bytesPrecisa executar com a
-n
opçãoExperimente online!
Queria fazer algo semelhante no sed primeiro, mas, infelizmente, ele não suporta quantificadores não-gananciosos.
É necessário caso o nome do meio tenha mais de uma palavra.Editar
-9 bytes graças a Dada .
O quantificador não ganancioso não é mais necessário, entre outras coisas.
fonte
/ (.+) /&&print$1
deve ser classificador. Ótimo ver novas pessoas jogando golfe com o Perl!print if s| (.+) |\1|
que não funciona? Para mim, parece semelhante ao que você escreveu.print if s| (.+) |\1|
substitui a parte do meio por ... a parte do meio! (menos os espaços antes e depois), para que não funcione. Por outro lado, o que sugeri corresponde apenas à parte do meio e imprime apenas ($1
).Javascript (ES6)
4916 bytesEditar:
Experimente online!
ungolfed:
Esqueci algumas das propriedades simples de
slice
, e que a entrada pode ser uma matriz. Graças a @Neil e @ fəˈnɛtɪk, consegui remover 27 bytes. Ainda não está realmente competindo.Original:
Isso não é realmente competitivo, mas aqui está uma solução Javascript:
Isso cria uma função anônima igual a:
Como eu jogava golfe
Este é um golfe bem simples. Eu transformei a função em uma função de seta . Então eu "minifiquei" o código. Isso incluiu renomear
name
em um único caractere (a
neste caso) e remover alet
decloração da variável.Snippet
Mostrar snippet de código
Espero que isso ajude quem está preso ao desafio.
fonte
length -
é desnecessário, poisslice
já aceita comprimentos negativos como sendo relativos ao final. Isso significa que você não precisa mais da variável intermediária, para poder transformar sua função de seta de um bloco em uma expressão.-1
o último, mas o necessário aqui.Röda , 9 bytes
Experimente online!
Não é uma solução muito interessante. Pega uma lista do fluxo e retorna os nomes do meio.
21 bytes e E / S:
Experimente online!
Isso usa
/
(divisão) e&
(associação).fonte
Geléia , 2 bytes
Experimente online!
Isso funciona como um link não embutido (ou seja, função), não como um programa completo.
'John','Jacob','Jingleheimer','Schmidt'
→'Jacob','Jingleheimer'
Como um programa completo, seria 3 bytes:,
ḊṖK
que imprime um nome do meio separado por espaço.fonte
Pitão, 2 bytes
Intérprete online
fonte
C #, 67 bytes
Função anônima que identifica a primeira ocorrência do caractere de espaço e a última e extrai o meio. Também extrai um espaço à direita, que pode ser removido ao custo de 2 bytes.
Programa completo com casos de teste:
fonte
Kotlin , 39 bytes
Experimente online!
ie
fonte
VBA, 69 bytes
fonte
R,
302722 bytesSolução atual devido ao usuário11599!
Pega a entrada de stdin, retorna cada nome do meio como uma sequência separada. Retorna
character()
no caso de nenhum nome do meio; isto é, um vetor de classecharacter
de comprimento0
.Explicação:
Leia stdin em uma lista de strings, separadas por espaços
Remova o último elemento.
head
retorna os primeirosn
elementos de uma lista, com on
padrão para6
. Sen
for-1
, retorna tudo, exceto o último elemento.Agora, remova o primeiro elemento desta lista.
Isso produz o (s) nome (s) do meio.
fonte
head()
etail()
, mas não sabia que você poderia passar um número negativo como segundo argumento. Agradável!Ruby,
2413 bytes11 bytes salvos graças ao Piccolo, indicando que a saída do tipo matriz é permitida.
Leva o nome como argumentos de linha de comando separados, por exemplo:
ou
Código anterior (gera uma sequência adequada):
fonte
$><<ARGV[1..-2].join" "
queixa sobre o" "
inesperado, então eu teria que adicionar parênteses - o que adicionaria 1 byte no final.puts ARGV[1..-2]
, apenas para que você saiba.p ARGV[1..-2]
para 13 bytes - apenas parece em nada com a saída em OPs desafiarGolang ,
15281 bytesEle recebe a entrada como "Samantha Vee Hills" (com aspas duplas) e retorna o nome do meio ao stdout.
Experimente Online!
Edit: @Dada, observe que a "função como resposta é permitida" diminui meu código 71 bytes. um grande obrigado!
fonte
Matlab,
81,79,78, 55 bytesRecebe uma sequência de entrada,
s
é dividida (pelo delimitador padrão, espaço em branco char) em uma matriz de células, a partir da qual o elemento do meio é acessado. Em seguida, os elementos do meio são concatenados ou uma string vazia é retornada.Edit: obrigado a Luis Mendo por salvar 3 bytes!
Edit 2: Melhor solução do Ankit!
fonte
nnz
em uma matriz celular, mas eu fiz as outras duas alterações :)function x=a(s) s=strsplit(s);x=strjoin(s(2:end-1));end
C, 42 bytes
O parâmetro é uma matriz de ponteiros terminada em NULL para char.
Veja como funciona aqui .
Os argumentos da linha de comando também podem ser usados com a mesma função .
C, 51 bytes
Um programa completo. A entrada é feita através de argumentos de linha de comando.
Veja como funciona aqui .
C, 54 bytes
O parâmetro é um parâmetro de entrada / saída.
Veja como funciona aqui .
fonte
Python 2,
42.1916 bytesExperimente online! Obrigado a @Kritixi Lithos por salvar 23 bytes! Obrigado @math_junkie por salvar mais 3 bytes. Para entrada, coloque cada parte do nome como uma string em uma lista da seguinte maneira:
E sim, o OP aprovou uma lista para ser uma entrada válida.
Explicação
fonte
print input()[1:-1]
é mais curtolambda n:n[1:-1]
é ainda menorSamantha Vee Hills
como entrada o link repl.it que você compartilhou, isso apenas imprime, oamantha Vee Hill
que definitivamente não é a saída necessária.Names will always have at least 2 space-separated parts
é o primeiro ponto da pergunta correta.C ++, 91 bytes
Recebe a entrada como referência a uma lista de cadeias e modifica a lista diretamente.
Experimente online!
fonte