Виправити мої жирові пальці


21

Code Golf Challenge

У мене є isdue, мої fingrrs є товстими, і я часто зустрічаю Jave Isdue введення одного [keystrpke] праворуч на моєму kryboard.

Я боюся, що іздуе стає гіршим шанувальником АФК, коли йде час.

Sopn кожну keystrpke я роблю wil; бути shiftrd pne вправо!

Тоді я б хотів, щоб програма (або functipn) автоматично переміщувала кожну keystrpke назад на ліву.

Я переконуюсь, що я візьму собі за те, щоб набрати решту тіїс чал;


Мета:

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


Умови:

• Ви можете припустити, що людина, яка працює за цією програмою, використовує клавіатуру QWERTY, як та, що зображена вище.

• Вхід і вихід не залежать від регістру, ви можете використовувати будь-який регістр (або суміш комбінацій регістрів) для цього виклику, і ви також можете припустити, що всі дані будуть в одному випадку за бажанням.

• Якщо ваша мова не може дозволити користувачеві вводити ключ повернення з якихось причин, ви можете проігнорувати одну клавішу для цього

• Ця виклик стосується лише стандартних значень клавіш, наприклад, якщо натиснути 4клавішу, ви можете припустити, що вона завжди буде 4і ніколи$

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


Приклад Input -> Output:

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


Це , тому програма з найменшим виграшним рахунком виграє!


Не могли б ви надати тести?
Kritixi Lithos

1
@KritixiLithos Certaimly! Я редагую tjat in now @
Альберт Реншо

Ви мали на увазі ]-> [?
shooqie


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

Відповіді:


7

Рубі, 76 71 69 байт

->a{"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"[/.#{a}/][0]}

5

Perl 6 , 87 83 69 байт

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

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

Спробуйте в Інтернеті!

Цікаво, чи є спосіб закодувати цей жорстко закодований рядок на щось коротше ...

(Викрав ідею регулярного вираження ГБ на -14 байт.)


1
Можливо, якби ми мали $"діапазони, могли б врятувати кілька символів
Вен

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
Я не знаю, Jelly, ти можеш додати пояснення свого коду? Мені цікаво, як ти пішов, не набравши рядкового буквалу всієї клавіатури
Альберт Реншо

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]зменшити декілька байтів
стрижень

Добрий момент, я додам це.
L3viathan

Я думаю, що вам потрібен перехід ліворуч від 1.
xnor

@xnor Право, виправлено це.
L3viathan

4

Пітон , 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

Сітківка , 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

Примітка. Це не підтримує клавішу введення

Містить недруковані версії, тож ось шістнадцятковий

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оскільки акт удару Enter без значення нічого не повертає в 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.