O desafio
O objetivo deste desafio é determinar se uma determinada String pode ser digitada usando apenas uma linha de um teclado QWERTY padrão do Reino Unido.
Isto é code golf
, a solução mais curta em bytes vence!
IO
A entrada será uma única sequência de zero ou mais caracteres no intervalo decimal ASCII de 32 a 126, inclusive. Você pode assumir que, para esse desafio, uma String vazia não requer digitação e, portanto, pode ser digitada usando uma única linha.
Você pode considerar a entrada como uma sequência, lista de caracteres ou forma equivalente para o seu idioma.
A saída deve ser um valor verdadeiro para qualquer String que pode ser digitada usando uma única linha, ou falsey para uma que não pode.
Layout do teclado
Para esclarecer qualquer ambiguidade sobre o que está abaixo o layout padrão do teclado, há uma lista de teclas disponíveis em cada linha, incluindo teclas superiores alternativas (acessadas usando shift).
- Linha 1
- Padrão:
`1234567890-=
- Padrão:
- Linha 2
- Padrão:
qwertyuiop[]
- Padrão:
- Linha 3
- Padrão:
asdfghjkl;'#
- Maiúsculas:
ASDFGHJKL
- Especial: Caps Lock
- Padrão:
- Linha 4
- Padrão:
\zxcvbnm,./
- Alternar:
|<>?
- Maiúsculas:
ZXCVBNM
- Especial: Turno
- Padrão:
- Linha 5
- Especial: Barra de espaço
As teclas superiores alternativas somente podem ser pressionadas se Shift também estiver na mesma linha, e as teclas maiúsculas somente podem ser acessadas através de Caps Lock ou Shift. Você realmente só pode usar uma linha de teclado!
Casos de teste
-> true (empty string)
45-2=43 -> true (line 1)
qwerty -> true (line 2)
tryitout -> true (line 2)
Qwerty -> false (no shift or caps on line 2)
#sad -> true (line 3)
AsDf -> true (caps lock used)
@sDF -> false (no shift for alternate upper)
zxcvbn? -> true (line 4)
zxc vbn -> false (spacebar on separate line)
123abc -> false (multiple lines)
-> true (just space bar)
!!! -> false (exclamation marks cannot be printed by a single line)
fonte
Respostas:
Python 2 ,
130123121115 bytesExperimente online!
Python 3 , 111 bytes
Experimente online!
-4 bytes, graças a nedla2004
fonte
Retina 0.8.2 ,
7271 bytesExperimente online! Explicação: Cada alternação corresponde a uma linha diferente do teclado. O
(?i)
meio do padrão faz com que todo o restante do padrão seja correspondido sem distinção entre maiúsculas e minúsculas. Editar: salvou 1 byte graças a @KirillL.fonte
opqr
pode ser alterado parao-r
para -1. Além disso, você esqueceu um caractere de backtick para a Linha 1, não o vejo?[][...
:)05AB1E ,
6647 bytesToma a entrada como uma lista de caracteres.
-19 bytes graças a @Emigna . Esquecemos completamente que tínhamos built-in constantes de teclado qwerty. : D
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Perl 5
-pl
, 76 bytesExperimente online!
A abordagem óbvia regex.
fonte
Ruby
-n
,8681 bytesExperimente online!
fonte
JavaScript (Node.js) ,
999895 bytesExperimente online!
-1 do comentário de @Kirill L. na resposta da Retina.
-3 agradece a @Ismael Miguel e @Arnauld pelo esforço conjunto.
fonte
asdfghjkl
eASDFGHJKL
lá dentro? Por que você não usa ai
bandeira, tipox=>/.../i.test(x)
?QWERTYUIOP
não deve ser correspondido pelo regex. A verificação extra custará mais do que codificar essas letras maiúsculas diretamente no regex.x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)
é o mesmo comprimento|
economiza 1 byte.\
,]
e-
(ver ClassAtomNoDash na especificação). O traço também pode parecer sem escape se for o primeiro ou o último caractere (caso contrário, é interpretado como um separador de intervalo de caracteres).Perl 6 ,
102 101100 bytes-1 byte graças a nwellnhof!
Experimente online!
Implementação bastante padrão. Provavelmente existe uma solução mais curta baseada em regex para isso, mas não conheço a regex do Perl 6 o suficiente para fazer uma tentativa.
fonte
max
vez de?any
(e emmin
vez de?all
).m:P5//
. Mas acho que nenhum deles vale a pena postar como resposta.Java 10,
209208 bytes-1 byte graças a @TFeld .
Experimente online.
Explicação:
fonte
!!!
apesar de os pontos de exclamação não poderem ser impressos por nenhuma linha. Acabei de adicionar isso como um caso de teste(?i)
para as outras letras maiúsculas?p==" "
vez dep.equals(" ")
Powershell, 87 bytes
Regex do porto de Neil's Retina .
fonte
Geléia , 55 bytes
Experimente online!
A primeira linha produz uma lista das linhas do teclado e a segunda verifica se a entrada do programa está contida em uma única (ou zero) linhas e se não há caracteres que não possam ser digitados (como
QWE!@#
).fonte
C , 150 bytes
Experimente online!
Não ganhará nenhum prêmio, mas é uma abordagem divertida: mapeamos caracteres nas cinco linhas do teclado
4 8 16 32 64
e todos os caracteres inválidos3
. Nós bit a bit OU o valor de cada caractere na string juntos, e verificamos se o resultado é satisfatóriox&(x-1) == 0
, o que é verdadeiro quandox
é uma potência de 2 ou zero, ou seja, sempre quex
houver no máximo um bit definido.fonte
LUA ,
282262259270 bytesExperimente online!
fonte
PHP, 98 bytes
Estou um pouco triste por não haver nada mais curto que regex. Provavelmente não é a solução mais rápida.
Execute como pipe
-F
ou experimente online .A solução não-regex mais curta que encontrei (124 bytes; quebra de linha e guia para facilitar a leitura):
sai com código
1
para verdade,0
para falsidade. Corra como cano com-R
.Requer PHP 5.4 ou posterior; para PHP antigo, use em
array(...)
vez de[...]
(+5 bytes)ou use esses 123 bytes
-nR
no PHP <7:fonte
AWK ,
163119113 bytesEsta é uma resposta AWK, retorna uma string numérica 1 para true, 0 string para false. (Escrito como AWK, invoque como arquivo awk -f para uso interativo.)
Experimente online!
No entanto, não lida com o caractere TAB como gravado (extensão trivial) como parte da especificação.
fonte
print
basta um single : Experimente online!{print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
Bash , 119 bytes
Inclui um eco para fornecer saída "legível". Se você colocar um invólucro de casca adequado (sua escolha) ao redor para incluir impressão / saída, poderá salvar 8 bytes. Minha leitura do desafio sugere que a solução deve gerar uma indicação de saída adequada, portanto, permaneço com 119 bytes.
Experimente online!
fonte