Biasanya, tantangan diberi skor dalam byte, atau kadang-kadang jarak Levenshtein, tetapi untuk yang ini kami menggunakan jarak keyboard - jumlah tombol di antara tombol yang digunakan untuk mengetik program (gunakan keyboard di atas sebagai referensi definitif). Misalnya, jarak antara Adan Fadalah 3, karena jalurnya adalah A=> S=> D=> F. Jarak antara Ndan 5adalah 4, karena apa pun jalur yang Anda ambil, diperlukan setidaknya 4 langkah. Tugas Anda adalah menampilkan yang berikut (tidak termasuk spasi tambahan), dengan jarak keyboard sekecil mungkin:
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
Pembungkus:
Untuk membuat hidup Anda lebih mudah, tombol-tombol tertentu dapat membungkus keyboard. Left Shiftwraps to Right Shift, Caps Lockwraps to Enter, Tabwraps to \dan ~wraps to Backspace. Misalnya, jarak antara Qdan P5, karena Q=> Tab=> \=> ]=> [=> P.
Catatan: Membungkus hanya berfungsi secara horizontal - Anda tidak dapat melangkah dari, misalnya, \keCaps Lock
Mencetak:
Nilai = Jarak keyboard + jumlah byte
Contoh Perhitungan:
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 .
Catatan:
- Huruf kecil dan huruf besar dihitung sebagai tombol yang sama. Jika kunci memiliki dua simbol di atasnya (seperti7 dan &), mereka juga dihitung sebagai kunci yang sama, tidak perlu memasukkan tombol shift.
- Sayangnya, jika kode Anda memerlukan simbol yang tidak ada di keyboard, Anda tidak dapat menggunakannya.
- Pada gambar keyboard, baris atas dapat diabaikan. Satu-satunya kunci yang dapat Anda gunakan di baris bawah adalahSpace
- Kunci harus dimasukkan agar, Anda tidak dapat menggunakan tombol panah untuk memindahkan tanda sisipan dan kemudian memasukkan kunci.
Skor Kalkulator:
- Diperbarui pada 12/27 untuk memperbaiki `=> ]dan salah perhitungan terkait. Periksa kembali skor Anda, dan nilainya akan lebih kecil (semoga tidak lebih besar!)
Rekatkan kode Anda di sini untuk menghitung skor. Beri tahu saya jika Anda pernah mendapatkan kesalahan atau mencetak nomor yang salah.
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>
Terkait:
sumber
===
kecuali karena alasan tertentu Anda ingin JS secara diam-diam memaksa tipe Anda dan menyedot kinerja.Jawaban:
Pyth, skor
107106102Cobalah online.
sumber
Unary , skor ~ 6.1 * 10 618
6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros
Bukan solusi yang paling "kreatif" tetapi butuh komputer saya ~ 3 menit untuk mengubah representasi basis 2 ini ke basis 10
Ini digunakan untuk memiliki skor 0 , tetapi aturan penilaian berubah.
Panjang Kode: ~ 6.1 * 10 618
Jarak Kunci: 0
sumber
Japt , skor
123119118116106424140 byte +8178777566 jarak(output yang tepat di kotak "output")
sumber
"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z
(<br>
mewakili penghentian baris), tetapi itu membutuhkan dua karakter non-keyboard, jadi saya rasa itu tidak sah. Tetapi setidaknya Anda dapat menghapus koma, karena dimasukkan secara otomatis.JavaScript (ES6), skor 188
Hanya saja nyaris mendapat skor lebih baik dari
alert
menggunakan string output tetapi itu pendekatan terbaik yang bisa saya temukan ...: /Bytes:
60
Jarak kunci:
128
sumber
alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)
Sementara ini berfungsi, itu adalah 65 byte (skor 231).Bash + Sed, 151
sumber
Python,
157,156,211, 221 poinJarak Kunci: 157
Bytes: 64
Ergo, skor total 221.
Mencetak string tetapi harus menambahkan ruang ekstra. :( sekarang lebih lama.
Kenapa @Pietu, kenapa kamu melakukan ini padaku?
sumber
JavaScript, skor 156
187Tidak buruk untuk JavaScript
Cobalah online
Dengan waspada, skor 186
sumber
Jolf , 118 + 51 = 169
Coba di sini! (menggarisbawahi dalam penjelasan yang digunakan untuk menunjukkan ruang yang digunakan)
Jolf, perbarui post-question, 76 + 21 = 97
Coba di sini ! Sekali lagi, saya tidak sering memperbarui kode saya sampai relevan. Masih menyenangkan.
sumber
Bash + sed, skor
202200sumber
Python, skor 185
sumber