The Keyboard Shift Cipher Given the following input:


An integer n where n &gt; 0.
A string s where s is not empty and s~=[0-9A-Z]+ (alpha-numeric capitals only).


Using a standard, simplified QWERTY keyboard (as shown below):

1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM


Perform the following operation:


Find the original row that each character is in on the keyboard.
Replace the letter with the correct shifted equivalent for n based on its original position + n.


E.G. s="AB" and n=2: A would become D and B would become M.

If keyboard_row[position + n] &gt; keyboard_row.length, wrap back to the start.


E.G. s="0P" and n=2: 0 would become 2 and P would become W.



Examples:

f("0PLM",1)    = 1QAZ
f("ZXCVB",2)   = CVBNM
f("HELLO",3)   = LYDDW
f("0PLM",11)   = 1QSV
f("0PLM",2130) = 0PHX


Rules


This is code-golf, lowest byte-count wins.




This is slightly more difficult than it seems at first glance.
Jelly, 13 bytes

ØQØDṭ,ṙ€¥⁸F€y


Try it online!

How it works

ØQØDṭ,ṙ€¥⁸F€y  Main link. Left argument: n (integer). Right argument: s (string)

ØQ             Qwerty; set the return value to
               ["QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM"].
  ØD           Digits; yield "0123456789".
    ṭ          Tack, yielding ["QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM", "0123456789"].
        ¥⁸     Call the two links to the left as a dyadic chain, with right
               argument n.
      ṙ€       Rotate each string in the array n units to the left.
     ,         Yield the pair of the unmodified and the rotated string array.
          F€   Flatten each, mapping, e.g., ["QWERTYUIOP", ..., "0123456789"] to
               "QWERTYUIOPASDFGHJKLZXCVBNM0123456789".
            y  Translate s according to the mapping we've built.