Suponha um teclado simples com este layout:
1 2 3 4 5 6 7 8 9 0
A B C D E F G H I J
K L M N O P Q R S T
U V W X Y Z . , ? !
O padrão de teclado de Peter pode ser gerado começando no canto superior esquerdo do teclado e exibe os três primeiros caracteres e uma nova linha. Ele muda sobre um caractere e exibe a segunda, terceira e quarta tecla. Quando chega ao final de uma linha, continua no final da próxima linha e recua, até atingir o início dessa linha e depois avançar na próxima linha, e assim sucessivamente, até chegar ao início da última linha. .
Este é o padrão de teclado de Peter:
123
234
345
456
567
678
789
890
90J
0JI
JIH
IHG
HGF
GFE
FED
EDC
DCB
CBA
BAK
AKL
KLM
LMN
MNO
NOP
OPQ
PQR
QRS
RST
ST!
T!?
!?,
?,.
,.Z
.ZY
ZYX
YXW
XWV
WVU
Escreva um programa que não aceite entrada e exiba o padrão do teclado de Peter. O programa deve ser menor que 152 bytes , ou seja, o tamanho da string que ele gera.
Isso é código de golfe, então a solução mais curta vence.
code-golf
kolmogorov-complexity
Peter Olson
fonte
fonte
[1..9 0 J..A K..T ! ? , . Z..U]
.echo {1..9} "0" {J..A} {K..T} '!?,.' {Z..U}|sed 's/ //g'
no bash, mas já precisa de 13 caracteres para anexar um comando sed, para remover espaços em branco. Isso gera 57 caracteres, e nenhum triplo foi construído até agora. Com o comando hold do sed, deve ser possível, mas em 6 caracteres, vencer a solução perl?Respostas:
Perl, 63 caracteres
Esta solução usa a
say
função (disponível desde o Perl 5.10.0 com o-E
switch ou comuse 5.010
). Sem ele, o melhor que posso fazer é 67 caracteres (e uma nova linha extra no final da saída):Solução anterior de 65 caracteres:
Substituir
say$1
porprint$1.$/
permite que o código seja executado em perls mais antigos, ao custo de 5 caracteres extras.fonte
APL, 43 caracteres
Isso funciona no Dyalog APL . Consegui salvar alguns caracteres gerando a string de saída (tudo depois
⊃
). Vou escrever uma explicação quando tiver tempo!Aqui está a aparência da saída:
Explicação, da direita para a esquerda:
6↑⌽⎕A
:⎕A
nos fornece uma sequência do alfabeto maiúsculo, de A a Z. Em seguida, invertemos (⌽
) e pegamos (↑
) os 6 primeiros caracteres, fornecendo-nos'ZYXWVU'
. (Em retrospecto, essa abordagem não acaba salvando nenhum personagem, mas deixarei porque ela se encaixa melhor.)'!?,.',
: Concatenamos (,
) a string'!?,.'
com o resultado anterior.(10↑10⌽⎕A),
: Pegamos os 10 primeiros caracteres (10↑
) do alfabeto, que são rotacionados pela primeira vez dez vezes (10⌽
) e concatenamos isso com o resultado anterior. Como um exemplo de rotação,5⌽'abcdef'
(a corda'abcdef'
girou 5 vezes) nos fornece'cdefab'
.(⌽10↑⎕A),
: Pegue os 10 primeiros caracteres do alfabeto e inverta-os e concatene-o com a string anterior.(1⌽⎕D),
:⎕D
nos fornece os dígitos como uma string, de 0 a 9, inclusive. Em seguida, rotacionamos ('⌽') essa string em 1, produzindo'1234567890'
. Como antes, concatenamos isso com o resultado anterior.3,/
: Pegamos a string em grupos de três caracteres e as concatenamos.⍪
o vetor de strings (realmente um vetor de vetores de caracteres) ao longo da primeira dimensão. Isso tem o efeito de alterar sua forma de38
para38 1
(uma matriz 38x1).fonte
J,
666245 caracteresAcontece que eu estava sendo inteligente demais pela metade.
é tudo que eu precisava o tempo todo.
Anteriormente:
e:
fonte
R (75 caracteres)
O que isso faz?
strsplit
divide uma string em substrings, nesse caso caracteres individuaisembed
é uma função realmente útil que transforma um vetor em uma matriz de elementos sobrepostosIsso produz e imprime uma matriz de caracteres:
fonte
embed
é realmente uma função muito útil!Scala 70 caracteres:
fonte
Mathematica, 73
Cheguei independentemente ao mesmo método que todos os outros:
fonte
Groovy, 73
Todas as coisas inteligentes que tentei acabaram sendo mais longas do que fazer da maneira idiota.
fonte
C, 98
104caracteresComo ninguém mais o fez ainda, pensei em tentar gerar a string rapidamente, usando algum tipo de codificação de comprimento de execução para execuções ascendentes e descendentes.
EDIT: Após várias iterações, aqui está finalmente uma solução "inteligente" que se vincula à menor solução "burra" em C com 98 caracteres:
O código requer uma codificação Latin-1 de 8 bits (ISO-8859-1 ou Windows-1252), que deve funcionar bem em todas as plataformas comumente usadas, mas salvando a fonte com uma página de código de 8 bits menos popular ou UTF- 8 não vai funcionar.
A sequência de dados foi criada pela seguinte parte do emacs lisp:
O bit "twiddle" é usado para evitar caracteres de controle ASCII não imprimíveis na cadeia de dados codificada e para garantir isso
i==0
apenas no final da saída.C, 98 caracteres
No entanto, mesmo em C, você pode obter um programa curto simplesmente imprimindo trigêmeos consecutivos a partir da string original:
fonte
Ruby
696562Baseado no exemplo Groovy
fonte
Haskell, 80
fonte
Javascript, 103
fonte
for(a='1234567890JIHGFEDCBAKLMNOPQRST!?,.ZYXWVU';a[3];a=a.slice(1))console.log(a.slice(0,3))
Haskell, 94
fonte
Perl, 73 caracteres:
Perl, 66 caracteres:
quando chamado por:
fonte
D 124 chars
fonte
JavaScript, 83 caracteres
Decidi ver se eu poderia vencer a solução de stephencarmody . Isto é o que eu vim com.
fonte
Python, 73
fonte
Smalltalk
10299Eu não conheço o Smalltalk muito bem, então é um pouco estranho para mim. É compila com
gst
outras pessoas não são testadas.fonte
Q (
6663 caracteres)fonte
Prolog, 131
É provavelmente por isso que você nunca vê entradas do Prolog. A nova linha é necessária (na verdade, qualquer espaço em branco serve, mas deve haver espaço em branco).
fonte
Q, 63
fonte
/// , 151 bytes
Experimente online!
Não pode jogar mais? Isto é, em certo sentido, <152 bytes.
fonte
i.e.
não substitui o significado de algo, apenas o ajuda a entender melhor, no meu sentido. Além disso, não incluí uma nova linha à direita, talvez por isso seja 151 bytes. E sim, eu li essa seção.Geléia ,
4140 bytesExperimente online!
Pode (ainda) ser jogável ...
fonte