Eu odeio o inchaço do código!
Por isso, decidi substituir meu sistema Windows 7 por uma versão com golf. No entanto, eu sei que não é fácil, então vamos construir um protótipo primeiro. Ele pega uma lista de janelas do usuário e as mostra usando uma exibição pseudo-gráfica na saída padrão.
Por exemplo: entrada do usuário:
0,0,15,10 15,10,20,15 10,13,15,15 9,1,16,3 17,5,20,7 11,2,17,4 15,4,19,6 13,3,18,5
O Code Golf® Window Manager ™ produz:
┌──────────────┐ │ :::::::: ┌─────┴┐ │ :::::::: │: ┌────┴┐ │ :::::::: └─┤: ┌───┴┐ │ :::::::::: └─┤ :::: ├┐ │ :::::::::::: └─┬──┘├┐ │ :::::::::::::: ├─┬─┘│ │ :::::::::::::: │ └──┘ : :::::::::::::: │ : :::::::::::::: │ └──────────────┼────┐ │ :::: │ │ :::: │ ┌────┤ :::: │ │ :::: │ :::: │ └────┴────┘
Entrada:
- Retirado da entrada padrão (ou, se o seu sistema não possuir
stdin
, qualquer método que possa fornecer várias linhas de entrada) - Cada linha contém 4 números, delimitados por vírgulas - coordenadas de uma janela
- Dois primeiros números: canto superior esquerdo; dois últimos números: canto inferior direito
- Usando
x,y
notação
Resultado:
- Escreva na saída padrão (ou, se o seu sistema não possuir
stdout
, qualquer coisa que exiba texto monoespaçado) - Use caracteres de desenho de caixa únicos da Página de Código 437 para desenhar limites da janela
- O Windows especificado posteriormente na entrada obscurece os especificados anteriormente
- Preencha as janelas com o caractere de dois pontos:
:
- Espaços à esquerda e à direita são bons, desde que não quebrem o alinhamento das janelas
Notas:
- Resolução máxima que eu quero apoiar: 76 (horizontal) por 57 (vertical)
- Não há necessidade de suportar entrada incorreta
- Número máximo de janelas: 255 (se você precisar de um limite)
- Meu
cmd
shell do Windows 7 exibe os caracteres da página de código 437 por padrão; se alguém tiver uma maneira de fazer isso no linux (usandoxterm
ou o que for), descreva-o aqui
Para referência, os códigos de caracteres são:
┌da ─c4 ┬c2 ┐bf
│b3 :3a │b3 │b3
├c3 ─c4 ┼c5 ┤b4
└c0 ─c4 ┴c1 ┘d9
Total: 12 caracteres diferentes.
javascript:$('pre').css('line-height','1em')
Respostas:
Python, 397 caracteres
Mude
C="...
paraC=u"...
e ele será impresso em unicode! Pode ser complicado fazer com que o arquivo seja salvo corretamente porque os caracteres da página de código 437 não são escapados (a primeira linha de comentário 'codificação' é necessária).A abordagem é construir um mapa incrementalmente usando operadores bit a bit. Versão menos golfe com comentários:
fonte
JavaScript ES6 (FF ≥ 31.0), 404 caracteres
Sem ES6:
w('0,0,15,10\n15,10,20,15\n10,13,15,15\n9,1,16,3\n17,5,20,7\n11,2,17,4\n15,4,19,6\n13,3,18,5');
gera corretamente o exemplo do OP.As bordas das janelas são construídas usando operadores bit a bit (Para cima = 8, Para baixo = 4, Para a esquerda = 2, Para a direita = 1).
fonte
function w(s){...}
torna - sew=(s)=>{...}
(e da mesma forma para todos os outros literais de função). E a tabela de pesquisa de caracteres provavelmente pode ser substituída por uma sequência com os mesmos caracteres.Array.fill()
inicializar para o "desktop".[].fill([].fill(0,0,76),0,57)
, pena que não funciona. Posso escrever mais curto quenew Array(57).fill(new Array(76).fill(0))
?new
operadores:Array(57).fill(Array(76).fill(0))
.Python, 672 caracteres
A versão menos legível:
Iniciado a partir da versão abaixo:
fonte