... No es que lo harías, ¿verdad? La tarea es simple, genera el siguiente 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 es el teclado del futuro porque en el futuro los espacios son irrelevantes, también lo son las barras espaciales.
Para hacerte las cosas un poco más fáciles:
0123456789ABC...XYZ-=[]\;',./
- Estos caracteres están en teclas de longitud 6 (incluido el relleno).TAB / BS / ENTER
- Estas teclas son de longitud 10 (incluido el relleno).CAPS
- Esta clave es de longitud 11 (incluido el relleno).SHIFT
- Esta clave es de longitud 13 (incluido el relleno, en ambos lados).
Cada tecla individual se ve más o menos así:
____
||* ||
||__||
|/__\|
Sin embargo, debe tener en cuenta que dos claves consecutivas no son:
____ ____
||* ||||* ||
||__||||__||
|/__\||/__\|
Pero están "unidos":
____ ____
||* |||* ||
||__|||__||
|/__\|/__\|
Este desafío no debería ser tan malo, la mejor de las suertes para ti; ¡no te pierdas de abusar de la repetición! Pero tampoco subestimes las teclas "especiales";).
¿Victorioso?
El código más corto gana porque es un código de golf, ya sabes.
code-golf
ascii-art
kolmogorov-complexity
Urna de pulpo mágico
fuente
fuente
Respuestas:
V ,
189, 179, 175, 164, 161, 157, 155, 149, 145, 141, 135 bytesPruébalo en línea!
¡Esta respuesta ahora es tuiteable!
¡Míralo correr! Esta es una versión ligeramente modificada que se actualiza a medida que se ejecuta para que pueda ver cómo funciona. Esta es una versión desactualizada ya que aún no he podido volver a grabarla, pero el enfoque general es idéntico.
Esta es probablemente la respuesta V más larga jamás escrita. Ciertamente no ayudó que el intérprete de V sea extremadamente lento. Me llevó alrededor de una hora escribir la primera revisión, pero he estado recurriendo repetidamente para recortar un par de bytes cada vez. Como el teclado completo tiene 1215 bytes, actualmente esta respuesta es un 91% más corta que la salida, así que estoy bastante contento con los resultados.
Dado que esto contiene algunos caracteres no imprimibles y una gran cantidad de datos no ASCII, aquí hay un hexdump:
¿Cómo diablos funciona?
Muy bien, esta explicación será muy tonta. ¿Estás listo? En primer lugar, necesitamos ingresar las letras para poder construir las claves a su alrededor. Esto es
Que inserta:
Es bastante sencillo, pero hay algunos trucos que usamos para salvar personajes. Por ejemplo,
¬19
ingresa "123456789",³
ingresa tres espacios y duplicamos el turno para que no necesitemos ingresarlo varias veces.Tenga en cuenta cómo las letras son minúsculas aquí. Esto es para que podamos distinguir fácilmente entre las teclas en mayúscula como "ENTER" y las letras individuales. Escribirlos de esta manera hace que sea más fácil decir qué caracteres poner una barra antes, y solo agrega un byte para convertirlos a minúsculas más adelante. Entonces, hacemos un comando sustituto para convertirlos a mayúsculas y agregamos un espacio después de cada uno de ellos:
Ahora, tomamos cada secuencia de teclas (cualquier ejecución de espacio no en blanco) y colocamos tres barras antes y después de ellas:
En este punto, el búfer se ve así:
Tener tres barras en la primera y última columna es realmente muy conveniente y termina ahorrando muchos bytes a largo plazo.
Y aquí es donde ejecutamos un bucle gigante. Esto convertirá algo como esto:
en algo como esto:
Todo entre dos instancias de
ò
se ejecutará hasta que ocurra un error, lo que sucederá cuando intentemos subir a una línea que todavía existe. Como acabamos de ejecutar un comando de sustitución global , nuestro cursor está en la última línea y los transformaremos a medida que avanzamos.Este es el
línea.
Este es el
Línea.
Este es el:
Línea.
Ahora tenemos el teclado completo, pero cada línea contiene una barra adicional, una barra adicional (hacia adelante o hacia atrás) o un guión bajo adicional. Solución súper fácil
Después de toda esa locura, el búfer se imprime implícitamente.
fuente
Lua 5.3,
416394 Bytes.Sin golf y con comentarios.
Salida
Voy a ser destruido por otros idiomas, pero pensé en intentarlo. Buena cantidad de complejidad, y al menos es más corto que el teclado.
fuente
Chicle , 191 bytes
Pruébalo en línea!
fuente
Haskell, 263 caracteres (353 bytes UTF-8)
Como ha habido mucha discusión sobre el puntaje a la luz de estos caracteres unicode ... aquí está el mismo programa, reducido a todo-ASCII:
Haskell, 263 caracteres (263 bytes UTF-8)
fuente
ENTER
son más largas que los caracteres como↩︎
.ENTER
y↩︎
, el espacio en blanco hace que tenga la misma longitud.PHP, 303 bytes
Perezoso pero efectivo. :)
fuente
<?=gzinflate(base64_decode('rdO5DoJAEIDhnqegs/G+jbHA+0QEvDHrg8zDy79EMbTDFF+3m8yfXdek42phHJG3KyItaEMHutCDPgxgCCNoQg0mMI3cdETSu4wRLQx3NYxJtDCJOL9t1cnSFWNvareVE1xhASHEcIczbOAIATzhBck3V7atupuTb6vulucq43XNvCDKenkQwRyWsII1bGEHexhDxcb140X4n6us16XuVXxdulZZrmi9WcbZd5IH3GAGF/vXwIcDVKEODVs3P53nUrUq5FK1sqc/'));
. Compresor: sandbox.onlinephpfunctions.com/code/… Descompresor: sandbox.onlinephpfunctions.com/code/…Python 3.5+, 239 bytes
fuente
"".join(...) + f[0]
en el bucle interno. Intercambiar elformat
orden de los argumentos y los respectivos marcadores de posición en la cadena también ahorra dos bytes más.['{1}__ ','|{} ||','|{1}||','/{1}\\|']
es más corto que el uso desplit
.Lote,
465452 bytesLa
:c
subrutina maneja una línea de teclas. Llaves que contienen espacios adicionales necesitan ser citado, al igual que las=
,;
,,
llaves, posiblemente debido a un error en elshift
comando. El primer y último parámetro son cadenas de_
s de la misma longitud que la primera y la última clave para ayudar a la concatenación.t
luego termina como la_
s común a la primera, tercera y cuarta filas, con#
s marcando la unión, que se reemplaza adecuadamente antes de agregar los caracteres iniciales y finales, mientras ques
es la segunda fila, pero con|
s cambia a!
s a medida que se reducen la cantidad de"
s que necesito Editar: guardado 1 byte imprimiendo las cuatro líneas en una sola declaración, y 12 bytes optimizando la forma en que asigné las
variable.fuente
Ruby, 226 bytes
Mejoras de la siguiente manera:
1.No hay elementos de cadena vacíos al principio y al final de la matriz. En cambio, la matriz se triplica haciendo 3 teclados uno al lado del otro. Después de la conversión a cadena, tenemos 3 teclados con bordes exteriores que faltan. Esto se trunca para mostrar solo el del medio, completo con bordes.
2. Versión modificada de Ruby. Usé Ideone en lugar de 1.9.3 instalado en mi máquina. Esto significa que
.chars.to_a
se puede acortar a justo.chars
.Rubí, 239 bytes
Hay algunos bytes más que se pueden sacar de esto. Se verá mañana.
sin golf
fuente
C #, 357 bytes (cuando está en una línea e incorpora la mayoría de las sugerencias)
O 353 con interpolación de cadenas y todas las demás sugerencias.
Sin golf (sin interpolación de cadenas):
fuente
foreach(var r in q){for(int i=0;i<4;i++){foreach...
==
con<
s+=i<1?$" {u}__":i<2?$"||{k.PadRight(l)}|":i<3?$"||{u}|":$"|/{u}\\";
PowerShell v2 +, 465 bytes
Me da vergüenza publicar esta respuesta, dado lo cortas que son las respuestas de PHP y Python, no importa la respuesta de C #, pero no puedo acortar este método. Otros enfoques pueden arrojar mejores resultados.
Básicamente es solo una cadena gigante de varias líneas, con variables (
$a
y similares) que sustituyen a varias subcadenas, y un par de-replace
s al final para terminarla.$(...)
Se insertan bloques de script donde es necesario para introducir nuevas variables.Pruébalo en línea!
fuente
Python,
493458 Bytes.Funcionalmente equivalente pero algo más legible:
Lamentablemente, ya es más larga que la respuesta proporcionada en Lua.
fuente
p
función en una línea separada por punto y coma. Además, pensé que no puedes hacer la primera líneak=[['|']*75]*16
, ¿sabes por qué?'_'
y' '
en una variable para guardar algunos bytes.range(16)
a[0]*16
.for l in k:print ' '.join(l)
afor l in k:print''.join(l)
.PHP,
316312 bytesEstoy bastante seguro de que este enfoque no se puede seguir jugando. Pero si alguien encuentra 10 bytes más ...: D
Ejecutar con
-r
.Descompostura
fuente
Bash (en OSX),
128 + 221 + 1 =234230 bytesSí, lo sé, compresión. Pero funciona, ¿no?
Requiere un archivo llamado "f" en el directorio actual con los siguientes contenidos (puesto en base64 para la compatibilidad con PPCG; primero puede decodificar esto en el archivo "f"):
fuente
gunzip<f
.zcat f
y 2 bytes eliminando los dos bytes nulos finales (gzip se queja pero produce la salida deseada).zcat<f
entonces. En Linux, zcat sin los ceros finales hace que gzip se queje ("gzip: stdin: final inesperado del archivo") pero solo después de imprimir el resultado deseado.JavaScript (ES6), 286
Una función anónima sin parámetros.
Menos golf
fuente
Rápido, 777 bytes
Swift generalmente no es un gran lenguaje de elección para jugar al golf, por lo que ser
menos del doble de la respuesta más pequeña actual(que fue rápida)es un buen desafío aquí.Sin golf:
fuente
SOGL V0.12 ,
131128127 bytes ( compitiendo? )SOGL tiene las peculiaridades
2*2/
y2/2*
, pero esas se sienten demasiado como integradas para este desafío.Pruébalo aquí!
fuente
Python 2,
394388380 bytesSimplemente construye una gran cadena que representa todo el teclado, reemplaza * con% s para las teclas especiales y luego usa el formato de cadena para actualizar las especiales.
Editar
Ahora tiene una nueva línea al final de la salida, pero no veo ningún lugar que no esté permitido.
Pruébalo en línea!
fuente
C #, 376 bytes (cuando está en una línea)
Esto se basa completamente en la respuesta C # de Klinger. No tengo suficiente representante para comentar su respuesta, de lo contrario lo haría.
Pude reducir el código de Klinger en 5 bytes, modificando el bucle foreach inicial y eliminando paréntesis extraños.
fuente
m4, 456
Sin golf:
(Esta es la primera vez que practico golf de código y pruebo m4).
fuente
apilado , 228 bytes
Pruébalo aquí!
O, un poco más legible:
Esto funciona definiendo una función
p
que hace una clave, luegohcat
ing múltiples teclas.fuente
Haskell, 255
En retrospectiva, similar en concepto a esta respuesta de Haskell , pero produciendo el teclado ASCII y con un golf ligeramente diferente.
Formateado y renombrado:
fuente
tcl, 368
Según lo contado por http://textmechanic.com/text-tools/basic-text-tools/count-characters-words-lines/ con el "Contar saltos de línea como espacios". activado, ocupa
505496452451439403401396391388385384382379378377369368Demostración: http://rextester.com/live/NTVAV88033
El ungolf:
Cooperación en vivo en http://rextester.com/live/UDO43692
Cualquiera es libre y bienvenido a mejorar mi versión en sitios de cooperación en vivo, pero por favor: no edite mi respuesta original aquí; solo di que has editado los comentarios y la gente visitará los enlaces.
ACTUALIZACIÓN 1: Reemplazado
for
porforeach
, porque este último produce código más cortoACTUALIZACIÓN 2: reemplazado
foreach
porlmap
, porque este último produce un código más cortoACTUALIZACIÓN 3: Afeitado un personaje porque reemplacé
" "
por\
ACTUALIZACIÓN 4: con respecto al primer comentario, cambié todos los caracteres de marcador de posición Unicode de 1 byte de 2 bytes a ASCII de 1 byte
ACTUALIZACIÓN 5:
puts
línea múltiple hecha en una solaACTUALIZACIÓN 6: use directamente
split
comandos para devolver valores en lalmap
llamada en lugar de usar variables de lista intermediasACTUALIZACIÓN 7:
ENTER
no se necesitaban citasACTUALIZACIÓN 8:
string map
es lo suficientemente largo y se repite varias veces que vale la pena encapsularlo en unproc
ACTUALIZACIÓN 9:
split $x \n
es lo suficientemente largo y se repite varias veces que vale la pena encapsularlo en unproc
ACTUALIZACIÓN 10: En "reemplazo" se puede usar una cadena en
&
lugar de\1
, porque en este caso ambos coinciden; Otra consecuencia de esto es que permite deshacerse de()
la cadena "coincidente".ACTUALIZACIÓN 11: Use en
@
lugar de\n
como separador de línea para un uso posterior en lassplit
instrucciones. Aunque la cadena de "coincidencia" se alarga de\S
a[^@]
, vale la pena, debido al número de repeticionesACTUALIZACIÓN 12: Se ha sustituido el primer
regsub
"match" cadena{[^@|]}
de\[^@|]
afeitarse un carácter fuera. Desafortunadamente, no se pudo hacer lo mismo con el segundoregsub
, porque la instrucción está dentro de un par de[]
:(ACTUALIZACIÓN 13: Afeitó dos caracteres Enter al concentrar el
lmap
cuerpo con su propio encabezado.ACTUALIZACIÓN 14: se utilizó una llamada al
split
procedimiento basado enN
lugar de una llamada directa alstring map
procedimiento basadoN
que permite acortar en 3 caracteresACTUALIZACIÓN 15: había un
carácter de espacio innecesario . Se lo quitó para afeitarse un carbón.
ACTUALIZACIÓN 16:
set h
se puede incrustar para deshacerse$h
, para afeitar un personaje.ACTUALIZACIÓN 17: la
set h
declaración realmente se puede eliminar.ACTUALIZACIÓN 18: el
puts
argumento cambió del...\n...\n...\n...
formato alformato.
¡Gracias a las personas que me ayudaron a acortarlo, especialmente evilotto y aspecto del canal tcl IRC!
fuente
tcl, 369
Inicialmente basado en la versión sergiol de tcl.
(Tenga en cuenta que muchos espacios izquierdos son parte de la "naturaleza" de tcl)
fuente
foreach
ocurrencias porlmap
!interp alias
enfoque para acortar mi versión, pero lo más corto que pude obtener al hacerlo fue 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 gracias a ceilingcat.
Una primera puñalada. Los g () repetidos sugieren margen de mejora.
Editar: Ahí vamos.
Pruébalo en línea!
fuente
Python 2, 672 bytes
Usando una cadena comprimida de zlib:
fuente
len("print 'x\x9c...'")
que se escapará el\x
s, lo que resulta en un recuento de bytes incorrecto . Puede obtener un recuento correcto contando con,len(r"print 'x\x9c...'")
pero la solución más fácil, como siempre, es ver lo que dice su editor de texto o sistema de archivos.Powershell,
249242 bytesNo golfista y explicado
El middot
·
utiliza en su lugar espacios para aclarar la cadena de origen.Extra: teclado con barra espaciadora y etiquetas alineadas a la derecha, 278 bytes
Agregué un par de bytes a la expresión regular para manejar la barra espaciadora (expresión regular anterior
(.[a-z ]*)
, nueva~|(.[a-z ]*)
). Ese es un pequeño paso para la expresión regular, un gran salto para la solución: ahora puede mostrar la barra espaciadora y las etiquetas de teclas alineadas a la derecha (vea MAYÚS, CTRL y BS en el lado derecho del teclado).Salida:
fuente
/// , 360 bytes
Pruébalo en línea!
fuente
Mathematica 323 bytes
Aburrido y poco creativo. La cadena es solo la salida del
Compress
comando incorporado aplicado a la salida deseada.fuente
Wolfram Language (Mathematica) , 293 bytes
Pruébalo en línea!
Relativamente sencillo: codifica filas de claves como listas de
(key name)|(key width)
fuente
Perl 5
-MList::Util=pairmap
, 313 bytesPruébalo en línea!
fuente