Recrie a tabela ASCII como uma tabela ASCII

26

Frequentemente, enquanto pratico golfe com código, quero saber qual é o valor ASCII de um determinado caractere. Um dos meus recursos favoritos para pesquisar rapidamente todos os caracteres ASCII imprimíveis é o ASCIItable.com . Isso tem uma imagem muito boa que não apenas mostra os caracteres ASCII imprimíveis e seus valores, mas também os caracteres não imprimíveis e estendidos e os valores em hexadecimal, octal e HTML:

insira a descrição da imagem aqui

O desafio de hoje é recriar essa tabela ASCII como uma tabela ASCII em vez de uma imagem. Para simplificar, não usaremos caracteres de controle (caracteres abaixo de 32) e apenas mostraremos o valor decimal e o caractere. Em outras palavras, seu desafio é escrever um programa completo ou uma função que imprima ou retorne o seguinte texto:

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

Espaços à direita em cada linha e uma nova linha à direita são permitidos. Como esse é um , seu envio pode não receber nenhuma entrada ou acessar recursos externos (como um arquivo ou a web), e seu objetivo é compactar o código para gerar o máximo possível de texto.

As brechas padrão se aplicam e a resposta mais curta em bytes vence. Feliz golfe!

DJMcMayhem
fonte
3
Tenho a imagem exata da tabela ASCII colada na parede ... Enfim, uma lista de linhas pode ser retornada?
FlipTack
2
@ fliptack Claro que você pode. Por que eu não permitia algo perfeitamente razoável assim?
DJMcMayhem
10
Eu não diria que isso é uma bobagem - a outra requer valores hexadecimais, nomes de não imprimíveis e é um formato de tabela diferente. Isso segue o ASCII visível e permite o código de golfista, não solicitando os códigos de três letras de todos os não imprimíveis.
FlipTack 7/01
@FlipTack Ele ainda tem espaço e DEL
simon
2
@ gurka sim, mas o outro tem todos os caracteres de controle.
FlipTack

Respostas:

11

Python 2, 185 183 175 159 bytes

Economizou 8 bytes graças ao FlipTack!

Ainda bastante novo para jogar golfe em Python.

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]

Usa uma compreensão de lista aninhada para gerar o corpo da tabela.

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]

Tentativa antiga, 185 183 175 bytes

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]
busukxuan
fonte
Eu vejo um espaço em `for l in (i, 32 + i, 64 + i)])`, pode ser removido para salvar um byte.
maxb
6

Anterior, 176 172 bytes

<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

Experimente online!

James Holderness
fonte
6

Pitão, 89 85 79 77 bytes

PP*"Dec  Chr   | "3*\-34V32PPsm++.[`=+N32;5.[?qN32"Space"?qN127"DEL"CN;6"| "3

Experimente online!

insert_name_here
fonte
5

JavaScript (ES6), 179 173 bytes

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

Arnauld
fonte
Boa resposta! Você pode salvar mais um byte, substituindo `${x='Dec Chr '}| ${x}| ${x}no final da linha 2 por(x='Dec Chr ')+(' |'+x)*2+`
Luke
@ L.Serné Não conheço nenhuma versão do ECMAScript que repita uma string com o *operador. Ou de alguma forma estou entendendo mal sua sugestão?
Arnauld
Opa, meu mal. É o que você obtém ao tentar criar uma solução em python e depois em javascript.
Lucas
5

V , 98, 96 , 94 bytes

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

Experimente online!

Apenas mal rangendo em menos de uma centena. Vou ver se consigo vencer Pyth, mas não prometo.

Aqui está um 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

E aqui está como isso funciona:

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

Aqui é onde fica interessante. Primeiro, deixe-me explicar um truque de vim. No modo de inserção, determinados caracteres são inseridos (todos os caracteres ASCII imprimíveis, a maioria dos caracteres não mapeados acima 0x7fe alguns outros), mas outros caracteres têm um efeito colateral. Por exemplo, 0x1b( <esc>) escapará para o modo normal. 0x01( <C-a>) reinserirá o último texto inserido, etc. Às vezes, queremos inserir esses caracteres literalmente. Portanto, para inserir um caractere de escape literal, você deve digitar <C-v><esc>. Isso funciona para todos os caracteres que têm um efeito colateral. Então, basicamente, <C-v>é o equivalente a uma barra invertida em idiomas com literais de string que permitem que você escape de certos caracteres em uma string.

O outro truque útil <C-v>no modo de inserção é que ele pode ser usado para inserir caracteres por ponto de código , em Unicode Decimal, Hexadecimal, Octal ou Hexadecimal. Como já temos os números que correspondem a determinados valores ASCII, basta colocar um <C-v>antes desses caracteres e executar o texto correspondente como pressionamentos de tecla vim. Isso pode ser alcançado com um comando regex e um comando "Faça 'x' em todas as linhas". Então nós:

Í                       " 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

Nesse ponto, o buffer fica assim

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       

Agora, precisamos apenas de uma limpeza geral, responsável pela maioria dos bytes nesta resposta

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
DJMcMayhem
fonte
5

F #, 222 bytes

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

Experimente online!

Asik
fonte
Posso pedir uma versão não destruída disso, por favor? Eu sou realmente novo em aprender F # e adoraria entender corretamente como você fez isso!
Ciaran_McCarthy
1
A primeira linha aliasa duas funções para nomes de caracteres únicos. Agora, se você fizer ["ab"; "cd"] |> c |> pisso, concatena com "|" caracteres e os imprime, como "ab | cd", que é a idéia básica para imprimir a tabela. O resto é bastante direto, evitando espaços em branco sempre que possível.
Asik
4

dc , 167 bytes

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

Experimente online!

Como funciona:

[[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).
Mitchell Spector
fonte
4

Perl, 120 bytes

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

Corra com a -Ebandeira:

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

-2 bytes graças a @GB .

dada
fonte
Se eu entender um pouco Perl, talvez você pode cortar 2 lugares usando "% -5S" em vez de "% 3S" (aliás, é o que eu faço no rubi)
GB
3

C, 179 bytes

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

Experimente online!

Semi-sem golfe:

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");
}
simon
fonte
3

Ruby, 124 bytes

 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]}*"| "}]
GB
fonte
3

V , 151 150 148 136 135 130 129 125 bytes

12 bytes salvos graças a @ nmjcman101 por usar <C-v>g<C-a>os números em vez deline('.')

Economize 2 bytes graças ao @DJMcMayhem por remover linhas com espaços à esquerda usando ÇÓ/de usando para remover espaços extras e reorganizar coisas

Esta resposta está em concorrência com a resposta V de @ nmjcman101 (que usa :set ve=all). Mas agora, encontrei uma maneira de remover esses A ^[s e salvei alguns bytes e estamos em um bytecount

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

Experimente online!

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 

Explicação (incompleta e desatualizada)

A estratégia aqui é que eu estou usando os números de linha para gerar os pontos de código ASCII.

Nota: ^[é 0x1b, ^VéC-v

Primeiro, geramos todos os caracteres.

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

O buffer atual se parece com

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

Agora, inserimos uma nova linha entre esses caracteres

     Ó./&ò         " insert a newline before every character (:s/./&\r/g)
Kritixi Lithos
fonte
Aqui está uma gota de substituição para a 32 SPACE ... 127 DELparte do seu código: Experimente online! Ele usa aquela coisa pura, onde você pode destacar um monte de números, e, em seguida, g^Afaz com que seja uma sequência crescente (novo no Vim 8?)
nmjcman101
@ nmjmcman101 Sim, foi adicionado na versão 7.4.som, mas oficialmente adicionado na 8. Melhor ainda seria usar o comando norm Experimente online!
DJMcMayhem
De qualquer maneira, uma vez que você que você pode fazer um :set ve=alle depois o cursor vai mudar para lugares que não há nenhum texto, permitindo que você inserir os tubos mais fácil e copiar / colar nos lugares que você precisa, sem aspersão A <esc>em todos os lugares
nmjcman101
@ nmjcman101 Re g^Agraças, ele me salvou 12 bytes :)
Kritixi Lithos
@DJMcMayhem Por alguma razão, usando norma e, em seguida, incrementando os números não funciona
Kritixi Lithos
3

V , 130 120 99 bytes

Clube Sub 100. Não estou mais convencido de que :se ve=allé a melhor maneira de fazer isso. É um extra ... 11 bytes apenas para escrever os |'s! Mas é isso que eu tenho.

Estou postando isso quase em concorrência com a resposta @KritixiLuthos usando :se ve=allpara evitar algumas A <esc>. Não estou convencido de que qualquer um dos métodos seja melhor ainda, por isso espero que isso possa inspirar alguns jogadores de golfe em ambas as partes e ver qual método leva o bolo.

Eu também estou meio que esperando @DJMcMayhem para chutar nossas calças

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

Experimente online!

Hexdump para os curiosos (se houver interesse, vou mudar isso para um bloco de caracteres ocultos no estilo vim)

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
nmjcman101
fonte
1
O comando global pode ser encurtado por bastante mas. Por um lado, o ddestá implícito se você apenas faz d. Você também pode fazer o <M-s>que é sempre equivalente a \sem regex. Então, você poderia reduzi-lo a: ç^ó*/d. Mas se você alternar o comando global para o inverso, :g!poderá procurar todas as linhas que não correspondam a um caractere que não seja um espaço em branco. ÇÓ/dque é equivalente a:g!/\S/normal dd
DJMcMayhem
3

AWK , 200 bytes

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

Formatado:

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

Experimente online!

Steve
fonte
2

C 188 bytes

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

Normalmente se parece com isso:

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");
}
Abel Tom
fonte
2

C (249 bytes)

Novas linhas adicionadas para maior clareza.

#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");}}
musaritmia
fonte
Você pode definitivamente salvar alguns bytes criando Pbe printf(, como mostrado aqui: repl.it/JBRD
Zacharý
E removendo o espaço na sua quarta linha.
Zachary
2

Java, 434 422 321 bytes

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":"|"));
    }
}

Provavelmente, Java não é a melhor linguagem para isso, pois há sobrecarga de classes e método principal ...

Você pode eliminar o método principal usando uma declaração estática, reduzindo ainda mais a contagem de bytes:

class A{
    static{...}

mas isso resulta em um erro (após a execução com êxito):

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

A contagem de bytes int inclui novas linhas ou recuo.

xirt
fonte
Eu não acho que você precise de um espaço depois void main(){, e nem entre while(s.length()<5)e s+=" ". (A menos que você não tenha contado isso na contagem de bytes). E você pode economizar alguns bytes mudando d="Dec",c="Chr"para d=p("Dec"),c=p("Chr")e alterando suas chamadas p(d)e p(c)para de c.
Zachary
O 434 estava removendo todo o espaço em branco desnecessário. Sua sugestão reduz para 425. Obrigado!
xirt
Pode querer adicionar uma nota sobre o 434 sendo desnecessário espaço em branco na resposta
Zacharý
Feito. Nota: programa mudou significativamente desde (reduziu ainda mais) para comentários acima não pode ser relevante
xirt
2

Tcl , 233 bytes

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"]

Experimente online!

sergiol
fonte
Eu executei isso e recebo, 32 por exemplo (a '' em vez de Space) e 33!(sem espaço entre 33 e !).
NoOneIsHere
@SeeOneRhino: Você claramente não está prestando atenção ao código. Modifiquei o código do link depois de colar aqui, na tentativa de jogar ainda mais, mas ainda não obtive sucesso. Eu apenas fui para a página agora e comentei minha tentativa fracassada e reparei o código a partir daqui; Se você for lá agora, verá um código exatamente igual e verá que ele imprime as coisas corretamente!
sergiol
Lamento, não vi sua edição no link. Supus que o código fosse o mesmo que você postou aqui.
NoOneIsHere
Não tem problema, a culpa foi minha
sergiol
@SeeOneRhino: eu consegui! Eu me superei!
sergiol
2

R , 235 228 221 212 bytes

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

Experimente online!

Eu tentei muito para obter menos de 200 bytes, mas estes pastee collapseestão me matando. Retorna uma lista de linhas.

JayCe
fonte
1

JavaScript (ES6), 258 bytes

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)
Julian Lachniet
fonte
1

PowerShell , 159 bytes

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

Experimente online!

As duas primeiras linhas estão apenas criando cadeias literais e deixando-as no pipeline. O primeiro usa o operador de vírgula ,para criar uma matriz e, em seguida, -joinessa matriz juntos para criar os cabeçalhos. O segundo é apenas uma multiplicação de cordas retas.

A terceira linha loop sobre 32..63e cada iteração envia três valores $_, ($_+32)e ($_+64)em um loop interno. O loop interno executa um PadRightvalor (adiciona os espaços apropriados para preencher os 5caracteres). Essa é a sequência concatenada +com o resultado de um pseudo-ternário aninhado ( )[ ]. O pseudo-ternário seleciona a charrepresentação desse número, ou então, Spaceou DELse é o valor apropriado. Mais uma vez, nósPadRight os caracteres apropriados.

Estas três cordas (por exemplo, 32 Space, 64 @, 96 `) são encapsulados em parênteses e -joined com os marcadores de coluna em uma única cadeia. Cada uma dessas 32 strings é deixada no pipeline. No final da execução, um implícito Write-Outputinsere uma nova linha entre os elementos no pipeline, para obtê-lo gratuitamente.

AdmBorkBork
fonte
1

Perl, 165 155 bytes

$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
nwk
fonte
1

Python 2, 1564 218 bytes

Meu primeiro golfe, desculpe por erros óbvios

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"

Experimente online!

Caso você esteja se perguntando, a primeira versão foi uma string codificada em base64.

sagiksp
fonte
@FlipTack Alterou para uma solução real
sagiksp
Espaço em branco não necessário em ljust(6) for.
Yytsi 13/01/19
Outro em x in [. E IIRC os colchetes dentro joinpodem ser excluídos.
Yytsi 14/01
1

05AB1E , 82 76 bytes

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

Experimente online!

Ainda jogando golfe, isso pode ser melhorado bastante.


žQSDÇƵQ¸«.Bs𔇲”:"DEL"¸«.B)ø empurra números preenchidos com texto equivalente:

[['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… | ©ý} junta-os à mesa:

['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×.Á.Á» cuida da parte do cabeçalho da tabela:

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  
Urna de polvo mágico
fonte
1

PHP, 163 149 147 bytes

<?=($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);

demolir

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

O uso %-Nvale o byte que os números e caracteres à direita salvariam.

Titus
fonte
Parece melhor na minha opinião com a mesma contagem de bytes Experimente online!
Jörg Hülsermann
1

Stax , 53 bytes

éV ►Γ┐º╬¼1N_◄╒0└♀α→┴♂┐Y♣╟n»┤3°k⌡{═╥I⌂╜<─W}íè7Y♠Σ▲ÿb#√

Execute e depure

recursivo
fonte
0

T-SQL, 242 bytes

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

Formatado:

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

Tentei algumas variações, incluindo a substituição de várias seqüências comuns por outras variáveis, mas essa foi a versão mais curta que encontrei.

BradC
fonte
0

Python 3 , 154 bytes

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

Experimente online!

ovs
fonte
0

Anexo , 144 bytes

(p:=PadRight)["",37,"Dec  Chr   | "]'(34*"-")'(Join&"| "=>Tr@ChopInto&3<|{p&11<|p&5@Repr@_+(<~32->$Space,127->$DEL~>@_or Char!_)}=>32:127)|Print

Experimente online!

Conor O'Brien
fonte