Normalmente, los desafíos se puntúan en bytes o, a veces, en la distancia de Levenshtein, pero para esto usamos la distancia del teclado: la cantidad de teclas entre las teclas utilizadas para escribir el programa (use el teclado anterior como referencia definitiva). Por ejemplo, la distancia entre Ay Fes 3, porque la ruta es A=> S=> D=> F. La distancia entre Ny 5es 4, porque no importa qué camino tome, requiere al menos 4 pasos. Su tarea es generar lo siguiente (sin incluir espacios finales), con la menor distancia posible del teclado:
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
Envase:
Para hacerte la vida más fácil, ciertas teclas pueden envolver el teclado. Left Shiftenvuelve Right Shift, Caps Lockenvuelve Enter, Tabenvuelve \y ~envuelve Backspace. Por ejemplo, la distancia entre Qy Pes 5, porque Q=> Tab=> \=> ]=> [=>P .
Nota: El ajuste solo funciona horizontalmente; no puede pasar, por ejemplo,\ aCaps Lock
Puntuación:
Puntuación = distancia del teclado + recuento de bytes
Ejemplo de cálculo:
print(5);
- p=>r == 6
- r=>i == 4
- i=>n== 2
- n=>t == 3
- t=>( == 4
- (=>5 == 4
- 5=>) == 5
- )=> ;== 2
Total: 30 + 9 = 39 .
Notas:
- Las letras minúsculas y mayúsculas cuentan como la misma clave. Si una tecla tiene dos símbolos (como 7y& ), también cuentan como la misma tecla, no es necesario incluir el cambio de pulsación.
- Desafortunadamente, si su código requiere símbolos que no están en el teclado, no puede usarlo.
- En la imagen del teclado, se puede ignorar la fila superior. La única clave que puede usar en la fila inferior esSpace
- Las claves deben ingresarse en orden, no puede usar las teclas de flecha para mover el cursor y luego ingresar una clave.
Calculadora de puntaje:
- Actualizado el 27/12 para corregir `=> ]y errores de cálculo relacionados. Verifique sus puntajes nuevamente, y probablemente serán más pequeños (¡con suerte no más grandes!)
Pegue su código aquí para calcular la puntuación. Avíseme si alguna vez recibe un error o si imprime el número incorrecto.
var keys = ["~1234567890-=←","\tqwertyuiop[]\\","↑asdfghjkl;\'\n","Lzxcvbnm,./R",
"AB CDEF"];
var con =["`!@#$%^&*()_+{}|:\"<>?","~1234567890-=[]\\;\',./"];
function hexagon(k) {
if(k === " ") return ["x","c","v","b","n","m",","];
var p = pos(k);
if(p === -1) return false;
var row = p[0],col = p[1];
var hexagon = [char(row,col-1,1),char(row-1,col),char(row-1,col+1),char(row,col+1,1),char(row+1,col),char(row+1,col-1)];
return hexagon;
}
function char(r,c,wrap) {
if(r < 0 || r >= keys.length) return "";
if(r === keys.length-1 && 1 < c && c < 8) return " ";
if(wrap) {
if(c === -1) c = keys[r].length-1;
if(c === keys[r].length) c = 0;
}
return keys[r].charAt(c);
}
function pos(c) {
var row = -1, col = -1;
for(var i = 0;i<keys.length;i++) {
col = keys[i].indexOf(c)
if( col != -1) { row = i; break;}
}
if(row === -1) return -1;
return [row,col];
}
function dist(a,b,s,w) {
if(typeof a === "object") {
var list = [];
for(var i = 0;i<a.length;i++) {
list[i] = dist(a[i],b,s,w);
}
return list;
}
if(a==="") return Infinity;
if(a===b) return 0;
var p = pos(a);
var q = pos(b);
if(!w && a!==" ") {
var chars = keys[p[0]].length;
var opp = char(p[0],p[1] < chars/2 ? chars-1 : 0);
return Math.min(dist(a,b,s,true),dist(a,opp,s,true)+dist(opp,b,s,true));
}
if(!s) { return Math.min(dist(a,b,true,w),dist(a," ",true,w)+dist(" ",b,true,w));}
var h = hexagon(a);
if(a === " ") return 1 + Math.min(...dist(h,b,true,w));
if(p[0]<q[0]) {
return 1 + Math.min(dist(h[4],b,s,w),dist(h[5],b,s,w));
}
else if(p[0] > q[0]) {
return 1 + Math.min(dist(h[1],b,s,w),dist(h[2],b,s,w));
}
if(b===" ") return Math.min(Math.abs(p[1]-7),Math.abs(2 - p[1]));
var d = Math.abs(p[1]-q[1]);
return Math.min(d,keys[p[0]].length-d);
}
function getTotalDistance(str) {
for(var i = 0;i<con[0].length;i++)
str = str.replace(new RegExp("\\"+con[0].charAt(i),"g"),con[1].charAt(i));
str = str.toLowerCase();
var total = 0;
for(var i = 0;i<str.length-1;i++) {
total += dist(str[i],str[i+1]);
}
return total;
}
enter.onclick = function() {
var a = getTotalDistance(program.value);
var b = program.value.length;
len.textContent = a;
count.textContent = b;
total.textContent = a+b;
};
<textarea rows=15 cols=40 id="program"></textarea>
<input type="submit" id="enter"/>
<div>
<div>Key distance: <span id="len"></span></div>
<div>Byte count: <span id="count"></span></div>
<div>Total: <span id="total"></span></div>
</div>
Relacionado:
fuente
===
menos que por alguna razón quieras que JS coaccione furtivamente a tus tipos y absorba el rendimiento.Respuestas:
Pyth, puntaje
107106102Pruébalo en línea.
fuente
Unario , puntaje ~ 6.1 * 10 618
6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros
No es la solución más "creativa", pero a mi computadora le tomó ~ 3 minutos convertir la representación de base 2 de esto a base 10
Esta solía tener una puntuación de 0 , pero las reglas de puntuación cambiaron.
Longitud del código: ~ 6.1 * 10 618
Distancia clave: 0
fuente
Japt , la puntuación de
123119118116106424140 bytes +8178777566 distancia(salida adecuada en el cuadro "salida")
fuente
"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z
(<br>
representa un salto de línea), pero eso requiere dos caracteres que no sean de teclado, por lo que supongo que no es legal. Pero al menos puede eliminar la coma, ya que se inserta automáticamente.JavaScript (ES6), puntaje 188
Solo apenas obtiene una mejor puntuación que
alert
la cadena de salida, pero es el mejor enfoque que pude encontrar ...: /Bytes:
60
Distancia clave:
128
fuente
alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)
mientras esto funciona, son 65 bytes (puntaje 231).Bash + Sed, 151
fuente
Python,
157,156,211, 221 puntosDistancia clave: 157
Bytes: 64
Ergo, el puntaje total es 221.
Imprime la cadena pero tiene que agregar un espacio extra. :( ahora más largo.
¿Por qué @Pietu, por qué me hiciste esto?
fuente
JavaScript, puntuación
156187Nada mal para JavaScript
Pruébalo en línea
Con alerta, puntúa 186
fuente
Jolf , 118 + 51 = 169
Pruébalo aquí! (subrayado en la explicación utilizada para denotar un espacio utilizado)
Jolf, actualización posterior a la pregunta, 76 + 21 = 97
Pruébalo aquí ! Nuevamente, no suelo actualizar mi código hasta que sea relevante. Sigue siendo divertido.
fuente
Bash + sed, puntaje
202200fuente
Python, puntaje 185
fuente