Su objetivo es determinar si un número es divisible por 3 sin usar condicionales. La entrada será un número de 8 bits sin signo de 0 a 255. ¡Se fomenta la creatividad!
SÓLO tienes permitido usar
Igualdad / desigualdad (
==
,!=
,>
,<
,>=
,<=
)Aritmética (
+
,-
,x
)Operadores lógicos (
!
no,&&
y,||
o)Los operadores bit a bit (
~
no,&
y,|
o,^
xor,<<
,>>
,>>>
izquierda aritmética y lógica y desplazamientos a la derecha)Constantes (sería mejor si mantuvieras estos pequeños)
Asignación variable
Salida 0
si es falso, 1
si es verdadero.
Se aplican las normas estándar de código de golf atómico. Si tienes alguna pregunta por favor déjala en los comentarios. Métodos de ejemplo aquí . Un token es cualquiera de las constantes y variables excluidas anteriormente.
Respuestas:
C - 2 fichas
Parece funcionar hasta 2 31 -1.
Créditos a
zalgo("nhahtdh")
para la idea inversa multiplicativa.fuente
<=
funciona, y recordó que 0xAAAAAAAB se toma comounsigned int
tipo, por lo que el resultado de la multiplicación no tiene signo.Python,
32 fichasSolución de fuerza bruta, pero funciona.
Gracias a Howard por la reducción de 1 ficha.
fuente
0x9......>>x&1
.C -
54 fichas (?)Funciona para cualquier número de 32 bits sin signo .
Este código hace uso del módulo inverso multiplicativo 2 32 de un divisor para convertir la operación de división en operación de multiplicación.
Editar
Mi solución (publicada 2 minutos después) tiene el mismo espíritu que la solución de aditsu. Crédito a él por el uso de
==
eso mejora mi solución en 1 token.Referencia
fuente
Bull
: PC - 15 fichas (?)
Como 4 ≡ 1 (mod 3), tenemos 4 n ≡ 1 (mod 3). La regla de suma de dígitos no se limita a sumar los dígitos, sino que también nos permite dividir arbitrariamente el número en secuencias de dígitos y sumarlos todos manteniendo la congruencia.
Un ejemplo en base 10, divisor = 9:
1234 ≡ 12 + 34 ≡ 1 + 2 + 3 + 4 ≡ 123 + 4 ≡ 1 (mod 9)
Todas las declaraciones en el programa hacen uso de esta propiedad. En realidad, se puede simplificar a un bucle que ejecuta la declaración
n = (n & 0x3) + (n >> 2);
hastan < 4
, ya que la declaración simplemente rompe el número en base-4 en el dígito menos significativo y suma las 2 partes.fuente
n = (n & 0x3) + (n >> 2);
el resultado se reduce a 3 bits y la repetición provocó que permaneciera solo 2 bits stackoverflow.com/a/3421654/995714Python (¿2 tokens?)
O
O
fuente
JavaScript: 3 tokens
Esto abusa del hecho de que el uso de operadores bit a bit en un número lo trunca a un entero en JavaScript.
fuente
=
,*
,|
,==
C - 4 fichas
Funciona hasta 383.
Versión anterior (constantes más grandes):
Funciona hasta 1535
fuente
bash - ???
No estoy seguro de cómo calificar esto.
p.ej
fuente
Befunge 93: 5 fichas
Corregido - división eliminada.
Obtiene la entrada, sigue restando 3 hasta que es menor que 0, dirige el puntero hacia arriba ('|'), luego agrega 3. Si el valor es 0, el puntero se mueve hacia la derecha (" 1. @" genera '1') de lo contrario se mueve hacia la izquierda ("@. " genera '0'). '@' finaliza el programa.
fuente
Lote - 7 fichas
Yo creo que
Devuelve
1
si el número dado (como stdin) es divisible por tres.fuente
Rubí, 6 fichas (?)
Realmente no estoy seguro de cómo contar fichas. OP, ¿puedes anotarme?
Creo que es 6 ...
1
,0
,0
,*
,255
,x
Tenga en cuenta que
*
no es una multiplicación entera.fuente
Python 0
Publiqué Eariler pero usé condicionales. Esto es para usar sin condicionales y sin tokens, solo palabras clave
usa el truco de que múltiples de 3 tienen dígitos que suman 3
Editar: eliminado lambda innecesaria
Editar: Golfed más (117 caracteres) todavía sin fichas
Matado acceso directo para ingenioso del pitón GetItem más largo en 132 Char
http://www.codeskulptor.org/#user34_uUl7SwOBJb_0.py
fuente
[]
embargo, el acceso de matriz no está permitido.only
.Python - 25 fichas
Para comenzar, tengo una solución larga que es una implementación de una de las respuestas en el enlace de mi primera publicación.
n
es entrada.or
es equivalente a||
.fuente
JavaScript - 3 tokens
Pruébelo en la consola de su navegador:
fuente
JavaScript
no está seguro sobre el token #
function mod3 (i) { return {'undefined':'100','0':'0'}[[0][i]][i.toString (3).split('').pop ()]}
o si se permite que la salida para 0 sea 1;
function mod3 (i) { return '100'[i.toString (3).split('').pop ()]}
fuente
Tcl , 83 bytes
Pruébalo en línea!
fuente
proc T n {set n [expr [join [split [expr [join [split $n ""] +]] ""] +]];expr {$n in {0 3 6 9}}}
Pruébelo en línea!proc T n {expr {[expr [join [split [expr [join [split $n ""] +]] ""] +]] in {0 3 6 9}}}
Pruébelo en línea!