โดยปกติแล้วความท้าทายจะได้คะแนนเป็นไบต์หรือบางครั้งระยะทางของ Levenshtein แต่สำหรับสิ่งนี้เรากำลังใช้ระยะทางบนแป้นพิมพ์ - จำนวนของปุ่มระหว่างแป้นที่ใช้ในการพิมพ์โปรแกรม (ใช้แป้นพิมพ์ด้านบนเป็นข้อมูลอ้างอิงที่ชัดเจน) ยกตัวอย่างเช่นระยะห่างระหว่างAและF3 เพราะเส้นทางA=> S=> =>D Fระยะห่างระหว่างNและ5คือ 4 เพราะไม่ว่าคุณจะใช้เส้นทางใดมันต้องมีอย่างน้อย 4 ขั้นตอน งานของคุณคือการส่งออกต่อไปนี้ (ไม่รวมถึงช่องว่างต่อท้าย) โดยมีระยะทางแป้นพิมพ์เล็กที่สุดเท่าที่จะทำได้:
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
ห่อ:
เพื่อให้ชีวิตของคุณง่ายขึ้นบางปุ่มสามารถพันรอบแป้นพิมพ์ได้ Left ShiftตัดไปRight Shift, Caps LockตัดไปEnter, Tabตัดไป\และตัดไป~ Backspaceยกตัวอย่างเช่นระยะห่างระหว่างQและP5 เพราะQ=> Tab=> \=> ]=> =>[P
หมายเหตุ: การตัดการทำงานในแนวนอนเท่านั้น - คุณไม่สามารถก้าวจากพูด\ถึงCaps Lock
เกณฑ์การให้คะแนน:
คะแนน = ระยะทางแป้นพิมพ์ + จำนวนไบต์
ตัวอย่างการคำนวณ:
print(5);
- p=> r== 6
- r=> i== 4
- i=> n== 2
- n=> t== 3
- t=> (== 4
- (=> 5== 4
- 5=> )== 5
- )=> ;== 2
ทั้งหมด: 30 + 9 = 39
หมายเหตุ:
- ตัวอักษรพิมพ์เล็กและตัวพิมพ์ใหญ่นับเป็นรหัสเดียวกัน หากคีย์มีสองสัญลักษณ์บนมัน (เช่น7และ&) พวกเขาจะนับเป็นคีย์เดียวกันโดยไม่จำเป็นต้องรวมการกด Shift
- น่าเสียดายที่หากรหัสของคุณต้องการสัญลักษณ์ที่ไม่ได้อยู่บนแป้นพิมพ์คุณจะไม่สามารถใช้งานได้
- บนรูปภาพแป้นพิมพ์แถวบนสุดสามารถถูกละเว้นได้ ปุ่มเดียวที่คุณสามารถใช้ในแถวล่างคือSpace
- ต้องป้อนคีย์ตามลำดับคุณไม่สามารถใช้ปุ่มลูกศรเพื่อย้ายเครื่องหมายรูปหมวกแล้วใส่รหัส
เครื่องคำนวณคะแนน:
- อัปเดตเมื่อวันที่ 12/27 เพื่อแก้ไข`=> ]และการคำนวณที่เกี่ยวข้อง ตรวจสอบคะแนนของคุณอีกครั้งและพวกเขาจะมีขนาดเล็กลง (หวังว่าจะไม่ใหญ่กว่า!)
วางรหัสของคุณที่นี่เพื่อคำนวณคะแนน แจ้งให้เราทราบหากคุณพบข้อผิดพลาดหรือพิมพ์ออกมาผิดเลข
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>
ที่เกี่ยวข้อง:
===
เว้นแต่ด้วยเหตุผลบางอย่างที่คุณต้องการให้ JS ลอบยั่วยุประเภทของคุณและดูดประสิทธิภาพ