Asuma un teclado simple con este diseño:
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 . , ? !
El patrón de teclado de Peter se puede generar comenzando en la parte superior izquierda del teclado y muestra los primeros tres caracteres y una nueva línea. Se desplaza sobre un personaje y muestra la segunda, tercera y cuarta tecla. Una vez que alcanza el final de una fila, continúa al final de la siguiente fila y retrocede, hasta que alcanza el comienzo de esa fila y luego avanza en la siguiente fila, y así sucesivamente hasta llegar al comienzo de la última fila .
Este es el patrón 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
Escriba un programa que no acepte entradas y muestre el patrón de teclado de Peter. El programa debe ser menor que 152 bytes , es decir, el tamaño de la cadena que genera.
Este es el código de golf, por lo que gana la solución más corta.
fuente
[1..9 0 J..A K..T ! ? , . Z..U]
.echo {1..9} "0" {J..A} {K..T} '!?,.' {Z..U}|sed 's/ //g'
en bash, pero ya necesita 13 caracteres para agregar un comando sed, para eliminar espacios en blanco. Esto hace 57 caracteres, y hasta ahora no se ha construido un triple. Con el comando hold de sed, debería ser posible, pero en 6 caracteres, superar la solución perl?Respuestas:
Perl, 63 caracteres
Esta solución usa la
say
función (disponible desde Perl 5.10.0 con el-E
interruptor, o conuse 5.010
). Sin él, lo mejor que puedo hacer es 67 caracteres (y una nueva línea adicional al final de la salida):Solución anterior de 65 char:
Reemplazar
say$1
conprint$1.$/
permite que el código se ejecute en perls más antiguos, a un costo de 5 caracteres adicionales.fuente
APL, 43 caracteres
Esto funciona en Dyalog APL . Logré guardar un par de caracteres generando la cadena de salida (todo después
⊃
). ¡Escribiré una explicación cuando tenga algo de tiempo!Así es como se ve la salida:
Explicación, de derecha a izquierda:
6↑⌽⎕A
:⎕A
nos da una cadena del alfabeto en mayúscula, de la A a la Z. Luego lo invertimos (⌽
) y tomamos (↑
) los primeros 6 caracteres del mismo, dándonos'ZYXWVU'
. (En retrospectiva, este enfoque no termina guardando ningún personaje, pero lo dejaré porque encaja mejor).'!?,.',
: Concatenamos (,
) la cadena'!?,.'
con el resultado anterior.(10↑10⌽⎕A),
: Tomamos los primeros 10 caracteres (10↑
) del alfabeto, que primero se gira diez veces (10⌽
), y concatenamos esto con el resultado anterior. Como ejemplo de rotación,5⌽'abcdef'
(la cuerda'abcdef'
rota 5 veces) nos da'cdefab'
.(⌽10↑⎕A),
: Tome los primeros 10 caracteres del alfabeto, inviértalos y concatene esto con la cadena anterior.(1⌽⎕D),
:⎕D
nos da los dígitos como una cadena, de 0 a 9, inclusive. Luego rotamos ('⌽') esta cadena por 1, produciendo'1234567890'
. Como antes, concatenamos esto con el resultado anterior.3,/
: Tomamos la cadena, en grupos de tres caracteres, y los concatenamos.⍪
para enredar nuestro vector de cadenas (realmente un vector de vectores de caracteres) a lo largo de la primera dimensión. Esto tiene el efecto de cambiar su forma de38
a38 1
(una matriz de 38x1).fuente
J,
666245 caracteresResulta que estaba siendo demasiado inteligente a la mitad.
es todo lo que necesitaba todo el tiempo.
Previamente:
y:
fuente
R (75 caracteres)
Que hace esto?
strsplit
divide una cadena en subcadenas, en este caso caracteres individualesembed
es una función realmente útil que convierte un vector en una matriz de elementos superpuestosEsto produce e imprime una serie de caracteres:
fuente
embed
es una función muy útil!Scala 70 caracteres:
fuente
Mathematica, 73
Llegué independientemente al mismo método que todos los demás:
fuente
Groovy, 73
Todas las cosas inteligentes que probé resultaron ser más largas que hacerlo de la manera tonta.
fuente
C,
98104caracteresComo nadie más lo ha hecho todavía, pensé que intentaría generar la cadena sobre la marcha, utilizando algún tipo de codificación de longitud de ejecución para carreras ascendentes y descendentes.
EDITAR: Después de varias iteraciones, finalmente hay una solución "inteligente" que se vincula con la solución "tonta" más corta en C con 98 caracteres:
El código requiere una codificación Latin-1 de 8 bits (ISO-8859-1 o Windows-1252), que debería funcionar bien en todas las plataformas de uso común, pero guardando la fuente con alguna página de códigos de 8 bits menos popular, o UTF- 8 no funcionará.
La cadena de datos fue creada por la siguiente pieza de emacs lisp:
El bit "twiddle" se usa para evitar caracteres de control ASCII no imprimibles en la cadena de datos codificados, y para garantizar que
i==0
solo se encuentre al final de la salida.C, 98 caracteres
Sin embargo, incluso en C puede obtener un programa corto simplemente imprimiendo trillizos consecutivos desde la cadena original:
fuente
Rubí
696562Basado en el ejemplo de Groovy
fuente
Haskell, 80
fuente
Javascript, 103
fuente
for(a='1234567890JIHGFEDCBAKLMNOPQRST!?,.ZYXWVU';a[3];a=a.slice(1))console.log(a.slice(0,3))
Haskell, 94
fuente
Perl, 73 caracteres:
Perl, 66 caracteres:
cuando es llamado por:
fuente
D 124 caracteres
fuente
JavaScript, 83 caracteres
Decidí ver si podía vencer la solución de Stephencarmody . Esto es lo que se me ocurrió.
fuente
Python, 73
fuente
Smalltalk
10299No conozco a Smalltalk muy bien, así que es un poco extraño para mí. Sus compilaciones con
gst
otros no se prueban.fuente
Q (
6663 caracteres)fuente
Prolog, 131
Esta es probablemente la razón por la que nunca ves entradas de Prolog. La nueva línea es obligatoria (en realidad, cualquier espacio en blanco servirá pero debe haber un espacio en blanco).
fuente
Q, 63
fuente
/// , 151 bytes
Pruébalo en línea!
¿No puedes jugar más al golf? Esto es, en cierto sentido, <152 bytes.
fuente
i.e.
no anula el significado de algo, solo te ayuda a entenderlo mejor, en mi sentido. Además, no incluí una nueva línea final, tal vez por eso son 151 bytes. Y sí, leí esa sección.Jalea ,
4140 bytesPruébalo en línea!
Podría (todavía) ser golfable ...
fuente