Dado um dos seguintes caracteres (ou uma nova linha):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Seu programa deve gerar a linha em que está no teclado
Como meu teclado está (quase) sem bateria, seu código deve ser o mais curto possível
O teclado que seu programa deve usar (para a pesquisa de linha) deve se parecer com:
Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=
Row 2: Q W E R T Y U I O P {[ }] |\
Row 3: A S D F G H J K L :; "' ↵ return
Row 4: Z X C V B N M <, >. ?/
Row 5: space
Onde ↵ returnestá uma nova linha. Chaves vazias não significam nada.
Exemplos
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
onde \n
é um caractere de nova linha.
Especificações
- Seu programa não diferencia maiúsculas de minúsculas
- Seu programa só precisa manipular os caracteres no teclado mostrado
fonte
kbd
?Respostas:
Pitão,
626665 bytesExperimente online.
Usa uma string empacotada representando um número em hexadecimal que, quando dividida em pedaços de dois bits, representa a linha de todos os caracteres, exceto
e
!
como um valor de 0 a 3. Nós deixamos de forae
!
não precisamos armazenar 4 ou ter a 0 no início desse número e adicione seus valores de linha usando+,4Z
. Depois de transformarmos a string em valores de linha, tudo o que precisamos fazer é usar o código de caractere da entrada para indexar na matriz de valores e adicionar 1.A nova linha é tratada separadamente, porque é interpretada por Pyth como uma sequência vazia e, portanto, possui um código de caractere 0.
Isso seria mais curto se eu descobrisse como usar a base 256 no Pyth, mas não consigo fazê-lo funcionar.
fonte
JavaScript (ES6),
105102101 bytesExplicação
Em JavaScript
test
retorna um booleano que age da mesma forma1
, ou0
então eu multiplicá-los por sua linha. O teste para a linha 2 teve o maior número de bytes, então usei esse como padrão se nenhum outro corresponder.Teste
Mostrar snippet de código
fonte
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
converte os operandos em números inteiros (uncastables comoNaN
tornar0
), então faz o0 XOR 2
que é2
.Glava 1.5 , 164 bytes
Glava é um dialeto de Java que reduz o código Java. Infelizmente, esse código não é competitivo, pois o commit (2 horas atrasado ...) usado foi feito após esse desafio, que corrigiu alguns erros vitais que não permitiam que esse programa funcionasse.
Este é um programa completo que recebe entrada por meio de argumentos da linha de comando. Funciona simplesmente testando para qual regex de linha corresponde e, em seguida, gera o número correspondente.
fonte
Python 3, 142
Provavelmente existe uma maneira mais curta que eu estou ignorando ¯ \ _ (ツ) _ / ¯
fonte
Pyth , 98
Não tenho certeza de como fazer o intervalo de 0 a 9 funcionar por algum motivo: |, inspirado na resposta do user81655
fonte
jkUT
para a sequência com o intervalo de 0 a 9, não tendo certeza se há uma maneira mais curta. Você também pode usar seqüências de caracteres compactadas para salvar alguns bytes, por exemplo,."!~WÏù¹_(<]úÝ"
para"~`!@#$%^&*()_-=+"
.Bash, 108
Nenhuma resposta do Bash? Bash resposta.
grep -Fin
é definitivamente a ferramenta certa para este trabalho.Este programa está em dois arquivos.
k
, 73 bytesExistem 5 linhas, a última é um espaço. Se você tiver problemas para reproduzir o arquivo, a base64 é:
b
, 34 bytesEste é o próprio programa, recebe a entrada como o único argumento da linha de comando.
Pontuação: 34 + 73 + 1 (para
k
o nome do arquivo) = 108 bytesUngolfed
Explicação
grep
- pesquise em um arquivo as linhas correspondentes a uma string ou expressão regular, produza apenas essas linhas-F
aka--fixed-strings
- desabilite expressões regulares para que[
etc. sejam tratadas corretamente-i
aka-y
aka--ignore-case
- correspondência que não diferencia maiúsculas de minúsculas-n
aka--line-number
- mostra o número da linha e: antes de cada linha (por exemplo4:zxcvbnm,./<>?
)"$1"
- procure o primeiro argumento de linha de comando do script, as aspas são necessárias para lidar com nova linha e espaçok
- pesquisa no arquivok
grep
comando corresponderá a todas as cinco linhas se a entrada for uma nova linha e apenas uma linha caso contrário.|
- pipe, envia a saída padrão de um comando para a entrada padrão do próximotail
- gera as últimas N linhas ou caracteres da entrada padrão-n3
aka--lines=3
- gera as últimas 3 linhas-n
sinalizador ativadogrep
. Caso contrário, este comando terá apenas as linhas 3, 4 e 5 (as últimas 3 linhas).|
- tubohead
- produz as primeiras N linhas ou caracteres da entrada padrão-c1
aka--bytes=1
- gera o primeiro caracterefonte
Japt,
737066 bytesExperimente online! (no exemplo, a entrada é literalmente uma nova linha)
fonte
!1
é algo que partidas "false", finalmente eu sei como fazê-lo, graças :)Java, 300 bytes
Eu não sou um especialista, e esta é a minha primeira tentativa de jogar golfe, mas pensei: que diabos, por que não? Acima está a versão completa do programa, o código real inserido provavelmente levaria uma quantidade decente de caracteres.
fonte
class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}
( 243 bytes ) Eu removi alguns parênteses desnecessários; encurtadoargs
; removidopublic
; usou diretamente a String e o Scanner; e removeu a importação agorajava.util.Scanner
usada uma vez.Pitão, 105 bytes
Explicação:
Decidi escolher a primeira linha como a linha "deve ser se nada mais" porque exigia o máximo de bytes para representar, mesmo após o golfe.
fonte
Perl 6, 128 bytes
Eu faço uma lista de expressões regulares contendo classes de caracteres junto com um espaço literal de cadeia de caracteres. Em seguida, chamo o
first
método na lista (que é apenas a versão do método dafirst
função de ordem superior), usando smartmatch para comparar o argumento passado ao programa com o item atual da lista. Observe que o smartmatch "faz a coisa certa" para as regexes e uma string literal. O:k
parâmetro opcional parafirst
faz com que o método retorne o índice do item correspondente na lista, ao qual adiciono 1 e a saída viasay
.Note que ao usar este programa, você terá que escapar corretamente de certos caracteres como `e espaço no seu shell. Por exemplo: perl6 keyboard.p6 \ `
fonte
JavaScript ES6, 114 bytes
Outra solução JavaScript. O princípio é retornar o índice do caractere de entrada na matriz de linhas mais 2 (para que a linha 0-9 retorne -1, ou seja, não exista, -1 + 2 = 1.
q
Esteja na primeira sequência da matriz, portanto, retorna 0 + 2 = 2ª linha).fonte
Perl,
967776 bytesCorra usando
perl -p
. Verifique se você está alimentando apenas caracteres únicos; por exemplo, para executá-lo a partir de um arquivokey.pl
(para evitar mexer nas seqüências de escape do shell)echo -n q|perl -p key.pl
.Abusar a funcionalidade do intervalo regex é divertido.
fonte
echo
para controlar com precisão a entrada - por exemplo.echo -n q|perl -n key.pl
, que produz corretamente2
.chomp
a entrada.chomp
editasse a entrada, não seria possível retornar '3' para a chave de retorno.$_=~
jogos, om//
que é/.../
funciona$_
automaticamente! Além disso, se você usar em-p
vez de,-n
poderá usar em$_=
vez deprint
para salvar mais alguns bytes. Usar uma nova linha literal em vez de também\n
pode economizar outro byte! Isso deve reduzir bastante o seu código! Pode valer a pena acrescentar um exemplo de uso, bem como para testes de qualquer um sabe que você precisa para usarecho -n
:)PHP, 173 bytes
A idéia aqui era usar o número do grupo de captura regex como o índice de linha. Provavelmente mais algumas otimizações no próprio regex.
A
preg_match()
chamada criará uma matriz$m
de correspondências e, se imprimíssemos isso, seria algo parecido com isto (assumindo quez
foi a entrada):Como inverter essa matriz, trocando chaves e valores, move-se da esquerda para a direita e mantém apenas a última chave distinta; portanto, terminamos com:
Em seguida, usamos o caractere de entrada como o índice na matriz para obter nosso resultado.
Experimente aqui .
fonte
C,
145 143 136 132 127106 bytesIsso usaIsso assume ASCII e 32 bits de ints.index()
do POSIX.1-2001 e está obsoleto no POSIX.1-2008.fonte
Python 3, 89 bytes
Como ainda não posso comentar, estou publicando a melhoria para a resposta atual do Python 3 separadamente.
Edit : Todo o código
print
agora e mais aprimorado.fonte
Ruby , 82 bytes
Experimente online!
fonte
CJam, 125 bytes
Explicação
fonte
SpecBAS - 178 bytes
Eu usei uma string longa, em que cada linha tem 26 caracteres (# 34 é código para aspas duplas e # 13 é código para retorno).
Em seguida, imprima o resultado da posição de arredondamento / 26.
fonte
C # 6, 201 bytes
Nada de especial aqui. Achei mais barato escrever os dois casos do que usar ToUpper () devido à largura fixa da string.
Recuado:
fonte
Python 2, 146 bytes
fonte
Excel, 132 bytes
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
As tentativas de usar o caso in-sensível
SEARCH()
em vez deFIND()
revelou que Excel partidas~
,*
e?
para(tick). The matching of
?means we can't use
SEARCH () `, que teria raspado uns 5 bytes maciços ...fonte