Tantangan
Dalam tantangan ini Anda harus mengambil angka sebagai input dan output huruf alfabet yang sesuai, dan sebaliknya. (1 <=> A, 2 <=> B) dll.
1 -> A
2 -> B
...
26 -> Z
A -> 1
B -> 2
...
Z -> 26
Aturan
- Ini adalah kode-golf , jadi kode terpendek dalam byte menang.
- Input hanya akan terdiri dari baik huruf besar dari
A
keZ
atau bilangan bulat dari1
ke26
inklusif. - Ruang putih trailing (spasi dan baris baru) diizinkan.
26
sebagai integer atau"26"
sebagai string, atau keduanya diizinkan?Jawaban:
Sebenarnya, 7 byte
Cobalah online!
Penjelasan:
Jika huruf kecil dapat diterima, ini adalah 6 byte:
Cobalah online!
sumber
Actually
. Oleh karena ituActually, 7 bytes
. : PPure Bash, 51
Sebagian besar sisa jawaban menggunakan semacam persyaratan. Yang ini mengeluarkan sepenuhnya dengan kondisional, dan sebaliknya memperlakukan input sebagai nomor basis-36 yang mengindeks ke dalam array ekspansi bash-brace yang dibangun dengan tepat:
Ideone.
sumber
#
?Erlang, 26 byte
Salah satu dari beberapa kali di mana perilaku string Erlang berguna.
sumber
Python 2, 38 byte
Uji di Ideone .
sumber
Python 3, 43 byte
Yang menarik tentang solusi ini adalah bahwa ia menggabungkan semua indera ATAU, bitwise ATAU
|
, logis ATAUor
, XOR bitwise^
dan XOR logis!=
...sumber
2sable ,
98 byteKode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online! .
sumber
Ruby,
47 39 +n
flag = 40 byte333431 byteFungsi anonim. Menggunakan trik penanganan pengecualian seperti pada solusi Python @ KarlNapf .
-3 byte dari @manatwork
Cobalah online
Versi program lengkap asli dengan
n
bendera untuk 40 byte dan dibaca dari STDIN:sumber
->i{(64+i).chr rescue i.ord-64}
.Cheddar,
3432 byteDisimpan 2 byte berkat @LeakyNun
Saya berharap ada cara yang lebih pendek untuk memeriksa apakah string atau nomor.
Cobalah online! atau Test Suite
Penjelasan
"%s"%n==n
memeriksa apakah itu string dengan cara yang sederhana."%s"
adalah format string, saya bisa memformat dengan%
misalnya"a %s c" % "b"
sama dengan"a b c"
.%s
menetapkan itu adalah string, jika angka dilewatkan akan tetap seperti%s
.sumber
"%s"%n==n
menghemat 2 byte"%d"%n==n
tetapi itu tidak berhasil: /Mathematica
5441 BytesDengan saran yang benar-benar cerdas dari LegionMammal978 yang menghemat 13 byte.
If[#>0,FromLetterNumber,,LetterNumber]
melayani tujuan tunggal memutuskan apakah akan menerapkanFromLetterNumber
atauLetterNumber
input.#>0
akan puas jika input#
,, adalah angka, dalam halFromLetterNumber
ini akan dipilih.Namun
#>0
tidak akan benar atau salah jika#
surat, danLetterNumber
akan dipilih sebagai gantinya.4
d
Di Mathematica,
FromLetterNumber
danLetterNumber
juga akan bekerja dengan huruf lain. Ini hanya membutuhkan beberapa byte lagi.δ
г
b
4
4
4
sumber
If[#>0,FromLetterNumber,,LetterNumber]@#&
If[#>0,FromLetterNumber[#],LetterNumber@#]&
. MeskipunIf[#>0,FromLetterNumber[#],LetterNumber@#]&[4]
berhasil,If[#>0,FromLetterNumber[#],LetterNumber@#]&["c"]
tidak. Tampaknya tidak bisa menyelesaikan"c">0
. Apakah saya salah paham?,,
disengaja, dan begitu juga eksterior@#
; mengevaluasi sebagaiIf[# > 0, FromLetterNumber, Null, LetterNumber][#]&
, yang menggunakan bentuk 4-argumenIf
(lihat).If
bekerja.Haskell, 54 byte
Contoh penggunaan:
map f ["1","26","A","Z"]
->["A","Z","1","26"]
.Sistem tipe ketat Haskell sangat menyusahkan di sini. Selain itu semua char <-> int fungsi pendek suka
chr
danord
perlu impor, jadi saya harus melakukannya dengan tangan. Untuk huruf -> int case, misalnya saya perlu mengonversiString
->Char
(via!!0
) ->Integer
(viafromEnum
) ->String
(viashow
).sumber
C, 55 byte
sumber
Perl 6 , 25 byte
Penjelasan:
Contoh:
sumber
perl -pe '$_=/\d/?chr$_+64:-64+ord'
!C #, 32 byte
Diputar ke
Func<int, object>
.Input:
char
secara implisit dikonversi keint
sehingga dapat dipanggil denganint
(1-26) atauchar
('A'-Z').Output: Baik a
char
atauint
.sumber
PHP,
494140 byteSaya rasa tidak ada alternatif yang baik untuk
is_numeric
benar?Ini dieksekusi dari baris perintah (
$argv[1]
adalah variabel pertama yang diberikan)Terimakasih untuk:
@insertusernamehere: Golfed 8 byte. Mengganti
is_numeric($i=$argv[1])
dengan0<($i=$argv[1])
.Ini bekerja karena(int)"randomLetter" == 0
.@manatwork: Dikurangi dengan 1 byte. Ganti
0<
dengan+
. Apa yang terjadi dalam kasus ini adalah bahwa + sinyal akan melemparkan "Z" (atau huruf apa pun) ke 0. Ini akan menghasilkan false. Karenanya setiap huruf selalu salah dan angka selalu benar.sumber
0<($i=$argv[1])
bukannyais_numeric($i=$argv[1])
menghemat 8 byte .0<
→+
.Python 2, 61 byte
Ya saya bisa beralih ke Python 3 untuk
input
sumber
input()
Namun gunakan dan ubahint(i)
kei
."A"
A
atau tidak sama sekali.def f(i):
:, baris 2: <spasi>try:o=chr(i+64)
, baris 3 <spasi> jika tidak berubah, baris 4: <spasi>return o
Dalam bentuk itu, ia akan bekerja dengan Python 2 atau Python 3PowerShell v2 +, 42 byte
Mengambil input
$n
(sebagai bilangan bulat atau karakter eksplisit) dan menggunakan pseudo-ternary untuk memilih antara dua elemen dari array. Syaratnya adalah$n-ge65
(yaitu, input ASCIIA
atau lebih besar). Jika demikian, kami cukup memasukkan input sebagai int dan kurangi64
. Kalau tidak, kita menambah64
integer input, dan melemparkannya sebagai a[char]
. Dalam kedua kasus, hasilnya dibiarkan di jalur pipa dan pencetakan tersirat.Contohnya
sumber
Befunge-98 *, 19 byte
Karena pertanyaannya mengatakan Anda akan menerima a
1-26
atau a,A-Z
saya berasumsi ini berarti angka 26 atau karakter AZ. Sebagian besar penafsir kesulitan dalam memasukkan kode alt, sehingga lebih mudah untuk menggunakan&
dan memasukkan nilai seperti 26 untuk 26 atau 90 untuk 'Z', dibandingkan dengan~
.Kode semu
Uji (di Windows) di sini!
* Ini secara teknis Unefunge-98 karena hanya menggunakan 1 dimensi, tetapi nama itu mungkin tidak dikenal.
sumber
Befunge 93 ,
144 90 66 54 3619 byteTidak 100% yakin apakah ini diizinkan, tetapi jika Anda diizinkan mengetik A 65, B 66, dll., Maka (demi kenyamanan saya):
Jika tidak, pada 36 byte:
(Terima kasih kepada tngreene untuk sarannya!)
(Terima kasih kepada Sp3000 karena telah menghemat 12 byte dengan mengatur ulang!)
Tidak Disatukan:
Ini adalah program Befunge pertama saya yang pernah bekerja, dan saya merasa perlu untuk bermain golf lebih jauh. Bantuan apa pun akan sangat dihargai.
Anda dapat menguji kode Befunge di sini .
sumber
52**\28*++,@>~:0`!#^_\68*-
567+*
dengan"A"
. Juga, jangan lupag
danp
instruksi untuk menggunakan kembali nilai alih-alih harus membangunnya berulang kali. Juga, saya tidak dapat menemukan input yang akan membawa IP ke cabang>$ 28* + , @
. Untuk apa ini? Apakah Anda yakin ini dibutuhkan?$28*+,@
sedangkan yang> = 10 pergi ke yang lain. Ini dilakukan pada akhirnya karena Anda tidak dapat membaca input lebih dari sekali sejauh yang saya tahu.Brainfuck, 445 Karakter
Lebih banyak bukti konsep daripada kode golf. Membutuhkan Brainfuck yang Tidak Ditandatangani dan Tidak Membungkus.
Dengan Komentar
sumber
Java,
1049897835453515030 bytex->(x^=64)>64?(char)x+"":x+"";
Program Tes :
sumber
return(s.matches("\\d+")?(char)(Integer.parseInt(s)+64)+"":(s.charAt(0)-64)+"");
Fourier, 30 byte
Cobalah online!
sumber
R, 73 byte
sumber
f=
, dan Anda cloud mencoba menggunakanifelse
fungsi untuk mungkin bermain golf beberapa byte!MATL, 10 byte
Penjelasan:
Cobalah online! dengan input numerik.
Cobalah online! dengan input alfabet.
sumber
Python 3,
49 48 5350 byteEntah bagaimana saya salah menghitung byte; _; terimakasih dahuglenny
isalpha
lebih pendek dariisnumeric
mengambil input sebagai string, yang bisa berupa huruf atau angka
sumber
x.isnumeric()
danelse
untuk menyimpan satu byte.Java, 61 byte
Tidak Digolkan:
Memanggil
f('A')
memanggil fungsi pertama, mengembalikan satuint
1; panggilanf(1)
memanggil fungsi kedua, mengembalikanchar
"A".sumber
Javascript
86776660 bytesumber
return
pernyataan:i=>typeof i=='number'?String.fromCharCode(i+64):i.charCodeAt(0)-64
.typeof
input hanya dapat berupa "angka" atau "string". Jadi tidak perlu memeriksa=='number'
,<'s'
juga akan melakukannya.ASM: 10 byte
Penjelasan: Ini adalah representasi rakitan dari suatu program yang melakukan persis apa yang diminta. Ini tidak berfungsi penuh, karena memerlukan beberapa arahan, tetapi jika ditambahkan ke segmen kode dari program perakitan, ia harus bekerja. Ia menerima input dalam register AL, dan jika hurufnya mengurangi 40h dari nilai kode ASCII, hanya menyisakan angka (yaitu B = 42j, 42j-40j = 2j). Jika input adalah angka, ia melakukan prosedur sebaliknya dengan menambahkan 40 jam. Itu meninggalkan hasilnya di register AL. Di bawah ini adalah kode sumber perakitan
Juga, jika Anda mengonversi semua jawaban lain ke kode mesin, saya yakin bahwa jawaban saya akan menjadi yang terkecil.
sumber
77 02 2C
seharusnya77 **04** 2C
; yangsub
danadd
yang mundur.#define F(x) ((int(*)(int))"\x89\xf8\x3c\x40\x76\4\x2c\x40\xeb\2\4\x40\xc3")(x)
Excel, 33 byte
sumber
Brachylog , 10 byte
Cobalah online!
Inti dari ini hanya 4 byte , tetapi I / O untuk versi itu sedikit kurang waras.
sumber
Japt , 11 byte
Cobalah
sumber