สร้างตาราง ASCII-to-hex สำหรับ Mark Watney


25

แรงบันดาลใจจากคำถาม SciFi.SE นี้


พื้นหลัง (พร้อมสปอยเลอร์รอง):

ในภาพยนตร์เรื่องMartianตัวเอก Mark Watney ใช้ตาราง ASCII เพื่อค้นหาค่าเลขฐานสิบหกของอักขระ ASCII เพื่อให้เขาสามารถพยายามสื่อสารกลับสู่โลกได้ *

ท้าทาย

หากไม่มีอินพุตให้ส่งออกตาราง ASCII ต่อไปนี้แบบนี้:

Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex  
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

บรรทัดใหม่สุดท้ายเป็นตัวเลือก ด้วยการขึ้นบรรทัดใหม่, md5 58824a1dd7264c0410eb4d727aec54e1ของการส่งออกคือ 41b6ecde6a3a1324be4836871d8354feโดยไม่ต้องมันเป็น

ในกรณีที่ช่วยได้นี่คือผลลัพธ์จากasciiคำสั่ง Linux ที่มีข้อมูลการใช้งานที่ด้านบนถูกตัดออก คุณสามารถสร้างมันขึ้นมาใหม่บน Ubuntu ได้ดังต่อไปนี้:

sudo apt-get install ascii
ascii | tail -n+7

คุณไม่สามารถใช้asciiยูทิลิตี้ (หรือคล้ายกัน) ในคำตอบของคุณ

เพราะตัวละคร ASCII มีขนาดเล็กพอที่มีมส์โง่ ๆ นี้อยู่แล้ว!


ฉันรู้ว่านี่คล้ายกับพิมพ์ตาราง ASCIIแต่ฉันเชื่อว่าการจัดรูปแบบของผลลัพธ์ในคำถามนี้มีความซับซ้อนมากขึ้นและรับประกันคำถามที่แตกต่างกัน


* หมายเหตุฉันยังไม่เคยเห็นภาพยนตร์เรื่องนี้


1
ดังนั้นโปรแกรมสามารถเข้ารหัสได้ยาก ??
TanMath

@TanMath คุณหมายถึงการใช้asciiยูทิลิตี้ในการตอบ - ถ้าเป็นเช่นนั้นเห็นการแก้ไขของฉัน - มันไม่ได้รับอนุญาต
Digital Trauma

4
+1 สำหรับ meme ที่เซ่อ ... แต่ทำไมความท้าทายอีกอย่างที่ไม่มีอินพุต?
edc65

2
@ msh210 รหัสกอล์ฟแท็กหมายถึงรหัสที่สั้นที่สุดในไบต์หากไม่ได้ระบุเป็นอย่างอื่น ฉันพยายามใช้หลักการ DRY ;-) ในทำนองเดียวกันเว้นแต่จะระบุไว้เป็นอย่างอื่นรายการอาจจะเป็นโปรแกรมหรือฟังก์ชั่น
Digital Trauma

1
Traling whitespace ต้องตรงตามที่แสดงหรือไม่ (ie2 ช่องว่างในบรรทัดแรกไม่มีที่อื่น ๆ )
ระดับแม่น้ำเซนต์

คำตอบ:


19

JavaScript (ES6), 323 332 353

แก้ไขฉันจัดการให้สั้นลงเล็กน้อยใน
ขั้นตอนที่ 1 เชื่อหรือไม่ว่าการใช้อาร์เรย์ 16 ตัวอักษรนั้นสั้นกว่าtoString+ toUpperCase
ขั้นตอนที่ 2 เล่นไปรอบ ๆ เพื่อใช้.mapแทนforเพื่อให้ฉันสามารถแปลงให้เป็นฟังก์ชันนิพจน์เดียว console.log และ / หรือผลตอบแทน

แก้ไข 2ย้าย DEL ที่สถานที่ 0 แนวคิดที่ยืมมาจาก Cole Cameron

H=x=>(x=[...'0123456789ABCDEF']).map((d,r)=>x[S='slice'](0,8).map(c=>(o+=`   ${w=c*16+r} ${c+d} `[S](-z)+("DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".substr((w+1&127)*3,3)||String.fromCharCode(w)),z=c<5?8:9,'Dec Hex   '[S](0,c<2?z+2:z)),o+=`
`,z=7).join` `,o='')[0]+o

MD5: 41B6ECDE6A3A1324BE4836871D8354FE

Pixel สมบูรณ์แบบฉันจะบอกว่า

น้อยลง

H=x=>(
  x=[...'0123456789ABCDEF'],
  a="DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ",
  o='', // the string o will contain the body (16 rows)
  x.map((d,r)=> ( // main loop, r is thr row number, d is the second hex digit to print
    o+=`\n`, z=7,
    x.slice(0,8).map(c=> // loop on 8 columns, c is both column number and digit to print
      (
        // append the column to o
        o += `   ${w=c*16+r} ${c+d} `.slice(-z) + (a.substr((w+1&127)*3,3)||String.fromCharCode(w)), 
        z=c<5?8:9, // adjust the column size
        'Dec Hex   '.slice(0,c<2?z+2:z) // column head, right size
      ) // the .map result is the 8 columns heading
    ).join` ` // join the heading in a single string
  ))[0] // any element of the result map is the heading
  + o // concatenate the body
)

ทดสอบ

H=x=>(x=[...'0123456789ABCDEF']).map((d,r)=>x[S='slice'](0,8).map(c=>(o+=`   ${w=c*16+r} ${c+d} `[S](-z)+("DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".substr((w+1&127)*3,3)||String.fromCharCode(w)),z=c<5?8:9,'Dec Hex   '[S](0,c<2?z+2:z)),o+=`
`,z=7).join` `,o='')[0]+o

/* TEST */ 
console.log=x=>O.textContent=x

console.log(H())
<pre id=O></pre>


11

C, 307 310 308 307 305 ไบต์

ในที่สุดทำงาน 100%

i,j,z=127;main(){for(;j++<8;)printf("Dec Hex%*s",j<3?4:j<6||j>7?2:3,"");for(;i<143&&putchar(!i|i>z?10:32);i+=16)i=i>z?i%z:i,printf("%*d %02X ",i>95?4:3,i,i),i%z>31?putchar(i):printf("%.3s","DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US "+(i+1)%128*3);}

เอาท์พุท:

$ ./a.out
Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL$ ./a.out > file.txt
$ md5sum file.txt
41b6ecde6a3a1324be4836871d8354fe  file.txt

Ungolfed:

/* some variables for the trip */
i,j,z=127;

main()
{
    /* print header row */
    for(;j++<8;)
            printf("Dec Hex%*s", j<3?4:j<6||j>7?2:3, "");

    /* Iterate through ASCII values, print a space after every column, newline after every 8th value */
    for(;i<143 && putchar(!i|i>z ? 10 : 32); i+=16)
    {
            /* print dec/hex value */
            printf("%*d %02X ", i>95?4:3, i, i=i>z?i%z:i);

            /* print character or friendly name for non-printable characters */
            i%z>31
                    ? putchar(i)
                    : printf("%.3s", "DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US "+(i+1)%128*3);
    }
}

ลองบนIdeone

แก้ไข: 2 ไบต์เพิ่มเติม ขอบคุณ Dan Allen และ Digital Trauma เป็นอย่างมาก



@DigitalTrauma: คุณทำได้ใน GCC คุณไม่สามารถอยู่ใน C.
DevSolar

2
@DevSolar ไม่ใช่ของ GCC ใน K&R C คอมไพเลอร์ที่ไม่มีการประกาศ printf และ putchar จะเดาและเดาถูก ในทางกลับกันมันเป็นพฤติกรรมที่ไม่ได้กำหนดในมาตรฐาน C99 แต่ผู้ที่ใส่ใจ - มันทำงานได้ตามที่คาดไว้ในคอมไพเลอร์ทั้งหมดที่ฉันรู้
edc65

1
305 ถ้าคุณเปลี่ยนบรรทัดแรกเป็นx,y,z=127;และแทนที่การเกิดขึ้น 4 ครั้งที่ 127 ด้วย z เพิ่ม 6 ตัวอักษร แต่จะหายไป 8 ตัว
Persixty

เคล็ดลับที่ฉลาดวาง DEL ไว้ตั้งแต่แรก ฉันจะยืมความคิดนี้ ฉันจะ upvote ตอนนี้เพียงแค่สำหรับอันนี้ แต่ฉัน upvote แล้วเมื่อวานนี้ :)
edc65

7

Bubblegum , 535 ไบต์

0000000: e0 05 2f 02 0f 5d 00 22 19 48 62 01 d3 1f 78 e2  ../..].".Hb...x.
0000010: 9a a0 8e 4e 5d d1 b4 c1 77 aa 32 58 ca 97 55 7e  ...N]...w.2X..U~
0000020: a8 01 87 7d db e4 00 55 8f c0 49 67 b6 56 02 5e  ...}...U..Ig.V.^
0000030: ae b2 4d e2 a9 f4 7f 99 a8 56 9e b7 4c 60 a4 79  ..M......V..L`.y
0000040: 6a 76 54 11 90 72 d6 b7 19 df 2f 57 39 2d 21 c0  jvT..r..../W9-!.
0000050: d1 4c 5e d6 21 29 c8 ed 7c a9 7b 8c 85 dc 62 a1  .L^.!)..|.{...b.
0000060: 65 98 e1 0b a7 36 83 c8 ca 88 0c 57 22 f6 56 1e  e....6.....W".V.
0000070: 45 03 b6 74 21 a8 39 52 e9 71 b4 98 ed 71 38 9f  E..t!.9R.q...q8.
0000080: 2d dc 21 d7 bf 60 41 cc bb bd a7 cb 0b 17 8d 65  -.!..`A........e
0000090: 05 13 04 0f 6c bb 67 62 aa c7 ad 6b be 9e 46 77  ....l.gb...k..Fw
00000a0: 35 b9 91 85 f5 47 31 2f c7 ec da c0 00 0e a6 48  5....G1/.......H
00000b0: 01 ba 8b cd b0 34 81 c4 74 9f 4e 3b c3 d0 f7 10  .....4..t.N;....
00000c0: 46 a0 55 8d 49 5d b7 b0 c9 79 ac e5 5f ef 49 f2  F.U.I]...y.._.I.
00000d0: b0 1b 71 3a e1 30 7a fc ce a7 a8 d5 c3 9a 35 1a  ..q:.0z.......5.
00000e0: 4e 27 92 40 4b b5 9b c4 0d 5c e8 cd 71 00 bd c1  N'.@K....\..q...
00000f0: ca aa d2 05 dc e1 0f d9 19 1d 6f 14 87 b3 e4 e8  ..........o.....
0000100: 9e 82 64 d8 e4 76 e7 24 0a 0e 88 72 a1 12 44 95  ..d..v.$...r..D.
0000110: d4 78 82 bd da 71 f3 fb 03 00 d1 4b c8 80 cb 49  .x...q.....K...I
0000120: 0b 98 be 26 ba 3e e8 82 e2 14 9b ba 1a cf bf bc  ...&.>..........
0000130: 30 4e c4 e8 7e b4 d5 46 e6 bc 73 97 c5 ed a6 e2  0N..~..F..s.....
0000140: 06 02 e7 1b 74 4d da 73 fb 15 68 50 c0 ed 32 9b  ....tM.s..hP..2.
0000150: 0d d7 49 d5 c1 a2 e9 07 2c 77 81 6c d3 8d 59 26  ..I.....,w.l..Y&
0000160: 1c 35 ec 2b 7e cb 3a f1 cc 45 a9 e5 6d 3e 33 ca  .5.+~.:..E..m>3.
0000170: 56 3c 8a 8d f6 13 e9 59 d4 52 07 44 ab 5e bc f4  V<.....Y.R.D.^..
0000180: 1f ed f8 9c 8b 48 e1 c4 6c fd 47 d5 04 cc 6e aa  .....H..l.G...n.
0000190: 3f 54 b8 cc cd 09 01 6d 20 3c 42 c9 44 da b1 c1  ?T.....m <B.D...
00001a0: 69 80 12 26 6b 65 e1 4d 1c c3 48 36 2b 14 00 61  i..&ke.M..H6+..a
00001b0: 04 6b 9a 59 2a 53 e3 64 a7 4f dd cc be 2c 20 5e  .k.Y*S.d.O..., ^
00001c0: f7 c7 64 34 e6 12 a6 44 c1 69 35 76 05 db 13 ab  ..d4...D.i5v....
00001d0: 52 10 b5 8e da 8e c5 3c 4c d0 69 0b 19 18 67 ef  R......<L.i...g.
00001e0: 44 1c 7b 70 63 98 95 40 28 6e 3d e7 44 cb 24 83  D.{pc..@(n=.D.$.
00001f0: 88 62 63 3c 02 1c e7 db db 02 56 ae cd 9c e0 9c  .bc<......V.....
0000200: 1c a1 c1 ae d1 dd 7b b7 e6 bd 5b 38 ee 75 c5 6c  ......{...[8.u.l
0000210: 06 16 6c b2 fb 00 00                             ..l....

โปรแกรมด้านบนนี้ใช้การบีบอัด LZMA ลองออนไลน์!


1
ฉันคิดว่าคุณสามารถทำได้ดีกว่านั้น ... ;-)
Digital Trauma

11
ไม่ได้อยู่ใน Bubblegum ...
Dennis

4
กี่ไบต์ที่คุณจะต้องพิมพ์นวนิยายทั้งอังคาร ?
Alex A.

1
@DigitalTrauma มันเป็นเรื่องง่าย ... คุณเพียงต้องดำเนินการโจมตีคำนำหน้าใน SHA-256 ...
LegionMammal978

3

C, 385 384 358 ไบต์

i,n,j;char a[100]="NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US DEL";z(o){printf("%3d %02X %.*s ",j,j,3,a+o);}main(){for(;i<8;i++){printf("%3s %3s   ","Dec","HEX ");}printf("\n");for(;n<16;n++){for(j=n;j<=n+112;j+=16){if(j==127)z(96);else j<32?z(j*3):printf("%3d %02X %c   ",j,j,j);}printf("\n");}return 0;}

คนที่แต่งตัวประหลาดด้านบนเอาชนะฉันไปที่การชก แต่ฉันยังคงต้องการที่จะส่งเพราะฉันชอบสิ่งนี้

De-แข็งแรงเล่นกอล์ฟ:

#include<stdio.h>
i,n,j;
char a[100] = "NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US DEL";
z(o){printf("%3d %02X %.*s ",j,j,3,a+o);}
main(){
   for(;i<8;i++){printf("%3s %3s   ","Dec","HEX ");}printf("\n");
   for(;n<16;n++){
      for(j=n;j<=n+112;j+=16){
         if(j==127)z(96);
         else j<32?z(j*3):printf("%3d %02X %c   ",j,j,j);
      }
      printf("\n");
   }
   return 0;
}

UPDATE: แทนที่ var ด้วย j บันทึกเป็นไบต์;)
UPDATE2: ตัดสิ่งพิเศษอีกสองสามอย่างและตัดการทำงานเพื่อบันทึกบางส่วน


เช่นเดียวกับคำตอบมากมายคุณไม่มีระยะห่างที่ถูกต้องระหว่างคอลัมน์ s/HEX/Hex/ด้วย
Digital Trauma

ฉันต้องพลาดบทที่อธิบายคำหลักthingy c ;-P
บาดเจ็บทางดิจิตอล

3

JavaScript ES6 432 405 398 385

o="Dec Hex  "
o=`${o}  ${o}  ${o+o+o+o} ${o} ${o}\n`
for(i=0;i<16;i++){for(j=0;j<8;j++){k=i+j*16
o+=k>9&&k<16?' ':k<96||k>99?'  ':'   '
o+=k+" "+(k<16?0:'')+k.toString(16).toUpperCase()+" "
o+=k>31?String.fromCharCode(k):"NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".substr(k*3,3)
}o+="\n"}
console.log(o.substr(0,o.length-2)+'DEL')

ฉันจะเอามัน ES5? ES6 ${o} ${o} ${o+o+o+o} ${o} ${o}คุณสามารถทำสิ่งที่ชอบ
Neil

@ Neil ขอบคุณ! ฉันได้เพิ่มการเปลี่ยนแปลงและดูแลพื้นที่ต่อท้าย
wolfhammer

ที่จริงแล้วคุณสามารถไปอีกขั้นหนึ่งได้เนื่องจากบรรทัดใหม่ตามตัวอักษรนั้นถูกกฎหมายภายใน backticks (ไม่แน่ใจว่าจะแสดงให้เห็นอย่างไรในความคิดเห็น)
Neil

3

Golfscript, 225 ไบต์

"\x04\x04\x02\x02\x02\x03\x03\x02"{"Dec Hex"" ":s@*}%n[128,{3s*\+-4>s+.~.96<@>\256+16base{10,"ABCDEF"1/+=}%1>{+}/}%"\x1f\xbb\x89\xbc\xaf\x82=F\xd7U%\x80\x8a\xf6\xc7U\xa6al)A\xf6\x19\xfe\x03\x83\xef-\x9f\xe7m\xeb\x82h\xf3\xbfEm6V\x1fD\x8c\xd7~\xcb\x95&(\x1e/:\x8e\xc5\xb0\x0b\xd6\xd4\xd09\xdd""\xff\x1e"{base}/{90,65>1342s++1/=}%3/32/"\x7f"{,32>}%1/*]zip{s*}%16/zip{s*n}%

3

Python 2.7, 389 ไบต์

อาจจะไม่ลองและตัดมันอีกต่อไป แต่มันสนุกที่ได้มันมาไกลขนาดนี้

r=range
c='NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US '
h=''
p=['']*16
o=[11,11,9,9,9,10,10,9]
e=['%3s '%str(i)+('%02X ')%(i)+('DEL',c[i*3:i*3+3].strip() if i<32 else chr(i))[i<127] for i in r(128)]
for i in r(8):
    l=e[i*16:(i+1)*16]
    h+='Dec Hex'.ljust(o[i])
    p=[p[j]+l[j].ljust((0,o[i])[i<7]) for j in r(16)]
print h+'\n'+'\n'.join(p)

3

Python 3.4, 216 Bytes

Python 2.7 ที่ถูกต้องด้วย ใช้แนวคิด / ข้อเสนอแนะของ FryAmTheEggman ใช้เกี่ยวกับ curses.ascii.controlnames ซึ่งบันทึกได้เกือบ 100 ไบต์

import curses.ascii as a
o=''
w=4,4,2,2,2,3,3,1
for x in w:o+='Dec Hex'+' '*x
o+=' '
for n in range(16):
 o+='\n'
 for x in w:o+='%3d %02X %-*s'%(n,n,x,n>31and[chr(n),'DEL'][n>126]or a.controlnames[n]);n+=16
print(o)

$ python ascii.py | md5
58824a1dd7264c0410eb4d727aec54e1

2

ทับทิม (2.2.2p95), 277 295 306 331 364

a='Dec Hex  ';puts"#{a}  "*2+a*4+" #{a}"*2,16.times.map{|i|8.times.map{|j|(k=i+j*16;k==127?'  127 7F DEL':"#{k} #{'%.2X'%k} #{'NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US  '[k*3..k*3+2]||k.chr}").rjust(j<2?10+j :9+j/6)}.join}

ungolfed

s = "Dec Hex    " * 2 + "Dec Hex  " * 4 + " Dec Hex  " * 2
a = 127.times.map { |i|
  "#{i} #{'%.2X'%i} #{'NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US  '[i*3..i*3+2]||i.chr}"
}
a << '  127 7F DEL'
x = 16.times.map { |i|
  8.times.map { |j|
    a[i + j * 16].rjust(j < 2 ? 10 + j : 9 + j / 6)
  }.join
}.join "\n"
puts s, x

อาร์เรย์ชื่อการควบคุมฆ่าฉันที่นี่จริง ๆ ยังคงหวังที่จะหาบางสิ่งที่คล้ายกับ Python curses.ascii สำหรับ Ruby ...
Connor Clark

1

Microscript II , 1314 bytes

อาจไกลจากที่ดีที่สุด

"Dec Hex    "pp"Dec Hex  "ppps"Dec Hex   "ppoP"  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p\n  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q\n  2 02 STX  18 12 DC2  34 22 \"  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r\n  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s\n  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t\n  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u\n  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v\n  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w\n  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x\n  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y\n 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z\n 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {\n 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \\  108 6C l  124 7C |\n 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }\n 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~\n 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL"

2
ฉันจะทดสอบสิ่งนี้ได้อย่างไร
Digital Trauma

@DigitalTrauma ฉันจะเพิ่มลิงก์ไปยัง repo GitHub เพื่อคำตอบ เรียกใช้ล่ามด้วยโปรแกรมเป็นบรรทัดแรกของอินพุต
SuperJedi224

ยินดีด้วย. คุณได้คำตอบที่น่าเบื่อที่สุดสำหรับการแข่งขันนี้ ò_ó +1
user48538

@ zyabin101 มันสั้นกว่าประมาณ 30 ไบต์เพียงแค่พิมพ์สตริงทั้งหมดในครั้งเดียวน่าจะเป็น
SuperJedi224

1

JavaScript, 415 413 423 1 411 406 402 414 2 412 ไบต์

x=>eval('a=`${d="Dec Hex  "}  `[r="repeat"](2)+d[r](3)+`${d} `[r](2)+d+`
`;z="NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".match(/.{3}/g);z[127]="DEL";for(j=i=0;i<128;i++){a+=("  "+((b=i%8*16)+j)).slice(-3)+" "+(0+(c=b+j).toString(16).toUpperCase()).slice(-2)+" "+(c<32||i==127?z[c]:String.fromCharCode(c))+(b==112?`
`:(b < 80 ? " " : "  "));if(b==112)j++}a')

ฉันไม่สามารถหาวิธีพิมพ์ตัวอักษรก่อนรหัส char 32 ดังนั้นเพียงแค่ระบุพวกเขาเป็นสตริง

ดูเหมือนว่าแฮชที่ฉันจะเข้าคู่กัน ( 41b6ecde6a3a1324be4836871d8354fe)

การสาธิต + Ungolfed:

function t() {
  a = `${d="Dec Hex  "}  `.repeat(2) + d.repeat(3) + `${d} `.repeat(2) + d + "\n";
  z = "NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".match(/.{3}/g);
  z[127] = "DEL";
  for (j = i = 0; i < 128; i++) {
    a += ("  " + ((b = i % 8 * 16) + j)).slice(-3) + " " + (0 + (c = b + j).toString(16).toUpperCase()).slice(-2) + " " + (c < 32 || i == 127 ? z[c] : String.fromCharCode(c)) + (b==112?"\n":(b < 80 ? " " : "  "));
    if(b==112)j++;
  }
  return a
}
document.write("<pre>" + t() + "</pre>")


1 - ระยะห่างคงที่
2 - ระยะห่างคงที่อีกครั้ง


อืมใน Chrome มือถือ <pre> นั้นไม่ได้มีระบบการบินที่โดดเด่นเท่าที่ควร
nicael

ฉันไม่คิดว่าเป็นสิ่งที่ห่างไกลคำถามที่ถาม
SuperJedi224

@Dig oy wtf ฉันเห็นสิ่งนี้ 0.0
nicael

@ ดิจิทัลฉันได้แก้ไขระยะห่าง
nicael

@ ดิจิทัลคุณหลังจากคอลัมน์สุดท้ายหรือไม่ ok แต่ที่ไม่ได้ส่งผลกระทบต่อลักษณะที่ปรากฏ ...
nicael

1

MATLAB, 363 ไบต์

ไม่เล็กเท่า C แต่เทียบได้ ...

h='';s=@sprintf;for i=[4 4 2 2 2 3 3 2]h=s([h 'Dec Hex%*s'],i,'');end
h=[h 10];a='NULDLESOHDC1STXDC2ETXDC3EOTDC4ENQNAKACKSYNBELETBBS CANHT EM LF SUBVT ESCFF FS CR GS SO RS SI US ';for i=0:15for j=0:7k=i+16*j;if j<2b=1+6*i+3*j;h=[h s('%3d %02X %-3s ',k,k,a(b:b+2))];else
h=[h s('%*d %02X %c ',3+(j>5),k,k,k)];end
end
h=[h(1:end-1) 10];end
disp([h(1:end-2) 'DEL']);

ฉันต้องดาวน์โหลดรุ่นทดลองใช้ฟรีหรือมีวิธีอื่นที่สามารถทดสอบคำตอบของคุณได้หรือไม่? หรือคุณสามารถอ้างสิทธิ์ md5 ของผลลัพธ์ถูกต้องหรือไม่
Digital Trauma

คุณสามารถรันใน GNU Octave แต่ฉันทำไปแล้วและรุ่นนี้ไม่มีช่องว่างภายในเพิ่มเติมระหว่างคอลัมน์ 6, 7 และ 8 นอกเหนือจากนั้นมันถูกต้อง
Rainer P.

ใช่คุณถูก. แก้ไขรหัส สิ่งนี้จะเกิดขึ้นหากคุณมีตัวแปรที่แตกต่างกัน แก้ไขข้อผิดพลาดบางอย่าง น่าสนใจที่ฉันได้รับ ascii ที่แตกต่างกัน | tail -n = + 7 (แถวแรกสองช่องว่างหายไป) (Ubuntu 15.10) ฉันไม่เคยสังเกตเห็นว่าในตัวแปร matlab ชื่อ d และ e ทำงานแตกต่างกัน (สำหรับ i = 1: 2d = 10; end;% ไวยากรณ์ผิดพลาด) (สำหรับ i = 1: 2k = 10; end;% ใช้ได้)
Jonas

1

/// , 998 ไบต์

//\/\////  /Dec Hex/ 0/ 1/ 2/ 3/ 4/ 5/ 6	/ 7/ 8/ 9/0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /A /B /C /D /E /F /
 /  NUL 6DL280 4@ 0P6` 12	pSOH 7DC3! 91 51Q7a 13	qSTX 8DC4" 02 62R8b 14	rETX 9DC5# 13 73S9c 15	sEOT 0DC6$ 24 84T 00d 16	tENQ 1NAK 7% 35 95U 01e 17	uACK 2SYN 8& 46 	06V 02f 18	v	BEL 3ET9' 57	 	1G 7W 03g 19	wBS4CAN 0( 68 	2H 8X 04h 20	xHT5EM1) 79 	3I 9Y 05i 21	y
0L 6SU2* 8: 	4J 0Z 06j 22	z
1VT7ES3+ 9; 	5K 1[ 07k 23	{
2F 8FS4, 0< 	6L 2\\ 08l 24	|
3CR9GS5- 1= 	7M 3] 09m 25	}
4SO0RS6. 2> 	8N 4^ 10n 26	~
5SI1US7\/ 3? 	9O 5_ 11o 27	DEL

ลองออนไลน์!


1

PHP ,330 321 ไบต์

$a=[NUL,SOH,STX,ETX,EOT,ENQ,ACK,BEL,BS,HT,LF,VT,FF,CR,SO,SI,DLE,DC1,DC2,DC3,DC4,NAK,SYN,ETB,CAN,EM,SUB,ESC,FS,GS,RS,US,127=>DEL];foreach($t=[3,3,1,1,1,2,2,0]as$i)echo'Dec Hex ',str_repeat(' ',$i);echo" 
";for($x=0;$x<16;)for($y=$x++;$y<128;$y+=16)printf("% 3d %1$02X % -".$t[$y/16].s.($y<112?' ':"
"),$y,$a[$y]?:chr($y));

ลองออนไลน์!

หักกอล์ฟ:

$a=[NUL,SOH,STX,ETX,EOT,ENQ,ACK,BEL,BS,HT,LF,VT,FF,CR,SO,SI,DLE,
DC1,DC2,DC3,DC4,NAK,SYN,ETB,CAN,EM,SUB,ESC,FS,GS,RS,US,127=>DEL];

$t=[3,3,1,1,1,2,2,0];

foreach( $t as $i )
    echo 'Dec Hex ', str_repeat( ' ', $i );

echo" \n";

for( $x=0; $x<16; ) {
    for( $y=$x++; $y<128; $y+=16 ) {
        printf( "% 3d %1$02X % -" . $t[$y/16] . 's' . ( $y<112 ?' ' : "\n" ),
            $y, $a[$y] ?: chr($y) );
    }
}

0

Common LISP (SBCL), 309

(progn(format t"~{~v,0TDec Hex  ~}"#1='(0 11 22 31 40 49 59 69))(dotimes(y 16)(fresh-line)(loop for x from 0 for k in #1#for i =(+(* 16 x)y)do(format t"~v,0T~3d ~2,'0x ~a"k i i(if(graphic-char-p #2=(code-char i))#2#(case i(8"BS")(9"HT")(10"LF")(12"FF")(13"CR")(127"DEL")(t(string-upcase(char-name #2#)))))))))

สคริปต์ที่จะทำงานซึ่งผลลัพธ์ต่อไปนี้เป็นเอาต์พุตมาตรฐานเช่น รุ่นที่ไม่มีบรรทัดใหม่สุดท้าย (md5: 41b6ecde6a3a1324be4836871d8354fe)

Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex  
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

รายละเอียด

  • (0 11 22 31 40 49 59 69)มีตำแหน่งของแต่ละคอลัมน์ในบรรทัดดังที่ได้รับจากการตรวจสอบผลลัพธ์ที่ต้องการ มีกรณีมุมจำนวนมากที่จัดการได้ง่ายขึ้นโดยการเข้ารหัสตำแหน่งที่แน่นอนสำหรับแต่ละคอลัมน์และให้การจัด~Tรูปแบบคำสั่งตารางตามต้องการ

  • เนื่องจากชื่อของอักขระขึ้นอยู่กับการนำไปใช้งานรหัสนี้จึงมีเป้าหมายเฉพาะล่าม SBCL (ฉันทดสอบด้วย CCL ซึ่งใช้ชื่ออื่น) ฉันใช้char-nameอักขระที่ไม่ใช่กราฟิกส่วนใหญ่ แต่บางตัวมีการแม็พกับเอาต์พุตที่คาดไว้อย่างชัดเจน

Ungolfed

(progn
  (format t"~{~v,0TDec Hex  ~}" '(0 11 22 31 40 49 59 69))
  (dotimes(y 16)
    (fresh-line)
    (loop for x from 0
          for k in '(0 11 22 31 40 49 59 69)
          for i = (+ (* 16 x) y)
          for c = (code-char i)
          do (format t
                     "~v,0T~3d ~2,'0x ~a"
                     k
                     i
                     i
                     (if (graphic-char-p c)
                         c
                         (case i
                           (8"BS")
                           (9"HT")
                           (10"LF")
                           (12"FF")
                           (13"CR")
                           (127"DEL")
                           (t (string-upcase (char-name c)))))))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.