Dada a seguinte entrada:
- Um inteiro
n
onden > 0
. - Uma sequência em
s
ques
não está vazia es~=[0-9A-Z]+
(apenas maiúsculas alfanuméricas).
Usando um teclado QWERTY simplificado padrão (como mostrado abaixo):
1234567890
QWERTYUIOP
ASDFGHJKL
ZXCVBNM
Execute a seguinte operação:
- Encontre a linha original em que cada caractere está no teclado.
- Substitua a letra pelo equivalente deslocado correto para
n
baseado na sua posição original + n.- EG
s="AB"
en=2
:A
se tornariaD
eB
se tornariaM
.
- EG
- Se
keyboard_row[position + n] > keyboard_row.length
, envolva de volta ao início.- EG
s="0P"
en=2
:0
se tornaria2
eP
se tornariaW
.
- EG
Exemplos:
f("0PLM",1) = 1QAZ
f("ZXCVB",2) = CVBNM
f("HELLO",3) = LYDDW
f("0PLM",11) = 1QSV
f("0PLM",2130) = 0PHX
Regras
- Isso é código-golfe , vitórias mais baixas na contagem de bytes.
Isso é um pouco mais difícil do que parece à primeira vista.
Respostas:
Gelatina , 13 bytes
Experimente online!
Como funciona
fonte
Python 2 , 110 bytes
Experimente online!
Isso usa uma sequência grande o suficiente (99 cópias de cada linha) e o LCM entre os comprimentos das linhas (630) para encontrar a substituição correta, evitando a correção individual entre cada linha.
fonte
Java 8,
159158 bytes-1 byte graças a @ OlivierGrégoire modificando a matriz de entrada em vez de imprimir diretamente.
Explicação:
Experimente online.
fonte
char[]
.Retina , 49 bytes
Experimente online! Recebe entrada
n
es
em linhas separadas. Explicação:Repita os
n
tempos.Mude todos os caracteres uma tecla para a direita.
Excluir
n
.fonte
JavaScript (ES6),
10199 bytesRecebe entrada na sintaxe de currying
(s)(n)
. Funciona com matrizes de caracteres.Casos de teste
Mostrar snippet de código
Quão?
Procuramos a posição p de cada caractere da entrada dentro de uma string S, onde as linhas do teclado são intercaladas: os 4 primeiros caracteres são '1QAZ' (primeira coluna do teclado), os próximos 4 caracteres são '2WSX' (segunda coluna) do teclado) e assim por diante. As posições não utilizadas são preenchidas com sublinhados e as últimas são simplesmente descartadas.
Isso nos permite identificar facilmente a linha com p mod 4 e elimina a necessidade de separadores explícitos entre as linhas.
Nós avançamos por 4n posições, aplicar o modulo correta para esta linha (40, 40, 36 e 28, respectivamente) e escolher o caractere de substituição encontrado nesta nova posição em S .
fonte
Geléia , 18 bytes
Experimente online!
fonte
C,
152149 bytesObrigado a @gastropner por salvar três bytes!
Experimente online!
Desenrolado:
fonte
for(j=l;j--;)
mas não sei por que sem nenhuma outra alteração. Ainda assim, deve levá-lo a 149.Vermelho , 152 bytes
Experimente online!
Ungolfed:
fonte
Haskell , 99 bytes
Experimente online!
fonte
s#n= ...
vez dof(s,n)= ...
qual é apenas uma notação de exemplo usada para os exemplos.Perl 5 , 94 + 1 (
-p
) = 95 bytesExperimente online!
fonte
Japonês, 20 bytes
Correndo pela porta para jantar, mais golfe e uma explicação a seguir.
Tente
fonte
Perl,
59585756 bytesInclui
+
para-p
Dê entrada em STDIN como 2 linhas, primeiro a string e depois a repetição
fonte
Perl 5 , 85 bytes
Código de 84 bytes + 1 para
-p
.Experimente online!
fonte
Limpo ,
144119 bytesExperimente online!
Função Lambda com a assinatura
Int ![Char] -> [Char]
fonte
Ruby , 101 bytes
Experimente online!
Sinceramente, estou um pouco decepcionado por não ter conseguido fazer melhor com métodos 'inteligentes'. O mais próximo que cheguei foi ao longo das linhas de
para um ganho líquido de 7 caracteres.
fonte