Este es un teclado QWERTY.
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
Podemos "salir en espiral" en este teclado, comenzando desde G. La espiral comenzará en G, irá a H, luego a Y, luego a T, luego F, luego V, luego B, luego N, luego J, luego U , luego R, luego D, luego C, ... etc. Su desafío es, dado un número 1 ≤ N ≤ 26, generar los primeros N caracteres en esta espiral. (Si está confundido, consulte las imágenes al final de la publicación).
¿La captura? ¡La puntuación de su programa es proporcional a los índices de caracteres encontrados dentro de la espiral!
Tanteo
- Para cada letra (sin distinción entre mayúsculas y minúsculas) en su código, agregue el índice de ese carácter en la espiral a su puntaje (a partir de 1).
- Por cada personaje que no esté en la espiral, agrega 10 a tu puntaje.
- El puntaje más bajo gana.
Por ejemplo, el programa print("Hello, World!")
tiene una puntuación de 300.
Para su conveniencia, he escrito un calificador automático del programa.
Otras reglas
- Su envío puede ser un programa o función.
- Puedes tomar N comenzando en 0 o 1 y terminando en 25 o 26, respectivamente, pero las salidas deben comenzar con "G" y terminar con "GHYTFVBNJURDCMKIESXLOWAZPQ".
- Debe mostrar los caracteres en la espiral en orden .
- Si es una función, puede devolver una lista de caracteres en lugar de una cadena.
- Es posible que tenga una nueva línea al final de la salida.
- Puede usar letras minúsculas en lugar de letras mayúsculas, o una combinación de ambas.
Casos de prueba
number -> output
1 -> G
2 -> GH
5 -> GHYTF
12 -> GHYTFVBNJURD
15 -> GHYTFVBNJURDCMK
24 -> GHYTFVBNJURDCMKIESXLOWAZ
26 -> GHYTFVBNJURDCMKIESXLOWAZPQ
Imágenes
La espiral superpuesta:
ascii-art
code-challenge
keyboard
Conor O'Brien
fuente
fuente
Respuestas:
Japt ,
304264162 puntosAhorró 40 puntos gracias a @ ConorO'Brien
¡Pruébalo en línea!
Para guardar tantos puntos como sea posible, toda la cadena se condensa en 9 caracteres Unicode interpretando cada serie de 3 letras como un número base 36, y luego convirtiéndolas en un punto de código. El programa en sí toma esta cadena comprimida (que cuesta 110 puntos, incluidas las comillas) y asigna cada
c
harcode convirtiéndolo en uns
tring en base-36 (G
después;
del principio).î
toma los primeros {input} caracteres de esto, que se imprime implícitamente.fuente
C, puntuación: 544
Pruébalo en línea!
fuente
g
es la letra más barata según la puntuación utilizada en el desafío.Espiral , puntaje:
619215127471546554191Se puede encontrar un intérprete aquí .
Explicación:
El programa comienza en el
0
personaje en la cuarta línea. El primer fragmento de código que se ejecuta es0;vg
.;
toma un número como entrada y lo coloca en la pila.v
coloca lo que está en el registro (un cero) en la pila. Será usado como el contador.g
es una etiqueta, cuando se alcanza, el control salta a la otra aparición de la letrag
en el código.Entonces aquí es donde está el control ahora:
Como hay espacios en blanco en todas las demás direcciones, el puntero de instrucción comienza a moverse hacia arriba.
v
coloca un cero en la pila yX
saca de la pila inmediatamente. Como el valor emergente es cero, el puntero de instrucción se mueve aX
(de lo contrario, lo trataría como un espacio en blanco).Por defecto, el flujo de control está en modo de giro a la derecha, por lo que ahora, cuando llega a la unión, el puntero de instrucciones gira a la derecha.
v
una vez más empuja un cero en la pila,*
incrementa el registro en uno.Lo siguiente
v
coloca lo que está en el registro (número 1) en la pila, el puntero de instrucción intenta girar a la derecha, presionando el siguienteX
. El valor que se acaba de agregar a la pila aparece y se coloca en el registro. Debido a que no es cero,X
no se ingresa y la IP pasa a la siguiente*
a la derecha, incrementando nuevamente el valor en el registro.Esto sucede una y otra vez hasta que lleguemos al final de esta parte y
*
comience la línea de s. Por ahora el valor en el registro es 6, que es la letrag
ASCII menos la letra ASCIIa
. Por lo tanto, con una línea de 97*
s incrementamos el valor en el registro a 103, que coincide con la letrag
que queremos imprimir.v
lo empuja a la pila yP
es otra etiqueta al golpear que saltamos a la otraP
en la primera línea del código.Aquí
.
aparece el valor de la pila y lo imprime como un personaje. Después de eso, seX
saca el cero extraño de la pila, luego se~
comparan los dos valores restantes en la pila (los valores son el contador y el valor de entrada). Si los valores son los mismos, el operador coloca cero en la pila (de lo contrario -1 o 1). Nuevamente, el control intenta girar a la derecha.X
muestra el valor de la comparación de la pila, si es ceroX
, y después de!
ingresarlo, finaliza el programa.De lo contrario, la IP continúa hasta el
Z
, que es una etiqueta que en este caso salta solo un paso hacia la derecha. La razón para hacerlo es que saltar vuelve a poner el valor en el registro a cero.*
incrementa el registro yv
coloca el 1 resultante en la pila.+
muestra los dos elementos superiores de la pila (el 1 y el contador), los agrega y coloca el resultado en la pila (en efecto, esto incrementa el contador en uno).^
copia el resultado de la pila al registro sin eliminarlo de la pila.#
disminuye el valor en el registro en uno,v
empuja el valor disminuido a la pila, la IP intenta girar a la derecha yX
saca el valor de la pila. Si el valor no es cero, la IP continúa moviéndose hacia el este, disminuyendo el valor en el registro, hasta que llega a cero, y la IP ingresa a unaX
rama.La rama lleva a una etiqueta correspondiente al valor del contador. Al golpear la etiqueta, el control salta a la otra aparición de la etiqueta en la sección donde comenzamos con la etiqueta
g
, comenzando otra iteración. Al igual que con elg
, el valor en el registro se incrementa hasta el valor ASCII de la letra que necesitamos imprimir. Luego se imprime el carácter y se incrementa el contador, se selecciona otra etiqueta. Esto sucede hasta después de la última iteración, el contador es igual a la entrada y el programa termina.Editar:
Logra lo mismo que
pero con menos espacio en blanco.
Edición 2:
Se puede usar en lugar de:
fuente
Haskell , 471
Pruébalo en línea!
Este es un punto de referencia, creo que debe haber una mejor manera, pero es lo mejor que he encontrado hasta ahora.
Explicación
Supongo que debería explicar esto para aquellos que no están familiarizados con Haskell demasiado bien. La función
take
toma los primeros n elementos de la lista. Se llama así:Queremos tomar los primeros n elementos de la picadura
"GHYTFVBNJURDCMKIESXLOWAZPQ"
, por lo que queremos algo comoSin embargo, podemos hacerlo mejor, podemos infijar
take
usando backticksY ahora esto puede hacerse sin problemas
fuente
partial
en Clojure. Esto es lo que buscaba, peropartial
era demasiado caro.Jelly , puntaje 211
19 bytes
Pruébalo en línea!
ahorró un montón de puntaje gracias a la sugerencia de Emigna de usar
œ?
: Dfuente
Vim ,
461418Gracias @pacholik por -43 puntaje!
Pruébalo en línea!
fuente
CGHYTFVBNJURDCMKIESXLOWAZPQg©G@" D
(© is escape)Befunge, Puntuación: 531
Siento que este desafío habría sido más interesante si la salida tuviera que estar en espiral también.
fuente
TI-Basic (TI-84 Plus CE),
454432 puntos-22 puntos de Conor O'Brien
Corre con
5:prgmNAME
.Devuelve / imprime la
sub
cadena de1
aAns
(la entrada del número).TI-Basic es un lenguaje tokenizado , así que lo califico por los valores de bytes de los tokens.
sub(
es 0xbb 0x0c, entonces 20"
es 0x2a, entonces*
10 * 2 = 20Las letras mayúsculas no cambian, por lo que la cadena es 351
,
es 0x2b, entonces+
10 * 2 = 201
es 0x31, entonces1
, entonces 10Ans
es 0x72, que esr
, entonces 1120 + 20 + 351 + 20 + 10 + 11 = 432
fuente
Python 3, puntaje =
762753Entrada basada en 1. Esto es peor que el enfoque trivial, ya que utiliza 37 no letras. Sin embargo, es algo interesante.
-9 gracias a Leo .
Pruébalo en línea!
fuente
[:g*3][-3:]
puede llegar a[g*3-3:g*3]
reducir la puntuación total en 9 puntos05AB1E , puntuación: 204
Pruébalo en línea!
fuente
Brainf ** k, puntaje = 2690
Ingrese un solo byte que va de
0x1
a0x1a
.Pruébalo en línea!
fuente
APL (Dyalog) , puntuación: 391
Pruébalo en línea!
El único uso para letras latinas en Dyalog es en nombres de variables y algunas funciones del sistema. Aparte de eso, solo se usan glifos y algunas letras griegas.
fuente
Pitón 3, 522
Pruébalo en línea!
Una lambda anónima que utiliza el corte de cadenas de Python (
"asdf"[:i]
obtiene los primerosi
caracteres de"asdf"
)fuente
Clojure,
484474 puntos-10 puntos porque aparentemente
%
puede existir después de un número sin un espacio que los separe. Puede que tenga que volver y mejorar algunas presentaciones.Una función anónima. Básicamente un puerto Clojure de lo que ya se ha publicado. Puntúa muy bien! Creo que este es el primer programa de Clojure que he escrito que no contiene un solo espacio.
fuente
Ly , 521 puntos
Pruébalo en línea!
No siento que esto sea optimizable.
fuente
Bash , puntuación: 465
Pruébalo en línea!
fuente
Casco , 293 bytes
Este es el más corto que pude encontrar, el más cercano
¨gHYtfvB⌋ȷÜdCmkÏex←ẆAzpq¨
para un puntaje de 293 ..Pruébalo en línea!
Explicación
Búsqueda de fuerza bruta, resulta que todas las minúsculas dieron la mejor puntuación. Básicamente es lo mismo que la solución de @Wheat Wizard,
take
(↑
) en una cadena comprimida (¨
).fuente
Common Lisp, puntuación: 580
Pruébalo en línea!
fuente
Excel, 490 puntos
La Convención para los respondedores de Excel es recibir información de
A1
. Cambiar esto aG1
cortes 22 puntos (468).fuente
C # , puntaje 546
fuente
Óxido, puntaje 443
No es frecuente que Rust sea bueno en el código de golf, pero aquí supera muchos idiomas
fuente
Golang, puntaje 861
¡Juega en línea!
fuente
Javascript ES6, 527 puntos
Intentalo !
fuente
PHP, 590 puntos
Pruébalo en línea!
fuente
PHP, puntaje 584
jugueteó un poco con el diccionario; El hecho de que xoring la cadena lo corte se vuelve
substr
obsoleto.Pruébalo en línea .
fuente
Mathematica, 528
Pruébalo en línea!
fuente
Pyth , puntuación: 371
Pruébalo aquí
¿Cómo?
fuente
Rubí , 453 puntos
Pruébalo en línea!
fuente
> <> , 558 + 16 = 574 puntos
Utiliza el
-v
bandera para empujar la entrada a la pila.Empuja la espiral sobre la pila en orden inverso, luego gira la entrada hacia arriba. Luego, mientras la parte superior de la pila no es cero, imprime la siguiente letra y disminuye la parte superior de la pila.
Pruébalo en línea!
fuente
Pyth , 261 puntos
Pruébalo aquí!
Esto genera letras mayúsculas. Para minúsculas, puede probar la alternativa 261 byter .
fuente