Исправить мои жирные пальцы


21

Code Golf Challenge

У меня есть проблема, мои пальцы толстые, и я часто делаю одну клавишу справа от моего крипборда.

Боюсь, что со временем ситуация ухудшается и ухудшается.

Sopn каждый keystrpke я сделаю с; быть вправо!

Затем я хотел бы, чтобы программа (или functipn) автоматически сдвигала каждое нажатие клавиши обратно влево.

Я обязательно возьму свой том с собой, чтобы не вызвать недоразумения!


Задача:

Напишите программу или функцию, которая принимает на клавиатуре QWERTY одну из следующих зеленых клавиш и возвращает символ клавиши слева от нее.введите описание изображения здесь


условия:

• Вы можете предположить, что человек, работающий с этой программой, использует QWERTY-клавиатуру, подобную изображенной выше.

• Ввод и вывод не чувствительны к регистру, вы можете использовать любой случай (или комбинацию комбинаций падежей) для этой задачи, и вы также можете предположить, что все входные данные будут в одном случае, если это необходимо.

• Если ваш язык по какой-либо причине не позволяет пользователю ввести ключ возврата, вы можете игнорировать одно нажатие клавиши для этого.

• Эта задача только для значений по умолчанию клавиш, например, если 4клавиша нажата, вы можете предположить, что она будет всегда 4и никогда$

• Вы можете предполагать, что когда-либо будут нажаты только зеленые клавиши.


Пример Input-> Output:

S-> a
4-> 3
=-> -
[->p


Это , поэтому выигрывает программа с самым коротким байтом!


Не могли бы вы предоставить тестовые случаи?
Kritixi Lithos

1
@ KritixiLithos Конечно! Я сейчас отредактирую tjat @
Альберт Реншоу

Вы имели в виду ]-> [?
shooqie


3
Возможно, вам все равно, но вот интересная мелочь: это раскладка клавиатуры ANSI. Обратите внимание на обратную косую черту над клавишей Enter; в отличие от клавиатуры ISO, в которой кнопка обратной косой черты находится слева от Z. (Она также американская, но ее легче идентифицировать!)
Doddy

Ответы:



5

Perl 6 , 87 83 69 байт

{[Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".comb].&{%(.[1..*]Z=>$_)}{$_}}

{~Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".match(/.)>$_/)}

Попробуйте онлайн!

Интересно, есть ли способ закодировать эту жестко запрограммированную строку во что-то более короткое ...

(Украл идею регулярного выражения GB для -14 байт.)


1
Возможно, если бы у нас были $"диапазоны, можно было бы сэкономить несколько символов
Ven

5

Желе , 34 33 байта

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy

Попробуйте онлайн!

Как это устроено

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy  Main link. Argument: s (string)

ØD                                 Digits; yield "0123456789".
  ”`1|                             Replace '0' with a backtick.
       Øq                          Qwerty; yield
                                   ["qwertyuiop", "asdfghjkl", "zxcvbnm"].
      ṭ                            Tack; add "`123456789" as the last element of
                                   the qwerty array.
          “[]\“;'¶“,./“0-=”        Yield ["[]\\", ";'\n", "0-="].
         ż                         Zip; combine the strings of the array to the
                                   left with the corresponding strings of the array
                                   to the right, yielding an array of string pairs.
                           F       Flatten, yielding a string.
                            ṡ2     Obtain all overlapping pairs of characters.
                              U    Upend; reverse each pair.
                               Z   Zip, yielding a pair of strings.
                                y  Translate the input s according to the generated
                                   replacement table.

3
Я не знаю, Джелли, можешь добавить объяснение своего кода? Мне любопытно, как ты ушел, не печатая строковый литерал всей клавиатуры
Альберт Реншоу

1
У меня еще не было времени, но я добавлю объяснение как можно скорее.
Деннис

1
Выполнено. Я также немного играл в гольф.
Деннис

1
Øqизящная! Мне нравится это, спасибо!
Альберт Реншоу

4

Python 3, 85 78 байт:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]

1
Вы можете передать строку в качестве необязательного параметра, используя 1 лямбда: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]для сокращения нескольких байтов
Rod

Хороший вопрос, я добавлю это.
L3viathan

Я думаю, вам нужен обратный
xnor

@xnor Правильно, исправил это.
L3viathan

4

Python , 76 байт

s="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?"
dict(zip(s,'`'+s)).get

Попробуйте онлайн!

Создает словарь, который переводит каждую клавишу в одну слева, заархивировав строку символов с ее сдвинутой версией. Нижняя строка - это функция, верхняя - это определение.

Использование translateдля создания сопоставления дало более продолжительное решение. Попробуйте онлайн!

lambda s:s.translate("';"*22+"_0__9`12345678_LM-<>_\\VXSWDFGUHJKNBIO=EARYCQZT\nP][___"*4)

4

Retina , 53 51 байт

T`1-90\-=QW\ERTYUI\OP[]\\ASDF-HJ-L;'¶ZXCVBNM,./`\`o

Попробуйте онлайн!

Простая транслитерация, смещающая каждый символ на 1 позицию назад. Все от 1до /является исходным набором символов, в то время как следующая часть является новым набором, используя oдля обозначения Другой набор.

Hи Lпредставляют собой специальные классы символов для транслитерации в сетчатке (соответственно, сопоставления с шестнадцатеричными цифрами и прописными буквами), но, к счастью, они встречаются на клавиатуре внутри алфавитно-упорядоченных последовательностей ( FGHи JKL), поэтому мы можем избежать их, помещая их в диапазоны и получая таким образом 2 байта.



3

TI-Basic, 70 байт

Я сомневаюсь, что он может стать короче этого ...

Input Str1
"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./
sub(Ans,inString(Ans,Str1)-1,1

PS Эти два байта жетоны Str1, `, \, sub(, и inString(.


3

V , 57 54 51 байт

3 байта сэкономлено благодаря @ nmjcman101 за использование hxVpвместо того, что было у меня для многострочной клавиатуры

i`¬190-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./<esc>/<C-r>a
hxVp

Попробуйте онлайн!

<esc>есть 0x1bи <c-r>есть0x12

Примечание: это не поддерживает клавишу ввода

Содержит непечатные, так что вот hexdump

00000000: 6960 ac31 3930 2d3d 7177 6572 7479 7569  i`.190-=qwertyui
00000010: 6f70 5b5d 5c61 7364 6667 686a 6b6c 3b27  op[]\asdfghjkl;'
00000020: 7a78 6376 626e 6d2c 2e2f 1b2f 1261 0a68  zxcvbnm,././.a.h
00000030: 7856 70                                  xVp

объяснение

Большая часть программы генерирует клавиатуру. iвходит в режим вставки, и каждый следующий за ним символ печатается в буфер. Но здесь есть небольшая причудливость, ¬19вставляющая символы от 1 до 9.

Программа выходит из режима вставки в <esc>. И тогда здесь /<c-r>aон ищет аргумент в буфере. Это поместит курсор поверх найденного символа.

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character

Я не на 100%, но я думаю, что вместо hylHVGpвас можно сделать то, что сделал @DJMcMayhem в вопросе о мотоцикле hxVp. Я не уверен, почему вы положили Gтуда, не все ли в одну строку? И dhVpбудет работать.
nmjcman101

@ nmjcman101 Ах да, я, должно быть, сохранил то время, Gкогда клавиатура была многострочной. Благодарность!
Kritixi Lithos

2

PowerShell, 82 байта

$k="1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./";$k[$k.IndexOf((read-host))-1]

Клавиша Enter поддерживается, но не может быть проверена, Read-Hostпоскольку нажатие клавиши ввода без значения ничего не возвращает в PowerShell.


2

Japt , 56 42 байт

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

объяснение

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

;D=D                                        // Shortcut for QWERTY (with newlines and spaces), assigning to variable D
    v                                       // Setting D to lowercase
      ·q                                    // Joining D into an array with no spaces or newlines
        i"[]\\",A                          // Inserting "[]\" into index 10 (A)
                   i";'",22                 // Inserting ";'" into index 22
                           +",./"           // Appending ",./"
                                  Dg        // Returns the character at index:
                                    1n      //    -1+
                                       DbU  //     Index of U (the input)

Попробуйте онлайн!


Это круто, вы можете добавить объяснение?
Альберт Реншоу

1
@AlbertRenshaw Добавил объяснение.
Оливер

2

Java 8, 99 байт

c->{String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";return r.charAt(r.indexOf(c)-1);}

Объяснение:

Попробуй это здесь.

c->{                // Method with character as both parameter and return-type
  String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";
                    //  Literal String of the qwerty keyboard layout of the challenge
  return r.charAt(  //  Return the character at the following index:
    r.indexOf(c)    //   The index of the input character
    -1);            //   -1 to shift it to the left
}                   // End of method

1
Я сдаюсь. Я пытался сделать это с регулярным выражением, но с треском неудачи с некоторыми специальными символами ... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Оливье Грегуар

2

JavaScript (ES6), 74 байта

c=>(s=".,mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")[s.indexOf(c)+1]

Поскольку /в моей строке нет, indexOfвозвращает -1, что при увеличении приводит .к выводу. 93 байта для обработки строки:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")

@KevinCruijssen Спасибо, что заметили, что я случайно сдвинул эти три клавиши. Я отменил их сейчас.
Нил

1

GNU sed , 72 + 1 (флаг r) = 73 байта

s:$:`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./:
s:(.).*(.)\1.*:\2:

Ключ возврата не может быть протестирован, потому что sed по своему дизайну разделяет ввод, используя \nв качестве разделителя, а затем запускает скрипт столько раз, сколько строк.

Тестовый прогон: непрерывная пара ввода-вывода (когда закончите нажмите Ctrl + D или Ctrl + C)

me@LCARS:/PPCG$ sed -rf shift_key.sed
s
a
4
3
=
-
a
\
1
`
\
]

1

05AB1E , 50 байтов

'`žhÀ"-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"JDÀ‡

Попробуйте онлайн!

Объяснение:

'`                                                  # 1 char string: `
  žh                                                # Push numbers 0123456789
    À                                               # Rotated 1 left (123456890)
     "-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"      # Push string literal
                                              J     # Join all elements pushed to the stack to one string
                                               D    # Duplicate
                                                À   # Rotate 1 left
                                                 ‡  # Transliterate: a.get(b.indexOf(input))

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.