ASCII-tabloyu bir ASCII-tablo olarak yeniden oluşturun


26

Sık sık kod yazarken, belirli bir karakterin ASCII değerinin ne olduğunu bilmek istiyorum. Yazdırılabilir ASCII karakterlerinin tümüne hızlıca bakmak için en sevdiğim kaynaklardan biri ASCIItable.com . Bu yalnızca yazdırılabilir ASCII karakterlerini ve değerlerini değil, aynı zamanda yazdırılamayan ve genişletilmiş karakterleri ve onaltılık, sekizli ve HTML'deki değerleri gösteren gerçekten hoş bir görüntüye sahiptir:

görüntü tanımını buraya girin

Bugünün zorluğu, bu ASCII masasını görüntü yerine ASCII tablosu olarak yeniden oluşturmaktır. İşleri daha basit tutmak için, kontrol karakterlerini kullanmayacağız (32'nin altındaki karakterler) ve sadece ondalık değerleri ve karakterleri göstereceğiz. Başka bir deyişle, zorluğunuz tam program veya aşağıdaki metni basan ya da döndüren bir işlev yazmaktır:

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

Her satırdaki sondaki boşluklara ve sondaki yeni satıra izin verilir. Bu bir mücadelesi olduğu için, gönderiminiz herhangi bir girdi alamaz veya herhangi bir harici kaynağa (bir dosya veya web gibi) erişemez ve amacınız bu metni mümkün olduğu kadar çıktısı için sıkıştırmaktır.

Standart boşluklar uygulanır ve bayt cinsinden en kısa cevap kazanır. Mutlu golf!


3
Bu ASCII tablo görüntüsünü duvarımda sıkıştı.
FlipTack

2
@fliptack Elbette yapabilirsiniz. Neden böyle mantıklı bir şeye izin veremiyorum?
DJMcMayhem

10
Bunun bir dupe olduğunu söyleyemem - diğeri hex değerlerini, yazdırılamaz adlarını ve farklı bir tablo formatı gerektirir. Bu, görünür ASCII'ye yapışır ve tüm yazdırılamayanların 3 harfli kodlarını istemeyerek golfçü koduna izin verir.
FlipTack

@FlipTack Hala Space ve DEL var
simon

2
@ gurka evet, ama diğeri her bir kontrol karakterine sahip.
FlipTack

Yanıtlar:


11

Python 2, 185 183 175 159 bayt

FlipTack sayesinde 8 bayt kaydedildi!

Python'da golf oynamak için hala oldukça yeni.

for a in["Dec  Chr   | "*3,"-"*39]+["".join(["%-5d%-6s| "%(l,('Space',chr(l),'DEL')[(l>32)+(l>126)]) for l in(i,32+i,64+i)])for i in range(32,64)]:print a[:-5]

Tablo gövdesini oluşturmak için iç içe geçmiş bir liste kavrama kullanır.

Ungolfed:

lines =   \
  ["Dec  Chr   | "*3, "-"*39] +                    # first two lines
    ["".join(                                        # join 3 parts of each line
      ["%-5d%-6s| " % (l, ('Space',chr(l),'DEL')[(l>32)+(l>126)]) 
        for l in (i,32+i,64+i)]                      # generate 3 parts of a line
      )
      for i in range(32,64)]

for line in lines: print line[:-5]

Eski deneme, 185 183 175 bayt

print("Dec  Chr   | "*3)[:-5]+"\n"+"-"*34
a=lambda x:('Space',chr(x),'DEL')[(x>32)+(x>126)]
for l in range(32,64):print("%-5d%-6s| "*3%(l,a(l),l+32,a(l+32),l+64,a(l+64)))[:-5]

Ungolfed:

print ("Dec  Chr   | "*3)[:-5] + "\n" + "-"*34
def a(x):
    return "Space" if x==32 else "DEL" if x==127 else chr(x)
for line in range(32,64):
    print ("%-5d%-6s| "*3 % (line, a(line), line+32, a(line+32), 
      line+64, a(line+64))) [:-5]

`İn içinde bir boşluk görüyorum (i, 32 + i, 64 + i)])`, bir bayttan tasarruf etmek için kaldırılabilir.
maksimum

6

Befunge, 176 172 bayt

<v"Dec  Chr   "0
^>:#,_$1+:2`#v_" |",,
\:#->#1_55+,v>55+,"!-":>,#:
+2*,:"_"`#@_v>1+:8-#v_$1+:3%!:7g,!29+*5
*84+1%3\/3::<^,gg00:<`"c"p00+5+`"~"\`*84::p62:.:+*
  Space

| DEL

Çevrimiçi deneyin!



5

JavaScript (ES6), 179 173 bayt

f=n=>n?(n>>6?' | ':`
`)+n+(99<n?'  ':'   ')+(126<n?'DEL':String.fromCharCode(n)+'    '+f(n>95?n-63:n+32)):`${x='Dec  Chr   '}| ${x}| ${x}
${'-'.repeat(34)}
32   Space`+f(64)

console.log(f())


Güzel cevap! `${x='Dec Chr '}| ${x}| ${x}Satır 2'nin sonunda değiştirerek bir bayttan daha fazla tasarruf edebilirsiniz(x='Dec Chr ')+(' |'+x)*2+`
Luke

@ L.Serné *Operatör ile bir dizgiyi tekrar edecek hiçbir ECMAScript versiyonunu bilmiyorum . Yoksa önerini bir şekilde yanlış mı anlıyorum?
Arnauld

Hata! Bir python çözümü ve daha sonra javascript kullanmaya çalıştığınız şey budur.
Luke

5

V , 98, 96 , 94 bayt

i32 | 64 | 9631ñÙl.l.ñÍä«/&   &    
ÎéiD@"
bsDELF 27kdH5lRSpaceÄÒ-Ä3RDec  Chr³ | Î35|D

Çevrimiçi deneyin!

Sadece neredeyse yüzün altında gıcırdıyor. Pyth’i yenebilir miyim, göreceğim ama söz vermeyeceğim.

İşte bir hexdump:

00000000: 6933 3220 7c20 3634 207c 2039 361b 3331  i32 | 64 | 96.31
00000010: f1d9 016c 2e6c 2ef1 cde4 ab2f 2620 2020  ...l.l...../&   
00000020: 1616 2620 2020 200a cee9 6944 4022 0a62  ..&    ...iD@".b
00000030: 7344 454c 1b46 2016 3237 6b64 4835 6c52  sDEL.F .27kdH5lR
00000040: 5370 6163 651b c4d2 2dc4 3352 4465 6320  Space...-.3RDec 
00000050: 2043 6872 b320 7c20 1bce 3335 7c44        Chr. | ..35|D

Ve işte nasıl çalıştığı:

i32 | 64 | 96<esc>      " Insert some starting text
31ñ          ñ          " 31 times:
   Ù                    "   Duplicate this line
    <C-a>               "   Increment the first number on this line
         l.             "   Increment the next number
           l.           "   Increment the next number

İşte ilginç olduğu yer. İlk önce vim-hileyi açıklamama izin verin. Ekleme modundayken, bazı karakterler eklenir (tümü yazdırılabilir ASCII karakterleri, yukarıdaki çoğu eşlenmemiş karakterler 0x7fve diğerleri), ancak diğer karakterlerin yan etkisi vardır. Örneğin, 0x1b( <esc>) normal moda geçecektir. 0x01( <C-a>) en son eklenen metni vb. yeniden ekler. Bazen bu karakterleri tam anlamıyla eklemek istiyoruz. Bu nedenle değişmez bir kaçış karakteri eklemek için yazmanız gerekir <C-v><esc>. Bu, yan etkisi olan tüm karakterlerde işe yarar. Bu yüzden, esasen, <C-v>bir dizgede belirli karakterlerden kaçmanıza izin veren string değişmezlerine sahip dillerde ters eğik çizginin eşdeğeridir.

<C-v>Ekleme kipindeki diğer faydalı numara , Ondalık, Onaltılık, Sekizli veya Onaltılık Unicode'da karakterleri kod noktasıyla eklemek için kullanılabileceğidir . Bazı ASCII değerlerine karşılık gelen sayıları zaten aldığımız için, <C-v>bu karakterlerden önce bir harf koymamız ve karşılık gelen metni vim-tuş vuruşu olarak çalıştırmamız yeterlidir . Bu, regex komutuyla ve "her satırda" x "yap" komutuyla gerçekleştirilebilir. Yani biz:

Í                       " Substitute globally:
 ä«                     "   One or more digits
   /                    " With:
    &                   "   The matched number + some spaces
        <C-v><C-v>&     "   A ctrl-v character, then the matched number again
                        "   Since ctrl-v is like a backslash, we need two to enter a literal ctrl-v character
Î                       " On every line:
 éi                     "   Insert an 'i'
   D                    "   Delete this line
    @"                  "   Run it as vim keystrokes

Bu noktada, tampon bu gibi görünüyor

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

Şimdi bu cevaptaki baytların çoğunu oluşturan genel temizliğe ihtiyacımız var.

bsDEL<esc>              " Change the literal 0x7f character to "DEL"
          F <C-v>27kd   " Remove a space from the lines that have too many
H5l                     " Move to the first space character
   RSpace<esc>          " And replace it with "Space"
Ä                       " Duplicate this line
 Ò-                     " And replace it with '-'s
   Ä                    " Duplicate this line
    3R                  " And replace it with three copies of the following string:
      Dec  Chr³ | <esc> " 'Dec  Chr   | '

Î35|D                   " Remove all but the first 35 characters of each line

5

F #, 222 bayt

let c,p=String.concat" | ",printfn"%s"
Seq.replicate 3"Dec  Chr  "|>c|>p
p(String.replicate 34"-")
for i=32 to 63 do[for j in[i;i+32;i+64]->sprintf"%-5d%-5s"j (match j with 32->"Space"|127->"DEL"|_->string(char j))]|>c|>p

Çevrimiçi deneyin!


Lütfen bunun unungolfed versiyonunu sorabilir miyim? F # öğrenmek için gerçekten yeniyim ve bunu nasıl yaptığınızı tam olarak anlamayı çok isterim!
Ciaran_McCarthy

1
İlk satır iki işlevi tek karakterli adlara takar. Şimdi yaparsanız ["ab"; "cd"] |> c |> p"|" ile birleştirir Tabloyu basmak için temel fikir olan "ab | cd" gibi karakterleri basar ve basar. Gerisi oldukça basittir, mümkün olduğunca boşluktan kaçınır.
Asik

4

dc , 167 bayt

[[Space]nq]sp[[DEL]nq]sq[[ ]n]sc[Dec  Chr]dsen[   | ]dsfnlenlfnlen10P34[[-]n1-d0<a]dsax10P0[[32+dndZ2=c[  ]ndd32=pd127=qP[    ]n]dswx[ | ]nlwx[ | ]nlwx10P95-d32>b]dsbx

Çevrimiçi deneyin!

Nasıl çalışır:

[[Space]nq]sp     # p is a macro that prints "Space" and then quits from the call one level up
[[DEL]nq]sq       # q is a macro that prints "DEL" and then quits from the call one level up
[[ ]n]sc          # c is a macro that prints a space
[Dec  Chr]dsen    # Save the string "Dec  Chr" in register e, and print it.
[   | ]dsfn       # Save the string "   | " in register f, and print it.
len               # Print "Dec  Chr" again.
lfn               # Print "   | " again.
len               # Print "Dec  Chr" again.
10P               # Print a newline.
34                # Push 34 on the stack.

[[-]n1-d0<a]dsa   # a is a macro that repeatedly prints "-" and decrements the top of the stack, while the top of the stack is positive.

x10P              # Execute macro a, followed by a newline. (This prints the line of hyphens.)

0                 # Push 0 on the stack.

[                 # Starting a large macro (which will be stored in register b) for printing the table row by row.

[32+dndZ2=c[  ]ndd32=pd127=qP[    ]n]dsw

                  # w is a macro which:
                        (1) adds 32 to the top of the stack;
                        (2) prints it as a number;
                        (3) uses Z to compute the number of characters the number required to print that number;
                        (4) if it required 2 characters to print the number, calls the macro c to print an extra space
                        (5) prints the string "Space" (for ASCII code 32) or the string "DEL" (for ASCII code 127) or the appropriate character, followed by the right number of spaces

x                 # Execute macro w to print an entry in column 1.
[ | ]n            # Print a column divider.
lwx               # Execute macro w to print an entry in column 2 (ASCII code 32 higher than the previous entry).
[ | ]n            # Print a column divider.
lwx               # Execute macro w to print an entry in column 3 (ASCII code 32 higher than the previous entry).

10P               # Print a newline.
95-               # Subtract 95 to adjust to go to the beginning of the next line.

d32>b             # If the top of stack is <= 32, execute macro b again, effectively looping to print all the rows of the table.

]dsb              # End the definition of the large macro, and store it in register b.

x                 # Execute the macro that's in b (with 0 at the top of the stack initially).

4

Perl, 120 bayt

$,="| ";say+("Dec  Chr   ")x3;say"-"x32;say map{sprintf"%-5s%-6s",$_,$_-32?$_-127?chr:DEL:Space}$_,$_+32,$_+64for 32..63

-EBayrakla çalıştır :

perl -E '$,="| ";say+("Dec  Chr   ")x3;say"-"x32;say map{sprintf"%-5s%-6s",$_,$_-32?$_-127?chr:DEL:Space}$_,$_+32,$_+64for 32..63'

@GB sayesinde -2 bayt .


Biraz Perl'i anlarsam, belki "% -3s" yerine "% -5s" komutunu kullanarak 2 alanı kesebilirsiniz (bu arada, yakutta yaptığım şey budur)
GB

3

C, 179 bayt

i;f(){for(;i++<37;)printf(i<4?"Dec  Chr%s":"-",i<3?"   | ":"\n");printf("\n32   Space | ");for(i=64;i<127;i+=i>95?-63:32)printf("%-5d%-6c%s",i,i,i>95?"\n":"| ");puts("127  DEL");}

Çevrimiçi deneyin!

Yarı ungolfed:

i;
f() {
  for(;i++<37;) printf(i<4?"Dec  Chr%s":"-",i<3?"   | ":"\n");

  printf("\n32   Space | ");
  for(i=64;i<127;i+=i>95?-63:32) printf("%-5d%-6c%s",i,i,i>95?"\n":"| ");
  puts("127  DEL");
}

3

Ruby, 124 bayt

 puts [["Dec  Chr   "]*3*"| ",?-*34,(0..31).map{|d|(1..3).map{|x|"%-5s%-6s"%[y=x*32+d,y<33?"Space":y>126?"DEL":y.chr]}*"| "}]

3

V , 151 150 148 136 135 130 129 125 bayt

Sayılar için kullanmak <C-v>g<C-a>için @ nmjcman101 sayesinde 12 bayt kaydedildiline('.')

@DJMcMayhem sayesinde 2 bayt, ilave boşlukları ve yeniden düzenleme malzemelerini kullanarak ÇÓ/dve kullanarak öndeki boşlukları içeren çizgileri kaldırmak için kaydedildi

Bu cevap @ nmjcman101 V ile rekabet içinde olan cevap (kullanım :set ve=all). Ama şimdi, bunları kaldırmak A ^[ve bazı baytları kaydetmek için bir yol buldum ve hatta bir bytecount'tayız.

iSpace 
¬!~Ó./&ò
iDELí^/31   
HlgGo| 63ÙkGld/Sp
$p/`
G$d/@
$p/64
G$d/S
$pÇÓ/d
/d
hdê/32
O34é-O!| !| !Ó!/Dec  Chr   

Çevrimiçi deneyin!

HexDump:

00000000: 6953 7061 6365 200a 1bac 217e d32e 2f26  iSpace ...!~../&
00000010: f20a 6944 454c 1bed 5e2f 3331 2020 200a  ..iDEL..^/31   .
00000020: 1648 6c67 0147 6f7c 201b 3633 d96b 1647  .Hlg.Go| .63.k.G
00000030: 6c64 2f53 700a 2470 2f60 0a16 4724 642f  ld/Sp.$p/`..G$d/
00000040: 400a 2470 2f36 340a 1647 2464 2f53 0a24  @.$p/64..G$d/S.$
00000050: 70c7 d32f 640a 2f64 0a68 64ea 2f33 320a  p../d./d.hd./32.
00000060: 4f1b 3334 e92d 4f21 7c20 217c 2021 1bd3  O.34.-O!| !| !..
00000070: 212f 4465 6320 2043 6872 2020 20         !/Dec  Chr 

Açıklama (tamamlanmamış ve güncel değil)

Buradaki strateji, ASCII kod noktalarını oluşturmak için satır numaralarını kullanıyorum.

Not: ^[olup 0x1b, ^VolupC-v

İlk önce tüm karakterleri üretiyoruz.

iSpace             " insert Space
^[¬!~              " insert every character between ! and ~

Geçerli arabellek benziyor

Space
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Şimdi bu karakterlerin arasına yeni bir satır ekledik

     Ó./&ò         " insert a newline before every character (:s/./&\r/g)

İşte 32 SPACE ... 127 DELkodunuzun bir parçası yerine bir damla : Çevrimiçi deneyin! Birkaç sayıyı vurgulayabileceğiniz bu zarif şeyi kullanır ve sonra g^Aartan bir dizi yapar (Vim 8'de yeni mi?)
nmjcman101

@ nmjmcman101 Evet, 7.4'da eklendi, ama bir şey resmen 8'de eklendi. Daha da iyisi norm komutunu kullanmak daha iyi olurdu Çevrimiçi deneyin!
DJMcMayhem

Her iki durumda da, bir kez yapabileceğinizi :set ve=allA <esc>
öğrendikten

@ nmjcman101 g^ATeşekkürler, beni 12 bayt kurtardı :)
Kritixi Lithos

@DJMcMayhem Bir nedenden ötürü, norm kullanmak ve ardından sayıları artırmak işe yaramaz
Kritixi Lithos

3

V , 130 120 99 bayt

100 alt kulüp. Artık :se ve=allbunu yapmanın en iyi yolu olduğuna ikna olmadım . Bu fazladan bir ... 11 byte sadece yazmak için |! Ama sahip olduğum şey bu.

Bunu neredeyse yarışmada @ KritixiLuthos ile :se ve=allbazılarının önüne geçmek için kullanarak cevap veriyorum A <esc>. Her iki yöntemin de daha iyi olduğuna ikna olmadım, bu yüzden umarım bu iki tarafın da golf oynamasına ilham verebilir ve hangi yöntemin pastayı aldığını görebilir.

Ayrıca @DJMcMayhem'in ikisinin de pantolonumuzu tekmelemesini bekliyorum.

iSpace
¬!~Ó./&ò
iDELí^/31   
Hlg:se ve=all
12|êr|2ñ031j$x)PñHd)ÄÒ-Ä3RDec  Chr³ | /d
hdêÎ35|D

Çevrimiçi deneyin!

Meraklı için Hexdump (eğer ilgi varsa bunu sadece vim tarzı gizli karakter bloğuna çevireceğim)

00000000: 6953 7061 6365 0a1b ac21 7ed3 2e2f 26f2  iSpace...!~../&.
00000010: 0a69 4445 4c1b ed5e 2f33 3120 2020 0a16  .iDEL..^/31   ..
00000020: 486c 6701 3a73 6520 7665 3d61 6c6c 0a31  Hlg.:se ve=all.1
00000030: 327c 16ea 727c 32f1 3016 3331 6a24 7829  2|..r|2.0.31j$x)
00000040: 50f1 4864 29c4 d22d c433 5244 6563 2020  P.Hd)..-.3RDec  
00000050: 4368 72b3 207c 201b 2f64 0a68 64ea ce33  Chr. | ./d.hd..3
00000060: 357c 44                                  5|D

1
Küresel komuta bir ama kısaltılmış olabilir. Birincisi, ddsadece yaparsanız, örtük d. Ayrıca regex'te <M-s>daima eşdeğer olanı da yapabilirsiniz \s. Yani kadar kısaltın olabilir: ç^ó*/d. Eğer tersi için küresel komutu dışarı geçiş Ama eğer :g!her satır için arama yapabilir değil bir boşluk olmayan karakter eşleştirme. ÇÓ/deşittir:g!/\S/normal dd
DJMcMayhem

3

AWK , 200 bayt

BEGIN{b="-----------";a="Dec  Chr   ";print a"|",a"|",a"\n-"b b b;for(a=31;a++<63;){printf"%-5d%-6s| %-5d%-6c| %-5d%-5s\n",a,a<33?"Space":sprintf("%c",a),a+32,a+32,a+64,a<63?sprintf("%c",a+64):"DEL"}}

biçimlendirilmiş:

BEGIN {
  b="-----------"
  a="Dec  Chr   "
  print a"|",a"|",a"\n-"b b b
  for(a=31;a++<63;) {
    printf "%-5d%-6s| %-5d%-6c| %-5d%-5s\n",
      a,    a<33 ? "Space" : sprintf("%c", a),
      a+32, a+32,
      a+64, a<63 ? sprintf("%c", a+64) : "DEL"
  }
}

Çevrimiçi deneyin!


2

C 188 Bayt

f(){i=31;printf("Dec Chr | Dec Chr | Dec Chr");printf("\n--------------------------");for(;i<63;i++)printf("\n%d%4c  | %d%4c  | %d%4c",(i+1),(i+1),(i+33),(i+33),(i+65),(i+65));puts("DEL");

Normalde şöyle görünür:

f()
{
    int  i=31;
    printf("Dec Chr | Dec Chr | Dec Chr");
    printf("\n--------------------------"); 
    for(;i<63;i++)  
      printf("\n%d%4c  | %d%4c  | %d%4c", (i+1),(i+1),(i+33),(i+33),  (i+65),(i+65));
    puts("DEL");
}

2

C (249 bayt)

Netlik için Newlines eklendi.

#define L(s,e)for(i=s;i<e;++i)
#define P printf
main(i){L(0,3)P("Dec  Chr  %s",i<2?" | ":"\n");
L(0,34)P("-");P("\n");L(32,64){P("%-5d", i);
i==32?P("Space"):P("%-5c",i);
P(" | %-5d%-5c | %-5d ",i+32,i+32,i+64);
i==63?P("DEL"):P("%-5c",i+64);P("\n");}}

Burada gösterildiği Pgibi printf(, bazı baytları kesinlikle yaparak kaydedebilirsiniz : repl.it/JBRD
Zacharı

Ve dördüncü çizginizdeki boşluğu kaldırarak.
Zacharı

2

Java, 434 422 321 bayt

class A{public static void main(String[]a){
    int k=1,r,s=32;
    for(;k<4;k++)
        o("Dec   Chr  ",k);
    for(;k<37;k++)                                                                              
        o("-",k==36?3:4);
    for(k=r=s;!(k==64&&r==-63);r=k>95?-63:s,k+=r)
        o(k+"   "+((k>99)?"":" ")+(k==s?"Space":k==127?"DEL  ":((char)k+"    ")),k/s);
    }
    static void o(String s,int j){
        System.out.print(s+(j==4?"":j==3?"\n":"|"));
    }
}

Java muhtemelen bunun için en iyi dil değildir, çünkü sınıfların ek yükü ve ana yöntem vardır ...

Ana yöntemi statik bir bildirim kullanarak ortadan kaldırabilir, bayt sayımını daha da azaltabilirsiniz:

class A{
    static{...}

ancak bu bir hatayla sonuçlanır (aksi halde başarılı bir şekilde çalıştıktan sonra):

Exception in thread "main" java.lang.NoSuchMethodException: A.main([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1786)
    ...

Bayt sayısı, int yeni satırları veya girintileri içerir.


Sana sonra boşluk gerek olduğunu sanmıyorum void main(){ve aralarında ne while(s.length()<5)ve s+=" ". (Bunu bayt sayınıza saymazsanız). Ve değiştirerek birkaç byte kaydedebilirsiniz d="Dec",c="Chr"için d=p("Dec"),c=p("Chr")ve aramalarınızı değişen yapım p(d)ve p(c)için dve c.
Zacharı

434 gereksiz tüm boşlukları kaldırıyordu. Öneriniz 425'e indirdi. Teşekkürler!
xirt

Gereksiz boşluksuz 434 kişi hakkında cevabın içine bir not eklemek isteyebilirim
Zacharı

Bitti. Not: program o zamandan beri önemli ölçüde değişti (daha da azaldı), bu nedenle yukarıdaki yorumlar artık geçerli olmayabilir
xirt

2

Tcl , 233 bayt

lassign {"Dec  Chr" "   | " 31} h S i
set H $h$S$h$S$h\n[string repe - 34]
proc p x {format %-5d%c $x $x}
time {set H "$H
[p [incr i]]  $S[p [expr $i+32]]  $S[p [expr $i+64]]"} 32
puts [regsub {\ {8}} [regsub \177 $H DEL] "   Space"]

Çevrimiçi deneyin!


Bunu koştum ve 32 örneğin (yerine bir '' Space) ve 33!( arasında 33 ve arasında boşluk yok ) alıyorum !.
NoOneIsHere

@SeeOneRhino: Kodlara kesinlikle dikkat etmiyorsunuz. Buraya yapıştırdıktan sonra bağlantının kodunu değiştirdim, daha fazla golf oynamaya çalıştım, ancak daha başarılı olamadım. Ben sadece şimdi sayfaya gittim ve başarısız girişimi yorumladım ve kodu buradan tekrar yaptım, şimdi oraya giderseniz, kodun tamamen eşit olduğunu göreceksiniz ve bir şeylerin doğru yazdırıldığını göreceksiniz!
sergiol,

Üzgünüm, bağlantıdaki düzenlemenizi görmedim. Kodun burada gönderdiklerinizin aynısı olduğunu varsaydım.
NoOneIsHere

Sorun değil, benim hatamdı
sergiol

@SeeOneRhino: Başardım! Kendimi çok kızdım!
sergiol,

2

R , 235 228 221 212 bayt

y=apply(rbind(rep("Dec  Chr  ",3),1,matrix(sapply(1:96,function(i)paste(i+31,rep(" ",i<69),"if"(i<2,"Space","if"(i>95,"DEL",intToUtf8(c(i+31,rep(32,4))))))),nrow=32)),1,paste,collapse=" | ")
y[2]=strrep("-",34)
y

Çevrimiçi deneyin!

Ben 200 bayt altına almak gerçekten zor çalıştı ama bunlar pasteve collapsebeni öldürüyor. Satır listesini döndürür.


1

JavaScript (ES6), 258 bayt

a="Dec  Chr   | ".repeat(2)+"Dec  Chr\n"+"-".repeat(34);for(b=32;64>b;b++)a+="\n"+b+"   "+(32==b?"Space  ":String.fromCharCode(b)+"      ")+"| "+(b+32)+"   "+String.fromCharCode(b+32)+"     | "+(b+64)+(35<b?"  ":"   ")+(63==b?"DEL":String.fromCharCode(b+64))

console.log(a)

1

PowerShell , 159 bayt

,'Dec  Chr'*3-join'   | '
'-'*34
32..63|%{($_,($_+32),($_+64)|%{"$_".PadRight(5)+"$(([char]$_,('Space','DEL')[$_-ne32])[$_-in32,127])".padRight(5)})-join' | '}

Çevrimiçi deneyin!

İlk iki satır sadece değişmez karakter dizileri yaratıyor ve onları boru hattında bırakıyor. İlk olarak ,bir dizi oluşturmak için virgül operatörünü , daha sonra -joinbaşlıkları oluşturmak için bu diziyi birlikte kullanın. İkincisi sadece düz bir dize çarpımıdır.

Üçüncü hat üzerinde döngüler 32..63ve her bir tekrar üç değeri gönderir $_, ($_+32)ve ($_+64)bir iç döngü içine. İç döngü bir PadRightdeğer yapar ( 5karakterleri doldurmak için uygun boşluklar ekler ). Bu daha sonra +iç içe geçmiş bir sözde üçlünün sonucu ile birleştirilen dizedir ( )[ ]. Sözde üçlü char, ya bu sayının gösterimini seçer , ya Spaceda DELuygun değerse. Yine PadRightuygun karakterler biziz .

Bu üç şeritleri (örneğin, 32 Space, 64 @, 96 `) Pars içinde kapsüllenir ve -jointek bir dizi halinde kolon işaretleri ile ed. Bu 32 dizenin her biri daha sonra boru hattında bırakılır. Yürütmenin sonunda, örtük Write-Outputbir boru hattındaki öğeler arasına yeni bir satır ekler;


1

Perl, 165 155 bayt

$s='Dec  Chr   ';$_=join"\n",("$s| $s| $s","-"x34,map{join"| ",map{sprintf'%1$-5d%1$-6c',$_}($_,$_+32,$_+64)}32..63);s/ {8}/   Space/;s/\x7f.*/DEL\n/;print

1

Python 2,1564 218 bayt

İlk golfüm, bariz hatalar için özür dilerim

print("Dec  Chr   | "*3)[:-2]+"\n"+"-"*34+"\n32   Space | 64   @     | 96   `"
for n in range(33,63):print"| ".join([str(n+x).ljust(5)+chr(n+x).ljust(6)for x in [0,32,64]])
print"63   ?     | 95   _     | 127  DEL"

Çevrimiçi deneyin!

Merak ediyorsanız, ilk sürüm bir base64 kodlu dize oldu.


@FlipTack Gerçek bir çözüme değiştirildi
sagiksp

De gerekli olmayan boşluk ljust(6) for.
Yytsi,

Adresinde başka x in [. IIRC içindeki köşeli parantezleri joinsilebilir.
Yytsi,

1

05AB1E , 82 76 bayt

žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)øvyð2×ý})3äøvy… | ©ý}®”†…  Chr  ÿ”3ר¨'-34×.Á.Á»

Çevrimiçi deneyin!

Hala golf, bu çok geliştirilebilir.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø dolgulu sayıları metin eşdeğeri ile iter:

[['32 ', 'Space'], ['33 ', '!    '], ['34 ', '"    '], ['35 ', '#    '], ['36 ', '$    '], ['37 ', '%    '], ['38 ', '&    '], ['39 ', "'    "], ['40 ', '(    '], ['41 ', ')    '], ['42 ', '*    '], ['43 ', '+    '], ['44 ', ',    '], ['45 ', '-    '], ['46 ', '.    '], ['47 ', '/    '], ['48 ', '0    '], ['49 ', '1    '], ['50 ', '2    '], ['51 ', '3    '], ['52 ', '4    '], ['53 ', '5    '], ['54 ', '6    '], ['55 ', '7    '], ['56 ', '8    '], ['57 ', '9    '], ['58 ', ':    '], ['59 ', ';    '], ['60 ', '<    '], ['61 ', '=    '], ['62 ', '>    '], ['63 ', '?    '], ['64 ', '@    '], ['65 ', 'A    '], ['66 ', 'B    '], ['67 ', 'C    '], ['68 ', 'D    '], ['69 ', 'E    '], ['70 ', 'F    '], ['71 ', 'G    '], ['72 ', 'H    '], ['73 ', 'I    '], ['74 ', 'J    '], ['75 ', 'K    '], ['76 ', 'L    '], ['77 ', 'M    '], ['78 ', 'N    '], ['79 ', 'O    '], ['80 ', 'P    '], ['81 ', 'Q    '], ['82 ', 'R    '], ['83 ', 'S    '], ['84 ', 'T    '], ['85 ', 'U    '], ['86 ', 'V    '], ['87 ', 'W    '], ['88 ', 'X    '], ['89 ', 'Y    '], ['90 ', 'Z    '], ['91 ', '[    '], ['92 ', '\\    '], ['93 ', ']    '], ['94 ', '^    '], ['95 ', '_    '], ['96 ', '`    '], ['97 ', 'a    '], ['98 ', 'b    '], ['99 ', 'c    '], ['100', 'd    '], ['101', 'e    '], ['102', 'f    '], ['103', 'g    '], ['104', 'h    '], ['105', 'i    '], ['106', 'j    '], ['107', 'k    '], ['108', 'l    '], ['109', 'm    '], ['110', 'n    '], ['111', 'o    '], ['112', 'p    '], ['113', 'q    '], ['114', 'r    '], ['115', 's    '], ['116', 't    '], ['117', 'u    '], ['118', 'v    '], ['119', 'w    '], ['120', 'x    '], ['121', 'y    '], ['122', 'z    '], ['123', '{    '], ['124', '|    '], ['125', '}    '], ['126', '~    '], ['127', 'DEL  ']]

vyð2×ý})3äøvy… | ©ý} Onları masaya birleştirir:

['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  ']

®”†… Chr ÿ”3ר¨'-34×.Á.Á» tablonun başlık kısmına bakar:

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  

1

PHP, 163 149 147 bayt

<?=($p=str_pad)(D,31,"ec Chr   | D"),$p("
",32,"-");whhile($i<96)printf("%s%-4d%-6s",$i%3?"| ":"
",$o=$i%3*32+32+$i/3,$i++?$i<96?chr($o):DEL:Space);

Yıkmak

                        # print header
<?=($p=str_pad)(D,31,"ec Chr   | D"),$p("\n",32,"-");
while($i<96)            # loop $i from 0 to 96
    printf("%s%-4d%-6s",    # print formatted:
                            # string, 4 space decimal leftbound, 6 space string leftbound
        $i%3?"| ":"\n",                 # linebreak for 1st column, pipe+space else
        $o=$i%3*32+32+$i/3,             # ($i mapped to) ASCII value
        $i++?$i<96?chr($o):DEL:Space    # character
    );

Kullanımı %-N, sağ sayıları ve karakterleri koruyacak bayt değerindedir.


Aynı bayt sayısıyla bence daha iyi görünüyor Çevrimiçi deneyin!
Jörg Hülsermann


0

T-SQL, 242 bayt

DECLARE @ INT=32PRINT'Dec  Chr   | Dec  Chr   | Dec  Chr
'+REPLICATE('-',34)L:PRINT CONCAT(@,'   ',IIF(@=32,'Space | ',CHAR(@)+'     | '),@+32,'   ',CHAR(@+32),'     | ',@+64,SPACE(5-LEN(@+64)),IIF(@=63,'DEL',CHAR(@+64)))SET @+=1IF @<64GOTO L

biçimlendirilmiş:

DECLARE @ INT=32
PRINT'Dec  Chr   | Dec  Chr   | Dec  Chr
' + REPLICATE('-',34)
L:
    PRINT CONCAT(@,'   ',IIF(@=32,'Space | ',CHAR(@)+'     | ')
                ,@+32,'   ',CHAR(@+32),'     | ',
                 @+64,SPACE(5-LEN(@+64)),IIF(@=63,'DEL',CHAR(@+64)))
    SET @+=1
IF @<64 GOTO L

Çeşitli ortak dizgileri başka değişkenlerle değiştirmek de dahil olmak üzere birkaç varyasyon denedim, ancak bu bulduğum en kısa sürümdü.


0

Python 3 , 154 bayt

for l in[['Dec  Chr  ']*3,['-'*35]]+[[f"{x:<5}{['Space',chr(x),'DEL'][(x>32)+(x>126)]:5}"for x in(c,c+32,c+64)]for c in range(32,64)]:print(' | '.join(l))

Çevrimiçi deneyin!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.