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
charcode convirtiéndolo en unstring en base-36 (Gdespué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
ges 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
0personaje 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.vcoloca lo que está en el registro (un cero) en la pila. Será usado como el contador.ges una etiqueta, cuando se alcanza, el control salta a la otra aparición de la letragen 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.
vcoloca un cero en la pila yXsaca 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.
vuna vez más empuja un cero en la pila,*incrementa el registro en uno.Lo siguiente
vcoloca 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,Xno 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 letragASCII 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 letragque queremos imprimir.vlo empuja a la pila yPes otra etiqueta al golpear que saltamos a la otraPen la primera línea del código.Aquí
.aparece el valor de la pila y lo imprime como un personaje. Después de eso, seXsaca 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.Xmuestra 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 yvcoloca 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,vempuja el valor disminuido a la pila, la IP intenta girar a la derecha yXsaca 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 unaXrama.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
taketoma 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
takeusando backticksY ahora esto puede hacerse sin problemas
fuente
partialen Clojure. Esto es lo que buscaba, peropartialera 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
subcadena de1aAns(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 = 201es 0x31, entonces1, entonces 10Anses 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
0x1a0x1a.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 primerosicaracteres 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 aG1cortes 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
substrobsoleto.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
-vbandera 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