Desafio
Neste desafio, você deve pegar um número como entrada e enviar a letra correspondente do alfabeto e vice-versa. (1 <=> A, 2 <=> B) etc.
1 -> A
2 -> B
...
26 -> Z
A -> 1
B -> 2
...
Z -> 26
Regras
- Isso é código-golfe , então o código mais curto em bytes vence.
- A entrada consistirá apenas em uma letra maiúscula de
A
paraZ
ou um número inteiro de1
até26
inclusivo. - Espaços em branco à direita (espaço e nova linha) são permitidos.
26
como um número inteiro ou"26"
como uma string, ou ambos são permitidos?Respostas:
Na verdade, 7 bytes
Experimente online!
Explicação:
Se minúsculas são aceitáveis, são 6 bytes:
Experimente online!
fonte
Actually
. Por issoActually, 7 bytes
. : PPure Bash, 51
A maioria das demais respostas usa algum tipo de condicional. Este dispensa totalmente os condicionais e, em vez disso, trata a entrada como um número base-36 que indexa em uma matriz bash-cinta-expansão adequadamente construída:
Ideone.
fonte
#
faz?Erlang, 26 bytes
Uma das poucas vezes em que o comportamento de string de Erlang é útil.
fonte
Python 2, 38 bytes
Teste em Ideone .
fonte
Python 3, 43 bytes
O interessante dessa solução é que ela incorpora todos os sentidos de OR, OR bit a bit
|
, OR lógicoor
, XOR bit a bit^
e XOR lógico!=
...fonte
2sable ,
98 bytesCódigo:
Explicação:
Usa a codificação CP-1252 . Experimente online! .
fonte
Ruby,
47 39 +n
sinalizador = 40 bytes333431 bytesFunção anônima. Usa um truque de manipulação de exceção, como na solução Python do @ KarlNapf .
-3 bytes de @manatwork
Experimente online
Versão original do programa completa, com o
n
sinalizador para 40 bytes e leituras de STDIN:fonte
->i{(64+i).chr rescue i.ord-64}
.Queijo Cheddar,
3432 bytesGuardado 2 bytes graças a @LeakyNun
Eu gostaria que houvesse uma maneira mais curta de verificar se string ou número.
Experimente online! ou conjunto de teste
Explicação
"%s"%n==n
verifica se é uma string de maneira simples."%s"
é um formato de string, posso formatar com,%
por exemplo,"a %s c" % "b"
é igual a"a b c"
.%s
especifica que é uma string, se um dígito for passado, ele permanecerá como%s
.fonte
"%s"%n==n
salva 2 bytes"%d"%n==n
mas isso não estava funcionando: /Mathematica
5441 BytesCom uma sugestão absolutamente inteligente do LegionMammal978 que salva 13 bytes.
If[#>0,FromLetterNumber,,LetterNumber]
serve ao único propósito de decidir se deve aplicarFromLetterNumber
ouLetterNumber
à entrada.#>0
ficará satisfeito se a entrada,,#
for um número, caso em queFromLetterNumber
será selecionado.No entanto
#>0
, não será verdadeiro nem falso, se#
for uma letra, eLetterNumber
será selecionado.4
d
Em Mathematica,
FromLetterNumber
eLetterNumber
também irá trabalhar com outros alfabetos. Isso requer apenas mais alguns bytes.δ
г
b
4
4
4
fonte
If[#>0,FromLetterNumber,,LetterNumber]@#&
If[#>0,FromLetterNumber[#],LetterNumber@#]&
. EmboraIf[#>0,FromLetterNumber[#],LetterNumber@#]&[4]
funcione,If[#>0,FromLetterNumber[#],LetterNumber@#]&["c"]
não. Aparentemente, não pode resolver"c">0
. Eu entendi mal?,,
é intencional e o exterior também@#
; ele avalia comoIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, que usa a forma de 4 argumentos deIf
(procure).If
funciona.Haskell, 54 bytes
Exemplo de uso:
map f ["1","26","A","Z"]
->["A","Z","1","26"]
.O sistema estrito de Haskell é uma verdadeira dor aqui. Além disso, todos os caracteres curtos <-> int funcionam como
chr
eord
precisam de uma importação, então eu tenho que fazer isso manualmente. Para a letra -> int case, por exemplo, preciso converterString
->Char
(via!!0
) ->Integer
(viafromEnum
) ->String
(viashow
).fonte
C, 55 bytes
fonte
Perl 6 , 25 bytes
Explicação:
Exemplo:
fonte
perl -pe '$_=/\d/?chr$_+64:-64+ord'
!C #, 32 bytes
Transmite para
Func<int, object>
.Entrada:
char
converte implicitamente emint
assim pode ser chamado comint
(1-26) ouchar
('A'-Z').Saída: A
char
ouint
.fonte
PHP,
494140 bytesEu não acho que existe uma boa alternativa para a
is_numeric
direita?Isso é executado a partir da linha de comando (
$argv[1]
é a primeira variável fornecida)Graças a:
@insertusernamehere: Golfed 8 bytes. Substituindo
is_numeric($i=$argv[1])
por0<($i=$argv[1])
.Isso funciona porque(int)"randomLetter" == 0
.@manatwork: Reduzido com 1 byte. Substitua
0<
por+
. O que acontece nesse caso é que o sinal + converterá o "Z" (ou qualquer outra letra) em um 0. Isso resultará em falso. Portanto, qualquer letra é sempre falsa e um número é sempre verdadeiro.fonte
0<($i=$argv[1])
vez deis_numeric($i=$argv[1])
economiza 8 bytes .0<
→+
.Python 2, 61 bytes
Sim, eu poderia mudar para o Python 3 para
input
fonte
input()
no entanto, e mudeint(i)
parai
."A"
A
ou nada.def f(i):
linha 2: <espaço>try:o=chr(i+64)
, linha 3 <espaço> caso contrário inalterada, linha 4: <espaço>return o
Nesse formulário, funcionaria no Python 2 ou Python 3PowerShell v2 +, 42 bytes
Recebe entrada
$n
(como um número inteiro ou caractere explícito) e usa um pseudo-ternário para escolher entre dois elementos de uma matriz. A condicional é$n-ge65
(ou seja, é a entrada ASCIIA
ou superior). Nesse caso, simplesmente lançamos a entrada como int e subtraímos64
. Caso contrário, adicionamos64
ao número inteiro de entrada e o convertemos como a[char]
. Em ambos os casos, o resultado é deixado no pipeline e a impressão está implícita.Exemplos
fonte
Befunge-98 *, 19 bytes
Como a pergunta dizia que você receberá um
1-26
ou umA-Z
eu assumi que isso significava o número 26 ou o personagem AZ. A maioria dos intérpretes luta para inserir códigos ALT, portanto, é mais fácil usar&
e inserir valores como 26 para 26 ou 90 para 'Z', em oposição a~
.Pseudo-código
Teste aqui (no Windows) !
* Isso é tecnicamente Unefunge-98, porque usa apenas 1 dimensão, mas esse nome pode ser desconhecido.
fonte
Befunge 93 ,
144 90 66 54 3619 bytesNão tem 100% de certeza se isso é permitido, mas se você pode digitar A como 65, B como 66 etc., então (por [minha] conveniência):
Caso contrário, em 36 bytes:
(Obrigado a tngreene pelas sugestões!)
(Agradecemos ao Sp3000 por salvar 12 bytes reorganizando!)
Ungolfed:
Este é o meu primeiro programa de trabalho da Befunge, e sinto a necessidade de jogar mais. Qualquer ajuda seria muito apreciada.
Você pode testar o código Befunge aqui .
fonte
52**\28*++,@>~:0`!#^_\68*-
567+*
com"A"
. Além disso, não esquecerg
ep
instruções para a reutilização de um valor, em vez de ter que construí-la repetidamente. Além disso, não consegui encontrar nenhuma entrada que levasse o IP para a filial>$ 28* + , @
. Para que serve isso? Tem certeza de que é necessário?$28*+,@
enquanto aquelas> = 10 vão para o outro. Isso foi feito em última análise, porque você não pode ler a entrada mais de uma vez, tanto quanto eu sei.Brainfuck, 445 caracteres
Mais uma prova de conceito do que um código de golfe. Requer Brainfuck sem sinal e sem embalagem.
Com Comentários
fonte
Java,
1049897835453515030 bytesx->(x^=64)>64?(char)x+"":x+"";
Programa de teste :
fonte
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Fourier, 30 bytes
Experimente online!
fonte
R, 73 bytes
fonte
f=
, e você tenta usar aifelse
função na nuvem para talvez obter alguns bytes!MATL, 10 bytes
Explicação:
Experimente online! com entradas numéricas.
Experimente online! com entradas alfabéticas.
fonte
Python 3,
49 48 5350 bytesDe alguma forma, eu entendi errado a contagem de bytes; _; obrigado dahuglenny
isalpha
é mais curto queisnumeric
recebe entrada como string, que pode ser uma letra ou número
fonte
x.isnumeric()
eelse
salvar um byte.Java, 61 bytes
Ungolf'd:
Chamar
f('A')
invoca a primeira função, ajustando umint
1; chamandof(1)
invoca a segunda função, retornando ochar
"A".fonte
Javascript
86776660 bytesfonte
return
declaração:i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
entrada pode ser apenas "número" ou "sequência". Portanto, não há necessidade de verificar=='number'
,<'s'
também o fará.ASM: 10 bytes
Explicação: Esta é a representação montada de um programa que faz exatamente o que é solicitado. Não é totalmente funcional, porque precisa de algumas diretivas, mas se for adicionado ao segmento de código de um programa de montagem, ele deverá funcionar. Ele recebe a entrada no registro AL e, se for uma letra, subtrai 40h do valor do código ASCII, deixando apenas o número (ou seja, B = 42h, 42h-40h = 2h). Se a entrada for um número, execute o procedimento oposto adicionando 40h. Deixa o resultado no registro AL. Abaixo está o código fonte da montagem
Além disso, se você converter todas as outras respostas em código de máquina, tenho certeza de que as minhas seriam as menores.
fonte
77 02 2C
deveria ser77 **04** 2C
; osub
eadd
estão para trás.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 bytes
fonte
Braquilog , 10 bytes
Experimente online!
O núcleo disso é de apenas 4 bytes , mas a E / S para essa versão é um pouco menos que sã.
fonte
Japonês , 11 bytes
Tente
fonte