Este é um desafio bastante simples para o código de golfe. Seu programa, com uma string ASCII, deve analisá-la em duas strings, que serão avaliadas. Se a segunda sequência for "posterior" à primeira, ela retornará 1, se for "anterior" à primeira, retornará -1 e, se forem iguais, retornará 0. Para Para esclarecer o que "mais tarde" e "mais cedo" significam, vamos dar uma olhada nos códigos de caracteres ASCII. Você precisa comparar cada caractere da string, tratando cada um deles como dígitos de um número. Mais tarde refere-se a um número maior, ocorrendo após um número menor. As strings serão formatadas com um caractere hífen para separar os dois grupos de entrada.
Veja este exemplo:
7-9
como uma entrada deve retornar1
.
7
converte para código ASCII55
e9
converte para código ASCII57
.Como
57
ocorre numericamente depois55
,9
é posterior a7
.
Outro exemplo:
LKzb-LKaj
como uma entrada deve retornar-1
As seqüências de código ASCII para isso são
76-75-122-98
e76-75-97-106
Este é um desafio de código de golfe e a contagem de bytes é como as entradas serão pontuadas.
Qualquer entrada dos 95 caracteres ASCII imprimíveis é aceita, excluindo espaços e hífens, para separar a entrada. Além disso, não é garantido que as seqüências tenham o mesmo comprimento.
Boa sorte!
EDIT: Para ser mais claro, cada caractere deve ser tratado como um dígito em um número. No exemplo LKzb-LKaj
, embora j
seja posterior a b
, z
seja posterior a a
e, como é um dígito mais significativo, tem precedência. Uma cadeia fornecida sempre terá no mínimo 3 caracteres, eliminando cadeias vazias do escopo desse problema.
EDIT: Aqui estão mais alguns casos de teste, para sua ajuda:
A-9
->-1
11-Z
->-1
3h~J*-3h~J*
->0
Xv-Y0
->1
fonte
11-Z
->-1
não faz sentido, dada a redação atual da pergunta.Z
(90) é maior que1
(49) e é a letra mais significativa. Esclareça como as seqüências de caracteres de diferentes comprimentos são comparadas.A-AA
?11>Z
em seus exemplos quando1<Z
. Deve haver algum comportamento indefinido relacionado a cadeias de tamanhos diferentes ou o exemplo está errado.~
em 126, e aumentaria o próximo dígito em um, retornando o dígito inicial para!
. Cada aumento no dígito mais significativo equivale a incrementar o segundo dígito mais significativo em 127.Respostas:
Pitão - 11 bytes
Fácil, usa
._
sinal para obter o sinal eC
obter códigos de caracteres.Experimente online aqui .
Conjunto de teste .
fonte
CJam, 12 bytes
Experimente on-line no intérprete CJam .
Como funciona
fonte
Java,
86118Uma maneira muito estranha de comparar strings. Foi feita uma correção rápida para que ele passasse em casos de teste adicionais e procuraria mais golfabilidade posteriormente.
Agradecimentos a Vartan nos comentários para
signum
sugestõesfonte
return s[0].compareTo(s[1]);
11-Z
retorno-1
, ele retorna1
."A".compareTo("Z")
retorna-25
. Infelizmente.i = a!=b ? b-a : s[1].compareTo(s[0]);
Parece que não entendi ... Além disso, talvez você possa usar Math.signum e salvar-se declarando i;Perl, 31 bytes
30 bytes + 1 byte para
-p
. Aceita entrada no STDIN.Explicação
Quando os operandos
cmp
têm comprimentos diferentes, comochicken
eegg
, eles estão alinhados assim:para que
egg
>chicken
(\0
seja um byte nulo). Mas queremos que eles estejam alinhados assim:para que
chicken
>egg
.Para fazer isso, nós as concatenamos, uma vez com
chicken
antesegg
e outra comegg
anteschicken
:Agora que nossas duas strings têm o mesmo comprimento, removemos a palavra principal usando um XOR para obter:
E agora podemos usar
cmp
para descobrir o que veio primeiro. (Lá, eu disse!)fonte
Python 2, 88 caracteres
cmp
não faz a coisa certa quando você tem duas cadeias de comprimento diferentes, então eu tenho que preencher as duas com o caractere nulo (que éord
convertido em0
) para lidar com esse caso. Infelizmente, isso adicionou cerca de 35 caracteres, e agora são duas linhas em vez de uma, porque eu preciso do comprimento da entrada e da iteração.fonte
1-2
que deve retornar1
retornos-1
. Trabalho inteligente embora.11-A
caso, que deve retornar-1
, em vez de retornar1
neste exemplo.R, 54 bytes
Isso requer a biblioteca pracma. Ele divide a string de entrada no
-
. Direito justifica as cordas. Classifica-os e faz um diff.Assim, para 11-7, terminamos com as seqüências "11" e "7". A classificação destes é [2, 1]. A diferença é -1. Por 3h ~ J * -3h ~ J *, obtemos "3h ~ J *" e "3h ~ J *". A classificação destes é [1.5, 1.5] com uma diferença de 0.
Exemplos de teste
fonte
CoffeeScript,
143140139Aqui está um jsfiddle com os resultados (veja no console)
fonte
PERL,
4636 bytesConverte a lista argv em uma seqüência de caracteres, divide-se pelo hífen em um espaço à esquerda e à direita sem espaços e, em seguida, retorna uma chamada cmp.
fonte
"@ARGV"=~/-/;print$`cmp$'
(não testado)cmp
, mas não funciona quando os comprimentos das strings são diferentes."A" cmp "9"
é 1 e"11" cmp "Z"
-1, mesmo que ambas as entradas retornem o mesmo valor para esse desafio.Python 3, 84 bytes
Divida a entrada de sequência por
"-"
. Converta as cadeias unicode em cadeias de bytes e interprete essas cadeias de bytes como números inteiros big-endian. Finalmente, faça a comparação - felizmente (des)cmp
não está mais disponível no Python 3.Python 2, 69 bytes
fonte
print
ecmp
.Python 2, 79 bytes
Solução bastante simples e fácil de entender. Compara os comprimentos das strings e compara as strings lexigraficamente.
Experimente aqui
fonte
perl5, 64
Basta executá-lo na linha de comando. embora parecesse melhor com uma nova linha, mas isso custa 1 caractere.
Esta versão mais longa lida corretamente com comprimentos incompatíveis.
fonte
/-/,$_=$`cmp$'
seria mais fácil e você pode pular a parte-aF-
. Além disso, eu considero isso 20 (16 para$_=$F[1]cmp$F[0]
e 4 parapaF-
, salvos em um arquivo e executados comoperl -paF- file.pl
).cmp
não funciona quando as duas cordas têm comprimentos diferentes, como com11-Z
./-/;$_=length$'<=>length$`||$' cmp$`
e-p
. ($`
armazena tudo antes da correspondência da regex,$'
armazena tudo depois.) O usomap
realmente custa mais bytes do que apenas chamarlength
duas vezes.F #, 53
Isso está na forma de uma função anônima (lambda), portanto, você deve colá-lo e fornecer o parâmetro diretamente após is (ou, usando a notação de tubulação). Por exemplo (no FSI):
fonte
JavaScript ES6,
4643 bytesfonte
11-Z
deve retornar,-1
mas retorna1
.'11'>'Z'
quando'11'<'ZZ'
não há nada na pergunta sobre como comparar sequências de comprimentos diferentes ou qual o valor de uma sequência vazia.Ruby, 59 bytes
fonte
05AB1E ,
12119 bytesExperimente online ou verifique todos os casos de teste .
Explicação:
fonte