Skip to content

Instantly share code, notes, and snippets.

@pataiji
Last active August 24, 2020 08:39
Show Gist options
  • Save pataiji/8d5c5e2d29bab811ff9311db737da33e to your computer and use it in GitHub Desktop.
Save pataiji/8d5c5e2d29bab811ff9311db737da33e to your computer and use it in GitHub Desktop.
Scramble a number in Go. reference: http://cs.hatenablog.jp/entry/2013/06/19/135527
package main
import (
"fmt"
)
func main() {
for i := 1000; i <= 100000; i += 1000 {
n := scramble(uint32(i))
rn := scramble(n)
fmt.Printf("number: %d / scrambled: %d / re-scrambled: %d\n", i, n, rn)
}
}
func scramble(v uint32) uint32 {
v *= 0x1ca7bc5b
v = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1)
v = ((v >> 2) & 0x33333333) | ((v & 0x33333333) << 2)
v = ((v >> 4) & 0x0F0F0F0F) | ((v & 0x0F0F0F0F) << 4)
v = ((v >> 8) & 0x00FF00FF) | ((v & 0x00FF00FF) << 8)
v = (v >> 16) | (v << 16)
v *= 0x6b5f13d3
return v
}
$ go run scramble_number.go
number: 1000 / scrambled: 314287253 / re-scrambled: 1000
number: 2000 / scrambled: 3551414369 / re-scrambled: 2000
number: 3000 / scrambled: 2613877641 / re-scrambled: 3000
number: 4000 / scrambled: 875010631 / re-scrambled: 4000
number: 5000 / scrambled: 206426799 / re-scrambled: 5000
number: 6000 / scrambled: 2553725915 / re-scrambled: 6000
number: 7000 / scrambled: 3641063619 / re-scrambled: 7000
number: 8000 / scrambled: 3831776058 / re-scrambled: 8000
number: 9000 / scrambled: 3164205346 / re-scrambled: 9000
number: 10000 / scrambled: 3497484142 / re-scrambled: 10000
number: 11000 / scrambled: 3537654342 / re-scrambled: 11000
number: 12000 / scrambled: 2523650052 / re-scrambled: 12000
number: 13000 / scrambled: 3037865004 / re-scrambled: 13000
number: 14000 / scrambled: 3067318904 / re-scrambled: 14000
number: 15000 / scrambled: 3429793888 / re-scrambled: 15000
number: 16000 / scrambled: 4063371677 / re-scrambled: 16000
number: 17000 / scrambled: 3532355205 / re-scrambled: 17000
number: 18000 / scrambled: 1582102673 / re-scrambled: 18000
number: 19000 / scrambled: 2938614009 / re-scrambled: 19000
number: 20000 / scrambled: 3896225719 / re-scrambled: 20000
number: 21000 / scrambled: 2486891323 / re-scrambled: 21000
number: 22000 / scrambled: 1768827171 / re-scrambled: 22000
number: 23000 / scrambled: 4033053146 / re-scrambled: 23000
number: 24000 / scrambled: 3409308674 / re-scrambled: 24000
number: 25000 / scrambled: 1078773710 / re-scrambled: 25000
number: 26000 / scrambled: 1518932502 / re-scrambled: 26000
number: 27000 / scrambled: 1545233620 / re-scrambled: 27000
number: 28000 / scrambled: 1533659452 / re-scrambled: 28000
number: 29000 / scrambled: 1708098376 / re-scrambled: 29000
number: 30000 / scrambled: 1714896944 / re-scrambled: 30000
number: 31000 / scrambled: 3700292349 / re-scrambled: 31000
number: 32000 / scrambled: 3278472933 / re-scrambled: 32000
number: 33000 / scrambled: 4065275185 / re-scrambled: 33000
number: 34000 / scrambled: 3012964697 / re-scrambled: 34000
number: 35000 / scrambled: 2758129431 / re-scrambled: 35000
number: 36000 / scrambled: 2037838431 / re-scrambled: 36000
number: 37000 / scrambled: 98721963 / re-scrambled: 37000
number: 38000 / scrambled: 568610451 / re-scrambled: 38000
number: 39000 / scrambled: 3298285834 / re-scrambled: 39000
number: 40000 / scrambled: 3194899954 / re-scrambled: 40000
number: 41000 / scrambled: 2584597110 / re-scrambled: 41000
number: 42000 / scrambled: 342749108 / re-scrambled: 42000
number: 43000 / scrambled: 1970096540 / re-scrambled: 43000
number: 44000 / scrambled: 4278684328 / re-scrambled: 44000
number: 45000 / scrambled: 3799924880 / re-scrambled: 45000
number: 46000 / scrambled: 2016526573 / re-scrambled: 46000
number: 47000 / scrambled: 243538485 / re-scrambled: 47000
number: 48000 / scrambled: 3852137985 / re-scrambled: 48000
number: 49000 / scrambled: 2169835817 / re-scrambled: 49000
number: 50000 / scrambled: 539386855 / re-scrambled: 50000
number: 51000 / scrambled: 635676751 / re-scrambled: 51000
number: 52000 / scrambled: 759466251 / re-scrambled: 52000
number: 53000 / scrambled: 4250912243 / re-scrambled: 53000
number: 54000 / scrambled: 2920100458 / re-scrambled: 54000
number: 55000 / scrambled: 3072671314 / re-scrambled: 55000
number: 56000 / scrambled: 2914313374 / re-scrambled: 56000
number: 57000 / scrambled: 2909333478 / re-scrambled: 57000
number: 58000 / scrambled: 3001532836 / re-scrambled: 58000
number: 59000 / scrambled: 799160780 / re-scrambled: 59000
number: 60000 / scrambled: 3004932120 / re-scrambled: 60000
number: 61000 / scrambled: 1694062080 / re-scrambled: 61000
number: 62000 / scrambled: 949449621 / re-scrambled: 62000
number: 63000 / scrambled: 3110006113 / re-scrambled: 63000
number: 64000 / scrambled: 738539913 / re-scrambled: 64000
number: 65000 / scrambled: 3109887687 / re-scrambled: 65000
number: 66000 / scrambled: 3279424687 / re-scrambled: 66000
number: 67000 / scrambled: 4211304667 / re-scrambled: 67000
number: 68000 / scrambled: 2753269443 / re-scrambled: 68000
number: 69000 / scrambled: 87091066 / re-scrambled: 69000
number: 70000 / scrambled: 2625851810 / re-scrambled: 70000
number: 71000 / scrambled: 2132421998 / re-scrambled: 71000
number: 72000 / scrambled: 118222662 / re-scrambled: 72000
number: 73000 / scrambled: 1138573828 / re-scrambled: 73000
number: 74000 / scrambled: 1296148076 / re-scrambled: 74000
number: 75000 / scrambled: 4070596728 / re-scrambled: 75000
number: 76000 / scrambled: 3678575968 / re-scrambled: 76000
number: 77000 / scrambled: 2053726365 / re-scrambled: 77000
number: 78000 / scrambled: 3796626565 / re-scrambled: 78000
number: 79000 / scrambled: 1093309137 / re-scrambled: 79000
number: 80000 / scrambled: 1597449977 / re-scrambled: 80000
number: 81000 / scrambled: 3589439671 / re-scrambled: 81000
number: 82000 / scrambled: 1292298555 / re-scrambled: 82000
number: 83000 / scrambled: 1084793251 / re-scrambled: 83000
number: 84000 / scrambled: 2318858202 / re-scrambled: 84000
number: 85000 / scrambled: 1047472898 / re-scrambled: 85000
number: 86000 / scrambled: 985048270 / re-scrambled: 86000
number: 87000 / scrambled: 3053969430 / re-scrambled: 87000
number: 88000 / scrambled: 2139342164 / re-scrambled: 88000
number: 89000 / scrambled: 3311088444 / re-scrambled: 89000
number: 90000 / scrambled: 4047446088 / re-scrambled: 90000
number: 91000 / scrambled: 280628784 / re-scrambled: 91000
number: 92000 / scrambled: 2255050381 / re-scrambled: 92000
number: 93000 / scrambled: 4121381221 / re-scrambled: 93000
number: 94000 / scrambled: 3516039985 / re-scrambled: 94000
number: 95000 / scrambled: 4176991833 / re-scrambled: 95000
number: 96000 / scrambled: 3172856087 / re-scrambled: 96000
number: 97000 / scrambled: 3817777535 / re-scrambled: 97000
number: 98000 / scrambled: 184221355 / re-scrambled: 98000
number: 99000 / scrambled: 3353441171 / re-scrambled: 99000
number: 100000 / scrambled: 1516480522 / re-scrambled: 100000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment