Alphabet zu Nummer und Nummer zu Alphabet


26

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 , also gewinnt der kürzeste Code in Bytes.
  • Die Eingabe besteht nur aus einem Großbuchstaben von Abis Zoder einer Ganzzahl von 1bis 26einschließlich.
  • Nachgestellte Leerzeichen (Leerzeichen und Zeilenumbrüche) sind zulässig.

1
Warum duplizieren? Oo Es ist nicht gleich.
Chad

3
Willkommen bei Programming Puzzles und Code Golf! Diese Herausforderung könnte eine Klarstellung gebrauchen. Sie können beispielsweise angeben, welche Eingaben verarbeitet werden müssen, da ungültige Eingaben vorliegen. Ich empfehle, zukünftige Herausforderungen in der Sandbox zu veröffentlichen, wo sie aussagekräftiges Feedback erhalten, bevor sie auf der Hauptseite veröffentlicht werden.
Undichte Nonne

1
Erhalten wir 26als Integer oder "26"als String oder sind beide erlaubt?
Undichte Nonne

2
Muss es Großbuchstaben sein, oder ist Kleinbuchstaben akzeptabel?
Mego

1
Ernsthaft eine andere Alphabetherausforderung? (͡ ° ͜ʖ ͡ °)
Shooqie

Antworten:


6

Eigentlich 7 Bytes

ú' +ûEí

Probieren Sie es online!

Erläuterung:

ú' +ûEí
ú' +     lowercase English alphabet, prepend space
    û    uppercase
     E   element (pushes the nth letter if input is an integer, leaves stack alone otherwise)
      í  index (pushes index of input if input is a string, leaves stack alone otherwise)

Wenn Kleinbuchstaben zulässig sind, sind dies 6 Byte:

ú' +Eí

Probieren Sie es online!


1
Sie gewinnen im Moment, ich denke, niemand könnte ein Programm mit weniger als 7 Bytes machen.
Tschad

1
Ich bin nur gekommen, um das zu fragen. @Mego welche Sprache ist das?
FoldedChromatin

2
@FoldedChromatin sieht aus wie github.com/Mego/Seriously
Alfred Bez

1
@FoldedChromatin Eigentlich ist es Actually. Daher Actually, 7 bytes. : P
Dan

2
Momente wie diese machen mich glücklich über die Namen, die ich für meine Sprachen gewählt habe :)
Mego

12

Pure 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:

a=(_ {A..I} {1..26} {J..Z} {A..Z})
echo ${a[36#$1]}

Ideone.


1
Also, was macht der #?
R. Kap


9

Erlang, 26 Bytes

f([X])->X-64;f(X)->[X+64].

Eines der wenigen Male, bei denen das Verhalten von Erlang nützlich ist.


7

Python 2, 38 Bytes

lambda x:x>''and 64^ord(x)or chr(64^x)

Teste es auf Ideone .


7

Python 3, 43 Bytes

lambda x:x!=str(x)and chr(64|x)or ord(x)^64

Das Interessante an dieser Lösung ist, dass sie alle Sinne von OR, bitweisem OR |, logischem OR or, bitweisem XOR ^und logischem XOR umfasst !=...


6

2sable , 9 8 Bytes

Code:

.bAu¹kr,

Erläuterung:

.b        # Convert 1 -> A, 2 -> B, etc.
  A       # Push the alphabet.
   u      # Convert it to uppercase.
    ¹k    # Find the index of the letter in the alphabet.
      r   # Reverse the stack.
       ,  # Pop and print with a newline.

Verwendet die CP-1252- Codierung. Probieren Sie es online! .


1
Kannst du nicht löschen? Welche Bytes sind ohne? Sie müssen keine neue Zeile drucken.
Tschad,

@Chad Nein, das funktioniert bei numerischen Eingaben nicht :(
Adnan

6

Ruby, 47 39 + nFlag = 40 Bytes 33 34 31 Bytes

Anonyme Funktion. Verwendet einen Ausnahmebehandlungstrick wie in @ KarlNapfs Python-Lösung .

-3 Bytes von @manatwork

Probieren Sie es online aus

->i{(64+i).chr rescue i.ord-64}

Ursprüngliche Vollprogrammversion mit dem nFlag für 40 Bytes und liest aus STDIN:

puts$_!~/\d/?$_.ord-64:(64+$_.to_i).chr

Ich bekomme einen Syntaxfehler, wenn ich versuche, auf ideone zu laufen. Kannst du sagen, wie man testet ?
Leibrug

@Leibrug Hoppla! Es ist jetzt behoben
Value Ink

Sie können es mehr reduzieren , indem sie schamlos Anwendung Karl Napf ‚s Trick aus seiner Python Lösung : ->i{(64+i).chr rescue i.ord-64}.
Handarbeit

5

Cheddar, 34 32 Bytes

2 Bytes dank @LeakyNun gespart

n->"%s"%n==n?n.ord()-64:@"(n+64)

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

n ->                // func with arg `n`
    "%s"%n==n ?     // if n is string... (see below)
       n.ord() - 64  // return code point - 64
    :               // else...
    @"(n+64)         // chr(n+64)

"%s"%n==nprü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". %sGibt an, dass es sich um eine Zeichenfolge handelt. Wenn eine Ziffer übergeben wird, bleibt sie wie folgt %s.


"%s"%n==nspeichert 2 Bytes
Leaky Nun

@LeakyNun oh das ist schlau! Ich habe versucht, "%d"%n==naber das hat nicht funktioniert: /
Downgoat

5

Mathematica 54 41 Bytes

Mit einem absolut cleveren Vorschlag von LegionMammal978, der 13 Bytes einspart.

If[#>0,FromLetterNumber,,LetterNumber]@#&

If[#>0,FromLetterNumber,,LetterNumber]dient einzig und allein der Entscheidung, ob eine Bewerbung FromLetterNumberoder eine Bewerbung LetterNumbereingereicht werden soll.

#>0Wird erfüllt, wenn die Eingabe,, #eine Zahl ist. In diesem Fall FromLetterNumberwird ausgewählt.

Es ist jedoch #>0weder wahr noch falsch, wenn #es sich um einen Buchstaben handelt, und es LetterNumberwird stattdessen ausgewählt.


If[#>0,FromLetterNumber,,LetterNumber]@#&["d"]

4


If[#>0,FromLetterNumber,,LetterNumber]@#&[4]

d


In Mathematica FromLetterNumberund LetterNumberwird auch mit anderen Alphabeten arbeiten. Dies erfordert nur noch wenige Bytes.

If[# > 0, FromLetterNumber, , LetterNumber][#, #2] &[4, "Greek"]
If[# > 0, FromLetterNumber, , LetterNumber][#, #2] &[4, "Russian"]
If[# > 0, FromLetterNumber, , LetterNumber][#, #2] &[4, "Romanian"]

δ
г
b

If[# > 0, FromLetterNumber, , LetterNumber][#, #2] &[δ, "Greek"]
If[# > 0, FromLetterNumber, , LetterNumber][#, #2] &[г, "Russian"]
If[# > 0, FromLetterNumber, , LetterNumber][#, #2] &[b, "Romanian"]

4
4
4


1
Etwas Golf, es auf 41 Bytes zu bringen:If[#>0,FromLetterNumber,,LetterNumber]@#&
LegionMammal978

Ich interpretiere Ihren Vorschlag als: If[#>0,FromLetterNumber[#],LetterNumber@#]‌&. Funktioniert zwar If[#>0,FromLetterNumber[#],LetterNumber@#]‌&[4], If[#>0,FromLetterNumber[#],LetterNumber@#]‌&["c"]aber nicht. Es kann anscheinend nicht auflösen "c">0. Habe ich falsch verstanden
DavidC

Das Doppelte ,,ist beabsichtigt, und so ist das Äußere @#; Es wird als ausgewertet If[# > 0, FromLetterNumber, Null, LetterNumber][#]&, wobei die 4-Argument-Form von If(Nachschlagen) verwendet wird.
LegionMammal978

Erstaunlich, wie die 4-Argument-Form Iffunktioniert.
DavidC

4

Haskell, 54 Bytes

f s|s<"A"=[['@'..]!!read s]|1<2=show$fromEnum(s!!0)-64

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 chrund ordbrauchen einen Import, also muss ich es von Hand machen. Für den Fall letter -> int muss ich zum Beispiel String-> Char(via !!0) -> Integer(via fromEnum) -> String(via show) konvertieren .


4

C 55 Bytes

i;f(char*s){i=atol(s);printf(i?"%c":"%d",64^(i?i:*s));}

4

Perl 6 , 25 Bytes

{+$_??chr $_+64!!.ord-64}

Erläuterung:

# bare block lambda with implicit parameter of 「$_」
{
    +$_         # is the input numeric
  ??
    chr $_ + 64 # if it is add 64 and get the character
  !!
    $_.ord - 64 # otherwise get the ordinal and subtract 64
}

Beispiel:

say ('A'..'Z').map: {+$_??chr $_+64!!.ord-64}
# (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26)

say (1..26).map: {+$_??chr $_+64!!.ord-64}
# (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)

2
Auch wenn die Syntax so unterschiedlich ist, entspricht derselbe Mechanismus der gleichen Anzahl von Bytes in Perl 5 perl -pe '$_=/\d/?chr$_+64:-64+ord':!
Dom Hastings

3

C #, 32 Bytes

n=>(n^=64)>26?(object)(char)n:n;

Wirft zu Func<int, object>.

Eingabe: charImplizit konvertiert nach intso kann mit int(1-26) oder char('A'-Z') aufgerufen werden .

Ausgabe: Entweder a charoder int.


3

PHP, 49 41 40 Bytes

<?=+($i=$argv[1])?chr($i+64):ord($i)-64;

Ich 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])durch 0<($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.


2
Mit 0<($i=$argv[1])statt is_numeric($i=$argv[1])sparen Sie 8 Bytes .
Insertusernamehere

1
Fortsetzung dieser Idee: 0<+.
Handarbeit

2

Python 2, 61 Bytes

i=raw_input()
try:o=chr(int(i)+64)
except:o=ord(i)-64
print o

Ja, ich könnte zu Python 3 wechseln input


Verwenden Sie input()trotzdem und wechseln Sie int(i)zu i.
Undichte Nonne

Dann funktionieren Zeicheneingaben nicht.
Karl Napf

2
Nehmen Sie die Eingabe als"A"
Leaky Nun

3
Das ist lahm. Aoder nichts.
Karl Napf

Sie könnten ein paar Bytes verlieren, indem Sie es als Funktion umformulieren: Zeile 1:, 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 3
cdlane

2

PowerShell v2 +, 42 Byte

param($n)([char](64+$n),(+$n-64))[$n-ge65]

Ü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 ASCII Aoder höher). In diesem Fall wird die Eingabe einfach als int umgewandelt und subtrahiert 64. Andernfalls fügen wir 64die 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

PS C:\Tools\Scripts\golfing> ([char[]](65..90)|%{.\alphabet-to-number.ps1 $_})-join','
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

PS C:\Tools\Scripts\golfing> (1..26|%{.\alphabet-to-number.ps1 $_})-join','
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z

2

Befunge-98 *, 19 Bytes

&:39*\`'@\j;+,@;-.@

Da die Frage besagte, dass Sie ein 1-26oder ein erhalten, nahm A-Zich 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

int c = get stdin
push the value of 27
bool is_number =  27 > c
push the value of `@` (64)
if is_number == 1
   jump to adding 64 to c //putting it the ASCII range
   print as ASCII
   end
else
   jump to subtracting 64 from c //putting it in the numerical range
   print as number
   end

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.


2

Befunge 93 , 144 90 66 54 36 19 Bytes

Nicht 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:

~:0\"A"-`#v_88*-.@
**~28*++,@>68*-52

(Danke an tngreene für die Vorschläge!)

~:0\567+*-`#v_88*-.>$28*+,@
52**\28*++,@>~:0`!#^_\68*-

(Dank an Sp3000 für die Einsparung von 12 Bytes durch Neuanordnung!)

~:0\567+*-`#v_88*-.>$82*+,@
            >~:0`!#^_\68*-52**\28*++,@


v                   >$28*+,@
             >~:0`!#^_\68*-52**\28*++,@
>~:0\567+*-`#^_88*-.@


v                    >$28*+,@
~           >11g~:0`!|
1                    >\68*-52**\28*++,@
1
p           
>011g567+*-`|
            >11g88*-.@

Ungolfed:

v                       >$ 28* + , @
                 >~:0 `!|
                        >\ 68* - 52* * \ 28* + + , @
>~:0\ 5 67+ * - `|
                 >88* - . @

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 .


1
Vorübergehender kurzer Blick Kommentar: Befunge wickelt sich um, sodass Sie die letzten 12 Zeichen der zweiten Zeile nach vorne verschieben können und52**\28*++,@>~:0`!#^_\68*-
Sp3000

@ Sp3000, oh das hab ich nicht gemerkt. Vielen Dank!
Daniel

Herzlichen Glückwunsch zu Ihrem ersten Programm! Eine zu berücksichtigende Sache wäre, große Zahlen durch Drücken von ASCII-Werten in einer Zeichenfolge zu generieren. Vergleichen Sie 567+*mit "A". Auch vergessen Sie nicht über gund pAnweisungen 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?
Tngreene

Zuletzt bewundere ich Ihre Hingabe, "26" oder "08" zu analysieren. Wie ich es gelesen habe, beinhaltet Ihre Methode viel Symbol <-> Zahlenumwandlungsmathematik, wie in ('2' zu 2 zurück zu '2'). Wenn Sie Ihre ersten und zweiten Eingaben als Zahlen verwenden, bevor Sie mit dem Vergleich beginnen, kann dies den Umfang der von Ihnen ausgeführten ASCII-Arithmetik verringern. Alternativ gibt es vielleicht eine Möglichkeit, Eingaben als Symbole ('2' wie in '2') effizient zu behandeln, ohne dass eine Konvertierung in Zahlen erforderlich ist!
Tngreene

@tngreene, Integer-Eingänge <10 gehen zum Zweig, $28*+,@während die> = 10 zum anderen gehen. Dies wurde letztendlich gemacht, weil man die Eingabe meines Wissens nicht mehr als einmal durchlesen kann.
Daniel

2

Brainfuck, 445 Zeichen

Eher ein Proof of Concept als ein Golf-Code. Benötigt nicht signiertes, nicht umwickeltes Brainfuck.

,[>+>+<<-]>[<+>-]>>++[->++++++<]>[-<<<+++++>>>]<<<<[->-<]>[,<++++[->------------<]++++[->>------------<<][-<<++++++++++>>]>[-<+>]>[-<<++++++++++>>]>++[->++++++<]>+[-<+++++>]<-[-<<<+>>>]<<<.>]>[[-<+<+>>]>++[->++++++<]>+[-<+++++>]<-[-<<->>]<<[->+>+<<]>>>++++++++++<+[>[->+>+<<]>[-<<-[>]>>>[<[-<->]<[>]>>[[-]>>+<]>-<]<<]>>>+<<[-<<+>>]<<<]>>>>>[-<<<<<+>>>>>]<<<<<-[->+>+<<]>[-<++++++++++>]<[-<->]++++[-<++++++++++++>]++++[->>++++++++++++<<]>>.<<<.>]

Mit Kommentaren

,[>+>+<<-] Firstly Duplicate it across two buffers
>[<+>-] Move the second buffer back to the first buffer
>>++[->++++++<]>[-<<<+++++>>>] Establish 60 in the second buffer
<<<<
Compare Buffers 1 and 2
[->-<]
>
[ If there's still data in buffer 2
, Write the value in the units column to buffer two
<
++++
[->------------<] Subtract 12 from the units buffer
++++
[->>------------<<] Subtract 12 from the tens buffer
[-<<++++++++++>>] Multiply buffer three by ten into buffer 1
>
[-<+>] Add the units
>
[-<<++++++++++>>] Add the tens
>++ Add 65 to the buffer
[->++++++<]>+
[-<+++++>]
<- Actually we need 64 because A is 1
[-<<<+>>>] Add 64 to the first buffer
<<<
. Print the new letter
> Move to blank buffer
]
>
[ Otherwise we're a letter
[-<+<+>>] Copy it back over the first two buffers
>++ Write 64 to the buffer
[->++++++<]>+
[-<+++++>]
<-
[-<<->>] Subtract 64 from the letter
<<[->+>+<<]
>>>++++++++++< Copy pasted Division step x = current buffer y = 10 rest of the buffers are conveniently blank

+
[>[->+>+<<]>[-<<-[>]>>>[<[-<->]<[>]>>[[-]>>+<]>-<]<<]>>>+<<[-<<+>>]<<<]>>>>>[-<<<<<+>>>>>]<<<<<
-
[->+>+<<]
>[-<++++++++++>]
<[-<->]
++++
[-<++++++++++++>]
++++
[->>++++++++++++<<]
>>.<<<.>
] 

2

Java, 104 98 97 83 54 53 51 50 30 Bytes

x->(x^=64)>64?(char)x+"":x+"";

Testprogramm :

IntFunction<String> f = x -> (x ^= 64) > 64 ? (char) x + "" : x + "";
out.println(f.apply('A')); // 1
out.println(f.apply('Z')); // 26
out.println((f.apply(1))); // A
out.println((f.apply(26))); //Z

1
Sie können ungefähr 20 Bytes return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
löschen,

Sie können das Casting auch auf int entfernen, wodurch Sie es um 7 Bytes reduzieren können.
User902383

Das Programm nimmt keine Eingaben an. Das Programm gibt keine Ausgabe aus. Es gibt sogar kein Programm!
Nicolas Barbulesco

@NicolasBarbulesco Sofern nicht anders angegeben, müssen Sie kein vollständiges Programm schreiben.
Shaun Wild


1

R, 73 Bytes

f=function(x){L=LETTERS;if(is.numeric(x)){i=L[(x)]}else{i=which(L==x)};i}

Keine Notwendigkeit f=, und Sie Cloud versuchen, die ifelseFunktion zu verwenden, um vielleicht ein paar Bytes Golf!
Frédéric


1

Python 3, 49 48 53 50 Bytes

Irgendwie habe ich die Byteanzahl falsch verstanden; _; danke dahuglenny

isalpha ist kürzer als isnumeric

lambda x:x.isalpha()and ord(x)-64or chr(int(x)+64)

Nimmt Eingaben als Zeichenfolge, die ein Buchstabe oder eine Zahl sein kann


1
Sie können das Leerzeichen zwischen x.isnumeric()und entfernen else, um ein Byte zu speichern.
Acrolith

1

Java, 61 Bytes

int f(char c){return c^64;}char f(int i){return(char)(i^64);}

Ungolf'd:

int f(char c) {
    return c^64;
}

char f(int i) {
    return (char) (i^64);
}

Der Aufruf f('A')ruft die erste Funktion auf und stimmt eine int1 neu ab. Der Aufruf f(1)ruft die zweite Funktion auf und gibt das char"A" zurück.


`Sie müssen eine Zahl als Eingabe nehmen und den entsprechenden Buchstaben des Alphabets ausgeben und umgekehrt. (1 <=> A, 2 <=> B) usw.` Ich glaube nicht, dass eine Reihe von Funktionen dafür geeignet ist.
Shaun Wild

1
@ SeanBean ist eine Funktionsüberladung.
NoOneIsHere

1
Das braucht keine Eingabe. Das gibt keine Ausgabe. Es gibt kein Programm!
Nicolas Barbulesco

Sie sollten annehmen, dass der Eingang entweder "A" .. "Z" oder "0" .. "9" ist. Da eine Zeichenfolge das einzige Grundelement ist, das entweder enthalten kann (Sie wissen nicht, wie die Eingabe lautet), sollte Ihre Funktion ein Zeichenfolgenargument erwarten.
RobIII

1

Javascript 86 77 66 60 Bytes

i=>typeof i<'s'?String.fromCharCode(i+64):i.charCodeAt(0)-64
  • 7 Bytes nach Kommentaren zur Verwendung von Pfeilfunktionen gespeichert
  • sparte weitere 11 Bytes durch Entfernen von return / eckigen Klammern, wie von @manatwork angegeben
  • hat dank @manatwork weitere 6 Bytes eingespart

1
Verwenden Sie
Pfeilfunktionen

@BaldBantha Prost, änderte es :-)
Dylan Meeus

Nein für brauchen returnAussage: i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64.
Manatwork

@manatwork Prost!
Dylan Meeus

1
Laut Aufgabenbeschreibung kann die typeofEingabe nur "Zahl" oder "Zeichenkette" sein. Also keine Notwendigkeit zu überprüfen =='number', <'s'wird es auch tun.
Manatwork

1

ASM: 10 Bytes

3C 40 77 04 2C 40 EB 02 04 40

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

cmp al,40h
ja letter_to_number
sub al,40h
jmp continue
letter_to_number: add ax,40h
continue:

Auch wenn Sie alle anderen Antworten in Maschinencode konvertieren, bin ich überzeugt, dass meine die kleinste wäre.


Ich denke, es gibt ein paar Probleme: 77 02 2Csollte sein 77 **04** 2C; die subund addsind rückwärts.
Ceilingcat

Ich habe die obigen Korrekturen angewendet und eine "Funktion" erstellt, die Sie aus einem C-Programm auf einem x86_64-Computer aufrufen können. #define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Ceilingcat

Um welche Art von Baugruppe handelt es sich?
mbomb007

Turbo Assembler
6a75616e



1

Japt , 11 Bytes

;BbU Ī´UgB

Versuch es

;BbU Ī´UgB     :Implicit input of integer or string U
;B              :Uppercase alphabet
  bU            :0-based index of U (-1 if not found)
     Ä          :Add 1
      ª         :Logical OR with
       ´U       :Decrement U
         gB     :Index into the uppercase alphabet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.