... Não que você faria, sim? A tarefa é simples, imprima o seguinte texto:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
_________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|
Este é o teclado do futuro, porque no futuro os espaços são irrelevantes, assim como as barras de espaço.
Para tornar as coisas um pouco mais fáceis para você:
0123456789ABC...XYZ-=[]\;',./
- Esses caracteres estão nas teclas de comprimento 6 (incluindo preenchimento).TAB / BS / ENTER
- Essas teclas têm comprimento 10 (incluindo preenchimento).CAPS
- Essa chave é do comprimento 11 (incluindo preenchimento).SHIFT
- Essa chave é do comprimento 13 (incluindo preenchimento, nos dois lados).
Cada chave individual é mais ou menos assim:
____
||* ||
||__||
|/__\|
No entanto, você deve observar que duas chaves consecutivas não são:
____ ____
||* ||||* ||
||__||||__||
|/__\||/__\|
Mas eles são "unidos":
____ ____
||* |||* ||
||__|||__||
|/__\|/__\|
Esse desafio não deve ser muito ruim, boa sorte para você; não perca o abuso da repetição! Mas também não subestime as teclas "especiais";).
Ganhando?
O código mais curto vence porque você conhece o código-golfe .
code-golf
ascii-art
kolmogorov-complexity
Urna de polvo mágico
fonte
fonte
Respostas:
V ,
189, 179, 175, 164, 161, 157, 155, 149, 145, 141, 135 bytesExperimente online!
Esta resposta é agora tweetable!
Assista correr! Esta é uma versão ligeiramente modificada que é atualizada à medida que é executada, para que você possa ver como funciona. Esta é uma versão desatualizada, pois ainda não consegui regravá-la ainda, mas a abordagem geral é idêntica.
Esta é provavelmente a resposta V mais longa já escrita. Certamente não ajudou que o intérprete de V seja extremamente lento. Levei cerca de uma hora para escrever a primeira revisão, mas voltei repetidamente a ela para raspar alguns bytes de cada vez. Como o teclado completo tem 1215 bytes, atualmente esta resposta é 91% menor que a saída, então estou muito feliz com os resultados.
Como ele contém alguns caracteres não imprimíveis e muitos dados não-ASCII brutos, aqui está um hexdump:
Como diabos isso funciona?
Tudo bem, essa explicação vai ser doozy. Esta pronto? Primeiro, precisamos digitar as letras para que possamos construir as chaves ao seu redor. Isto é
Que insere:
Isso é bastante simples, mas existem alguns truques que usamos para salvar personagens. Por exemplo,
¬19
insere "123456789",³
insere três espaços e duplicamos o turno para que não seja necessário inseri-lo várias vezes.Observe como as letras são minúsculas aqui. Isto é para que possamos distinguir facilmente entre as teclas maiúsculas como "ENTER" e as letras únicas. Escrevê-los dessa maneira facilita dizer quais caracteres colocar uma barra antes e adiciona apenas um byte para convertê-los em minúsculas posteriormente. Portanto, fazemos um comando substituto para convertê-los em maiúsculas e adicionamos um espaço após cada um deles:
Agora, pegamos cada sequência de teclas (qualquer execução que não seja de espaço em branco) e colocamos três barras antes e depois delas:
Nesse ponto, o buffer fica assim:
Ter três barras na primeira e na última coluna é realmente muito conveniente e acaba economizando muitos bytes a longo prazo.
E aqui é onde nós executamos um loop gigante. Isso converterá algo como isto:
em algo como isto:
Tudo entre duas instâncias de
ò
será executado até que ocorra um erro, o que acontecerá quando tentarmos entrar em uma linha que ainda existe. Como acabamos de executar um comando substituto globalmente , nosso cursor está na última linha, e nós os transformaremos trabalhando em nosso caminho.Isto é o
linha.
Isto é o
Linha.
Isto é o:
Linha.
Agora temos o teclado completo, mas cada linha contém uma barra extra, uma barra extra (para frente ou para trás) ou um sublinhado extra. Correção super fácil
Depois de toda essa loucura, o buffer é impresso implicitamente.
fonte
Lua 5,3,
416394 bytes.Ungolfed e com comentários.
Resultado
Vou ser destruído por outros langauges, mas pensei em tentar. Boa quantidade de complexidade e, pelo menos, é mais curta que o teclado!
fonte
Bubblegum , 191 bytes
Experimente online!
fonte
Haskell, 263 caracteres (353 bytes UTF-8)
Como houve muita discussão sobre a pontuação à luz desses caracteres unicode ... aqui está o mesmo programa, reduzido a todos os ASCII:
Haskell, 263 caracteres (263 bytes UTF-8)
fonte
ENTER
são mais longas do que caracteres↩︎
.ENTER
e↩︎
: O preenchimento de espaço em branco torna o mesmo comprimento.PHP, 303 bytes
Preguiçoso, mas eficaz. :)
fonte
<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));
. Compressor: sandbox.onlinephpfunctions.com/code/… Descompressor: sandbox.onlinephpfunctions.com/code/…Python 3.5+, 239 bytes
fonte
"".join(...) + f[0]
no loop interno. Trocar aformat
ordem dos argumentos e os respectivos espaços reservados na string também salva mais dois bytes.['{1}__ ','|{} ||','|{1}||','/{1}\\|']
é mais curto que o uso desplit
.Lote,
465452 bytesA
:c
sub-rotina lida com uma linha de chaves. Chaves contendo espaços extras precisam ser citado, como fazem os=
,;
,,
chaves, possivelmente devido a um erro noshift
comando. O primeiro e o último parâmetro são cadeias de_
s do mesmo comprimento que a primeira e a última chave para ajudar na concatenação.t
termina como_
s comum à primeira, terceira e quarta linhas, com#
s marcando a junção, que é substituída adequadamente antes da adição dos caracteres à esquerda e à direita, enquantos
é a segunda linha, mas com|
s alterado para!
s à medida que reduzem o número de"
s que eu preciso. Editar: economizou 1 byte imprimindo todas as quatro linhas em uma única instrução e 12 bytes otimizando a maneira como atribuí as
variável.fonte
Ruby, 226 bytes
Melhorias da seguinte forma:
1.Não há elementos de string vazios no início e no final da matriz. Em vez disso, o array é triplicado, produzindo 3 teclados lado a lado. Após a conversão em string, temos 3 teclados com bordas externas ausentes. Isso é truncado para exibir apenas o meio, completo com bordas.
2.Versão alterada do Ruby. Utilizei o Ideone em vez do 1.9.3 instalado na minha máquina. Isso significa que
.chars.to_a
pode ser reduzido para apenas.chars
.Ruby, 239 bytes
Há mais alguns bytes a serem jogados fora disso. Vai procurar amanhã.
destroçado
fonte
C #, 357 bytes (quando em uma linha e incorporando a maioria das sugestões)
Ou 353 com interpolação de string e todas as outras sugestões
Sem Golfe (sem interpolação de cordas):
fonte
foreach(var r in q){for(int i=0;i<4;i++){foreach...
==
por<
s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
PowerShell v2 +, 465 bytes
Estou meio envergonhado de postar esta resposta, dado o quão curtas são as respostas PHP e Python, não importa a resposta C #, mas não consigo obter esse método mais curto. Outras abordagens podem produzir melhores resultados.
É basicamente apenas uma string gigante de várias linhas, com variáveis (
$a
e similares) substituindo várias substrings, e alguns-replace
s no final para finalizar. Blocos de script$(...)
são inseridos onde necessário para introduzir novas variáveis.Experimente online!
fonte
Python,
493458 bytes.Funcionalmente equivalente, mas um pouco mais legível:
Infelizmente, já é mais longo que a resposta fornecida em Lua.
fonte
p
função em uma linha separada por ponto e vírgula. Além disso, eu pensei que você não pode fazer a primeira linhak=[['|']*75]*16
, você sabe por quê?'_'
e' '
para uma variável para salvar alguns bytes.range(16)
para[0]*16
.for l in k:print ' '.join(l)
parafor l in k:print''.join(l)
.PHP,
316312 bytesTenho certeza de que essa abordagem não pode mais ser jogada em golfe. Mas se alguém encontrar mais 10 bytes ...: D
Corra com
-r
.demolir
fonte
Bash (no OSX),
128 + 221 + 1 =234230 bytesSim, eu sei, compressão. Mas funciona, não?
Requer um arquivo chamado "f" no diretório atual com o seguinte conteúdo (coloque na base64 a compatibilidade com o PPCG - você pode decodificar isso no arquivo "f" primeiro.):
fonte
gunzip<f
.zcat f
e 2 bytes removendo os dois bytes nulos à direita (o gzip reclama mas produz a saída desejada).zcat<f
então. No Linux, o zcat sem os zeros à direita faz o gzip reclamar (“gzip: stdin: final inesperado do arquivo”), mas somente após a impressão da saída desejada.JavaScript (ES6), 286
Uma função anônima sem parâmetros
Menos golfe
fonte
Swift, 777 bytes
O Swift geralmente não é um ótimo idioma de escolha para o golfe, portanto, ser
menos que o dobro da menor resposta atual(que foi rápida)é um bom desafio aqui!Ungolfed:
fonte
SOGL V0.12 ,
131128127 bytes ( competindo? )O SOGL tem as peculiaridades
2*2/
e2/2*
, mas elas parecem muito integradas para esse desafio.Experimente aqui!
fonte
Python 2,
394388380 bytesApenas cria uma grande string representando o teclado inteiro, substitui * por% s para as teclas especiais e depois usa a formatação da string para atualizar as especiais.
Editar
Agora, há uma nova linha no final da saída, mas não vejo nenhum lugar que não seja permitido.
Experimente online!
fonte
C #, 376 bytes (quando em uma linha)
Isso se baseia inteiramente na resposta C # do Klinger. Eu não tenho representante suficiente para comentar sua resposta, caso contrário, eu teria.
Consegui reduzir o código de Klinger em 5 bytes, modificando o loop foreach inicial e removendo colchetes estranhos.
fonte
m4, 456
Ungolfed:
(Esta é realmente a primeira vez que pratico golfe com código e experimente o m4.)
fonte
empilhados , 228 bytes
Experimente aqui!
Ou, um pouco mais legível:
Isso funciona definindo uma função
p
que cria uma tecla e, em seguida,hcat
pressionando várias teclas.fonte
Haskell, 255
Em retrospecto, conceito semelhante a essa resposta de Haskell , mas produzindo o teclado ASCII e com um pouco de golfe diferente.
Formatado e renomeado:
fonte
tcl, 368
Conforme contado em http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ com a "Linha de contagem quebras como espaços". ativado, ocupa
505496452451439403401396391388385384382379378377369368Demonstração: http://rextester.com/live/NTVAV88033
O ungolf:
Cooperação ao vivo em http://rextester.com/live/UDO43692
Qualquer pessoa é livre e bem-vinda para melhorar minha versão em sites de cooperação ao vivo, mas por favor: não edite minha resposta original aqui; basta dizer que você editou nos comentários e as pessoas visitarão os links.
ATUALIZAÇÃO 1: Substituído
for
porforeach
, porque este produz um código mais curtoATUALIZAÇÃO 2: Substituído
foreach
porlmap
, porque este produz um código mais curtoATUALIZAÇÃO 3: Raspou um caractere porque substituí
" "
por\
ATUALIZAÇÃO 4: Em relação ao primeiro comentário, alterei todos os caracteres de espaço reservado Unicode da 1ª linha, com 2 bytes, para caracteres ASCII de 1 byte
ATUALIZAÇÃO 5: várias
puts
linhas transformadas em apenas umaATUALIZAÇÃO 6: use
split
comandos diretamente retornam valores nalmap
chamada em vez de usar variáveis de lista intermediáriasATUALIZAÇÃO 7:
ENTER
não eram necessárias citaçõesATUALIZAÇÃO 8:
string map
é longa o suficiente e repetida várias vezes que vale a pena encapsulá-lo em umproc
ATUALIZAÇÃO 9:
split $x \n
é tempo suficiente e repetido várias vezes que vale a pena para encapsulá-lo em umproc
ATUALIZAÇÃO 10: Em "substituição", a string pode ser usada em
&
vez de\1
, porque neste caso ambas coincidem; Outra conseqüência disso é que ele permite livrar-se da()
string "correspondente".ATUALIZAÇÃO 11: Use em
@
vez de\n
separador de linha para usar mais assplit
instruções. Embora a string "match" se estenda\S
até[^@]
ela compensa, devido ao número de repetiçõesATUALIZAÇÃO 12: substituiu a primeira
regsub
sequência de "correspondências"{[^@|]}
por\[^@|]
para raspar um caractere. Infelizmente, não foi possível fazer o mesmo com o segundoregsub
, porque a instrução está dentro de um par de[]
:(ATUALIZAÇÃO 13: Raspou dois Digite caracteres, concentrando o
lmap
corpo com seu próprio cabeçalho.ATUALIZAÇÃO 14: Utilizou uma chamada para o
split
procedimento baseado emN
vez de uma chamada direta para ostring map
procedimento baseadoN
que permite reduzir em 3 caracteresATUALIZAÇÃO 15: havia um
caractere de espaço desnecessário . Removido para raspar um char.
ATUALIZAÇÃO 16:
set h
pode ser incorporado para se livrar$h
e raspar um personagem.ATUALIZAÇÃO 17: a
set h
declaração pode realmente ser eliminada.ATUALIZAÇÃO 18:
puts
argumento alterado do...\n...\n...\n...
formato para oformato.
Agradeço às pessoas que me ajudaram a reduzi-lo, principalmente o evilotto e o aspecto do canal tcl IRC!
fonte
tcl, 369
Inicialmente baseado na versão sergiol do tcl.
(Observe que muitos espaços à esquerda fazem parte da "natureza" do tcl)
fonte
foreach
ocorrências porlmap
!interp alias
abordagem para encurtar a minha versão, mas o mais curto eu poderia começar quando fazê-lo foi de 398 :( rextester.com/live/NTVAV88033lmap z {S R M N} w {set "regsub -all" "string map" split} {interp alias {} $z {} {*}$w};lmap y [N [S b [M [N {||||@|||@$@BS @%@TAB @&@CAPS @? @ENTER @*@SHIFT } @] [R {[^@]} "`1234567890-=$@%QWERTYUIOP\[\]\\@&ASDFGHJKL;'?@*ZXCVBNM,./*" {||& ||}]]] @] z [N [S f [R {[^@|]} $b _]] @] w [N [S g [M {||_ |/_ _|| _\\|} [M {||| \\|/} $f]]] @] x [N [M {\\ _ / _ | \ } $g] @] {puts $x\n$y\n$z\n$w}
C (gcc) ,
378342330 bytes-10 bytes graças ao ceilingcat.
Uma primeira facada. O g () repetido sugere espaço para melhorias.
Edit: Lá vamos nós.
Experimente online!
fonte
Python 2, 672 bytes
Usando uma cadeia zlib compactada:
fonte
len("print 'x\x9c...'")
qual irá remover os\x
s, resultando em uma contagem incorreta de bytes. Você pode obter uma contagem correta contando com,len(r"print 'x\x9c...'")
mas a solução mais fácil, como sempre, é ver o que o seu editor de texto ou sistema de arquivos diz.Powershell,
249242 bytesUngolfed & Explained
Em
·
vez disso, o meio usa espaços para esclarecer a sequência de origem.Extra: teclado com uma barra de espaço e rótulos alinhados à direita, 278 bytes
Adicionei alguns bytes à expressão regular para manipular a barra de espaço (regexp antigo
(.[a-z ]*)
, novo~|(.[a-z ]*)
). Esse é um pequeno passo para o regexp, um salto gigantesco para a solução: agora você pode exibir barra de espaço e rótulos de teclas alinhados à direita (consulte SHIFT, CTRL e BS no lado direito do teclado).Resultado:
fonte
/// , 360 bytes
Experimente online!
fonte
Mathematica 323 bytes
Chato e sem criatividade. A sequência é apenas a saída do
Compress
comando interno aplicado à saída desejada.fonte
Wolfram Language (Mathematica) , 293 bytes
Experimente online!
Relativamente simples: codifica linhas de chaves como listas de
(key name)|(key width)
fonte
Perl 5
-MList::Util=pairmap
, 313 bytesExperimente online!
fonte