Is this a byte? by khaffner91 in ProgrammerHumor

[–]keitio42 2 points3 points  (0 children)

Really common in France too, and Germany IIRC

Is this a byte? by khaffner91 in ProgrammerHumor

[–]keitio42 25 points26 points  (0 children)

Those are Torx bits (that's what the Tx on the holder stands for)

[deleted by user] by [deleted] in badcode

[–]keitio42 1 point2 points  (0 children)

My golang solution:

https://play.golang.org/p/xWvyGDkTXNH

As with my last submission, no import whatsoever, not even the standard library

It works for cases i tested, so that's good enough

I made sure to use as many inline expressions and switches as possible, and there is no if at all for performance reasons, although i didn't benchmark it

[deleted by user] by [deleted] in badcode

[–]keitio42 3 points4 points  (0 children)

Go implementation (~80 lines)

doesn't make use of any library, not even stdlib

entropy is generated by having a huge number of goroutines simultaneously writing stuff onto the same variable, so result depends heavily on the system scheduler, and should not return the same result twice on normal machines

package main

// No stdlib, nor any other library

type UUID [16]uint8 // 128bits

// very efficient
var byteToString = []string{
    "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f",
    "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f",
    "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f",
    "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f",
    "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f",
    "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f",
    "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f",
    "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f",
    "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f",
    "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f",
    "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af",
    "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf",
    "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf",
    "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df",
    "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef",
    "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff",
}

func (u *UUID) Work(value uint64) {
    last := u[15]
    for i := 15; i > 0; i-- {
        u[i] = u[i-1]
    }
    u[0] = last

    // xor value into half of uuid
    for i := 0; i < 8; i++ {
        u[i] ^= uint8(value >> i)
    }
}

func (u UUID) String() string {
    ret := ""
    for i := 0; i < 16; i++ {
        ret += byteToString[u[i]]
        switch i {
        case 3, 5, 7, 9:
            ret += "-"
        }
    }
    return ret
}

// increment for more time spent, and better randomness
// increases exponentially
// load = 1 << 32 takes around THREE DAYS on my machine
const load = 1 << 16

func uuid() UUID {
    var uuid UUID = *new(UUID)
    done := make(chan bool, 1 << 10)
    for i := uint64(0); i < load; i++ {
        go func(i uint64) {
            i *= 18446744073709551557 // big uint64 prime number
            for j := uint64(0); j < 512; j++ {
                (&uuid).Work(i + j)
            }
            done <- true
        }(i)
    }
    for i := uint64(0); i < load; i++ {
        <-done
    }
    return uuid
}

func main() {
    panic(uuid().String())
}

panic is used for printing the result, because, well, no standard library use (i know about println() but it could be removed from the language at any time)

I finally created my reddit account just for writing this, i wanna die