Normalerweise werden Herausforderungen in Bytes oder manchmal in Levenshtein-Entfernung gewertet, aber für diese verwenden wir die Tastaturentfernung - die Anzahl der Tasten zwischen den Tasten, die zum Eingeben des Programms verwendet werden (verwenden Sie die obige Tastatur als endgültige Referenz). Zum Beispiel ist der Abstand zwischen Aund F3, weil der Pfad A=> S=> D=> ist F. Der Abstand zwischen Nund 5beträgt 4, da unabhängig vom eingeschlagenen Weg mindestens 4 Schritte erforderlich sind. Ihre Aufgabe ist es, Folgendes (ohne nachfolgende Leerzeichen) mit möglichst geringem Tastaturabstand auszugeben:
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
Verpackung:
Um Ihnen das Leben zu erleichtern, können bestimmte Tasten die Tastatur umschließen. Left Shiftwickelt sich auf Right Shift, Caps Lockwickelt sich auf Enter, Tabwickelt sich auf \und ~wickelt sich auf Backspace. Zum Beispiel ist der Abstand zwischen Qund P5, weil Q=> Tab=> \=> ]=> [=> P.
Hinweis: Das Umwickeln funktioniert nur horizontal - Sie können beispielsweise nicht von \zu gehenCaps Lock
Wertung:
Score = Tastaturabstand + Byteanzahl
Beispielberechnung:
print(5);
- p=> r== 6
- r=> i== 4
- i=> n== 2
- n=> t== 3
- t=> (== 4
- (=> 5== 4
- 5=> )== 5
- )=> ;== 2
Gesamt: 30 + 9 = 39 .
Anmerkungen:
- Klein- und Großbuchstaben gelten als derselbe Schlüssel. Wenn auf einer Taste zwei Symbole (wie 7und &) stehen, gelten diese auch als dieselbe Taste, ohne dass Sie die Umschalttaste drücken müssen.
- Wenn Ihr Code Symbole erfordert, die sich nicht auf der Tastatur befinden, können Sie ihn leider nicht verwenden.
- Auf dem Tastaturbild kann die obere Zeile ignoriert werden. Der einzige Schlüssel, den Sie in der unteren Reihe verwenden können, istSpace
- Die Schlüssel müssen der Reihe nach eingegeben werden. Sie können die Pfeiltasten nicht zum Bewegen des Einfügemarke und dann zum Eingeben eines Schlüssels verwenden.
Punkterechner:
- Aktualisiert am 27.12., Um `=> ]und damit verbundene Fehlkalkulationen zu beheben . Überprüfe deine Punktzahlen noch einmal und sie werden wahrscheinlich kleiner sein (hoffentlich nicht größer!)
Fügen Sie hier Ihren Code ein, um die Punktzahl zu berechnen. Lassen Sie mich wissen, wenn Sie jemals eine Fehlermeldung erhalten oder die falsche Nummer ausgedruckt wird.
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>
Verbunden:
===
sei denn, Sie möchten aus irgendeinem Grund, dass JS Ihre Typen heimlich dazu zwingt, Leistung zu erbringen.