Wyzwania są zwykle oceniane w bajtach lub czasami w odległości Levenshteina, ale w tym przypadku używamy odległości klawiatury - liczby klawiszy między klawiszami użytymi do wpisania programu (użyj powyższej klawiatury jako ostatecznego odniesienia). Na przykład odległość między Ai Fwynosi 3, ponieważ ścieżka wynosi A=> S=> D=> F. Odległość między Ni 5wynosi 4, ponieważ bez względu na wybraną ścieżkę wymaga co najmniej 4 kroków. Twoim zadaniem jest wyprowadzenie następujących danych (bez spacji końcowych), przy możliwie jak najmniejszej odległości klawiatury:
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
Zawijanie:
Aby ułatwić Ci życie, niektóre klawisze mogą owijać się wokół klawiatury. Left Shiftotacza Right Shift, Caps Lockotacza Enter, Tabotacza \i ~otacza Backspace. Na przykład odległość między Qi Pwynosi 5, ponieważ Q=> Tab=> \=> ]=> [=> P.
Uwaga: Zawijanie działa tylko w poziomie - nie można przejść od, powiedzmy, \doCaps Lock
Punktacja:
Wynik = odległość klawiatury + liczba bajtów
Przykładowe obliczenia:
print(5);
- p=> r== 6
- r=> i== 4
- i=> n== 2
- n=> t== 3
- t=> (== 4
- (=> 5== 4
- 5=> )== 5
- )=> ;== 2
Razem: 30 + 9 = 39 .
Uwagi:
- Małe i wielkie litery liczą się jako ten sam klawisz. Jeśli klucz ma dwa symbole (jak 7i &), są one również liczone jako ten sam klucz, nie trzeba włączać zmiany biegów.
- Niestety, jeśli twój kod wymaga symboli, których nie ma na klawiaturze, nie możesz go użyć.
- Na obrazie z klawiatury górny rząd można zignorować. Jedynym kluczem, którego możesz użyć w dolnym rzędzie, jestSpace
- Klucze należy wprowadzać w kolejności, nie można użyć klawiszy strzałek, aby przesunąć kursor, a następnie wprowadzić klucz.
Kalkulator wyników:
- Zaktualizowano 27/27, aby naprawić `=> ]i powiązane błędy w obliczeniach. Sprawdź ponownie swoje wyniki, a prawdopodobnie będą mniejsze (mam nadzieję, że nie większe!)
Wklej tutaj swój kod, aby obliczyć wynik. Daj mi znać, jeśli kiedykolwiek wystąpi błąd lub zostanie wydrukowany niewłaściwy numer.
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>
Związane z:
źródło
===
chyba że z jakiegoś powodu chcesz , aby JS podstępnie wymuszał na twoim typie i ssał wydajność.Odpowiedzi:
Pyth, wynik
107106102Wypróbuj online.
źródło
Unary , wynik ~ 6,1 * 10 618
6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros
Nie jest to najbardziej „kreatywne” rozwiązanie, ale zajęło mojemu komputerowi około 3 minut, aby przekonwertować reprezentację base 2 na 10
To kiedyś mają punktację 0 , ale zasady punktacji zmienić.
Długość kodu: ~ 6,1 * 10 618
Odległość klucza: 0
źródło
Japt , wynik
123119118116106424140 bajtów +8178777566 odległość(właściwe wyjście w polu „wyjście”)
źródło
"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z
(<br>
reprezentuje podział wiersza), ale wymaga to dwóch znaków innych niż klawiatura, więc myślę, że to nie jest legalne. Ale przynajmniej możesz usunąć przecinek, ponieważ jest on automatycznie wstawiany.JavaScript (ES6), wynik 188
Zaledwie ledwie osiąga lepszy wynik niż
alert
ciąg wyjściowy, ale jest to najlepsze podejście, jakie mogłem znaleźć ...: /Bajty:
60
Kluczowa odległość:
128
źródło
alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)
Chociaż działa, to 65 bajtów (wynik 231).Bash + Sed, 151
źródło
Python,
157,156,211, 221 punktówOdległość klucza: 157
Bajty: 64
Ergo, łączny wynik to 221.
Drukuje ciąg, ale musi dodać dodatkową spację. :( już dłużej.
Dlaczego @Pietu, dlaczego mi to zrobiłeś?
źródło
JavaScript, wynik 156
187Nieźle jak na JavaScript
Wypróbuj online
Zaalarmuj, zdobądź 186
źródło
Jolf , 118 + 51 = 169
Wypróbuj tutaj! (w objaśnieniu podkreślono używane miejsce)
Jolf, aktualizacja po pytaniu, 76 + 21 = 97
Wypróbuj tutaj ! Ponownie często nie aktualizuję kodu, dopóki nie jest odpowiedni. Wciąż fajnie.
źródło
Bash + sed, wynik
202200źródło
Python, wynik 185
źródło