Seu desafio é usar um nome (string) como entrada, como
Albert Einstein
e saída:
Einstein, Albert
Pseudo-có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
Mais casos de teste:
John Fitzgerald Kennedy => Kennedy, John Fitzgerald
Abraham Lincoln => Lincoln, Abraham
Regras
- A entrada sempre corresponderá ao regex
^([A-Z][a-z]+ )+([A-Z][a-z]+)$
. - Você não precisa lidar com nomes estranhos , mesmo que a saída seja tecnicamente incorreta, tudo bem aqui.
- O espaço em branco / nova linha à direita está OK.
- Alguma pergunta? Comente abaixo!
le
com,
e você tem essa questãole
a,
.Respostas:
05AB1E , 7 bytes
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação:
fonte
JavaScript (ES6), 34 bytes
Demo:
fonte
Retina ,
191716 bytesEdit: Obrigado ao Riker por salvar 3 bytes
Experimente online!
fonte
(.+)
funciona também para ambos.\w
, em primeiro lugarGeléia , 7 bytes
Experimente online!
Eu não conheço Jelly muito bem, mas ao ler outras respostas, parecia que eles não usavam um algoritmo ideal ... então aqui está:
Explicação
fonte
Vim, 10 bytes / pressionamentos de tecla
Experimente online!
fonte
<esc>
não aparece no seu código. Para aviso para outras pessoas que desejam tentar: Isso pressupõe que o nome esteja escrito no editor e que você esteja no início do arquivo no modo normal.V / vim,
98 bytesExperimente online!
Guardou um byte graças a
Observe que há um caractere de espaço à direita. Deixa um espaço à direita, permitido pelas regras.
Explicação:
fonte
<esc>
. Você pode salvar um byte ao$bD
invés de$diw
. :)$bD
não lida com nomes de um caractere, perguntei ao OP se isso é permitido.Python 2 , 39 bytes
Experimente online!
Sim
rsplit
.fonte
input
em vez deraw_input
para o golfe - veja este post metaMathematica,
5240 bytesfonte
> <> , 27 bytes
Experimente online!
fonte
C, 45 bytes
Edição: Acabei de notar o requisito para a entrada possivelmente com mais de duas palavras. Vou deixar como está com uma nota de que isso só funciona para duas palavras.
EDIT: removido
\n
. Adicione 2 bytes se considerar necessário.Compila com
gcc name.c
, GCC 6.3.1. Ignore avisos. Uso:Abuso de linguagem:
int
de retorno implícitomain
e nada retornado.printf
. O GCC o incluirá de qualquer maneira.b
. Não importa com%s
Agradecemos a @ Khaled.K pelas dicas de uso em
main(a,b)int**b;
vez demain(int a, int **b)
.fonte
main(a,**b){printf("%s, %s",b[2],b[1]);}
é de 40 bytesmain(a,b)int**b;{printf("%s, %s\n",b[2],b[1]);}
Ruby , 22 bytes
Experimente online!
fonte
sed, 19 + 1 para -E = 20 bytes
É necessário usar -r (GNU) ou -E (BSD, GNUs recentes) para evitar a necessidade de escapar do parêntese de agrupamento.
Se escrito na linha de comando, deve ser colocado entre aspas para evitar ser analisado como vários tokens pelo shell:
fonte
C, 68 bytes
Espero que não seja errado adicionar outro post, mas aqui está uma solução ligeiramente diferente da minha solução C postada anteriormente. Este aceita qualquer número de nomes.
Compile com
gcc name.c
(GCC 6.3.1) e ignore os avisos. Uso:Obrigado a @ Khaled.K pelas dicas sobre
main(a,b)int**b;
Obrigado pela dica no loop for do @Alkano.
fonte
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);}
. É 2 bytes mais curto e garante que você não imprima o nome do programa, mas ainda usa vírgula entre cada nome.Mathematica, 45 bytes
Economizou alguns bytes em relação à resposta da ngenisis, inserindo a entrada como uma lista de caracteres e não como uma string. Função pura que usa uma regra de substituição de padrão.
Mathematica, 49 bytes
Outra função pura pegando uma lista de caracteres como entrada e retornando uma lista de caracteres. Este acrescenta
","
e" "
à entrada e gira a lista de caracteres até o último espaço estar no final. (Portanto, a saída possui um espaço à direita, diferente da primeira função acima.)fonte
#/.{a__,s=" ",b:Except@s..}->{b,",",s,a}&
é4
bytes mais curtos, mas descobri que isso nãoExcept
é necessário para os padrões de string, poupando-me12
bytes.x
na sua resposta?C #,
7672 bytesGuardado 4 bytes com a ajuda de @KevinCruijssen
Versão antiga usando substrings para 76 bytes:
fonte
System.Text.RegularExpressions.Regex
é tão longo em C # ..s=>new System.Text.RegularExpressions.Regex("(.+) (.+)").Replace(s,"$2, $1");
é apenas um byte a mais.Regex
salvar 4 bytesAwk, 18 caracteres
Exemplo de execução:
Experimente online!
fonte
Gelatina , 8 bytes
Experimente online!
fonte
05AB1E , 9 bytes
Experimente online!
Explicação
fonte
Pitão , 11 bytes
Explicação:
Teste online!
fonte
PHP, 45 bytes
Experimente online!
fonte
\pL+
invés de.+
?.
ou\pL
MATLAB / oitava , 37 bytes
Experimente online!
Com base na resposta Retina do @ngenisis, também podemos jogar o jogo regex no Octave e no MATLAB, economizando alguns bytes em relação à minha resposta anterior.
Resposta antiga:
Vou deixar essa resposta aqui também, considerando que é uma maneira mais exclusiva de fazer isso em comparação com uma regex simples.
Oitava ,
4947 bytesAntigo experimentá-lo online!
Uma função anônima para gerar a saída.
Basicamente, o código encontra primeiro o último espaço na string usando
b=find(a==32)(end)
. Depois, pega a parte final da string (após o espaço) usandoa(b+1:end)
, ondeb
está a saída de encontrar o último espaço. Também leva o início da string coma(1:b-1)
, e concatena ambos junto com um', '
no meio.Eu já salvei alguns bytes vs o típico
find(a==32,1,'last')
. Não tenho certeza se há muito mais para economizar.fonte
Geléia , 9 bytes
Explicado, ish:
Experimente online!
Experimente todos os casos de teste.
fonte
Python 3, 52 bytes
Muito simples, poderia usar a ajuda do golfe. Apenas coloca a última palavra na frente e junta-as a ",".
Caso de teste:
fonte
Japonês, 14 bytes
Um porto de @ programmer5000 é resposta JavaScript .
Experimente online!
fonte
Java,
11062 bytesMétodo não estático.
-48 bytes graças a Kevin Cruijssen
fonte
String c(String s){int i=s.lastIndexOf(' ');return s.substring(i+1)+", "+s.substring(0,i);}
é mais curto ( 91 bytes ).String d(String s){return s.replaceAll("(.+) (.+)","$2, $1");}
é ainda mais curto ( 62 bytes ).PHP ,
6259 bytes-3 bytes, obrigado Jörg
Experimente online!
Solução antiga, 63 bytes
Não funciona se a pessoa tiver 3 nomes repetidos.
Experimente online
fonte
$argn
vez de$argv[1]
Excel,
174170168 bytesEconomizou 2 bytes graças a Wernisch
Isso não é chique ou inteligente. É um método bastante básico. Parece que deve haver uma maneira mais curta com fórmulas de matriz, mas não consigo encontrar uma que funcione.
fonte
-1
na função ESQUERDA.JS (ES6),
5244 bytesfonte
MATL , 10 bytes
Experimente online!
Explicação
fonte
Gema, 23 caracteres
A única coisa notável aqui é como o desafio conseguiu atingir a fraqueza da não cobiça dos padrões de Gema.
Exemplo de execução:
fonte