Соревнование
Цель этой задачи - определить, можно ли набирать данную строку, используя только одну строку стандартной британской QWERTY-клавиатуры.
Это code golf
самое короткое решение в байтах!
IO
Ввод будет одной строкой из нуля или более символов в десятичном диапазоне ASCII от 32 до 126 включительно. Для этой задачи вы можете предположить, что пустая строка не требует ввода и, следовательно, может быть набрана с помощью одной строки.
Вы можете принять ввод в виде строки, списка символов или эквивалентной формы для вашего языка.
Вывод должен быть истинным значением для любой строки, которая может быть набрана с использованием одной строки, или ложью для строки, которая не может.
Раскладка клавиатуры
Чтобы прояснить любую неоднозначность относительно того, какая стандартная раскладка клавиатуры приведена ниже, приведен список клавиш, доступных в каждой строке, включая альтернативные верхние клавиши (доступ к которым осуществляется с помощью клавиши shift).
- Строка 1
- Стандарт:
`1234567890-=
- Стандарт:
- Линия 2
- Стандарт:
qwertyuiop[]
- Стандарт:
- Линия 3
- Стандарт:
asdfghjkl;'#
- Верхний регистр:
ASDFGHJKL
- Специальный: Caps Lock
- Стандарт:
- Строка 4
- Стандарт:
\zxcvbnm,./
- Alternate:
|<>?
- Верхний регистр:
ZXCVBNM
- Специальный: Shift
- Стандарт:
- Строка 5
- Специальный: пробел
Альтернативные верхние клавиши могут быть нажаты только в том случае, если Shift также находится в той же строке, а клавиши в верхнем регистре доступны только через Caps Lock или Shift. Вы действительно можете использовать только одну линию клавиатуры!
Контрольные примеры
-> true (empty string)
45-2=43 -> true (line 1)
qwerty -> true (line 2)
tryitout -> true (line 2)
Qwerty -> false (no shift or caps on line 2)
#sad -> true (line 3)
AsDf -> true (caps lock used)
@sDF -> false (no shift for alternate upper)
zxcvbn? -> true (line 4)
zxc vbn -> false (spacebar on separate line)
123abc -> false (multiple lines)
-> true (just space bar)
!!! -> false (exclamation marks cannot be printed by a single line)
источник
Ответы:
Python 2 ,
130123121115 байтовПопробуйте онлайн!
Python 3 , 111 байт
Попробуйте онлайн!
-4 байта, благодаря nedla2004
источник
Retina 0.8.2 ,
7271 байтПопробуйте онлайн! Объяснение: Каждое чередование соответствует отдельному ряду клавиатуры. В
(?i)
середине шаблона происходит сопоставление всего остального шаблона без учета регистра. Редактировать: 1 байт сохранен благодаря @KirillL.источник
opqr
можно изменитьo-r
на -1. Кроме того, вы забыли символ обратной черты для строки 1, я не вижу этого?[][...
:)05AB1E ,
6647 байтПринимает ввод в виде списка символов.
-19 байт благодаря @Emigna . Полностью забыл, что у нас были постоянные встроенные функции qwerty-клавиатуры. : D
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Perl 5
-pl
, 76 байтПопробуйте онлайн!
Очевидный подход регулярного выражения.
источник
Рубин
-n
,8681 байтПопробуйте онлайн!
источник
JavaScript (Node.js) ,
999895 байтПопробуйте онлайн!
-1 из комментария @Kirill L. в ответе Retina.
-3 спасибо @Ismael Miguel и @Arnauld за их совместные усилия.
источник
asdfghjkl
иASDFGHJKL
там? Почему вы не используетеi
флаг, какx=>/.../i.test(x)
?QWERTYUIOP
что регулярное выражение не должно совпадать. Дополнительная проверка будет стоить больше, чем кодирование этих заглавных букв непосредственно в регулярное выражение.x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)
такой же длины|
сохраняет 1 байт.\
,]
и-
(см АтомаКлассаБезТира в спецификации). Тире также может отображаться без экранирования, если это первый или последний символ (в противном случае он интерпретируется как разделитель диапазона символов).Perl 6 ,
102 101100 байт-1 байт благодаря nwellnhof!
Попробуйте онлайн!
Довольно стандартная реализация. Вероятно, есть более короткое решение на основе регулярных выражений, но я недостаточно хорошо знаю регулярное выражение Perl 6, чтобы попытаться сделать это.
источник
max
вместо?any
(иmin
вместо?all
).m:P5//
. Но я не думаю, что кто-то из них стоит опубликовать в качестве ответа.Java 10,
209208 байт-1 байт благодаря @TFeld .
Попробуйте онлайн.
Объяснение:
источник
!!!
несмотря на то, что восклицательные знаки не могут быть напечатаны ни одной строкой. Я только что добавил это в качестве теста(?i)
другие заглавные буквы?p==" "
вместоp.equals(" ")
Powershell, 87 байт
Port of Neil's Retina regex .
источник
Желе , 55 байт
Попробуйте онлайн!
Первая строка выдает список строк клавиатуры, а вторая проверяет, содержится ли ввод программы в одной (или нулевой) строке и нет ли символов, которые нельзя набрать (например
QWE!@#
).источник
С , 150 байтов
Попробуйте онлайн!
Он не выиграет никаких призов, но это забавный подход: мы сопоставляем символы на пяти строках клавиатуры с
4 8 16 32 64
каждым недопустимым символом3
. Мы поразрядно ИЛИ значение для каждого символа в строке вместе, и проверяем, удовлетворяет ли результатx&(x-1) == 0
, который является истинным, когдаx
это степень 2 или ноль, то есть всякий раз, когдаx
установлен не более одного бита.источник
LUA ,
282262259270 байтПопробуйте онлайн!
источник
PHP, 98 байт
Мне немного грустно, что нет ничего короче, чем регулярное выражение. Это, наверное, не самое быстрое решение.
Запустите как трубу с
-F
или попробуйте онлайн .Самое короткое решение без регулярных выражений, которое я нашел (124 байта; перенос строки и табуляция для удобства чтения):
выходит с кодом
1
для правды,0
для фальши. Беги как труба с-R
.Требуется PHP 5.4 или более поздняя версия; для более старого PHP используйте
array(...)
вместо[...]
(+5 байт)или используйте эти 123 байта
-nR
в PHP <7:источник
AWK ,
163119113 байтовЭто ответ AWK, возвращает числовую 1 строку для истины, 0 строку для ложной. (Записывается как AWK, вызывается как файл awk -f для интерактивного использования.)
Попробуйте онлайн!
Однако, не обрабатывает символ TAB как написано (тривиальное расширение), как не часть спецификации.
источник
print
: попробуйте онлайн!{print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
Баш , 119 байт
Включает эхо, чтобы обеспечить «читаемый» вывод. Если вы поместите вокруг него подходящую оболочку оболочки (на ваш выбор), чтобы включить печать / вывод, то вы можете сохранить 8 байтов. Мое чтение задачи показывает, что решение должно выводить подходящую индикацию вывода, поэтому я придерживаюсь 119 байтов.
Попробуйте онлайн!
источник