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 0si es falso, 1si 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 inttipo, 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
1si 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,xTenga 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.
nes entrada.ores 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!