Reto
En este desafío, debe tomar un número como entrada y salida de la letra correspondiente del alfabeto, y viceversa. (1 <=> A, 2 <=> B) etc.
1 -> A
2 -> B
...
26 -> Z
A -> 1
B -> 2
...
Z -> 26
Reglas
- Este es el código de golf , por lo que gana el código más corto en bytes.
- La entrada solo consistirá en una letra mayúscula de
A
aZ
o un número entero de1
a26
inclusive. - Se permiten espacios en blanco al final (espacio y nueva línea).
26
como un entero o"26"
como una cadena, o ambos están permitidos?Respuestas:
En realidad, 7 bytes
Pruébalo en línea!
Explicación:
Si se aceptan minúsculas, esto es 6 bytes:
Pruébalo en línea!
fuente
Actually
. Por lo tantoActually, 7 bytes
. : PPure Bash, 51
La mayoría del resto de las respuestas usan algún tipo de condicional. Éste prescinde por completo de condicionales y, en su lugar, trata la entrada como un número base 36 que se indexa en una matriz bash-brace-expansion adecuadamente construida:
Ideona
fuente
#
?Erlang, 26 bytes
Una de las pocas veces en que el comportamiento de cadena de Erlang es útil.
fuente
Python 2, 38 bytes
Pruébalo en Ideone .
fuente
Python 3, 43 bytes
Lo interesante de esta solución es que incorpora todos los sentidos de OR, OR bit a bit
|
, OR lógicoor
, XOR bit a bit^
y XOR lógico!=
...fuente
2sable ,
98 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Ruby,
47 39 +n
bandera = 40 bytes333431 bytesFunción anónima. Utiliza un truco de manejo de excepciones como en la solución Python de @ KarlNapf .
-3 bytes de @manatwork
Pruébalo en línea
Versión original del programa completo con la
n
bandera de 40 bytes y lecturas de STDIN:fuente
->i{(64+i).chr rescue i.ord-64}
.Cheddar,
3432 bytesGuardado 2 bytes gracias a @LeakyNun
Desearía que hubiera una forma más corta de verificar si la cadena o el número.
Pruébalo en línea! o Test Suite
Explicación
"%s"%n==n
comprueba si es una cadena de una manera simple."%s"
es un formato de cadena, puedo formatear con,%
por ejemplo,"a %s c" % "b"
es igual a"a b c"
.%s
especifica que es una cadena, si se pasa un dígito permanecerá como%s
.fuente
"%s"%n==n
ahorra 2 bytes"%d"%n==n
pero eso no estaba funcionando: /Mathematica
5441 BytesCon una sugerencia absolutamente inteligente de LegionMammal978 que ahorra 13 bytes.
If[#>0,FromLetterNumber,,LetterNumber]
tiene el único propósito de decidir si se aplicaFromLetterNumber
o noLetterNumber
a la entrada.#>0
se satisfará si la entrada,,#
es un número, en cuyo casoFromLetterNumber
se seleccionará.Sin embargo
#>0
, no será verdadero ni falso si#
es una letra, yLetterNumber
se seleccionará en su lugar.4 4
re
En Mathematica,
FromLetterNumber
yLetterNumber
también funcionará con otros alfabetos. Esto requiere solo unos pocos bytes más.δ
г
b
4
4
4
fuente
If[#>0,FromLetterNumber,,LetterNumber]@#&
If[#>0,FromLetterNumber[#],LetterNumber@#]&
. AunqueIf[#>0,FromLetterNumber[#],LetterNumber@#]&[4]
funciona,If[#>0,FromLetterNumber[#],LetterNumber@#]&["c"]
no lo hace. Aparentemente no puede resolverse"c">0
. ¿Entendí mal?,,
es intencional, y también lo es el exterior@#
; se evalúa comoIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, que usa la forma de 4 argumentos deIf
(búscalo).If
.Haskell, 54 bytes
Ejemplo de uso:
map f ["1","26","A","Z"]
->["A","Z","1","26"]
.El estricto sistema de tipos de Haskell es un verdadero dolor aquí. Además, todas las funciones cortas de char <-> int tienen gusto
chr
yord
necesitan una importación, así que tengo que hacerlo a mano. Para la letra -> int, por ejemplo, necesito convertirString
->Char
(vía!!0
) ->Integer
(víafromEnum
) ->String
(víashow
).fuente
C, 55 bytes
fuente
Perl 6 , 25 bytes
Explicación:
Ejemplo:
fuente
perl -pe '$_=/\d/?chr$_+64:-64+ord'
!C #, 32 bytes
Lanza a
Func<int, object>
.Entrada: las
char
conversiones implícitasint
se pueden llamar conint
(1-26) ochar
('A'-Z').Salida: A
char
oint
.fuente
PHP,
494140 bytesNo creo que haya una buena alternativa al
is_numeric
derecho?Esto se ejecuta desde la línea de comando (
$argv[1]
es la primera variable dada)Gracias a:
@insertusernamehere: Golfed 8 bytes. Reemplazar
is_numeric($i=$argv[1])
con0<($i=$argv[1])
. Esto funciona porque(int)"randomLetter" == 0
.@manatwork: reducido con 1 byte. Reemplazar
0<
con+
. Lo que sucede en este caso es que la señal + arrojará la "Z" (o cualquier letra) a un 0. Esto dará como resultado falso. Por lo tanto, cualquier letra es siempre falsa y un número siempre es verdadero.fuente
0<($i=$argv[1])
lugar deis_numeric($i=$argv[1])
ahorra 8 bytes .0<
→+
.Python 2, 61 bytes
Sí, podría cambiar a Python 3 por
input
fuente
input()
embargo, use y cambieint(i)
ai
."A"
A
o nada.def f(i):
línea 2: <espacio>try:o=chr(i+64)
, línea 3 <espacio> sin cambios, línea 4: <espacio>return o
De esa forma, funcionaría en Python 2 o Python 3PowerShell v2 +, 42 bytes
Toma información
$n
(como un entero o un carácter explícito) y usa un pseudoternario para elegir entre dos elementos de una matriz. El condicional es$n-ge65
( es decir, es la entrada ASCIIA
o mayor). Si es así, simplemente emitimos la entrada como int y restamos64
. De lo contrario, agregamos64
al entero de entrada y lo convertimos como un[char]
. En cualquier caso, el resultado se deja en la tubería y la impresión es implícita.Ejemplos
fuente
Befunge-98 *, 19 bytes
Debido a que la pregunta decía que recibirías un
1-26
o unA-Z
, supuse que esto significaba el número 26 o el carácter AZ. La mayoría de los intérpretes tienen dificultades para ingresar códigos alternativos, por lo que es más fácil usar&
e ingresar valores como 26 para 26 o 90 para 'Z', en lugar de~
.Pseudocódigo
¡Pruébelo (en Windows) aquí!
* Esto es técnicamente Unefunge-98 porque solo usa 1 dimensión, pero ese nombre puede ser desconocido.
fuente
Befunge 93 ,
144 90 66 54 3619 bytesNo estoy 100% seguro si esto está permitido, pero si puede escribir A como 65, B como 66, etc., entonces (por el bien de [mi] conveniencia):
De lo contrario, a 36 bytes:
(¡Gracias a tngreene por las sugerencias!)
(¡Gracias a Sp3000 por guardar 12 bytes reorganizando!)
Sin golf:
Este es mi primer programa Befunge en funcionamiento, y siento la necesidad de seguir jugando al golf. Cualquier ayuda sería muy apreciada.
Puede probar el código Befunge aquí .
fuente
52**\28*++,@>~:0`!#^_\68*-
567+*
a"A"
. Además, no se olvide deg
ep
instrucciones para la reutilización de un valor en lugar de tener que construirlo en repetidas ocasiones. Además, no pude encontrar ninguna entrada que llevara la IP a la rama>$ 28* + , @
. ¿Para qué es esto? ¿Estás seguro de que es necesario?$28*+,@
mientras que esas> = 10 van a la otra. En última instancia, esto se hizo porque no puedo leer la entrada más de una vez hasta donde yo sé.Brainfuck, 445 Personajes
Más una prueba de concepto que un código de golf. Requiere Brainfuck sin envolver, sin firmar.
Con comentarios
fuente
Java,
1049897835453515030 bytesx->(x^=64)>64?(char)x+"":x+"";
Programa de prueba :
fuente
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Fourier, 30 bytes
Pruébalo en línea!
fuente
R, 73 bytes
fuente
f=
, y usted intenta usar laifelse
función en la nube para jugar algunos bytes!MATL, 10 bytes
Explicación:
Pruébalo en línea! con entradas numéricas
Pruébalo en línea! con entradas alfabéticas.
fuente
Pitón 3,
49 48 5350 bytesDe alguna manera me equivoqué en el conteo de bytes; _; gracias dahuglenny
isalpha
es más corto queisnumeric
toma la entrada como una cadena, que podría ser una letra o un número
fuente
x.isnumeric()
yelse
para guardar un byte.Java, 61 bytes
Ungolf'd:
Llamar
f('A')
invoca la primera función, reajustando unint
1; llamarf(1)
invoca la segunda función, devolviendo lachar
"A".fuente
Javascript
86776660 bytesfuente
return
declaración:i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
entrada puede ser solo "número" o "cadena". Por lo tanto, no es necesario verificarlo=='number'
,<'s'
también lo hará.ASM: 10 bytes
Explicación: Esta es la representación ensamblada de un programa que hace exactamente lo que se le pide. No es totalmente funcional, porque necesita algunas directivas, pero si se agrega al segmento de código de un programa de ensamblaje, debería funcionar. Recibe la entrada en el registro AL, y si es una letra, resta 40h del valor del código ASCII, dejando solo el número (es decir, B = 42h, 42h-40h = 2h). Si la entrada es un número, realiza el procedimiento contrario al sumar 40h. Deja el resultado en el registro AL. A continuación se muestra el código fuente del ensamblaje
Además, si convierte todas las otras respuestas al código de máquina, estoy seguro de que la mía sería la más pequeña.
fuente
77 02 2C
debería ser77 **04** 2C
; Elsub
yadd
están al revés.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 bytes
fuente
Brachylog , 10 bytes
Pruébalo en línea!
El núcleo de esto es solo 4 bytes , pero la E / S para esa versión es un poco menos que sensata.
fuente
Japt , 11 bytes
Intentalo
fuente