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:
quelle
===
sei denn, Sie möchten aus irgendeinem Grund, dass JS Ihre Typen heimlich dazu zwingt, Leistung zu erbringen.Antworten:
Pyth, Punktzahl
107106102Probieren Sie es online aus.
quelle
Unär , Punktzahl ~ 6,1 * 10 618
6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros
Nicht die "kreativste" Lösung, aber es dauerte ungefähr 3 Minuten, bis mein Computer die Darstellung von Basis 2 auf Basis 10 konvertierte
Dies hatte früher eine Punktzahl von 0 , aber die Bewertungsregeln wurden geändert.
Codelänge: ~ 6,1 * 10 618
Tastenabstand: 0
quelle
Japt , Punktzahl
123119118116106424140 Bytes +8178777566 Entfernung(richtige Ausgabe im Feld "Ausgabe")
quelle
"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z
(<br>
stellt einen Zeilenumbruch dar), aber das erfordert zwei Zeichen, die nicht auf der Tastatur stehen. Ich denke, das ist nicht legal. Sie können aber zumindest das Komma entfernen, da es automatisch eingefügt wird.JavaScript (ES6), Punktzahl 188
Nur knapp eine bessere Punktzahl als
alert
die Ausgabe-Zeichenfolge, aber es ist der beste Ansatz, den ich finden konnte ...: /Bytes:
60
Schlüsselabstand:
128
quelle
alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)
Während dies funktioniert, sind es 65 Bytes (231 Punkte).Bash + Sed, 151
quelle
Python,
157,156,211, 221 PunkteSchlüsseldistanz: 157
Bytes: 64
Ergo ist die Gesamtpunktzahl 221.
Druckt die Zeichenfolge, muss jedoch ein zusätzliches Leerzeichen einfügen. :( jetzt länger.
Warum @Pietu, warum hast du mir das angetan?
quelle
JavaScript, Score 156
187Nicht schlecht für JavaScript
Probieren Sie es online aus
Mit Alarm, Punktzahl 186
quelle
Jolf , 118 + 51 = 169
Probieren Sie es hier aus! (Unterstriche in der Erklärung, die verwendet wird, um einen verwendeten Raum zu bezeichnen)
Jolf, Update nach der Frage, 76 + 21 = 97
Probieren Sie es hier aus ! Auch hier aktualisiere ich meinen Code nicht oft, bis er relevant ist. Immer noch Spaß.
quelle
Bash + sed, Punktzahl
202200quelle
Python, Punktzahl 185
quelle