พิมพ์แป้นพิมพ์ QWERTY โดยใช้ปุ่มที่อยู่ติดกันให้มากที่สุด


19

ป้อนคำอธิบายรูปภาพที่นี่

โดยปกติแล้วความท้าทายจะได้คะแนนเป็นไบต์หรือบางครั้งระยะทางของ 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

หมายเหตุ:

  1. ตัวอักษรพิมพ์เล็กและตัวพิมพ์ใหญ่นับเป็นรหัสเดียวกัน หากคีย์มีสองสัญลักษณ์บนมัน (เช่น7และ&) พวกเขาจะนับเป็นคีย์เดียวกันโดยไม่จำเป็นต้องรวมการกด Shift
  2. น่าเสียดายที่หากรหัสของคุณต้องการสัญลักษณ์ที่ไม่ได้อยู่บนแป้นพิมพ์คุณจะไม่สามารถใช้งานได้
  3. บนรูปภาพแป้นพิมพ์แถวบนสุดสามารถถูกละเว้นได้ ปุ่มเดียวที่คุณสามารถใช้ในแถวล่างคือSpace
  4. ต้องป้อนคีย์ตามลำดับคุณไม่สามารถใช้ปุ่มลูกศรเพื่อย้ายเครื่องหมายรูปหมวกแล้วใส่รหัส

เครื่องคำนวณคะแนน:

  • อัปเดตเมื่อวันที่ 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>

ที่เกี่ยวข้อง:


9
เราควรสร้างความท้าทายอื่น: รหัสที่สั้นที่สุดเพื่อให้คะแนนคำตอบเช่นนี้ ฉันคิดว่าวิธีการให้คะแนนน่าสนใจกว่าคำถาม
Cyoce

2
นอกจากนี้โปรดให้ความรักในการใช้งานของพระเจ้า===เว้นแต่ด้วยเหตุผลบางอย่างที่คุณต้องการให้ JS ลอบยั่วยุประเภทของคุณและดูดประสิทธิภาพ
Cyoce

5
การส่งใด ๆ ใน Unary / Lenguage จะมีคะแนน 0
เดนนิส

1
@Dennis เป็นไปได้ไหมที่จะตอบคำถามนี้ในภาษาเหล่านั้น? ฉันสามารถใส่ความยาวสูงสุดของโปรแกรมได้
geokavel

3
idk ฉันคิดว่ามันไม่ได้อยู่ในจิตวิญญาณของสิ่งต่าง ๆ เพื่อกำจัดภาษาที่สร้างสรรค์และถูกต้องบนพื้นดินว่ามัน ... ใช้งานได้? สิ่งที่ภาษาดีหรือไม่? ดูเหมือนจะไม่แตกต่างจากการกำจัด CJam หรือ Pyth เพราะคำตอบของพวกเขาสั้นเกินไปหรือกำจัดจอประสาทตาสำหรับคำถามจับคู่ข้อความและใช่มันทำให้ฉันรู้สึกแปลก ๆ ที่คำตอบยอดนิยมกลายเป็นโมฆะเมื่อถูกโพสต์ ท้าทาย. ฉันสนุกกับการแบ่งปันคำตอบเช่นนี้เมื่อภาษาแสดงออกมาจริงๆ
djechlin

คำตอบ:



33

เอกนารีคะแนน ~ 6.1 * 10 618

6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros

ไม่ใช่วิธี "สร้างสรรค์" มากที่สุด แต่ใช้เวลาคอมพิวเตอร์ของฉันประมาณ 3 นาทีในการแปลงการแสดงฐาน 2 เป็นฐาน 10


สิ่งนี้เคยมีคะแนนเป็น0แต่กฎการให้คะแนนเปลี่ยนไป

ความยาวรหัส: ~ 6.1 * 10 618

ระยะทางที่สำคัญ: 0


3
ฮ่า ๆ ๆ ฉันไม่เข้าใจว่ามันใช้งานได้อย่างไร
geokavel

1
@geokavel Aww :( แต่ไม่ถูกต้องมันก็จะมีมากคะแนนสูง
Downgoat

ใช่ป่วยให้ upvote
geokavel

3 นาที? คุณต้องแปลงที่ดีขึ้น : P
Dennis

2
ฉันเลื่อนไปที่จุดสิ้นสุดของบล็อกรหัสของคุณ ฉันคิดว่ารหัสคือ 61032477390907355804 .... ไม่ใช่ 61032477390907355804 ... ศูนย์ : P
Rɪᴋᴇʀ

6

Japter , คะแนน123 119 118 116 106

42 41 40 ไบต์ + 81 78 77 75 66 ระยะทาง

"QWERTYUIOP
ASDFGHJKL
'ZXCVBNM"q qS r''"

(เอาต์พุตที่เหมาะสมในกล่อง "เอาท์พุท")


1
คะแนนของคุณยังคงเหมือนเดิม
geokavel

@geo recalced แล้ว :)
nicael

@geo Btw คุณสามารถแก้ไขคะแนนได้ทันที
nicael

เยี่ยมมาก! คุณสามารถทำได้"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z( <br>แสดงถึงตัวแบ่งบรรทัด) แต่ต้องมีตัวอักษรที่ไม่ใช่ตัวอักษรสองตัวดังนั้นฉันคิดว่ามันไม่ถูกกฎหมาย แต่อย่างน้อยคุณก็สามารถลบเครื่องหมายจุลภาคได้เนื่องจากมันจะถูกแทรกโดยอัตโนมัติ
ETHproductions

@ ยอดเยี่ยมขอบคุณมาก! สำหรับการขึ้นบรรทัดใหม่อย่าคิดว่าฉันเป็น noob ในรูปแบบ HTML; D
nicael

6

JavaScript (ES6) คะแนน 188

alert([...`QWERTYUIOP
ASDFGHJKL
`," Z",..."XCVBNM"].join` `)

เพียง แต่เพิ่งได้รับคะแนนที่ดีกว่าalertไอเอ็นจีสตริงเอาท์พุท แต่มันเป็นวิธีที่ดีที่สุดที่ฉันสามารถหา ... : /

ไบต์: 60

ระยะทางที่สำคัญ: 128


ฉันลองใช้ apporach รุ่นที่แก้ไขแล้ว: alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)ในขณะที่ใช้งานได้ 65 ไบต์ (คะแนน 231)
ETHproductions

2
คะแนนของคุณตอนนี้เล็กลง 1 คะแนน ..
geokavel

5

Bash + Sed, 151

sed 'sb *.b& bg'<<<'QWERTYUIOP
 ASDFGHJKL
  ZXCVBNM'

ยินดีด้วยคะแนนของคุณต่ำกว่า 1 คะแนนด้วยการนับการนับใหม่
geokavel

1
@geokavel ขอบคุณ - คงที่
Alexander Vogt

5

Python, 157 , 156 , 211 , 221 คะแนน

ระยะทางที่สำคัญ: 157

ไบต์: 64

เออร์โกคะแนนรวมคือ 221

l=' '.join('QWERTYUIOP\nASDFGHJKL\nZXCVBNM')
print l[:42],l[42:]

พิมพ์สตริง แต่ต้องเพิ่มพื้นที่พิเศษ :( อีกต่อไปแล้ว

ทำไม @Pietu ทำไมคุณถึงทำกับฉัน


3
คะแนนของคุณต่ำกว่า 1
geokavel

โอ้โห ขอบคุณ @geokavel มีอะไรเปลี่ยนแปลงในกฎ
Rɪᴋᴇʀ

ไม่ใช่กฎมีข้อผิดพลาดในเครื่องคิดเลข
geokavel

นี่พิมพ์หนึ่งช่องว่างมากเกินไปในการเริ่มต้นของบรรทัดที่สาม
PurkkaKoodari

คุณทำลายความหวังของฉันด้วยคำพูดที่แท้จริงของคุณ แต่ขอบคุณสำหรับการชี้ให้เห็นว่า
Rɪᴋᴇʀ

5

JavaScript, คะแนน 156 187

[...`QWERTYUIOP
ASDFGHJKL`].join` `+`
  Z X C V B N M`

ไม่เลวสำหรับ JavaScript

ลองออนไลน์


ด้วยการแจ้งเตือนคะแนน 186

alert([...`QWERTYUIOP
ASDFGHJKL`].join` `+`
  Z X C V B N M`)


แต่มันไม่ได้พิมพ์สตริงใช่มั้ย
nicael

@nicael ฉันสามารถอ้างว่าฉันใช้สภาพแวดล้อมนี้ซึ่งมีการพิมพ์ / ส่งออกโดยนัย
Downgoat

1
คะแนนต่ำกว่า 1
geokavel

@geokavel ขอบคุณคง
Downgoat

3
คิดค้นสภาพแวดล้อมของคุณเองเพื่อให้ได้ผลผลิตออกมาใช่มั้ย Anyways, เป็นไปได้ที่จะลดลงนี้โดยไบต์
ETHproductions

4

Jolf , 118 + 51 = 169

ลองที่นี่! (ขีดล่างในคำอธิบายที่ใช้เพื่อแสดงถึงพื้นที่ที่ใช้)

R m{"QWERTYUIOP'ASDFGHJKL'ZXCVBNM"#DN+*S' RH' }"\n"
 _m                                                 map
   {"QWERTYUIOP'ASDFGHJKL'ZXCVBNM"#                  that array
                                   DN         }      with this function
                                     +*S'_            that concats (index many) spaces
                                          RH'_         with the inner array joined by spaces
R                                                    and join that
                                                      "\n"  with newlines

Jolf, อัปเดตโพสต์คำถาม, 76 + 21 = 97

ลองที่นี่ ! อีกครั้งฉันมักจะไม่อัปเดตรหัสของฉันจนกว่าจะมีความเกี่ยวข้อง ยังคงสนุก

R mpHDN+*S' RH' }"\n"
 _m                   map
   pH                 the keyboard array [["Q","W",...,"P"],["A",...,"L"],["Z",...,"M"]]
     DN         }      with this function
       +*S'_            that concats (index many) spaces
            RH'_         with the inner array joined by spaces
R                     and join that
                 "\n"  with newlines

4

Bash + sed คะแนน202 200

sed 's/\([^ ]\)/\1 /g'<<F
QWERTYUIOP
 ASDFGHJKL
  ZXCVBNM
F

1
คะแนนของคุณลดลง 2!
geokavel

@ geokavel ขอบคุณและตอนนี้ได้รับการแก้ไขแล้ว
user2064000

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.