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 golf golfowy , więc wygrywa najkrótszy kod w bajtach.
- Dane wejściowe będą się składać wyłącznie z dużej litery od
A
doZ
lub liczby całkowitej od1
do26
włącznie. - Końcowe białe znaki (spacja i nowa linia) są dozwolone.
26
jako liczbę całkowitą lub"26"
jako ciąg, czy oba są dozwolone?Odpowiedzi:
Właściwie 7 bajtów
Wypróbuj online!
Wyjaśnienie:
Jeśli dopuszczalne są małe litery, jest to 6 bajtów:
Wypróbuj online!
źródło
Actually
. StądActually, 7 bytes
. : PPure 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:
Ideone.
źródło
#
?Erlang, 26 bajtów
Jeden z niewielu przypadków, w których zachowanie łańcucha Erlanga jest przydatne.
źródło
Python 2, 38 bajtów
Przetestuj na Ideone .
źródło
Python 3, 43 bajty
Ciekawą rzeczą w tym rozwiązaniu jest to, że zawiera wszystkie zmysły OR, bitowe OR
|
, logiczne ORor
, bitowe XOR^
i logiczne XOR!=
...źródło
2sable ,
98 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! .
źródło
Rubinowy,
47 39 +n
flaga = 40 bajtów333431 bajtówFunkcja anonimowa. Wykorzystuje sztuczkę związaną z obsługą wyjątków, jak w rozwiązaniu Python @ KarlNapf .
-3 bajty z @manatwork
Wypróbuj online
Oryginalna pełna wersja programu z
n
flagą na 40 bajtów i odczytywana ze STDIN:źródło
->i{(64+i).chr rescue i.ord-64}
.Cheddar,
3432 bajtyZaoszczędź 2 bajty dzięki @LeakyNun
Chciałbym, aby istniał krótszy sposób sprawdzenia, czy łańcuch lub liczba.
Wypróbuj online! lub pakiet testowy
Wyjaśnienie
"%s"%n==n
w 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"
.%s
określa, że jest to ciąg znaków, jeśli cyfra zostanie przekazana, pozostanie jako%s
.źródło
"%s"%n==n
oszczędza 2 bajty"%d"%n==n
ale to nie działało: /Mathematica
5441 bajtówZ absolutnie sprytną sugestią LegionMammal978, która oszczędza 13 bajtów.
If[#>0,FromLetterNumber,,LetterNumber]
służy wyłącznie do podjęcia decyzji, czy zastosować,FromLetterNumber
czyLetterNumber
do wkładu.#>0
będzie spełniony, jeśli wejście,,#
jest liczbą, w którym to przypadkuFromLetterNumber
zostanie wybrany.Jednak
#>0
nie będzie ani prawdą, ani fałszem, jeśli#
jest literą iLetterNumber
zostanie wybrana zamiast tego.4
re
W Mathematica,
FromLetterNumber
aLetterNumber
także będzie działać z innymi alfabetami. Wymaga to tylko kilku dodatkowych bajtów.δ
г
b
4
4
4
źródło
If[#>0,FromLetterNumber,,LetterNumber]@#&
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?,,
jest zamierzone, podobnie jak zewnętrzne@#
; ocenia asIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, który używa 4-argumentowej formyIf
(wyszukaj).If
.Haskell, 54 bajty
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
chr
iord
wymagają importu, więc muszę to zrobić ręcznie. W przypadku litery -> int, na przykład muszę przekonwertowaćString
->Char
(przez!!0
) ->Integer
(przezfromEnum
) ->String
(przezshow
).źródło
C, 55 bajtów
źródło
Perl 6 , 25 bajtów
Wyjaśnienie:
Przykład:
źródło
perl -pe '$_=/\d/?chr$_+64:-64+ord'
!C #, 32 bajty
Przesyłanie do
Func<int, object>
.Dane wejściowe:
char
domyślnie konwertuje na,int
więc można je wywołać za pomocąint
(1-26) lubchar
(„A'-Z”).Wyjście: albo a
char
alboint
.źródło
PHP,
494140 bajtówNie sądzę, że istnieje dobra alternatywa dla
is_numeric
dobra?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])
przez0<($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.źródło
0<($i=$argv[1])
zamiastis_numeric($i=$argv[1])
oszczędza 8 bajtów .0<
→+
.Python 2, 61 bajtów
Tak, mógłbym przejść na Python 3 dla
input
źródło
input()
jednak i zmieńint(i)
nai
."A"
A
lub nic.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 3PowerShell v2 +, 42 bajty
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 ASCIIA
lub wyższy). Jeśli tak, po prostu rzutujemy dane wejściowe jako int i odejmujemy64
. W przeciwnym razie dodajemy64
do wejściowej liczby całkowitej i rzucamy ją jako[char]
. W obu przypadkach wynik pozostaje w potoku, a drukowanie jest niejawne.Przykłady
źródło
Befunge-98 *, 19 bajtów
Ponieważ pytanie brzmiało, że dostaniesz a
1-26
lub anA-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
Przetestuj to (w systemie Windows) tutaj!
* Technicznie jest to Unefunge-98, ponieważ używa tylko 1 wymiaru, ale ta nazwa może być nieznana.
źródło
Befunge 93 ,
144 90 66 54 3619 bajtówNie 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:
(Dzięki tngreene za sugestie!)
(Dzięki Sp3000 za zaoszczędzenie 12 bajtów przez przestawienie!)
Nie golfowany:
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 .
źródło
52**\28*++,@>~:0`!#^_\68*-
567+*
z"A"
. Nie należy również zapominać og
ip
instrukcje 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?$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.Brainfuck, 445 znaków
Bardziej dowód koncepcji niż kod do gry w golfa. Wymaga Bez podpisu, bez opakowania Brainfuck.
Z komentarzami
źródło
Java,
1049897835453515030 bajtówx->(x^=64)>64?(char)x+"":x+"";
Program testowy :
źródło
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Fourier, 30 bajtów
Wypróbuj online!
źródło
R, 73 bajty
źródło
f=
takiej potrzeby , a w chmurze spróbuj użyć tejifelse
funkcji, aby zagrać w bajty!MATL, 10 bajtów
Wyjaśnienie:
Wypróbuj online! z wejściami numerycznymi.
Wypróbuj online! z wprowadzaniem alfabetycznym.
źródło
Python 3,
49 48 5350 bajtówJakoś źle pomyliłem liczbę bajtów; _; dzięki dahuglenny
isalpha
jest krótszy niżisnumeric
przyjmuje dane wejściowe jako ciąg znaków, który może być literą lub cyfrą
źródło
x.isnumeric()
i,else
aby zapisać jeden bajt.Java, 61 bajtów
Ungolf'd:
Wywołanie
f('A')
wywołuje pierwszą funkcję, strojenieint
1; wywołanief(1)
wywołuje drugą funkcję, zwracającchar
„A”.źródło
JavaScript
86776660 bajtówźródło
return
stwierdzenia:i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
wejściem może być tylko „liczba” lub „ciąg”. Więc nie trzeba sprawdzać=='number'
,<'s'
zrobi to również.ASM: 10 bajtów
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
Ponadto, jeśli przekonwertujesz wszystkie pozostałe odpowiedzi na kod maszynowy, jestem przekonany, że moje byłoby najmniejsze.
źródło
77 02 2C
powinno być77 **04** 2C
;sub
iadd
są do tyłu.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 bajty
źródło
Brachylog , 10 bajtów
Wypróbuj online!
Rdzeń tego ma tylko 4 bajty , ale we / wy dla tej wersji jest nieco mniej rozsądne.
źródło
Japt , 11 bajtów
Spróbuj
źródło