Défi
Dans ce défi, vous devez prendre un nombre comme entrée et sortir la lettre correspondante de l'alphabet, et vice versa. (1 <=> A, 2 <=> B) etc.
1 -> A
2 -> B
...
26 -> Z
A -> 1
B -> 2
...
Z -> 26
Règles
- C'est le code-golf , donc le code le plus court en octets gagne.
- L'entrée se composera uniquement d'une lettre majuscule de
A
àZ
ou d'un entier de1
à26
inclus. - Les espaces blancs de fin (espace et nouvelle ligne) sont autorisés.
26
un entier ou"26"
une chaîne, ou les deux sont-ils autorisés?Réponses:
En fait, 7 octets
Essayez-le en ligne!
Explication:
Si les minuscules sont acceptables, cela représente 6 octets:
Essayez-le en ligne!
la source
Actually
. Par conséquentActually, 7 bytes
. : PPure Bash, 51
La plupart des autres réponses utilisent une sorte de conditionnel. Celui-ci supprime entièrement les conditions et traite plutôt l'entrée comme un nombre en base 36 qui indexe dans un tableau d'expansion bash-brace de construction appropriée:
Ideone.
la source
#
fait?Erlang, 26 octets
L'une des rares fois où le comportement de chaîne d'Erlang est utile.
la source
Python 2, 38 octets
Testez-le sur Ideone .
la source
Python 3, 43 octets
La chose intéressante à propos de cette solution est qu'elle intègre tous les sens de OR, OR au niveau du bit, OR
|
logiqueor
, XOR au niveau du bit^
et XOR logique!=
...la source
2sable ,
98 octetsCode:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
Ruby,
47 39 +n
drapeau = 40 octets333431 octetsFonction anonyme. Utilise une astuce de gestion des exceptions comme dans la solution Python de @ KarlNapf .
-3 octets de @manatwork
Essayez-le en ligne
Version originale du programme complet avec l'
n
indicateur de 40 octets et lit à partir de STDIN:la source
->i{(64+i).chr rescue i.ord-64}
.Cheddar,
3432 octetsEnregistré 2 octets grâce à @LeakyNun
Je souhaite qu'il y ait un moyen plus court de vérifier si la chaîne ou le nombre.
Essayez-le en ligne! ou Suite de tests
Explication
"%s"%n==n
vérifie s'il s'agit d'une chaîne de manière simple."%s"
est un format de chaîne, je peux formater avec%
par exemple"a %s c" % "b"
est égal à"a b c"
.%s
spécifie qu'il s'agit d'une chaîne, si un chiffre est passé, il restera comme%s
.la source
"%s"%n==n
enregistre 2 octets"%d"%n==n
mais cela ne fonctionnait pas: /Mathematica
5441 octetsAvec une suggestion absolument intelligente de LegionMammal978 qui économise 13 octets.
If[#>0,FromLetterNumber,,LetterNumber]
sert le seul but de décider s'il convient d'appliquerFromLetterNumber
ouLetterNumber
à l'entrée.#>0
sera satisfait si l'entrée,,#
est un nombre, auquel casFromLetterNumber
il sera sélectionné.Cependant,
#>0
ne sera ni vrai ni faux s'il#
s'agit d'une lettre etLetterNumber
sera sélectionné à la place.4
ré
Dans Mathematica,
FromLetterNumber
etLetterNumber
fonctionnera également avec d'autres alphabets. Cela ne nécessite que quelques octets supplémentaires.δ
г
b
4
4
4
la source
If[#>0,FromLetterNumber,,LetterNumber]@#&
If[#>0,FromLetterNumber[#],LetterNumber@#]&
. Bien queIf[#>0,FromLetterNumber[#],LetterNumber@#]&[4]
fonctionne,If[#>0,FromLetterNumber[#],LetterNumber@#]&["c"]
ne fonctionne pas. Cela ne peut apparemment pas se résoudre"c">0
. Ai-je mal compris?,,
est intentionnel, de même que l'extérieur@#
; il évalue asIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, qui utilise la forme à 4 arguments deIf
(regardez-le).If
.Haskell, 54 octets
Exemple d'utilisation:
map f ["1","26","A","Z"]
->["A","Z","1","26"]
.Le système de type strict de Haskell est une vraie douleur ici. De plus, toutes les fonctions char <-> int courtes aiment
chr
etord
nécessitent une importation, donc je dois le faire à la main. Pour la lettre -> int, par exemple, je dois convertirString
->Char
(via!!0
) ->Integer
(viafromEnum
) ->String
(viashow
).la source
C, 55 octets
la source
Perl 6 , 25 octets
Explication:
Exemple:
la source
perl -pe '$_=/\d/?chr$_+64:-64+ord'
:!C #, 32 octets
S'exécute vers
Func<int, object>
.Input:
char
convertit implicitement enint
donc peut être appelé avecint
(1-26) ouchar
('A'-Z').Sortie: Soit a
char
ouint
.la source
PHP,
494140 octetsJe ne pense pas qu'il existe une bonne alternative à
is_numeric
droite?Ceci est exécuté à partir de la ligne de commande (
$argv[1]
est la première variable donnée)Grâce à:
@insertusernamehere: Golfé 8 octets. Remplacer
is_numeric($i=$argv[1])
par0<($i=$argv[1])
. Cela fonctionne parce que(int)"randomLetter" == 0
.@manatwork: réduit de 1 octet. Remplacez
0<
par+
. Ce qui se passe dans ce cas, c'est que le signal + convertira le "Z" (ou n'importe quelle lettre) en 0. Cela se traduira par faux. Par conséquent, toute lettre est toujours fausse et un nombre est toujours vrai.la source
0<($i=$argv[1])
au lieu deis_numeric($i=$argv[1])
vous permet d' économiser 8 octets .0<
→+
.Python 2, 61 octets
Oui, je pourrais passer à Python 3 pour
input
la source
input()
néanmoins et passezint(i)
ài
."A"
A
ou rien.def f(i):
ligne 2: <espace>try:o=chr(i+64)
, ligne 3 <espace> sinon inchangée, ligne 4: <espace>return o
Dans cette forme, cela fonctionnerait dans l'un ou l'autre Python 2 ou Python 3PowerShell v2 +, 42 octets
Prend l'entrée
$n
(comme un entier ou un caractère explicite) et utilise un pseudo-ternaire pour choisir entre deux éléments d'un tableau. Le conditionnel est$n-ge65
(c.-à-d. Est l'entrée ASCIIA
ou plus). Si c'est le cas, nous convertissons simplement l'entrée en entier et en soustrayant64
. Sinon, nous ajoutons64
à l'entier d'entrée et le convertissons en a[char]
. Dans les deux cas, le résultat est laissé sur le pipeline et l'impression est implicite.Exemples
la source
Befunge-98 *, 19 octets
Parce que la question disait que vous recevrez un
1-26
ou un,A-Z
j'ai supposé que cela signifiait le numéro 26 ou le caractère AZ. La plupart des interprètes ont du mal à saisir des alt-codes, il est donc plus facile à utiliser&
et à saisir des valeurs comme 26 pour 26 ou 90 pour «Z», par opposition à~
.Pseudo-code
Testez-le (sous Windows) ici!
* Ceci est techniquement Unfunge-98 car il n'utilise qu'une seule dimension, mais ce nom peut ne pas être familier.
la source
Befunge 93 ,
144 90 66 54 3619 octetsJe ne suis pas sûr à 100% si cela est autorisé, mais si vous êtes autorisé à taper A comme 65, B comme 66, etc., alors (pour [mon] souci de commodité):
Sinon, à 36 octets:
(Merci à tngreene pour les suggestions!)
(Merci à Sp3000 pour avoir économisé 12 octets en réorganisant!)
Non golfé:
Il s'agit de mon premier programme Befunge de travail, et je ressens le besoin de continuer à jouer au golf. Toute aide serait grandement appréciée.
Vous pouvez tester le code Befunge ici .
la source
52**\28*++,@>~:0`!#^_\68*-
567+*
avec"A"
. En outre, ne pas oublierg
et desp
instructions pour la réutilisation d' une valeur au lieu d'avoir à construire à plusieurs reprises. De plus, je n'ai trouvé aucune entrée qui amènerait l'IP à la succursale>$ 28* + , @
. À quoi ça sert? Êtes-vous sûr que c'est nécessaire?$28*+,@
tandis que celles> = 10 vont à l'autre. Cela a été fait en fin de compte parce que vous ne pouvez pas relire l'entrée plus d'une fois pour autant que je sache.Brainfuck, 445 personnages
Plus une preuve de concept qu'un code golfé. Nécessite Brainfuck non signé et sans emballage.
Avec commentaires
la source
Java,
1049897835453515030 octetsx->(x^=64)>64?(char)x+"":x+"";
Programme de test :
la source
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Fourier, 30 octets
Essayez-le en ligne!
la source
R, 73 octets
la source
f=
, et vous essayez d'utiliser laifelse
fonction cloud pour jouer au golf quelques octets!MATL, 10 octets
Explication:
Essayez-le en ligne! avec entrées numériques.
Essayez-le en ligne! avec entrées alphabétiques.
la source
Python 3,
49 48 5350 octetsD'une manière ou d'une autre, le nombre d'octets est incorrect; _; merci dahuglenny
isalpha
est plus court queisnumeric
prend l'entrée sous forme de chaîne, qui peut être une lettre ou un chiffre
la source
x.isnumeric()
etelse
pour enregistrer un octet.Java, 61 octets
Non golfé:
L'appel
f('A')
appelle la première fonction, réaccordant unint
1; L'appelf(1)
appelle la deuxième fonction, renvoyant lechar
"A".la source
Javascript
86776660 octetsla source
return
déclaration:i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
entrée ne peut être que "nombre" ou "chaîne". Donc, pas besoin de vérifier=='number'
, le<'s'
fera également.ASM: 10 octets
Explication: Il s'agit de la représentation assemblée d'un programme qui fait exactement ce qui est demandé. Il n'est pas entièrement fonctionnel, car il a besoin de quelques directives, mais s'il est ajouté au segment de code d'un programme d'assemblage, il devrait fonctionner. Il reçoit l'entrée dans le registre AL, et s'il s'agit d'une lettre, il soustrait 40h de la valeur du code ASCII, ne laissant que le nombre (c'est-à-dire B = 42h, 42h-40h = 2h). Si l'entrée est un nombre, elle fait la procédure inverse en ajoutant 40h. Il laisse le résultat dans le registre AL. Ci-dessous le code source de l'assembly
De plus, si vous convertissez toutes les autres réponses en code machine, je suis certain que la mienne serait la plus petite.
la source
77 02 2C
devrait l'être77 **04** 2C
; lesub
etadd
sont à l'envers.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 octets
la source
Brachylog , 10 octets
Essayez-le en ligne!
Le cœur de ceci n'est que de 4 octets , mais les E / S pour cette version sont un peu moins saines.
la source
Japt , 11 octets
Essayez-le
la source