Дан любой из следующих символов (или перевод строки):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Ваша программа должна вывести строку, которая находится на клавиатуре
Поскольку моя клавиатура (почти) разряжена, ваш код должен быть как можно короче
Клавиатура, которую должна использовать ваша программа (для поиска строк), должна выглядеть так:
Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=
Row 2: Q W E R T Y U I O P {[ }] |\
Row 3: A S D F G H J K L :; "' ↵ return
Row 4: Z X C V B N M <, >. ?/
Row 5: space
Где ↵ returnновая строка. Пустые ключи ничего не значат.
Примеры
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
где \n
символ новой строки.
Характеристики
- Ваша программа должна быть без учета регистра
- Ваша программа должна обрабатывать только символы на клавиатуре
источник
kbd
?Ответы:
Pyth,
626665 байтПопробуйте онлайн.
Использование упакованной строка , представляющее число в шестнадцатеричном , который, когда разрезал на два-битные куски, представляет собой строку каждого символа , за исключением
и в
!
качестве значения от 0 до 3. Мы опускаеми
!
поэтому мы не должны хранить 4 или иметь 0 в начале этого числа, затем добавьте значения строк, используя+,4Z
. Как только мы превратили строку в значения строки, все, что нам нужно сделать, это использовать код символа ввода для индексации массива значений, а затем добавить 1.Новая строка обрабатывается отдельно, потому что она интерпретируется Pyth как пустая строка и поэтому имеет код символа 0.
Это было бы короче, если бы я мог понять, как использовать базу 256 в Pyth, но я не могу заставить ее работать.
источник
JavaScript (ES6),
105102101 байтобъяснение
В JavaScript
test
возвращает логическое значение, которое действует так же, как1
и0
я, умножая их на их ряд. Тестирование для строки 2 заняло наибольшее количество байтов, поэтому я использовал этот в качестве значения по умолчанию, если другие не совпадают.Тест
Показать фрагмент кода
источник
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
преобразует операнды в целые числа (некастабильные, например,NaN
становятся0
), то делает,0 XOR 2
что есть2
.Глава 1.5 , 164 байта
Глава - это диалект Java, который делает код Java короче. Этот код, к сожалению, неконкурентоспособен, так как использованный коммит (на 2 часа позже ...) был сделан после этой проблемы, которая исправила некоторые существенные ошибки, которые не позволяли этой программе работать.
Это полная программа, которая принимает ввод через аргументы командной строки. Работает, просто проверяя, для какого ряда соответствует регулярное выражение, а затем выводит соответствующее число.
источник
Питон 3, 142
Вероятно, есть более короткий способ, которым я пропускаю ¯ \ _ (ツ) _ / ¯
источник
Пиф , 98
почему-то не знаю, как заставить работать диапазон 0-9: |, вдохновленный ответом user81655
источник
jkUT
для строки в диапазоне от 0 до 9, не уверен, что есть более короткий путь. Вы также можете использовать упакованные строки, чтобы сохранить несколько байтов, например,."!~WÏù¹_(<]úÝ"
для"~`!@#$%^&*()_-=+"
.Баш, 108
Нет ответа Bash? Баш ответь.
grep -Fin
безусловно, правильный инструмент для этой работы.Эта программа в двух файлах.
k
73 байта5 строк, последняя - пробел. Если у вас возникли проблемы с воспроизведением файла, base64:
b
34 байтаЭто сама программа, она принимает входные данные в качестве единственного аргумента командной строки.
Оценка: 34 + 73 + 1 (для
k
имени файла) = 108 байт.Ungolfed
объяснение
grep
- искать в файле строки, соответствующие строке или регулярному выражению, выводить только эти строки-F
aka--fixed-strings
- отключить регулярные выражения, чтобы[
и т.д. обрабатывались правильно-i
aka-y
aka--ignore-case
- сопоставление без учета регистра-n
aka--line-number
- показать номер строки и: перед каждой строкой (например4:zxcvbnm,./<>?
)"$1"
- поиск первого аргумента командной строки скрипта, кавычки необходимы для обработки новой строки и пробелаk
- поиск в файлеk
grep
команда будет соответствовать всем пяти строкам, если ввод является новой строкой, и только одной строкой в противном случае.|
- pipe, отправлять стандартный вывод одной команды на стандартный ввод следующейtail
- вывести последние N строк или символов стандартного ввода-n3
ака--lines=3
- вывести последние 3 строки-n
включенного флагаgrep
. В противном случае эта команда занимает только строки 3, 4 и 5 (последние 3 строки).|
- трубаhead
- вывести первые N строк или символов стандартного ввода-c1
aka--bytes=1
- вывести первый символисточник
Japt
737066 байтПопробуйте онлайн! (в данном примере ввод буквально переводится на новую строку)
источник
!1
это что-то, что соответствует «ложь», наконец, я знаю, как это сделать, спасибо :)Java, 300 байт
Я не эксперт, и это моя первая попытка игры в гольф, но я решил, что, черт возьми, почему бы и нет? Выше приведена полная версия программы, и реальный код, который входит в нее, скорее всего, отнимает приличное количество символов.
источник
class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}
( 243 байта ) я удалил некоторые ненужные скобки; укороченныйargs
; удаленыpublic
; напрямую использовал String и Scanner; и удалил импорт сейчас, которыйjava.util.Scanner
используется один раз.Pyth, 105 байт
Объяснение:
Я решил выбрать первую строку в качестве строки «должно быть, если не что-то еще», потому что она требовала наибольшего количества байтов для представления даже после игры в гольф.
источник
Perl 6, 128 байт
Я делаю список регулярных выражений, содержащих классы символов вместе со строковым литералом. Затем я вызываю
first
метод в списке (который является просто версией метода функцииfirst
более высокого порядка), используя smartmatch, чтобы сравнить аргумент, переданный программе, с текущим элементом в списке. Обратите внимание, что smartmatch делает «правильные вещи» как для регулярных выражений, так и для строкового литерала.:k
Необязательный параметрfirst
причин способа вернуть индекс совпадающего элемента в списке, который я тогда добавить 1 к выходу и с помощьюsay
.Обратите внимание, что при использовании этой программы вам придется правильно экранировать некоторые символы, такие как `и пробел в вашей оболочке. Например: perl6 keyboard.p6 \ `
источник
JavaScript ES6, 114 байт
Другое решение JavaScript. Принцип состоит в том, чтобы вернуть индекс входного символа в массив строк плюс 2 (так как строка 0-9 возвращает -1, т.е. не существует, -1 + 2 = 1.
q
Находится в первой строке массива, поэтому он возвращает 0 + 2 = 2-й ряд).источник
Perl,
967776 байтЗапустить с помощью
perl -p
. Убедитесь, что вы кормите его только отдельными символами; например, чтобы запустить его из файлаkey.pl
(чтобы избежать перебора с escape-последовательностями оболочки)echo -n q|perl -p key.pl
.Злоупотребление функциональностью диапазона регулярных выражений - это весело.
источник
echo
для точного контроля ввода - например.echo -n q|perl -n key.pl
, который правильно выдает2
.chomp
.chomp
редактировал ввод, я бы не смог вернуть «3» для клавиши возврата.$_=~
для матчей,m//
(это то, что/.../
есть) работает$_
автоматически! Также, если вы используете-p
вместо,-n
вы можете использовать$_=
вместо того,print
чтобы сохранить еще пару байтов. Использование буквального перевода строки вместо\n
может сэкономить вам еще один байт! Это должно немного уменьшить ваш код! Возможно, стоит добавить пример использования, так что каждый, кто тестирует, знает, что вам нужно использоватьecho -n
:)PHP, 173 байта
Идея заключалась в том, чтобы использовать номер группы сбора регулярных выражений в качестве индекса строки. Возможно, еще несколько оптимизаций в самом регулярном выражении.
preg_match()
Вызов создаст массив$m
совпадений, и если мы должны были напечатать , что было бы выглядеть примерно так (предполагается , чтоz
был вход):Переключение этого массива путем замены ключей и значений перемещается слева направо и сохраняет только последний отдельный ключ, поэтому мы в итоге получаем:
Затем мы используем входной символ в качестве индекса в массиве, чтобы получить наш результат.
Попробуйте это здесь .
источник
C
145 143 136 132 127106 байтЭто используетЭто предполагает ASCII и 32-битные числа.index()
из POSIX.1-2001 и устарела в POSIX.1-2008.источник
Python 3, 89 байт
Пока я не могу комментировать, я выкладываю улучшение для текущего ответа Python 3 отдельно.
Изменить : Весь код в
print
настоящее время и дальнейшая настройка.источник
Рубин , 82 байта
Попробуйте онлайн!
источник
CJam, 125 байт
объяснение
источник
SpecBAS - 178 байт
Я использовал длинную строку, где каждая строка длиной 26 символов (# 34 - это код для двойной кавычки, а # 13 - это код для возврата).
Затем выведите результат округления позиции / 26.
источник
C # 6, 201 байт
Здесь нет ничего особенного. Я нашел дешевле просто написать оба случая, а не использовать ToUpper () из-за фиксированной ширины строки.
Отступ:
источник
Python 2, 146 байт
источник
Excel, 132 байта
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
Попытки использовать случай чувствительных
SEARCH()
вместоFIND()
показал , что Excel соответствует~
,*
и?
к(tick). The matching of
?means we can't use
SEARCH () `, который побрил бы массивные 5 байт ...источник