Yang ini berasal dari masalah kehidupan nyata. Kami menyelesaikannya, tentu saja, tetapi tetap terasa seperti itu bisa dilakukan lebih baik, bahwa itu solusi yang terlalu panjang dan bundaran. Namun tidak ada kolega saya yang bisa memikirkan cara penulisan yang lebih ringkas. Karenanya saya menyajikannya sebagai kode-golf.
Tujuannya adalah untuk mengkonversi bilangan bulat negatif ke string dengan cara yang sama seperti Excel menyajikan tajuk kolomnya. Demikian:
0 -> A
1 -> B
...
25 -> Z
26 -> AA
27 -> AB
...
51 -> AZ
52 -> BA
...
16,383 -> XFD
Itu harus bekerja setidaknya hingga 16.383, tetapi di luar juga dapat diterima (tidak ada poin bonus sekalipun). Saya sangat menantikan solusi C #, tetapi, sesuai tradisi kode-golf, semua bahasa pemrograman yang nyata diterima.
code-golf
conversion
Vilx-
sumber
sumber
Jawaban:
Perl 6 ,
1614 byteBekerja bahkan di luar XFD. Berkat daftar tak terbatas di Perl 6, ini tidak memakan waktu lama (dan setengah) untuk dieksekusi.
Cobalah online!
sumber
Formula Excel :), 36 karakter
Pemakaian:
Maaf, tidak bisa menahan ...
sumber
<laughter type="evil">Muhahahahaha!</laughter>
"1"
dengan1
Perl, 17 karakter
The
..
Operator melakukan hal yang sama dengan ajaib auto-increment, tapi tanpa perlu untuk variabel sementara dan loop. Kecualistrict subs
dalam ruang lingkup, kata pengantarA
danXFD
diartikan sebagai string.( Jawaban ini disarankan oleh pengguna anonim sebagai pengeditan untuk jawaban yang ada . Saya merasa layak untuk menjadi jawaban yang terpisah, dan menjadikannya sebagai jawaban. Karena tidak adil bagi saya untuk mendapatkan perwakilan dari itu, saya ' telah membuatnya menjadi Wiki Komunitas. )
sumber
$_
dan output adalah nilai ekspresi, maka(A..XFD)[$_]
selesaikan tantangan hanya dengan 12 karakter .perl -E 'say[A..XFD]->[<>]' < number.txt
. Atau, pada shell yang mendukungnya, cukup berikan input pada baris perintah denganperl -E 'say[A..XFD]->[<>]' <<< 123
.say+(A..XFD)[<>]
C, 53 karakter
Ini seperti bermain golf dengan palu ...
Versi normal:
Dan penggunaannya seperti itu:
sumber
Haskell, 48
Kurang bermain golf:
Penjelasan
sequence
Combinator Haskell mengambil daftar tindakan dan melakukannya, mengembalikan hasil setiap tindakan dalam daftar. Sebagai contoh:setara dengan:
Di Haskell, tindakan diperlakukan seperti nilai, dan direkatkan menggunakan
>>=
(bind) danreturn
primitif. Jenis apa pun dapat menjadi "tindakan" jika menerapkan operator ini dengan memiliki instance Monad .Kebetulan, tipe daftar memiliki instance monad. Sebagai contoh:
Ini sama dengan
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
. Perhatikan bagaimana pemahaman daftar sangat mirip:Karena daftar adalah jenis "tindakan", kita dapat menggunakan
sequence
daftar. Di atas dapat dinyatakan sebagai:Jadi,
sequence
beri kami kombinasi gratis!Jadi, untuk membangun daftar:
Saya hanya perlu membuat daftar untuk lolos
sequence
Kemudian gunakan
concatMap
untuk keduanya berlakusequence
untuk daftar, dan menggabungkan daftar yang dihasilkan. Secara kebetulan,concatMap
ini adalah=<<
fungsi untuk daftar, jadi daftar monad memungkinkan saya mencukur beberapa karakter di sini juga.sumber
Perl, 26 karakter
sumber
Ruby, 35 karakter
Pemakaian:
Catatan: Ada juga versi yang lebih pendek (30 karakter) menggunakan rekursi.
Tetapi menggunakan fungsi ini Anda mungkin harus menambah ukuran tumpukan untuk jumlah besar tergantung pada penerjemah ruby Anda.
sumber
Groovy, 47
sumber
Python 45
51sumber
+chr(65+i%26)
masuk dan mengujii>=0
, menghemat 1 karakter :)f=lambda i:
daripadadef f(i):return
f = lambda i: i >= 0 and f(math.floor(i / 26 - 1)) + chr(int(round(65 + i % 26))) or ''
Scala, 62 karakter
Pemakaian:
pengembalian:
Anda dapat mencoba ini di Cukup scala . Salin dan tempel fungsi dan gunakan
f(some integer)
untuk melihat hasilnya.sumber
""+
padaelse
kasingnya.Excel VBA, 31 Bytes
Fungsi jendela langsung VBE anonim yang mengambil input dari sel
[A1]
dan output ke jendela langsung VBEsumber
JavaScript (Node.js) , 50 byte
Cobalah online!
Melihat bahwa banyak orang mulai menjawab ini, saya juga menjawab.
Catatan :
Ini pada dasarnya adalah rip off dari jawaban @ kevinCruijssen di Jawa yang dipersingkat berkat JS ini.
sumber
PHP, 30 byte
Jalankan sebagai pipa dengan `-nr 'atau coba online .
sumber
Z
itu akan pergi[
daripadaAA
.VBA / VB6 / VBScript (non-Excel), 73 byte
Panggilan
s(16383)
akan kembaliXFC
.sumber
i>675
-s(676)=A@@
(diharapkanYZ
),s(677)=A@A
(diharapkanZA
)Javascript, 147 byte
Saya punya masalah serupa. Ini adalah golf solusinya. Kolom Excel adalah bijective base-26 .
Diperluas, kecuali menggunakan 1-indeks:
sumber
Java, 57 byte (rekursif)
Cobalah online.
Penjelasan:
Java 10, 62 byte (berulang)
Cobalah online.
Penjelasan:
sumber
Keempat (gforth) , 59 byte
Cobalah online!
Penjelasan
sumber
R , 65 byte
Jawaban rekursif seperti banyak jawaban sebelumnya.
Cobalah online!
sumber
Powershell, 68 byte
Versi rekursif alternatif, 68 byte:
Skrip uji:
Keluaran:
Catatan: Powershell tidak menyediakan
div
operator.sumber
Haskell, 48
Saya benar-benar berpikir bahwa saya akan dapat mengalahkan entri Haskell lainnya, tetapi sayangnya ...
Saya yakin mungkin untuk mencukur beberapa karakter dari ini, tapi saya belum kode di Haskell selama hampir satu tahun, jadi saya cukup berkarat.
Bukan apa yang Anda sebut elegan.
sumber
string f(int n){return n<0?"":f(n/26-1)+(char)(n%26+65);}
57 karakter, jadi saya hampir merasa tidak enak dengan mempostingnya sebagai jawaban.Jq 1,5 , 71 byte
Mengharapkan masukan dalam
N
. misalnyaDiperluas:
Cobalah online!
sumber
> <> , 29 byte
Cobalah online!
sumber
Ikon , 58 byte
Cobalah online!
sumber