¡Bienvenido!

Al registrarte con nosotros, podrás discutir, compartir y enviar mensajes privados con otros miembros de nuestra comunidad.

¡Regístrate ahora!

Foros Cuba

moist
moist
Traté de hacer algo como el garbage collector de Python y trackear el número de referencias de cada caracter para saber si había duplicados pero terminó siendo 5 veces más lento que crear un set para cada conjunto de 4 valores adyacentes así que me deprimí.
Creo que los mis amigos turbo autistas hicieron algo con bitmasks.

ihvwo2.png
w1re
w1re's iconw1re
Primero usé algo muy parecido, pero luego lo pasé por el desensamblador y no me convenció lo que vi, específicamente la implementación de __builtin_popcount(). Se me ocurrió una forma mejor.
w1re
w1re's iconw1re
C:
typedef struct {
    size_t count;
    uint32_t seen;
} State;

static int update(State *s, char c)
{
    uint32_t flag = 1U << (c-'a');
    if (s->seen & flag) {
        s->seen = flag;
        s->count = 1;
        return 0;
    }
    s->seen |= flag;
    return ++s->count == START_LEN;
}
w1re
w1re's iconw1re
C:
for (pos = 1; pos < START_LEN; ++pos) {
    if (!valid_char(c = getchar()))
        goto fail;
    update(&s, c);
}

while (1) {
    if (!valid_char(c = getchar()))
        goto fail;
    if (update(&s, c))
        break;
    ++pos;
}
  • Like
Reacciones: moist
Trett?
Trett?
Tsumadre, cuantos hechizos oscuros están conjurando en este chat!! ?
  • Haha
Reacciones: w1re
Atrás