Seringkali saat saya bermain golf, saya ingin tahu apa nilai ASCII dari karakter tertentu. Salah satu sumber favorit saya untuk mencari semua karakter ASCII yang dapat dicetak dengan cepat adalah ASCIItable.com . Ini memiliki gambar yang sangat bagus yang tidak hanya memperlihatkan karakter ASCII yang dapat dicetak beserta nilainya, tetapi juga karakter yang tidak dapat dicetak dan diperluas, dan nilai dalam heksadesimal, oktal, dan HTML:
Tantangan hari ini adalah membuat ulang tabel ASCII itu sebagai tabel ASCII dan bukannya gambar. Agar lebih sederhana, kami tidak akan menggunakan karakter kontrol (karakter di bawah 32) dan kami hanya akan menampilkan nilai desimal dan karakter. Dengan kata lain, tantangan Anda adalah menulis program penuh atau fungsi yang mencetak atau mengembalikan teks berikut:
Dec Chr | Dec Chr | Dec Chr
----------------------------------
32 Space | 64 @ | 96 `
33 ! | 65 A | 97 a
34 " | 66 B | 98 b
35 # | 67 C | 99 c
36 $ | 68 D | 100 d
37 % | 69 E | 101 e
38 & | 70 F | 102 f
39 ' | 71 G | 103 g
40 ( | 72 H | 104 h
41 ) | 73 I | 105 i
42 * | 74 J | 106 j
43 + | 75 K | 107 k
44 , | 76 L | 108 l
45 - | 77 M | 109 m
46 . | 78 N | 110 n
47 / | 79 O | 111 o
48 0 | 80 P | 112 p
49 1 | 81 Q | 113 q
50 2 | 82 R | 114 r
51 3 | 83 S | 115 s
52 4 | 84 T | 116 t
53 5 | 85 U | 117 u
54 6 | 86 V | 118 v
55 7 | 87 W | 119 w
56 8 | 88 X | 120 x
57 9 | 89 Y | 121 y
58 : | 90 Z | 122 z
59 ; | 91 [ | 123 {
60 < | 92 \ | 124 |
61 = | 93 ] | 125 }
62 > | 94 ^ | 126 ~
63 ? | 95 _ | 127 DEL
Membuntuti spasi pada setiap baris, dan membuntuti baris baru diizinkan. Karena ini adalah tantangan kompleksitas-kolmogorov , kiriman Anda mungkin tidak menerima input apa pun, atau mengakses sumber daya eksternal apa pun (seperti file atau web), dan tujuan Anda adalah mengompres kode untuk menghasilkan teks ini sebanyak mungkin.
Celah standar berlaku, dan jawaban tersingkat dalam byte menang. Selamat bermain golf!
sumber
Jawaban:
Python 2,
185183175159 byteDisimpan 8 byte berkat FlipTack!
Masih cukup baru untuk bermain golf di Python.
Menggunakan pemahaman daftar bersarang untuk menghasilkan tubuh tabel.
Tidak Disatukan:
Usaha lama,
185183175 byteTidak Disatukan:
sumber
Befunge,
176172 byteCobalah online!
sumber
Pyth,
89857977 byteCobalah online!
sumber
JavaScript (ES6),
179173 bytesumber
`${x='Dec Chr '}| ${x}| ${x}
di akhir baris 2 dengan(x='Dec Chr ')+(' |'+x)*2+`
*
operator. Atau apakah saya entah bagaimana salah memahami saran Anda?V ,
98, 96, 94 byteCobalah online!
Hanya nyaris mencicit di bawah seratus. Aku akan melihat apakah aku bisa mengalahkan Pyth, tapi aku tidak akan membuat janji.
Ini hexdump:
Dan inilah cara kerjanya:
Di sinilah tempatnya menarik. Pertama, izinkan saya menjelaskan vim-trick. Saat dalam mode penyisipan, karakter-karakter tertentu dimasukkan (semua karakter ASCII yang dapat dicetak, sebagian besar karakter yang belum dipetakan di atas
0x7f
, dan beberapa karakter lainnya), tetapi karakter lain memiliki efek samping. Misalnya,0x1b
(<esc>
) akan keluar ke mode normal.0x01
(<C-a>
) akan memasukkan kembali teks yang disisipkan terakhir, dll. Terkadang, kami ingin memasukkan karakter ini secara harfiah. Jadi untuk memasukkan karakter escape literal, Anda harus mengetik<C-v><esc>
. Ini berfungsi untuk semua karakter yang memiliki efek samping. Jadi pada dasarnya,<C-v>
adalah setara dengan garis miring terbalik dalam bahasa dengan string literal yang memungkinkan Anda untuk melarikan diri karakter tertentu dalam string.Trik lain yang berguna dengan
<C-v>
dalam mode insert, adalah dapat digunakan untuk menyisipkan karakter berdasarkan titik kode , baik dalam Desimal, Heksadesimal, Oktal, atau Unicode Heksadesimal. Karena kita sudah memiliki angka yang sesuai dengan nilai ASCII tertentu, kita hanya perlu meletakkan<C-v>
sebelum karakter tersebut, dan menjalankan teks yang sesuai sebagai penekanan tombol vim. Ini dapat dicapai dengan perintah regex, dan perintah "Do 'x' pada setiap baris". Jadi kami:Pada titik ini, buffer terlihat seperti ini
Sekarang kita hanya perlu pembersihan umum, yang merupakan sebagian besar byte dalam jawaban ini
sumber
F #, 222 byte
Cobalah online!
sumber
["ab"; "cd"] |> c |> p
, gabungkan dengan "|" karakter dan mencetaknya, seperti "ab | cd" yang merupakan ide dasar untuk mencetak tabel. Sisanya cukup mudah, hanya menghindari ruang putih sedapat mungkin.dc , 167 byte
Cobalah online!
Bagaimana itu bekerja:
sumber
Perl, 120 byte
Jalankan dengan
-E
bendera:-2 byte terima kasih kepada @GB .
sumber
C, 179 byte
Cobalah online!
Semi-ungolfed:
sumber
Ruby, 124 byte
sumber
V ,
151150148136135130129125 byte12 byte disimpan berkat @ nmjcman101 untuk penggunaan
<C-v>g<C-a>
angka bukanline('.')
2 byte disimpan berkat @DJMcMayhem untuk menghapus garis dengan spasi terdepan menggunakan
ÇÓ/d
dan dengan menggunakandê
untuk menghapus spasi ekstra dan mengatur ulang barang-barangJawaban ini bertentangan dengan jawaban V @ nmjcman101 (yang menggunakan
:set ve=all
).Tapi sekarang, saya menemukan cara untuk menghapusnyaA ^[
dan menyimpan beberapa byte dan kami bahkan pada bytecountCobalah online!
Hexdump:
Penjelasan (tidak lengkap dan ketinggalan jaman)
Strategi di sini adalah saya menggunakan nomor baris untuk menghasilkan poin kode ASCII.
Catatan:
^[
adalah0x1b
,^V
adalahC-v
Pertama kita menghasilkan semua karakter.
Buffer saat ini terlihat seperti
Sekarang kami menyisipkan baris baru di antara karakter-karakter ini
sumber
32 SPACE ... 127 DEL
bagian kode Anda: Coba online! Ini menggunakan hal yang rapi di mana Anda dapat menyorot banyak angka, dan kemudiang^A
membuatnya menjadi urutan yang meningkat (baru dalam Vim 8?):set ve=all
dan kemudian kursor akan pindah ke tempat-tempat yang tidak ada teks, memungkinkan Anda memasukkan pipa lebih mudah dan menyalin / menempel di tempat-tempat yang Anda butuhkan tanpa memerciki diA <esc>
manag^A
Terima kasih, itu menyelamatkan saya 12 byte :)V ,
13012099 byteKlub Sub 100. Saya tidak lagi yakin itu
:se ve=all
adalah cara terbaik untuk melakukan ini. Ini tambahan ... 11 byte hanya untuk menulis|
's! Tapi itulah yang saya miliki.Saya memposting ini hampir dalam persaingan dengan @KritixiLuthos menggunakan jawaban
:se ve=all
untuk menghindari beberapaA <esc>
. Saya tidak yakin bahwa salah satu metode lebih baik, jadi mudah-mudahan ini dapat menginspirasi beberapa golf di kedua belah pihak dan melihat metode mana yang mengambil kue.Saya juga setengah berharap @DJMcMayhem menendang kedua celana kami
Cobalah online!
Hexdump untuk yang penasaran (jika ada minat saya hanya akan mengubahnya ke blok karakter tersembunyi gaya-vim)
sumber
dd
itu implisit jika Anda lakukand
. Anda juga dapat melakukan<M-s>
yang selalu sama dengan\s
di regex. Jadi Anda bisa memperpendek ke:ç^ó*/d
. Tetapi jika Anda mengganti perintah global untuk invers:g!
Anda bisa mencari setiap baris yang tidak cocok dengan karakter yang bukan spasi.ÇÓ/d
yang setara dengan:g!/\S/normal dd
AWK , 200 byte
Diformat:
Cobalah online!
sumber
C 188 Bytes
Biasanya terlihat seperti ini:
sumber
C (249 byte)
Baris baru ditambahkan untuk kejelasan.
sumber
P
akanprintf(
, seperti yang ditunjukkan di sini: repl.it/JBRDJava,
434422321 byteJava mungkin bukan bahasa terbaik untuk ini karena ada overhead kelas dan metode utama ...
Anda dapat menghilangkan metode utama menggunakan deklarasi statis, mengurangi jumlah byte lebih lanjut:
tetapi ini menghasilkan kesalahan (setelah berhasil dijalankan):
Hitungan byte tidak int menyertakan baris baru atau lekukan.
sumber
void main(){
, dan tidak antarawhile(s.length()<5)
dans+=" "
. (Kecuali Anda tidak menghitungnya dalam hitungan byte Anda). Dan Anda dapat menyimpan beberapa byte dengan mengubahd="Dec",c="Chr"
ked=p("Dec"),c=p("Chr")
dan membuat perubahan panggilan Andap(d)
danp(c)
untukd
danc
.Tcl , 233 byte
Cobalah online!
sumber
32
misalnya (a '' bukannyaSpace
), dan33!
(tidak ada ruang di antara33
dan!
).R ,
235 228 221212 byteCobalah online!
Saya berusaha sangat keras untuk mendapatkan di bawah 200 byte tetapi ini
paste
dancollapse
membunuh saya. Mengembalikan daftar garis.sumber
JavaScript (ES6), 258 byte
sumber
PowerShell , 159 byte
Cobalah online!
Dua baris pertama hanya menciptakan string literal dan meninggalkannya di jalur pipa. Yang pertama menggunakan operator koma
,
untuk membuat array, dan kemudian-join
s array itu bersama-sama untuk membuat header. Yang kedua hanyalah perkalian string lurus.Baris ketiga loop atas
32..63
dan setiap iterasi mengirimkan tiga nilai$_
,($_+32)
dan($_+64)
menjadi loop batin. Loop dalam melakukan aPadRight
pada nilai (menambahkan spasi yang sesuai untuk pad ke5
karakter). Itu kemudian string digabungkan+
dengan hasil pseudo-ternary bersarang( )[ ]
. Pseudo-ternary memilihchar
representasi nomor itu, atau yang lainSpace
atauDEL
jika itu nilai yang sesuai. Sekali lagi, kamiPadRight
karakter yang sesuai.Ketiga string (misalnya,
32 Space
,64 @
,96 `
) diringkas dalam parens dan-join
ed dengan spidol kolom menjadi sebuah string tunggal. Masing-masing dari 32 string kemudian dibiarkan di dalam pipa. Pada akhir eksekusi, sebuah implisitWrite-Output
menyisipkan baris baru antara elemen-elemen pada pipeline, jadi kami mendapatkannya secara gratis.sumber
Perl,
165155 bytesumber
Python 2,
1564218 byteGolf pertamaku, maaf atas kesalahan yang jelas
Cobalah online!
Jika Anda bertanya-tanya, versi pertama adalah string yang disandikan base64.
sumber
ljust(6) for
.x in [
. Dan IIRC kurung kotak di dalamjoin
dapat dihapus.05AB1E ,
8276 byteCobalah online!
Masih bermain golf, ini bisa ditingkatkan banyak.
žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø
mendorong angka empuk dengan teks yang setara:vyð2×ý})3äøvy… | ©ý}
bergabung bersama mereka ke dalam tabel:®”†… Chr ÿ”3ר¨'-34×.Á.Á»
menangani bagian tajuk tabel:sumber
PHP,
163 149147 bytekerusakan
Menggunakan
%-N
bernilai byte yang dihemat angka dan karakter.sumber
Stax , 53 byte
Jalankan dan debug itu
sumber
T-SQL, 242 byte
Diformat:
Mencoba beberapa variasi, termasuk mengganti berbagai string umum dengan variabel lain, tetapi ini adalah versi terpendek yang saya temukan.
sumber
Python 3 , 154 byte
Cobalah online!
sumber
Attache , 144 byte
Cobalah online!
sumber