Dado cualquiera de los siguientes caracteres (o una nueva línea):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Su programa debe generar la fila que está en el teclado
Debido a que mi teclado está (casi) sin batería, su código debe ser lo más corto posible
El teclado que debe usar su programa (para la búsqueda de filas) debe verse así:
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
¿Dónde ↵ returnestá una nueva línea? Las llaves vacías no significan nada.
Ejemplos
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
donde \n
es un personaje de nueva línea.
Presupuesto
- Su programa debe ser insensible a mayúsculas y minúsculas
- Su programa solo necesita manejar los caracteres en el teclado que se muestra
fuente
kbd
?Respuestas:
Pyth,
626665 bytesPruébalo en línea.
Utiliza una cadena empaquetada que representa un número en hexadecimal que, cuando se corta en pedazos de dos bits, representa la fila de cada carácter excepto
y
!
como un valor de 0 a 3. Dejamos de ladoy
!
no tenemos que almacenar 4 o tener un 0 al comienzo de este número, luego agregue sus valores de fila usando+,4Z
. Una vez que hayamos convertido la cadena en valores de fila, todo lo que tenemos que hacer es usar el código de caracteres de la entrada para indexar en la matriz de valores, y luego agregar 1.Newline se maneja por separado porque Pyth lo interpreta como una cadena vacía y, por lo tanto, tiene un código de caracteres de 0.
Esto sería más corto si pudiera descubrir cómo usar la base 256 en Pyth, pero no puedo hacer que funcione.
fuente
JavaScript (ES6),
105102101 bytesExplicación
En JavaScript
test
devuelve un booleano que actúa igual1
o más o0
menos, los multiplico por su fila. Las pruebas para la fila 2 tomaron la mayor cantidad de bytes, por lo que usé esa como predeterminada si no coinciden otras.Prueba
Mostrar fragmento de código
fuente
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
convierte los operandos a enteros (incastables comoNaN
llegar a ser0
), entonces hace0 XOR 2
cuál es2
.Glava 1.5 , 164 bytes
Glava es un dialecto de Java que acorta el código Java. Lamentablemente, este código no es competitivo ya que el commit (2 horas tarde ...) utilizado se realizó después de este desafío, que solucionó algunos errores vitales que no permitirían que este programa funcionara.
Este es un programa completo que toma datos a través de argumentos de línea de comandos. Funciona simplemente probando para qué expresión regular de la fila coincide, luego genera el número correspondiente.
fuente
Pitón 3, 142
Probablemente hay una forma más corta que estoy pasando por alto ¯ \ _ (ツ) _ / ¯
fuente
Pyth , 98
no estoy seguro de cómo hacer que el rango 0-9 funcione por alguna razón: |, inspirado en la respuesta del usuario 81655
fuente
jkUT
para la cadena con el rango de 0 a 9, no estoy seguro si hay una forma más corta. También puede usar cadenas empaquetadas para guardar algunos bytes, por ejemplo,."!~WÏù¹_(<]úÝ"
para"~`!@#$%^&*()_-=+"
.Bash, 108
No hay respuesta Bash? Bash respuesta.
grep -Fin
Definitivamente es la herramienta adecuada para este trabajo.Este programa está en dos archivos.
k
73 bytesHay 5 líneas, la última es un espacio. Si tiene problemas para reproducir el archivo, la base64 es:
b
, 34 bytesEste es el programa en sí, toma la entrada como el único argumento de línea de comando.
Puntuación: 34 + 73 + 1 (para
k
el nombre del archivo) = 108 bytesSin golf
Explicación
grep
- busca en un archivo líneas que coincidan con una cadena o expresión regular, genera solo esas líneas-F
aka--fixed-strings
- deshabilita las expresiones regulares para que[
etc. se manejen correctamente-i
aka-y
aka--ignore-case
- coincidencia entre mayúsculas y minúsculas-n
aka--line-number
- muestra el número de línea y: antes de cada línea (por ejemplo4:zxcvbnm,./<>?
)"$1"
- busque el primer argumento de la línea de comandos del script, las comillas son necesarias para manejar la nueva línea y el espaciok
- buscar en el archivok
grep
comando coincidirá con las cinco líneas si la entrada es una nueva línea, y solo una línea de lo contrario.|
- pipe, envía la salida estándar de un comando a la entrada estándar del siguientetail
- muestra las últimas N líneas o caracteres de entrada estándar-n3
aka--lines=3
- genera las últimas 3 líneas-n
bandera activadagrep
. De lo contrario, este comando solo toma las líneas 3, 4 y 5 (las últimas 3 líneas).|
- tuberíahead
- muestra las primeras N líneas o caracteres de entrada estándar-c1
aka--bytes=1
- muestra el primer caracterfuente
Japt,
737066 bytesPruébalo en línea! (en el ejemplo, la entrada es literalmente una nueva línea)
fuente
!1
es algo que coincide con "falso", finalmente sé cómo hacerlo, gracias :)Java, 300 bytes
No soy un experto, y este es mi primer intento de jugar al golf, pero pensé, ¿qué demonios, por qué no? Arriba está la versión completa del programa, el código real que entra probablemente quitaría una cantidad decente de caracteres.
fuente
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 ) Eliminé algunos paréntesis innecesarios; acortadoargs
; eliminadopublic
; utiliza directamente la cadena y el escáner; y eliminó la importación ahora quejava.util.Scanner
se usa una vez.Pyth, 105 bytes
Explicación:
Decidí elegir la primera fila como la fila "debe ser si no hay nada más" porque requería la mayor cantidad de bytes para representar incluso después del golf.
fuente
Perl 6, 128 bytes
Hago una lista de expresiones regulares que contienen clases de caracteres junto con un espacio literal de cadena. Luego llamo al
first
método en la lista (que es solo la versión del método de lafirst
función de orden superior), usando smartmatch para comparar el argumento pasado al programa con el elemento actual en la lista. Tenga en cuenta que smartmatch hace "lo correcto" tanto para expresiones regulares como para un literal de cadena. El:k
parámetro opcionalfirst
hace que el método devuelva el índice del elemento coincidente en la lista, al que luego agrego 1 y envío a través desay
.Tenga en cuenta que cuando use este programa tendrá que escapar correctamente de ciertos caracteres como `y espacio en su shell. Por ejemplo: perl6 keyboard.p6 \ `
fuente
JavaScript ES6, 114 bytes
Otra solución de JavaScript. El principio es devolver el índice del carácter de entrada en la matriz de filas más 2 (de modo que la fila 0-9 devuelve -1, es decir, no existe, -1 + 2 = 1.
q
Está en la primera cadena de la matriz, entonces devuelve 0 + 2 = 2da fila).fuente
Perl,
967776 bytesEjecutar usando
perl -p
. Asegúrese de alimentarlo solo con caracteres individuales; por ejemplo, para ejecutarlo desde un archivokey.pl
(para evitar perder el tiempo con secuencias de escape de shell)echo -n q|perl -p key.pl
.Abusar de la funcionalidad de la gama regex es divertido.
fuente
echo
para controlar con precisión la entrada, por ejemplo.echo -n q|perl -n key.pl
, que produce correctamente2
.chomp
la entrada.chomp
editara la entrada, no podría devolver '3' para la tecla de retorno.$_=~
para los partidos,m//
(que es lo que/.../
es) funciona$_
automáticamente! Además, si usa en-p
lugar de-n
, puede usar en$_=
lugar deprint
guardar un par de bytes más. ¡Usar una nueva línea literal en lugar de\n
puede ahorrarle otro byte también! ¡Eso debería reducir su código bastante! Podría valer la pena agregar un ejemplo de uso también para que cualquiera que pruebe sepa que necesita usarecho -n
:)PHP, 173 bytes
La idea aquí era usar el número de grupo de captura de expresiones regulares como índice de fila. Probablemente algunas optimizaciones más en la expresión regular en sí.
La
preg_match()
llamada creará una serie$m
de coincidencias, y si imprimiéramos eso, se vería así (suponiendo quez
fuera la entrada):Voltear esa matriz, intercambiando claves y valores, se mueve de izquierda a derecha y solo mantiene la última clave distinta, por lo que terminamos con:
Luego usamos el carácter de entrada como índice en la matriz para obtener nuestro resultado.
Pruébalo aquí .
fuente
C,
145143136132127106bytesEsto utilizaEsto supone ASCII y entradas de 32 bits.index()
desde POSIX.1-2001 y está en desuso en POSIX.1-2008.fuente
Python 3, 89 bytes
Como aún no puedo comentar, estoy publicando la mejora para la respuesta actual de Python 3 separado.
Editar : Todo el código
print
ahora y más ajustado.fuente
Ruby , 82 bytes
Pruébalo en línea!
fuente
CJam, 125 bytes
Explicación
fuente
SpecBAS - 178 bytes
Usé una cadena larga donde cada fila tiene 26 caracteres (el # 34 es código para comillas dobles y el # 13 es código para retorno).
Luego imprima el resultado de la posición de redondeo / 26.
fuente
C # 6, 201 bytes
Nada especial aquí. Me pareció más barato escribir ambos casos en lugar de usar ToUpper () debido al ancho fijo de la cadena.
Sangrado:
fuente
Python 2, 146 bytes
fuente
Excel, 132 bytes
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
Los intentos de usar el caso distinguen entre mayúsculas y minúsculas en
SEARCH()
lugar deFIND()
revelar que Excel coincide~
,*
y?
con(tick). The matching of
?means we can't use
SEARCH () `, que habría reducido 5 bytes masivos ...fuente