Kode halaman kode

15

pengantar

Halaman kode memetakan nilai integer ke karakter tertentu. Kami dapat memvisualisasikan halaman kode seperti ini:

+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- - - + --- + --- + --- + --- +
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- - - + --- + --- + --- + --- +
| 0 | q | w | e | r | t | z | kamu | saya | o | p | a | s | d | f | g | j |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- - - + --- + --- + --- + --- +
| 1 | k | aku | y | x | c | v | b | n | m | Q | W | E | R | T | Z | U |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- - - + --- + --- + --- + --- +
| 2 | Saya | O | P | A | S | D | F | G | H | J | | | | | | |
+ --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- + --- - - + --- + --- + --- + --- +

Baris menentukan digit pertama dan kolom adalah digit kedua dari hex-number.

Tantangan

Diberikan string 16-255 karakter unik, output halaman kode yang sesuai menggunakan indeks berbasis nol dari setiap karakter dalam string sebagai nilainya. Input qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJmisalnya akan menghasilkan tabel di atas.

  • Outputnya harus dalam format yang sama persis seperti tabel di atas. Hanya baris tambahan yang opsional.
  • Jika panjang input bukan kelipatan 16, Anda perlu memulai baris baru untuk karakter yang tersisa dan membiarkan sel-sel yang tidak digunakan kosong (= diisi dengan 3 spasi).
  • Setiap karakter ditempatkan tepat di tengah sel, diisi oleh satu ruang di sebelah kiri dan kanan.
  • Nilai-nilai di baris dan kolom pertama diberikan oleh hex-number dengan digit 0123456789ABCDEF. Itu empuk dengan satu ruang ke kiri dan kanan juga. Anda dapat memilih untuk menggunakan hex-digit huruf kecil tetapi Anda harus tetap menggunakannya.
  • Satu-satunya karakter yang ada dalam output adalah tanda hubung -, plus +, pipa |, spasi , digit untuk angka heksadesimal dan karakter dari input.
  • Setiap bawaan yang terkait dengan tabel ASCII-art atau meremehkan masalah dengan cara apa pun dilarang.
  • Anda dapat mengasumsikan bahwa input hanya terdiri dari karakter dari pengkodean tertentu. Silakan tentukan jika itu masalahnya.
  • Jika bahasa Anda hanya dapat menangani input ASCII, Anda dapat mengasumsikan input ASCII saja dan karakter yang diulang.

Aturan

  • Fungsi atau program lengkap diizinkan.
  • Aturan default untuk input / output.
  • Celah standar berlaku.
  • Ini adalah , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.

Selamat Coding!

Denker
sumber
Bisakah kita menggunakan digit hex huruf kecil?
Gagang Pintu
@ Doorknob Ya, menjelaskannya dalam tantangan.
Denker
1
Bisakah kita menganggap inputnya adalah ASCII (dengan karakter yang mungkin diulang)?
Luis Mendo
@DenkerAffe Itu akan bertentangan dengan kata "unik" atau dengan "255" di Diberikan string 16-255 karakter unik , meskipun ...
Luis Mendo
1
@LuisMendo Hmm ya, itu benar. Akan mengizinkannya untuk bahasa yang hanya bisa menangani ASCII.
Denker

Jawaban:

7

Pyth, 60 byte


K+*"+---"hJ16\+Vm++"| "j" | "d" |"+]+]d.HMJ.e+.Hk.[bdJczJNK

Baris baru terkemuka signifikan.

Coba di sini.

Gagang pintu
sumber
Bisakah Anda menunjukkan kode yang diubah?
CalculatorFeline
@CatsAreFluffy Cukup aktifkan mode debug pada juru bahasa online.
Denker
Apa yang dilakukan baris baru?
Leaky Nun
@Adnan Whoops, itu adalah kekhilafan dari saya. Tetap, terima kasih.
Gagang Pintu
@ KennyLau Mencetak yang pertama +---+---+---[...]. Dalam Pyth, fungsi baris baru mencetak dan mengembalikan argumennya.
Gagang Pintu
5

Python 3.5, 326 355 byte:

( +29 byte karena jika panjang baris terakhir bukan kelipatan 16, sel yang tidak digunakan harus dibiarkan kosong (meskipun, menurut pendapat saya, itu terlihat jauh lebih baik jika sel-sel kosong itu tidak ditunjukkan) )

def f(r):o=' 0123456789ABCDEF';r=[r[0+i:16+i]for i in range(0,len(r),16)];print('+---'*17+'+\n|',end='');[print(' {} |'.format(h),end='')for h in o];print(''.join([str(e+' | ')if e.isdigit()or e.isalpha()else str(e)for e in''.join([str('\n'+'+---'*17+'+\n| '+x[0]+x[1])for x in zip(o[1::1],r)])]),end='');print('  |'+'   |'*(15-len(r[-1]))+'\n'+'+---'*17+'+')

Bekerja seperti pesona!

Input dan Output Sampel:

Input: 'hopper'

Output:

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | h | o | p | p | e | r |   |   |   |   |   |   |   |   |   |   |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Input: 'honkhonkhonkhonkhonk'

Output:

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | h | o | n | k | h | o | n | k | h | o | n | k | h | o | n | k | 
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 1 | h | o | n | k |   |   |   |   |   |   |   |   |   |   |   |   |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Input: 'hi'

Output: 

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | h | i |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Saya harap ini baik-baik saja.

Juga, ini adalah versi lain yang saya buat untuk tantangan ini, yang, walaupun merupakan kandidat yang tidak valid karena tidak mencetak sel kosong tambahan untuk baris terakhir jika panjangnya bukan kelipatan 16, menurut saya menampilkan halaman yang jauh lebih baik. daripada yang dibutuhkan oleh OP, terutama karena ia bahkan tidak menunjukkan sel kosong jika baris terakhir bukan kelipatan 16, tetapi sebaliknya hanya menunjukkan sel yang diisi, dan hanya itu:

def f2(r):o=' 0123456789ABCDEF';r=[r[0+i:16+i]for i in range(0,len(r),16)];print('+---'*17+'+\n|',end='');[print(' {} |'.format(h),end='')for h in o];print(''.join([str(e+' | ')if e.isdigit()or e.isalpha()else str(e)for e in''.join([str('\n'+'+---'*17+'+\n| '+x[0]+x[1])for x in zip(o[1::1],r)])]));print('+---'*(len(r[-1])+1)+'+')

Berikut adalah contoh input dan output untuk kode yang tidak dapat diterapkan di atas:

Input: 'ggreuuobgugoubgoubguorgoruguor'

Output:

    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    |   | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 0 | g | g | r | e | u | u | o | b | g | u | g | o | u | b | g | o | 
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    | 1 | u | b | g | u | o | r | g | o | r | u | g | u | o | r | 
    +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

    (As you can see, there are no empty cells shown in the entire table. This looks much better to me.)
R. Kap
sumber
" Jika panjang input bukan kelipatan 16, Anda perlu memulai baris baru untuk karakter yang tersisa dan membiarkan sel-sel yang tidak digunakan kosong (= diisi dengan 3 spasi). "
Leaky Nun
@ KennyLau Ah, ya. Saya tidak melihat itu. Sial ... edit sekarang sedang berlangsung. Jujur saja, ini terlihat jauh lebih baik daripada yang ditunjukkan OP, bukan begitu?
R. Kap
Mengapa memilih bawah?
R. Kap
@ R.Kap, aku tidak bisa memberitahumu, tapi di sini, dapatkan upvote
cat
2

05AB1E , 65 63 byte

Kode:

"+---"17×'+J©,žhAu6£¹J16÷)v„| ?N>iðëN<16B}y«ð17×ðñvy„ |ðJ?}¶?®,

Cobalah online! . Menggunakan pengodean CP-1252 .

Adnan
sumber
1

JavaScript (ES6), 148 byte

s=>(s=' 0123456789ABCDEF'+s+' '.repeat(15)).match(/(?!^).{16}/g).map((t,i)=>d+`+
| `+[s[i],...t].join` | `,d=`+---`.repeat(17)).join` |
`+` |
${d}+`

The ' 0123456789ABCDEF'ada untuk mengisi kolom pertama, tapi nyaman juga mencakup baris pertama. String input kemudian diisi dengan spasi untuk memungkinkannya untuk dipecah menjadi substring dengan panjang 16, dengan (?|^)mencegah ruang utama tidak cocok. Sisanya hanya menggabungkan potongan-potongan.

Neil
sumber
1

Excel VBA, 157 Bytes (Kecurangan?)

Fungsi Anonymous VBE Immediate Window yang secara destruktif mengambil input dari range [A1]dan output ke ActiveSheetobjek.

Golf

[B1:Q1]="=Dec2Hex(Column(B1)-2)":L=[Len(A1)]:For i=0To l:Cells(Int(i/16)+2,i Mod 16+2)=Mid([A1],i+1,1):Next:For i=1To Int(l/16)+1:Cells(i+1,1)=i:Next:[A1]=""

Diformat

[B1:Q1]="=Dec2Hex(Column(B1)-2)"
L=[Len(A1)]
For i=0To l:Cells(Int(i/16)+2,i Mod 16+2)=Mid([A1],i+1,1):Next
For i=1To Int(l/16)+1:Cells(i+1,1)=i:Next
[A1]=""

Input output

Diberikan:

[A1]="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJ"

output yang dihasilkan adalah

Meja thingy

Taylor Scott
sumber
probs tidak valid, tapi tetap keren. Untuk membuatnya lebih mirip (tetapi masih tidak valid?) Anda harus mengaktifkan asrama sel yang sesuai.
Lyndon White