Biorąc pod uwagę następujące dane wejściowe:
- Liczba całkowita
n
gdzien > 0
. - Ciąg, w
s
któryms
nie jest pusty is~=[0-9A-Z]+
(tylko wielkie litery alfanumeryczne).
Korzystanie ze standardowej, uproszczonej klawiatury QWERTY (jak pokazano poniżej):
1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM
Wykonaj następującą operację:
- Znajdź oryginalny wiersz, w którym znajduje się każdy znak na klawiaturze.
- Zastąp literę poprawnym przesuniętym odpowiednikiem dla
n
opartej na jej pierwotnej pozycji + n.- EG
s="AB"
in=2
:A
stałby sięD
iB
stałby sięM
.
- EG
- Jeśli
keyboard_row[position + n] > keyboard_row.length
cofnij się do początku.- EG
s="0P"
in=2
:0
stałby się2
iP
stałby sięW
.
- EG
Przykłady:
f("0PLM",1) = 1QAZ
f("ZXCVB",2) = CVBNM
f("HELLO",3) = LYDDW
f("0PLM",11) = 1QSV
f("0PLM",2130) = 0PHX
Zasady
- To jest golf golfowy , wygrana o najniższej liczbie bajtów.
Jest to nieco trudniejsze niż się wydaje na pierwszy rzut oka.
Odpowiedzi:
Galaretka , 13 bajtów
Wypróbuj online!
Jak to działa
źródło
Python 2 , 110 bajtów
Wypróbuj online!
Wykorzystuje wystarczająco duży ciąg znaków (99 kopii każdego rzędu) i LCM między długościami rzędów (630), aby znaleźć prawidłowe podstawienie, unikając indywidualnej korekty między każdym rzędem.
źródło
Java 8,
159158 bajtów-1 bajt dzięki @ OlivierGrégoire modyfikującej tablicę wejściową zamiast bezpośredniego drukowania.
Wyjaśnienie:
Wypróbuj online.
źródło
char[]
.Siatkówka , 49 bajtów
Wypróbuj online! Pobiera dane wejściowe
n
is
na osobnych liniach. Wyjaśnienie:Powtórz
n
czasy.Przesuń wszystkie znaki o jeden klawisz w prawo.
Usuń
n
.źródło
JavaScript (ES6),
10199 bajtówPobiera dane wejściowe w składni curry
(s)(n)
. Działa z tablicami postaci.Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Szukamy pozycji p każdego znaku wejściowego w ciągu S, gdzie wiersze klawiatury są przeplatane: pierwsze 4 znaki to „1QAZ” (pierwsza kolumna klawiatury), następne 4 znaki to „2WSX” (druga kolumna klawiatury) i tak dalej. Niewykorzystane pozycje są uzupełniane podkreśleniami, a ostatnie są po prostu odrzucane.
To pozwala nam łatwo zidentyfikować wiersz za pomocą p mod 4 i eliminuje potrzebę wyraźnych separatorów między wierszami.
Mamy przejść przez 4n pozycjach, zastosować właściwą modulo dla tego rzędu (40, 40, 36 i 28, odpowiednio) i wybrać znaleziony na tej nowej pozycji w znak zastępczy S .
źródło
Galaretka , 18 bajtów
Wypróbuj online!
źródło
C,
152149 bajtówDzięki @gastropner za zapisanie trzech bajtów!
Wypróbuj online!
Rozwinięty:
źródło
for(j=l;j--;)
ale nie wiem dlaczego bez żadnej innej zmiany. Nadal powinienem zabrać cię do 149.Czerwony , 152 bajty
Wypróbuj online!
Nie golfowany:
źródło
Haskell , 99 bajtów
Wypróbuj online!
źródło
s#n= ...
zamiast tegof(s,n)= ...
tylko przykładowej notacji użytej w przykładach.Perl 5 , 94 + 1 (
-p
) = 95 bajtówWypróbuj online!
źródło
Japt, 20 bajtów
Biegnąc za drzwiami na obiad, więcej golfa i wyjaśnienia do naśladowania.
Spróbuj
źródło
Perl,
59585756 bajtówObejmuje
+
dla-p
Podaj dane wejściowe STDIN jako 2 linie, najpierw ciąg, a następnie powtórz
źródło
Perl 5 , 85 bajtów
Kod 84 bajtów + 1 dla
-p
.Wypróbuj online!
źródło
Czysty ,
144119 bajtówWypróbuj online!
Funkcja Lambda z podpisem
Int ![Char] -> [Char]
źródło
Ruby , 101 bajtów
Wypróbuj online!
Jestem szczerze rozczarowany, że nie potrafiłem lepiej z „mądrzejszymi” metodami. Najbliższe, jakie dostałem, było podobne
dla zysku netto 7 znaków.
źródło