Herausforderung
In dieser Herausforderung müssen Sie eine Zahl als Eingabe nehmen und den entsprechenden Buchstaben des Alphabets ausgeben und umgekehrt. (1 <=> A, 2 <=> B) usw.
1 -> A
2 -> B
...
26 -> Z
A -> 1
B -> 2
...
Z -> 26
Regeln
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
- Die Eingabe besteht nur aus einem Großbuchstaben von
A
bisZ
oder einer Ganzzahl von1
bis26
einschließlich. - Nachgestellte Leerzeichen (Leerzeichen und Zeilenumbrüche) sind zulässig.
26
als Integer oder"26"
als String oder sind beide erlaubt?Antworten:
Eigentlich 7 Bytes
Probieren Sie es online!
Erläuterung:
Wenn Kleinbuchstaben zulässig sind, sind dies 6 Byte:
Probieren Sie es online!
quelle
Actually
. DaherActually, 7 bytes
. : PPure Bash, 51
Die meisten anderen Antworten verwenden eine Art von Bedingung. Diese Methode verzichtet vollständig auf Bedingun- gen und behandelt die Eingabe stattdessen als eine Zahl zur Basis 36, die in ein entsprechend aufgebautes Array zur Bash-Brace-Erweiterung indiziert:
Ideone.
quelle
#
?Erlang, 26 Bytes
Eines der wenigen Male, bei denen das Verhalten von Erlang nützlich ist.
quelle
Python 2, 38 Bytes
Teste es auf Ideone .
quelle
Python 3, 43 Bytes
Das Interessante an dieser Lösung ist, dass sie alle Sinne von OR, bitweisem OR
|
, logischem ORor
, bitweisem XOR^
und logischem XOR umfasst!=
...quelle
2sable ,
98 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
Ruby,
47 39 +n
Flag = 40 Bytes333431 BytesAnonyme Funktion. Verwendet einen Ausnahmebehandlungstrick wie in @ KarlNapfs Python-Lösung .
-3 Bytes von @manatwork
Probieren Sie es online aus
Ursprüngliche Vollprogrammversion mit dem
n
Flag für 40 Bytes und liest aus STDIN:quelle
->i{(64+i).chr rescue i.ord-64}
.Cheddar,
3432 Bytes2 Bytes dank @LeakyNun gespart
Ich wünschte, es gäbe eine kürzere Möglichkeit, um zu überprüfen, ob Zeichenfolge oder Nummer.
Probieren Sie es online! oder Test Suite
Erläuterung
"%s"%n==n
prüft auf einfache Weise, ob es sich um eine Zeichenkette handelt."%s"
ist ein string format, mit dem ich%
zB"a %s c" % "b"
gleich formatieren kann"a b c"
.%s
Gibt an, dass es sich um eine Zeichenfolge handelt. Wenn eine Ziffer übergeben wird, bleibt sie wie folgt%s
.quelle
"%s"%n==n
speichert 2 Bytes"%d"%n==n
aber das hat nicht funktioniert: /Mathematica
5441 BytesMit einem absolut cleveren Vorschlag von LegionMammal978, der 13 Bytes einspart.
If[#>0,FromLetterNumber,,LetterNumber]
dient einzig und allein der Entscheidung, ob eine BewerbungFromLetterNumber
oder eine BewerbungLetterNumber
eingereicht werden soll.#>0
Wird erfüllt, wenn die Eingabe,,#
eine Zahl ist. In diesem FallFromLetterNumber
wird ausgewählt.Es ist jedoch
#>0
weder wahr noch falsch, wenn#
es sich um einen Buchstaben handelt, und esLetterNumber
wird stattdessen ausgewählt.4
d
In Mathematica
FromLetterNumber
undLetterNumber
wird auch mit anderen Alphabeten arbeiten. Dies erfordert nur noch wenige Bytes.δ
г
b
4
4
4
quelle
If[#>0,FromLetterNumber,,LetterNumber]@#&
If[#>0,FromLetterNumber[#],LetterNumber@#]&
. Funktioniert zwarIf[#>0,FromLetterNumber[#],LetterNumber@#]&[4]
,If[#>0,FromLetterNumber[#],LetterNumber@#]&["c"]
aber nicht. Es kann anscheinend nicht auflösen"c">0
. Habe ich falsch verstanden,,
ist beabsichtigt, und so ist das Äußere@#
; Es wird als ausgewertetIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, wobei die 4-Argument-Form vonIf
(Nachschlagen) verwendet wird.If
funktioniert.Haskell, 54 Bytes
Anwendungsbeispiel:
map f ["1","26","A","Z"]
->["A","Z","1","26"]
.Haskells strenges Typensystem ist hier ein echtes Problem. Zusätzlich funktionieren alle kurzen Zeichen <-> int wie
chr
undord
brauchen einen Import, also muss ich es von Hand machen. Für den Fall letter -> int muss ich zum BeispielString
->Char
(via!!0
) ->Integer
(viafromEnum
) ->String
(viashow
) konvertieren .quelle
C 55 Bytes
quelle
Perl 6 , 25 Bytes
Erläuterung:
Beispiel:
quelle
perl -pe '$_=/\d/?chr$_+64:-64+ord'
:!C #, 32 Bytes
Wirft zu
Func<int, object>
.Eingabe:
char
Implizit konvertiert nachint
so kann mitint
(1-26) oderchar
('A'-Z') aufgerufen werden .Ausgabe: Entweder a
char
oderint
.quelle
PHP,
494140 BytesIch glaube nicht, dass es eine gute Alternative gibt
is_numeric
oder?Dies wird von der Kommandozeile ausgeführt (
$argv[1]
ist die erste angegebene Variable)Dank an:
@insertusernamehere: Golf 8 Bytes. Ersetzen
is_numeric($i=$argv[1])
durch0<($i=$argv[1])
.Das funktioniert weil(int)"randomLetter" == 0
.@manatwork: Reduziert um 1 Byte. Ersetzen
0<
durch+
. In diesem Fall wird durch das Signal + das "Z" (oder ein beliebiger Buchstabe) auf 0 gesetzt. Dies führt zu "false". Daher ist jeder Buchstabe immer falsch und eine Zahl ist immer wahr.quelle
0<($i=$argv[1])
stattis_numeric($i=$argv[1])
sparen Sie 8 Bytes .0<
→+
.Python 2, 61 Bytes
Ja, ich könnte zu Python 3 wechseln
input
quelle
input()
trotzdem und wechseln Sieint(i)
zui
."A"
A
oder nichts.def f(i):
Zeile 2: <Leerzeichen>try:o=chr(i+64)
, Zeile 3 <Leerzeichen>, sonst unverändert, Zeile 4: <Leerzeichen>return o
In dieser Form würde es in Python 2 funktionieren oder Python 3PowerShell v2 +, 42 Byte
Übernimmt Eingaben
$n
(als Ganzzahl oder explizites Zeichen) und verwendet ein Pseudoternär, um zwischen zwei Elementen eines Arrays zu wählen. Die Bedingung ist$n-ge65
(dh ist die Eingabe ASCIIA
oder höher). In diesem Fall wird die Eingabe einfach als int umgewandelt und subtrahiert64
. Andernfalls fügen wir64
die Eingabe-Ganzzahl hinzu und wandeln sie in eine[char]
. In beiden Fällen bleibt das Ergebnis in der Pipeline und das Drucken ist implizit.Beispiele
quelle
Befunge-98 *, 19 Bytes
Da die Frage besagte, dass Sie ein
1-26
oder ein erhalten, nahmA-Z
ich an, dass dies die Nummer 26 oder das Zeichen AZ bedeutete. Die meisten Interpreten haben Probleme mit der Eingabe von Alt-Codes, daher ist es einfacher,&
Werte wie 26 für 26 oder 90 für 'Z' einzugeben, im Gegensatz zu~
.Pseudocode
Testen Sie es hier (unter Windows) !
* Dies ist technisch gesehen Unefunge-98, da nur eine Dimension verwendet wird, der Name jedoch möglicherweise nicht bekannt ist.
quelle
Befunge 93 ,
144 90 66 54 3619 BytesNicht 100% sicher, ob dies zulässig ist, aber wenn Sie A als 65, B als 66 usw. eingeben dürfen, dann (aus [meinem] Interesse):
Ansonsten bei 36 Bytes:
(Danke an tngreene für die Vorschläge!)
(Dank an Sp3000 für die Einsparung von 12 Bytes durch Neuanordnung!)
Ungolfed:
Dies ist mein erstes funktionierendes Befunge-Programm überhaupt, und ich habe das Bedürfnis, dieses weiter auszubauen. Jede Hilfe wäre sehr dankbar.
Sie können Befunge Code testen hier .
quelle
52**\28*++,@>~:0`!#^_\68*-
567+*
mit"A"
. Auch vergessen Sie nicht überg
undp
Anweisungen für einen Wert Wiederverwendung anstatt es aufzubauen wiederholt. Außerdem konnte ich keine Eingabe finden, die die IP-Adresse in den Zweig übernehmen würde>$ 28* + , @
. Wofür ist das? Bist du sicher, dass es gebraucht wird?$28*+,@
während die> = 10 zum anderen gehen. Dies wurde letztendlich gemacht, weil man die Eingabe meines Wissens nicht mehr als einmal durchlesen kann.Brainfuck, 445 Zeichen
Eher ein Proof of Concept als ein Golf-Code. Benötigt nicht signiertes, nicht umwickeltes Brainfuck.
Mit Kommentaren
quelle
Java,
1049897835453515030 Bytesx->(x^=64)>64?(char)x+"":x+"";
Testprogramm :
quelle
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Fourier, 30 Bytes
Probieren Sie es online!
quelle
R, 73 Bytes
quelle
f=
, und Sie Cloud versuchen, dieifelse
Funktion zu verwenden, um vielleicht ein paar Bytes Golf!MATL, 10 Bytes
Erläuterung:
Probieren Sie es online! mit numerischen Eingaben.
Probieren Sie es online! mit alphabetischen Eingaben.
quelle
Python 3,
49 48 5350 BytesIrgendwie habe ich die Byteanzahl falsch verstanden; _; danke dahuglenny
isalpha
ist kürzer alsisnumeric
Nimmt Eingaben als Zeichenfolge, die ein Buchstabe oder eine Zahl sein kann
quelle
x.isnumeric()
und entfernenelse
, um ein Byte zu speichern.Java, 61 Bytes
Ungolf'd:
Der Aufruf
f('A')
ruft die erste Funktion auf und stimmt eineint
1 neu ab. Der Aufruff(1)
ruft die zweite Funktion auf und gibt daschar
"A" zurück.quelle
Javascript
86776660 Bytesquelle
return
Aussage:i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
Eingabe nur "Zahl" oder "Zeichenkette" sein. Also keine Notwendigkeit zu überprüfen=='number'
,<'s'
wird es auch tun.ASM: 10 Bytes
Erläuterung: Dies ist die zusammengestellte Darstellung eines Programms, das genau das tut, wonach gefragt wird. Es ist nicht voll funktionsfähig, da es einige Direktiven benötigt, aber wenn es zum Codesegment eines Assembly-Programms hinzugefügt wird, sollte es funktionieren. Es empfängt die Eingabe im AL-Register und subtrahiert, wenn es ein Buchstabe ist, 40h vom ASCII-Codewert, wobei nur die Zahl übrig bleibt (dh B = 42h, 42h-40h = 2h). Wenn die Eingabe eine Zahl ist, erfolgt die umgekehrte Prozedur durch Addieren von 40 Stunden. Das Ergebnis verbleibt im AL-Register. Unten finden Sie den Assembly-Quellcode
Auch wenn Sie alle anderen Antworten in Maschinencode konvertieren, bin ich überzeugt, dass meine die kleinste wäre.
quelle
77 02 2C
sollte sein77 **04** 2C
; diesub
undadd
sind rückwärts.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 Bytes
quelle
Brachylog , 10 Bytes
Probieren Sie es online!
Der Kern davon ist nur 4 Bytes , aber die E / A für diese Version ist ein bisschen weniger als vernünftig.
quelle
Japt , 11 Bytes
Versuch es
quelle