Durante un tiempo, me he encontrado con un problema al contar con mis dedos, específicamente, que solo puedo contar hasta diez. Mi solución a ese problema ha sido contar en binario con mis dedos, levantando el pulgar para uno, el índice para dos, el pulgar y el índice para tres, etc. Sin embargo, nos encontramos con un pequeño problema cuando llegamos a El número cuatro. Específicamente, requiere que levantemos nuestro dedo medio, lo que resulta en un gesto bastante desafortunado, que generalmente no se acepta en la sociedad. Este tipo de número es un número grosero . Llegamos al siguiente número grosero en 36, cuando levantamos el pulgar en nuestra segunda mano y el dedo medio de nuestra primera mano. La definición de un número grosero es cualquier número que, bajo este sistema de conteo, resulta en que solo pongamosEl dedo medio de cualquier mano. Una vez que pasamos 1023 (el número máximo alcanzable en una persona, con dos manos de cinco dedos cada una), supongamos que continuamos con una tercera mano, con las manos adicionales agregadas según sea necesario.
Tu tarea:
Escriba un programa o función que reciba una entrada y genere un valor verdadero / falso basado en si la entrada es un número grosero.
Entrada:
Un entero entre 0 y 10 9 (inclusive).
Salida:
Un valor verdadero / falso que indica si la entrada es un número grosero.
Casos de prueba:
Input: Output:
0 ---> falsy
3 ---> falsy
4 ---> truthy
25 ---> falsy
36 ---> truthy
127 ---> falsy
131 ---> truthy
Puntuación:
Este es el código de golf , por lo que gana la puntuación más baja en bytes.
fuente
assume we continue with a third hand
Cuando se trata de ser grosero, el trabajo en equipo hace que el sueño funcione.Respuestas:
APL (dzaima / APL) , 5 bytes
Pruébalo en línea!
4∊
es 4 un miembro de32⊤
a-base-32?fuente
Regex (ECMAScript), 37 bytes
La entrada está en unario, como la longitud de una cadena de
x
s.^((?=(x+)(\2{31}x*))\3)*(x{32})*x{4}$
Pruébalo en línea!
fuente
JavaScript (SpiderMonkey) , 23 bytes
Pruébalo en línea!
Esta es una solución trivial, solo desea convertir a la base 32 y verificar si hay un 4 en ella.
JavaScript (SpiderMonkey) , 26 bytes
Pruébalo en línea!
Es interesante que
/4/.test(...)
cuesta un byte más que....match(4)
.fuente
Japt , 5 bytes
Pruébalo en línea!
Explicación
fuente
Ruby,
3619 bytesPruébalo en línea!
Guardado 17 bytes con el método de @tsh .
fuente
100010011111
00100
.->n{n.to_s(32)=~/4/}
?10001
, la segunda00111
y la tercera11
? Ninguno de ellos tiene su dedo medio solo hacia arribaAPL + WIN, 10 bytes
Solicita entrada de entero
Observando que se requieren seis manos para representar 10 ^ 9 conversos en el vector de 6 elementos de la representación base 32 y verifica si existe un 4 en cualquier elemento.
fuente
Perl 6 , 16 bytes
Pruébalo en línea!
Comprueba si hay una representación
4
en la base 32 del número. Devuelve Nil como falso o una coincidencia que contiene a4
.fuente
Python 2 ,
3432 bytesPruébalo en línea!
2 bytes gracias a tsh
fuente
Código de máquina x86, 17 bytes
Los bytes anteriores definen una función que toma el número como entrada en el
EAX
registro y devuelve el resultado como un valor booleano en elEAX
registro (EAX
== 0 si la entrada no es un número grosero;!EAX
= 0 si la entrada es un número grosero )En mnemónicos de montaje legibles por humanos:
Pruébalo en línea!
fuente
idiv
embargo, es una idea interesante de usar . No veo ninguna mejora incremental en esto. Pero vea mi respuesta : 14 bytes para un bucle de desplazamiento que usa MOV / AND / SUB / JZ para verificar la baja grosería de los 5 bits.Julia 1.0 , 25 bytes
Pruébalo en línea!
Julia 1.0 , 26 bytes
Alternativa que es 1 carácter más corto, pero 1 byte más largo, lástima que
∈
tome 3 bytes en unicode.Pruébalo en línea!
fuente
n->n%32...
su primera respuesta para 2 bytes más cortos?05AB1E , 5 bytes
Respuesta de APL (dzaima / APL) del puerto de @ Adám .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
₆
sea 36, no 32.Catholicon , 4 bytes
Toma un número como una cadena base-256.
Pruébalo en línea!
Banco de pruebas
fuente
<<
y>>
y permite números mayores que 255 en ellos, como se muestra en el conjunto de pruebas.C # (compilador interactivo de Visual C #) , 31 bytes
Salidas lanzando una excepción. La forma de convertir un número de decimal a otra base es dividir el número decimal por esa base repetidamente y tomar el resto como un dígito. Eso es lo que hacemos, y verificamos si alguno de los dígitos tiene un valor de 4 en base-32;
Pruébalo en línea!
fuente
n>31
->n>0
J , 12 bytes
Pruébalo en línea!
fuente
R ,
5048 bytesPruébalo en línea!
Utiliza un enfoque ordenado basado en una matriz ahora (cortesía de @Giueseppe). Genera una matriz de bits de 5x7, la convierte en una serie de enteros de base 32 y comprueba si hay 4s.
fuente
intToBits
pero entonces podemos trabajar conints
en lugar deraw
que termina encima de ahorrar un byte - ver, por ejemplo, esto conintToBits
4
en un número base 32 es, oh, 29 bytes .Python 3 , 43 bytes
Comprueba cada fragmento de 5 bits para ver si es grosero (igual a 4).
Pruébalo en línea!
fuente
C (gcc) , 34 bytes
Pruébalo en línea!
fuente
Carbón de leña , 6 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Emite
-
s según cuán grosero sea el número. Explicación:Utilizo la conversión de base de cadena para evitar tener que separar los literales numéricos para
32
y4
.fuente
Ordenado , 18 bytes
Pruébalo en línea! Comprueba si
4
es un elemento debase(32,x)
(conversión de base).fuente
Haskell , 31 bytes
Pruébalo en línea!
fuente
Cubix , 26 bytes
Pruébalo en línea!
Se envuelve en un cubo con una longitud de borde 3 de la siguiente manera
Míralo correr
Una implementación bastante básica, sin todas las redirecciones que hace:
IS
inicia el programa empujando la entrada y 32 a la pila%4-!
obtiene el resto y comprueba si es 4 por sustracción1O@
salida 1 si era 4 y detener;;,
limpiar la pila y dividir enterosp;?
limpiar el fondo de la pila y verificar el resultado div para 0O@
si div resulta cero salida y altos
intercambie la parte superior de la pila y comience de nuevo en el paso 2 anteriorfuente
MATL , 8 bytes
Pruébalo en línea!
fuente
G
(no estoy seguro de por qué lo incluí en primer lugar) pero eso es solo un byte (¡gracias por ver eso!). Cambiar32YA52
a32_YA4
es el mismo número de bytes ¿verdad?'32_YA4'n'32YA52'n-
Lote,
7745 bytesBasado en estos trucos poco retorcidos . Explicación: solo se deben verificar 6 manos debido al rango limitado (30 bits) de la entrada que se debe admitir. El número mágico
m
es equivalente a111111
en la base 32, de modo que la primera operación alterna los bits groseros en el número de entrada. Luego queda encontrar cuál de las 6 manos es ahora cero.fuente
código de máquina x86, 14 bytes
(El mismo código de máquina funciona en 16 bits, 32 bits y 64 bits. En modo de 16 bits, utiliza AX y DI en lugar de EAX y EDI en modo de 32 y 64 bits).
Algoritmo: verifique 5 bits bajos con
x & 31 == 4
, luego desplace a la derecha en 5 bits, y repita si el resultado del cambio no es cero.Se puede llamar desde C con
char isrude(unsigned n);
la convención de llamadas del Sistema V x86-64. 0 es verdadero, no 0 es falso (esto es asm, no C 1 ).Esto aprovecha la
op al, imm8
codificación de formato corto para AND y SUB. Podría haber usadoXOR al,4
para producir 0 en igualdad, pero SUB es más rápido porque puede fusionarse macro con JZ en una sola sub-y-rama uop en Sandybridge-family.Dato curioso: usar el resultado de la bandera de un turno en más de 1 será lento en la familia P6 (puestos frontales hasta que el turno se retire), pero está bien.
Nota al pie 1: Esta es una función de lenguaje ensamblador, y x86 asm tiene ambas
jz
yjnz
, por lo que según el meta , puedo elegir cualquier manera. No tengo la intención de que esto coincida con C verdadero / falso.Resultó conveniente regresar en AL en lugar de EFLAGS, por lo que podemos describir la función a un compilador de C sin un contenedor, pero mi elección de verdadero / falso no está restringida al usar un llamador de C para probarlo.
fuente
ES6,
313026 bytesSiéntase libre de decir ideas sobre cómo reducir esto aún más, si corresponde.
fuente
test
, en realidad puede guardar dos bytes haciendo coincidir4
como un número y dejandomatch
convertirlo en una cadena y luego en un RegExp para usted .Retina 0.8.2 , 31 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Emite cero a menos que el número sea grosero. Funciona convirtiendo la entrada a unario y luego a la base codificada unaria 32 y contando el número de
4
s en el resultado.fuente
Java 8,
4033 bytesRespuesta de APL (dzaima / APL) del puerto de @ Adám .
Pruébalo en línea.
Explicación:
fuente
> <> , 28 bytes
Las salidas 4 para números groseros arrojan una excepción para números no groseros.
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) ,
37 bytes36 bytes29 bytes-2 bytes por Jonathan Frech
Pruébalo en línea!
Solución de 31 bytes:
Pruébalo en línea!
fuente
...#...&
menudo se usa en Mathematica).[n]
al final, solo el&
. Además, dado que las publicaciones tienen historial de edición, está bien dejar de lado las entradas anteriores, y la convención para los puntajes antiguos es<s>40</s> <s>36</s>
Java 8,
282221 bytesInspirado por la respuesta de @ kevin-cruijssen . Solo funciona para 2 manos.
Pruébalo en línea!
Explicación:
fuente