Alfabet na numer i Liczba na alfabet


26

Wyzwanie

W tym wyzwaniu musisz wziąć liczbę jako dane wejściowe i wyjściowe odpowiedniej litery alfabetu i odwrotnie. (1 <=> A, 2 <=> B) itp.

1 -> A
2 -> B
...
26 -> Z

A -> 1
B -> 2
...
Z -> 26

Zasady

  • To jest , więc wygrywa najkrótszy kod w bajtach.
  • Dane wejściowe będą się składać wyłącznie z dużej litery od Ado Zlub liczby całkowitej od 1do 26włącznie.
  • Końcowe białe znaki (spacja i nowa linia) są dozwolone.

1
Po co duplikować? Oo To nie jest równe.
— Czad

3
Witamy w Programowaniu zagadek i Code Golf! To wyzwanie może wymagać nieco wyjaśnienia. Na przykład możesz określić, jakie dane wejściowe musielibyśmy obsłużyć, ponieważ są nieprawidłowe dane wejściowe. Polecam publikowanie przyszłych wyzwań w piaskownicy, gdzie mogą uzyskać znaczącą informację zwrotną przed opublikowaniem na głównej stronie.
— Leaky Nun

1
Czy otrzymamy 26jako liczbę całkowitą lub "26"jako ciąg, czy oba są dozwolone?
— Leaky Nun

2
Czy musi to być duża litera, czy zamiast tego dopuszczalne są małe litery?
— Mego

1
Poważnie, kolejne wyzwanie alfabetyczne? (͡ ° ͜ʖ ͡ °)
— shooqie

Odpowiedzi:


6

Właściwie 7 bajtów

ú' +ûEí

Wypróbuj online!

Wyjaśnienie:

ú' +û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)

Jeśli dopuszczalne są małe litery, jest to 6 bajtów:

ú' +Eí

Wypróbuj online!


1
W tej chwili wygrywasz, myślę, że nikt nie mógłby zrobić programu z mniejszą liczbą 7 bajtów.
— Czad

1
Przyłączyłem się, żeby o to zapytać. @Mego, co to za język?
— FoldedChromatin

2
@FoldedChromatin wygląda jak github.com/Mego/Seriously
— Alfred Bez

1
@FoldedChromatin Właściwie to jest Actually. Stąd Actually, 7 bytes. : P
— Dan

2
Chwile takie jak te sprawiają, że cieszę się z nazwisk, które wybrałem dla moich języków :)
— Mego

12

Pure Bash, 51

Większość pozostałych odpowiedzi używa pewnego rodzaju warunkowych. Ten całkowicie rezygnuje z warunkowych i zamiast tego traktuje dane wejściowe jako liczbę podstawową 36, która indeksuje w odpowiednio skonstruowaną tablicę rozszerzeń bash-nawias klamrowy:

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

Ideone.


1
Co więc robi #?
— R. Kap


9

Erlang, 26 bajtów

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

Jeden z niewielu przypadków, w których zachowanie łańcucha Erlanga jest przydatne.



7

Python 3, 43 bajty

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

Ciekawą rzeczą w tym rozwiązaniu jest to, że zawiera wszystkie zmysły OR, bitowe OR |, logiczne OR or, bitowe XOR ^i logiczne XOR !=...


6

2sable , 9 8 bajtów

Kod:

.bAu¹kr,

Wyjaśnienie:

.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.

Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .


1
Nie możesz usunąć? Których bajtów nie ma? Nie musisz drukować nowej linii.
— Czad

@Chad Nie, to nie zadziała dla danych numerycznych :(
— Adnan

6

Rubinowy, 47 39 + nflaga = 40 bajtów 33 34 31 bajtów

Funkcja anonimowa. Wykorzystuje sztuczkę związaną z obsługą wyjątków, jak w rozwiązaniu Python @ KarlNapf .

-3 bajty z @manatwork

Wypróbuj online

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

Oryginalna pełna wersja programu z nflagą na 40 bajtów i odczytywana ze STDIN:

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

Podczas próby uruchomienia ideonu pojawia się błąd składniowy. Czy możesz powiedzieć, jak testować?
— Leibrug

@Leibrug oops! Jest już naprawiony
— Value Ink

Można je zmniejszyć bardziej bezwstydnie stosowania przez Karla Napf „s sztuczki z jego roztworu Python : ->i{(64+i).chr rescue i.ord-64}.
— manatwork

5

Cheddar, 34 32 bajty

Zaoszczędź 2 bajty dzięki @LeakyNun

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

Chciałbym, aby istniał krótszy sposób sprawdzenia, czy łańcuch lub liczba.

Wypróbuj online! lub pakiet testowy

Wyjaśnienie

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==nw prosty sposób sprawdza, czy jest to ciąg znaków. "%s"jest formatem ciągu, który mogę sformatować %np. "a %s c" % "b"jest równy "a b c". %sokreśla, że ​​jest to ciąg znaków, jeśli cyfra zostanie przekazana, pozostanie jako %s.


"%s"%n==noszczędza 2 bajty
— Leaky Nun

@LeakyNun oh to mądre! Próbowałem robić, "%d"%n==nale to nie działało: /
— Downgoat

5

Mathematica 54 41 bajtów

Z absolutnie sprytną sugestią LegionMammal978, która oszczędza 13 bajtów.

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

If[#>0,FromLetterNumber,,LetterNumber]służy wyłącznie do podjęcia decyzji, czy zastosować, FromLetterNumberczy LetterNumberdo wkładu.

#>0będzie spełniony, jeśli wejście,, #jest liczbą, w którym to przypadku FromLetterNumberzostanie wybrany.

Jednak #>0nie będzie ani prawdą, ani fałszem, jeśli #jest literą i LetterNumberzostanie wybrana zamiast tego.


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

4


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

re


W Mathematica, FromLetterNumbera LetterNumbertakże będzie działać z innymi alfabetami. Wymaga to tylko kilku dodatkowych bajtów.

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
Trochę gry w golfa, przynosząc do 41 bajtów:If[#>0,FromLetterNumber,,LetterNumber]@#&
— LegionMammal978

Interpretować swoje sugestie jak: If[#>0,FromLetterNumber[#],LetterNumber@#]‌&. Chociaż If[#>0,FromLetterNumber[#],LetterNumber@#]‌&[4]działa, If[#>0,FromLetterNumber[#],LetterNumber@#]‌&["c"]nie działa. Najwyraźniej nie może rozwiązać "c">0. Czy źle zrozumiałem?
— DavidC

Podwójne ,,jest zamierzone, podobnie jak zewnętrzne @#; ocenia as If[# > 0, FromLetterNumber, Null, LetterNumber][#]&, który używa 4-argumentowej formy If(wyszukaj).
— LegionMammal978

Zadziwiające, jak działa 4-argumentowa forma If.
— DavidC,

4

Haskell, 54 bajty

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

Przykład użycia: map f ["1","26","A","Z"]-> ["A","Z","1","26"].

System ścisłego pisania Haskella jest tutaj prawdziwym bólem. Dodatkowo wszystkie krótkie char <-> int działają jak chri ordwymagają importu, więc muszę to zrobić ręcznie. W przypadku litery -> int, na przykład muszę przekonwertować String-> Char(przez !!0) -> Integer(przez fromEnum) -> String(przez show).


4

C, 55 bajtów

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

4

Perl 6 , 25 bajtów

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

Wyjaśnienie:

# 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
}

Przykład:

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
Mimo, że składnia jest tak różny, że sam mechanizm jest taka sama liczba bajtów w Perlu 5: perl -pe '$_=/\d/?chr$_+64:-64+ord'!
— Dom Hastings

3

C #, 32 bajty

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

Przesyłanie do Func<int, object>.

Dane wejściowe: chardomyślnie konwertuje na, intwięc można je wywołać za pomocą int(1-26) lub char(„A'-Z”).

Wyjście: albo a charalbo int.


3

PHP, 49 41 40 bajtów

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

Nie sądzę, że istnieje dobra alternatywa dla is_numericdobra?

Jest to wykonywane z wiersza poleceń ( $argv[1]jest to pierwsza podana zmienna)

Dzięki:

@insertusernamehere: Golfed 8 bajtów. Zastąpienie is_numeric($i=$argv[1])przez 0<($i=$argv[1]).To działa, ponieważ (int)"randomLetter" == 0.

@manatwork: Zmniejszony o 1 bajt. Wymień 0<się +. W tym przypadku dzieje się tak, że sygnał + wyrzuci „Z” (lub dowolną literę) na zero. Spowoduje to fałsz. Dlatego każda litera jest zawsze fałszywa, a liczba jest zawsze prawdziwa.


2
Używanie 0<($i=$argv[1])zamiast is_numeric($i=$argv[1])oszczędza 8 bajtów .
— inserttusernamehere

1
Kontynuując ten pomysł: 0<→ +.
— manatwork

2

Python 2, 61 bajtów

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

Tak, mógłbym przejść na Python 3 dla input


Użyj input()jednak i zmień int(i)na i.
— Leaky Nun

Wówczas znaki wejściowe nie działają.
— Karl Napf,

2
Weź dane jako"A"
— Leaky Nun

3
To kiepskie. Alub nic.
— Karl Napf

Możesz zrzucić kilka bajtów, przeformułowując go jako funkcję: linia 1:, def f(i):linia 2: <spacja> try:o=chr(i+64), linia 3 <spacja> w przeciwnym razie niezmieniona, linia 4: <spacja> return o W tej formie działałoby to w Pythonie 2 lub Python 3
— cdlane

2

PowerShell v2 +, 42 bajty

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

Pobiera dane wejściowe $n(jako liczbę całkowitą lub jawny znak) i używa pseudo-trójki do wyboru między dwoma elementami tablicy. Warunkiem jest $n-ge65(tzn. Wejściowy ASCII Alub wyższy). Jeśli tak, po prostu rzutujemy dane wejściowe jako int i odejmujemy 64. W przeciwnym razie dodajemy 64do wejściowej liczby całkowitej i rzucamy ją jako [char]. W obu przypadkach wynik pozostaje w potoku, a drukowanie jest niejawne.

Przykłady

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 bajtów

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

Ponieważ pytanie brzmiało, że dostaniesz a 1-26lub an A-Z, założyłem, że oznaczało to liczbę 26 lub znak AZ. Większość interpretuje problemy z wprowadzaniem kodów alt, więc łatwiej jest używać &i wprowadzać wartości takie jak 26 dla 26 lub 90 dla „Z”, w przeciwieństwie do ~.

Pseudo kod

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

Przetestuj to (w systemie Windows) tutaj!

* Technicznie jest to Unefunge-98, ponieważ używa tylko 1 wymiaru, ale ta nazwa może być nieznana.


2

Befunge 93 , 144 90 66 54 36 19 bajtów

Nie jestem w 100% pewien, czy jest to dozwolone, ale jeśli możesz wpisać A jako 65, B jako 66 itd., To (dla mojej [wygody]):

&:"@"`"@"\#. #-_+,@

W przeciwnym razie przy 36 bajtach:

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

(Dzięki tngreene za sugestie!)

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

(Dzięki Sp3000 za zaoszczędzenie 12 bajtów przez przestawienie!)

~: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*-.@

Nie golfowany:

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

To mój pierwszy działający program Befunge w historii i czuję potrzebę dalszej gry w golfa. Każda pomoc byłaby bardzo mile widziana.

Można przetestować kod befunge tutaj .


1
Komentarz do szybkiego spojrzenia: Befunge owija się wokół, dzięki czemu możesz przesunąć ostatnie 12 znaków drugiej linii na przód i uzyskać52**\28*++,@>~:0`!#^_\68*-
— Sp3000,

@ Sp3000, och, nie zauważyłem tego. Dzięki!
— Daniel

Gratulujemy pierwszego programu! Jedną rzeczą do rozważenia byłoby wygenerowanie dużych liczb poprzez wypychanie wartości ASCII w ciągu. Porównaj 567+*z "A". Nie należy również zapominać o gi pinstrukcje ponowne wartość zamiast budować go wielokrotnie. Ponadto nie mogłem znaleźć żadnych danych wejściowych, które doprowadziłyby adres IP do oddziału >$ 28* + , @. Po co to? Czy na pewno jest to potrzebne?
— tngreene,

Wreszcie podziwiam twoje poświęcenie dla parsowania „26” lub „08”. Twoja metoda, jak czytam, obejmuje wiele matematyki konwersji liczb <->, jak w ('2' do 2 z powrotem do '2'). Pierwsze i drugie wejście jako liczby przed ich porównaniem może zmniejszyć ilość arytmetyki ASCII. Alternatywnie, być może istnieje sposób na skuteczne radzenie sobie z wejściami jako symbolami („2” jak w „2”), bez konieczności konwersji na liczby!
— tngreene,

@tngreene, Wejścia całkowite <10 przechodzą do gałęzi, $28*+,@a te> = 10 przechodzą do drugiego. Dokonano tego ostatecznie, ponieważ o ile wiem, nie można odczytać danych wejściowych więcej niż raz.
— Daniel

2

Brainfuck, 445 znaków

Bardziej dowód koncepcji niż kod do gry w golfa. Wymaga Bez podpisu, bez opakowania Brainfuck.

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

Z komentarzami

,[>+>+<<-] 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 bajtów

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

Program testowy :

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
Możesz upuścić około 20 bajtów za pomocą trójskładnikowego operatora w następujący sposób:return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
— yitzih

możesz również usunąć rzutowanie do int, co pozwala zmniejszyć o 7 bajtów.
— user902383,

Program nie pobiera żadnych danych wejściowych. Program nie daje żadnych wyników. Nie ma nawet programu!
— Nicolas Barbulesco,

@NicolasBarbulesco Nie musisz pisać pełnego programu, chyba że zaznaczono inaczej.
— Shaun Wild,


1

R, 73 bajty

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

Nie ma f=takiej potrzeby , a w chmurze spróbuj użyć tej ifelsefunkcji, aby zagrać w bajty!
— Frédéric

1

MATL, 10 bajtów

6WZ~t42>?c

Wyjaśnienie:

6W              % 2**6 = 64, but golfier looking
  Z~            % bit-wise XOR with input
    t42>?       % if result is greater than 42
         c      % convert it to a character 
                % else, don't

Wypróbuj online! z wejściami numerycznymi.
Wypróbuj online! z wprowadzaniem alfabetycznym.


1

Python 3, 49 48 53 50 bajtów

Jakoś źle pomyliłem liczbę bajtów; _; dzięki dahuglenny

isalpha jest krótszy niż isnumeric

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

przyjmuje dane wejściowe jako ciąg znaków, który może być literą lub cyfrą


1
Możesz usunąć odstęp między x.isnumeric()i, elseaby zapisać jeden bajt.
— acrolith

1

Java, 61 bajtów

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);
}

Wywołanie f('A')wywołuje pierwszą funkcję, strojenie int1; wywołanie f(1)wywołuje drugą funkcję, zwracając char„A”.


`musisz wziąć liczbę jako dane wejściowe i wypisać odpowiednią literę alfabetu i odwrotnie. (1 <=> A, 2 <=> B) itp. 'Nie sądzę, że zestaw funkcji jest do tego odpowiedni.
— Shaun Wild,

1
@SeanBean to przeciążenie funkcji.
— NoOneIsHere

1
To nie wymaga wkładu. To nie daje wyników. Nie ma programu!
— Nicolas Barbulesco,

Należy założyć, że wejście to „A” .. „Z” lub „0” .. „9”. Ponieważ ciąg znaków jest jedynym prymitywem, który może pomieścić jedno z nich (nie wiesz, jaki będzie to sygnał wejściowy), funkcja powinna oczekiwać argumentu ciągu.
— RobIII

1

JavaScript 86 77 66 60 bajtów

i=>typeof i<'s'?String.fromCharCode(i+64):i.charCodeAt(0)-64
  • zapisano 7 bajtów po komentarzach na temat używania funkcji strzałek
  • zapisał kolejne 11 bajtów, usuwając return / nawiasy, jak zauważył @manatwork
  • zapisał kolejne 6 bajtów dzięki @manatwork

1
Użyj funkcji strzałek
— Bald Bantha

@BaldBantha wiwaty, zmieniłem to :-)
— Dylan Meeus

Nie potrzeba returnstwierdzenia: i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64.
— manatwork

@manatwork Cheers!
— Dylan Meeus,

1
Zgodnie z opisem zadania typeofwejściem może być tylko „liczba” lub „ciąg”. Więc nie trzeba sprawdzać =='number', <'s'zrobi to również.
— manatwork

1

ASM: 10 bajtów

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

Objaśnienie: Jest to złożona reprezentacja programu, który robi dokładnie to, o co proszono. Nie jest w pełni funkcjonalny, ponieważ wymaga pewnych dyrektyw, ale jeśli zostanie dodany do segmentu kodu programu asemblera, powinien działać. Odbiera dane wejściowe do rejestru AL, a jeśli jest to litera, odejmuje 40 godzin od wartości kodu ASCII, pozostawiając tylko liczbę (tj. B = 42h, 42h-40h = 2h). Jeśli wartością wejściową jest liczba, wykonuje odwrotną procedurę, dodając 40 godzin. Pozostawia wynik w rejestrze AL. Poniżej znajduje się kod źródłowy zestawu

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

Ponadto, jeśli przekonwertujesz wszystkie pozostałe odpowiedzi na kod maszynowy, jestem przekonany, że moje byłoby najmniejsze.


Myślę, że jest kilka kwestii: 77 02 2Cpowinno być 77 **04** 2C; subi addsą do tyłu.
— ceilingcat

Zastosowałem powyższe poprawki i stworzyłem „funkcję”, którą można wywołać z programu C na maszynie x86_64. #define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
— ceilingcat

Jaki to rodzaj montażu?
— mbomb007,

Turbo Asembler
— 6a75616e 28.10.16



1

Japt , 11 bajtów

;BbU Ī´UgB

Spróbuj

;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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.