Normalement, les défis sont notés en octets, ou parfois en distance Levenshtein, mais pour celui-ci, nous utilisons la distance du clavier - le nombre de touches entre les touches utilisées pour taper le programme (utilisez le clavier ci-dessus comme référence définitive). Par exemple, la distance entre Aet Fest 3, car le chemin est A=> S=> D=> F. La distance entre Net 5est de 4, car peu importe le chemin que vous empruntez, cela nécessite au moins 4 étapes. Votre tâche consiste à générer les éléments suivants (sans inclure les espaces de fin), avec une distance de clavier aussi petite que possible:
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
Emballage:
Pour vous faciliter la vie, certaines touches peuvent s'enrouler autour du clavier. Left Shiftretourne à Right Shift, Caps Lockretourne à Enter, Tabretourne à \et ~retourne à Backspace. Par exemple, la distance entre Qet Pest 5, car Q=> Tab=> \=>] => [=> P.
Remarque: emballage ne fonctionne que horizontalement - vous ne pouvez pas passer de, disons, \àCaps Lock
Notation:
Score = distance du clavier + nombre d'octets
Exemple de calcul:
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 .
Remarques:
- Les lettres minuscules et majuscules comptent comme la même clé. Si une clé comporte deux symboles (comme 7et& ), ils comptent également comme la même touche, pas besoin d'inclure la poussée de décalage.
- Malheureusement, si votre code nécessite des symboles qui ne sont pas sur le clavier, vous ne pouvez pas l'utiliser.
- Sur l'image du clavier, la ligne supérieure peut être ignorée. La seule clé que vous pouvez utiliser sur la ligne du bas estSpace
- Les clés doivent être saisies dans l'ordre, vous ne pouvez pas utiliser les touches fléchées pour déplacer le curseur, puis saisir une clé.
Calculatrice de score:
- Mis à jour le 27/12 pour corriger `=> ]et les erreurs de calcul associées. Vérifiez à nouveau vos scores, et ils seront probablement plus petits (espérons-le pas plus grands!)
Collez ici votre code pour calculer le score. Faites-moi savoir si vous obtenez une erreur ou s'il imprime le mauvais numéro.
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>
En relation:
la source
===
sauf si pour une raison quelconque vous voulez que JS contraigne sournoisement vos types et augmente les performances.Réponses:
Pyth, partition
107106102Essayez-le en ligne.
la source
Unaire , score ~ 6,1 * 10 618
6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros
Ce n'est pas la solution la plus "créative" mais il a fallu à mon ordinateur ~ 3 minutes pour convertir la représentation en base 2 de celle-ci en base 10
Cela avait un score de 0 , mais les règles de notation changé.
Longueur du code: ~ 6,1 * 10618
Distance clé: 0
la source
Japt , partition
123119118116106424140 octets +8178777566 distance(sortie correcte dans la case "sortie")
la source
"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z
(<br>
représente un saut de ligne), mais cela nécessite deux caractères non-clavier, donc je suppose que ce n'est pas légal. Mais au moins, vous pouvez supprimer la virgule, car elle est automatiquement insérée.JavaScript (ES6), score 188
Obtient à peine un meilleur score que
alert
la chaîne de sortie, mais c'est la meilleure approche que j'ai pu trouver ...: /Octets:
60
Distance clé:
128
la source
alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)
Pendant que cela fonctionne, c'est 65 octets (score 231).Bash + Sed, 151
la source
Python,
157,156,211, 221 pointsDistance clé: 157
Octets: 64
Ergo, le score total est de 221.
Imprime la chaîne mais doit ajouter un espace supplémentaire. :( maintenant plus longtemps.
Pourquoi @Pietu, pourquoi m'as-tu fait ça?
la source
JavaScript, score
156187Pas mal pour JavaScript
Essayez-le en ligne
Avec alerte, marque 186
la source
Jolf , 118 + 51 = 169
Essayez-le ici! (souligne l'explication utilisée pour désigner un espace utilisé)
Jolf, mise à jour post-question, 76 + 21 = 97
Essayez-le ici ! Encore une fois, je ne mets pas souvent à jour mon code tant qu'il n'est pas pertinent. Toujours amusant.
la source
Bash + sed, score
202200la source
Python, score 185
la source