Utwórz tabelę ASCII-heksadecymalną dla Marka Watneya


25

Zainspirowany tym pytaniem SciFi.SE.


Tło (z niewielkim spoilerem):

W filmie Marsjanin Mark Watney używa tablicy ASCII do wyszukiwania wartości szesnastkowych znaków ASCII, aby mógł podjąć próbę nawiązania łączności z Ziemią. *

Wyzwanie

Bez danych wejściowych wypisz następującą tabelę ASCII dokładnie tak:

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

Ostateczna nowa linia jest opcjonalna. W nowym wierszu md5 wyniku to 58824a1dd7264c0410eb4d727aec54e1. Bez niej jest 41b6ecde6a3a1324be4836871d8354fe.

Jeśli to pomaga, jest to wynik działania asciipolecenia Linux z odciętymi informacjami o użytkowaniu u góry. Możesz odtworzyć to na Ubuntu w następujący sposób:

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

Nie możesz używać asciinarzędzia (lub podobnego) w swoich odpowiedziach.

Ponieważ znaki ASCII są małe Wystarczy tego głupiego memu !


Wiem, że jest to podobne do wydruku tabeli ASCII , ale uważam, że formatowanie wyniku w tym pytaniu jest znacznie bardziej złożone i uzasadnia inne pytanie.


* Uwaga, nie widziałem jeszcze tego filmu.


1
Więc program może być na stałe zakodowany?
TanMath,

@TanMath Czy masz na myśli użycie asciinarzędzia w odpowiedziach - jeśli tak, zobacz moją edycję - jest to niedozwolone.
Cyfrowy uraz

4
+1 za głupiego mema ... ale po co kolejne wyzwanie bez wkładu?
edc65

2
@ msh210 Tag -golf tag oznacza najkrótszy kod w bajtach, jeśli nie podano inaczej . Próbuję zastosować zasadę SUCHEGO ;-). Podobnie, o ile nie zaznaczono inaczej, wpisy mogą być programami lub funkcjami .
Cyfrowy uraz

1
Czy śledzenie białych znaków musi być dokładnie takie, jak pokazano? (tj. 2 spacje w pierwszym wierszu, brak w pozostałych)
Level River St

Odpowiedzi:


19

JavaScript (ES6), 323 332 353

Edycja Udało mi się trochę to skrócić
Krok 1, wierzcie lub nie, używając tablicy 16 znaków jest krótszy niż toString+ toUpperCase
Krok 2, bawiąc się, aby użyć .mapzamiast tego for, dzięki czemu mogę przekształcić wszystko w funkcję pojedynczego wyrażenia, avodowanie console.log i / lub return.

Edytuj 2 Przeniesiono DEL w miejscu 0, pomysł zapożyczony od Cole'a Camerona

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

Powiedziałbym, że piksel jest idealny

MNIEJ ZŁOTA

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
)

Test

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

DO, 307 310 308 307 305 bajtów

Wreszcie działa w 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);}

Wydajność:

$ ./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

Nie golfowany:

/* 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);
    }
}

Wypróbuj na Ideone .

Edycja: jeszcze 2 bajty. Ogromne podziękowania dla Dana Allena i Digital Trauma.


2
Ponadto, nie trzeba się#include <stdio.h>
cyfrowe Trauma

@DigitalTrauma: Możesz w GCC. Nie możesz w C.
DevSolar

2
@DevSolar To nie jest sprawa GCC. W K&R C kompilator, który nie ma deklaracji printf i putchar, zgadnie i zgadnie poprawnie. Z drugiej strony jest to niezdefiniowane zachowanie w standardowym C99, ale kogo to obchodzi - działa zgodnie z oczekiwaniami we wszystkich kompilatorach, które znam
edc65

1
305, jeśli zmienisz pierwszą linię na x,y,z=127;i zamienisz 4 wystąpienia 127 na z. Dodaje 6 znaków, ale zabiera 8.
Persixty

Sprytna sztuczka, stawianie DEL na pierwszym miejscu. Pożyczę ten pomysł. Chciałbym głosować teraz tylko za ten, ale głosowałem już wczoraj :)
edc65

7

Bubblegum , 535 bajtów

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....

Ten program wykorzystuje kompresję LZMA. Wypróbuj online!


1
Myślę, że możesz to zrobić lepiej; ;-)
Digital Trauma

11
Nie w Bubblegum ...
Dennis,

4
Ile bajtów potrzebujesz do wydrukowania całej powieści Marsjanin ?
Alex A.

1
@DigitalTrauma To proste ... Musisz tylko wykonać atak prefiksem na SHA-256 ...
LegionMammal978

3

C, 385 384 358 bajtów

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;}

Facet z góry pobił mnie na pięcie, ale nadal chciałem się poddać, ponieważ podobało mi się to.

Gra w golfa:

#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;
}

AKTUALIZACJA: zmieniono var na j. Zapisano bajt;)
UPDATE2: Odciąłem kilka dodatkowych rzeczy i uruchomiłem funkcję drukowania, aby zaoszczędzić trochę bajtów.


Podobnie jak w przypadku wielu odpowiedzi, nie ma prawidłowych odstępów między kolumnami. Również s/HEX/Hex/.
Cyfrowy uraz

Musiałem przegapić rozdział wyjaśniający słowo kluczowe thingy c ;-P
Digital Trauma

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 Rozumiem? ES6 możesz robić takie rzeczy jak ${o} ${o} ${o+o+o+o} ${o} ${o}.
Neil

@Neil Thanks! Dodałem zmianę i zajęto miejsce końcowe.
wolfhammer

W rzeczywistości możesz pójść o krok dalej, ponieważ dosłowne znaki nowej linii są legalne w backtiksie (nie jestem pewien, jak to wykazać w komentarzu).
Neil

3

Golfscript, 225 bajtów

"\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 bajtów

Prawdopodobnie nie będę już próbował tego przycinać, ale fajnie było je zdobyć tak daleko.

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 bajtów

Również ważny Python 2.7. Wykorzystano pomysł / sugestię FryAmTheEggman na temat curses.ascii.controlnames, która pozwala zaoszczędzić prawie 100 bajtów.

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

Ruby (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}

bez golfa

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

Tablica nazw kontrolnych naprawdę mnie tutaj zabija. Wciąż mam nadzieję znaleźć coś podobnego do przekleństw Pythona. Scii dla Ruby ...
Connor Clark

1

Microscript II , 1314 bajtów

Prawdopodobnie daleki od optymalnego.

"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
Jak to przetestować?
Digital Trauma

@DigitalTrauma Dodam link do repozytorium github do odpowiedzi. Uruchom interpreter z programem jako pierwszym wierszem wejścia.
SuperJedi224

Gratulacje. Uzyskałeś najbardziej nudną odpowiedź w tym konkursie. ò_ó +1
user48538

@ zyabin101 Cóż, jest to około 30 bajtów krótszych niż zwykłe wydrukowanie łańcucha naraz.
SuperJedi224

1

JavaScript, 415 413 423 1 411 406 402 414 2 412 bajtów

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')

Nie mogłem wymyślić, jak wydrukować znaki przed kodem znakowym 32, więc po prostu podałem je jako ciąg znaków.

Hash, który mam, wydaje się pasować ( 41b6ecde6a3a1324be4836871d8354fe).

Demo + 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 - ustalone odstępy
2 - ponownie ustalone odstępy


Huh, w mobilnym Chrome <pre> nie ma przestrzeni, chociaż powinno.
Nicola

Nie sądzę, żeby to było dokładnie to, o co pyta pytanie.
SuperJedi224

@Dig oy wtf. Widzę to 0,0
nik.

@Digital Naprawiłem odstępy.
nicael

@Digital You po ostatniej kolumnie? Ok, ale to nawet nie wpływa na wygląd ...
Nicola

1

MATLAB, 363 bajty

Nie tak mały jak C, ale porównywalny ...

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']);

Czy muszę pobrać bezpłatną wersję próbną, czy jest inny sposób na przetestowanie odpowiedzi? Czy możesz twierdzić, że md5 danych wyjściowych jest poprawny?
Digital Trauma

Możesz uruchomić go w GNU Octave, ale ja już to zrobiłem, a tej wersji brakuje dodatkowego wypełnienia między kolumnami 6, 7 i 8. Poza tym jest poprawne.
Rainer P.

Tak masz rację. Poprawiono kod Dzieje się tak, jeśli masz obok siebie grę w golfa i nie golfa. Poprawiono niektóre literówki. Co ciekawe, otrzymuję inny ascii | tail -n = + 7 (brakuje dwóch ostatnich ostatnich wierszy w pierwszym rzędzie) (Ubuntu 15.10). Nigdy nie zauważyłem, że w matlabie zmienne o nazwach d i e zachowują się inaczej. (dla i = 1: 2D = 10, koniec;% Błąd składni) (dla i = 1: 2 K = 10; końcowe%; dobrze)
Jonas

1

/// , 998 bajtów

//\/\////  /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

Wypróbuj online!


1

PHP ,330 321 bajtów

$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));

Wypróbuj online!

Mniej golfa:

$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#)))))))))

Skrypt, który należy uruchomić, który wypisuje następujące dane na standardowe wyjście, tj. wersja bez ostatniego nowego wiersza (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

Detale

  • (0 11 22 31 40 49 59 69)zawiera pozycję każdej kolumny w linii, uzyskaną poprzez sprawdzenie pożądanego wyniku. Było wiele przypadków narożnych, które są po prostu lepiej obsługiwane przez zakodowanie dokładnej pozycji dla każdej kolumny i pozostawienie ~Ttabeli formatowania w razie potrzeby.

  • Ponieważ nazwy znaków są zależne od implementacji, ten kod jest skierowany tylko do interpretera SBCL (testowałem z CCL, który używa innych nazw). Opieram się char-namena większości znaków innych niż graficzne, ale niektóre z nich mają wyraźne odwzorowania na oczekiwany wynik.

Nie golfił

(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)))))))))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.