Обычно вызовы оцениваются в байтах, а иногда и по расстоянию Левенштейна, но для этого мы используем расстояние клавиатуры - количество клавиш между клавишами, используемыми для ввода программы (используйте указанную клавиатуру в качестве окончательного ориентира). Например, расстояние между Aи Fравно 3, потому что путь равен 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и Pравно 5, потому что 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 скрытно принуждал ваши типы и высасывал производительность.Ответы:
Pyth, оценка
107106102Попробуйте онлайн.
источник
Одинарный , оценка ~ 6,1 * 10 618
6103247739090735580402225797524292167653462388595033897325606983093527722629493568418069722646005695215642120674994001348606253869287599178270707482456199630901069511698694317195626565008736452130034232375778047932461822258369348260249011643486476832847755830117284465136723525376668555270734061914837886192012601522703308221225195058283657800958507281265116257152529161080096092081620384043514820427911786442536988705847468796481108000358361636640985892696216392434604543586511103835032034494033598102606339253132146827455065586119645920456668064941286708686113567081095434338440184737976711767750474398662381256908308 zeros
Не самое «креативное» решение, но моему компьютеру потребовалось ~ 3 минуты, чтобы преобразовать представление из базы 2 в базу 10
Эта используется , чтобы иметь оценку 0 , но правила скоринга изменились.
Длина кода: ~ 6,1 * 10 618
Ключевое расстояние: 0
источник
Japt , оценка
123119118116106424140 байт +8178777566 расстояние(правильный вывод в поле «вывод»)
источник
"QWERTYUIOP<br>ASDFGHJKL<br>ZXCVBNM"¬¸r'Z" Z
(<br>
представляет разрыв строки), но это требует двух символов без клавиатуры, поэтому я думаю, что это не законно. Но по крайней мере вы можете удалить запятую, так как она автоматически вставляется.JavaScript (ES6), оценка 188
Только едва получает лучший результат, чем
alert
вывод строки, но это лучший подход, который я мог найти ...: /Б:
60
Ключевое расстояние:
128
источник
alert(`QWERTYUIOP<br>ASDFGHJKL<br> ZXCVBNM`.match(/\n| ?./g).join` `)
хотя это работает, это 65 байт (оценка 231).Баш + Сед, 151
источник
Питон,
157,156,211, 221 баллКлючевое Расстояние: 157
Байт: 64
Ergo, общий балл 221.
Печатает строку, но должен добавить дополнительный пробел. :( теперь дольше.
Почему @Pietu, почему ты сделал это со мной?
источник
JavaScript, оценка 156
187Неплохо для JavaScript
Попробуйте онлайн
С предупреждением, оценка 186
источник
Джольф , 118 + 51 = 169
Попробуй это здесь! (подчеркивание в объяснении используется для обозначения используемого пространства)
Джольф, обнови пост-вопрос, 76 + 21 = 97
Попробуй это здесь ! Опять же, я не часто обновляю свой код, пока не уместен. Все еще весело.
источник
Баш + седь, оценка
202200источник
Питон, оценка 185
источник