Hashtron inference: Difference between revisions
Content added Content deleted
(Added FreeBASIC) |
(julia example) |
||
Line 346: | Line 346: | ||
} |
} |
||
}</syntaxhighlight> |
}</syntaxhighlight> |
||
=={{header|Julia}}== |
|||
{{trans|Python}} |
|||
<syntaxhighlight lang="julia">function hash(n, s, max_val) |
|||
# Mixing stage, mix input with salt using subtraction |
|||
m = (n - s) & 0xFFFFFFFF |
|||
# Hashing stage, use xor shift with prime coefficients |
|||
m ⊻= (m << 2) & 0xFFFFFFFF |
|||
m ⊻= (m << 3) & 0xFFFFFFFF |
|||
m ⊻= (m >> 5) & 0xFFFFFFFF |
|||
m ⊻= (m >> 7) & 0xFFFFFFFF |
|||
m ⊻= (m << 11) & 0xFFFFFFFF |
|||
m ⊻= (m << 13) & 0xFFFFFFFF |
|||
m ⊻= (m >> 17) & 0xFFFFFFFF |
|||
m ⊻= (m << 19) & 0xFFFFFFFF |
|||
# Mixing stage 2, mix input with salt using addition |
|||
m += s |
|||
m &= 0xFFFFFFFF |
|||
# Modular stage using Lemire's fast alternative to modulo reduction |
|||
return ((m * max_val) >> 32) & 0xFFFFFFFF |
|||
end |
|||
function inference(command, bits, program) |
|||
out = UInt(0) |
|||
# Check if the program is empty |
|||
length(program) == 0 && return out |
|||
# Iterate over the bits |
|||
for j in 0:bits-1 |
|||
input_val = command | (j << 16) |
|||
ss, maxx = program[begin] |
|||
input_val = hash(input_val, ss, maxx) |
|||
for i in firstindex(program)+1:lastindex(program) |
|||
s, max_val = program[i] |
|||
maxx -= max_val |
|||
input_val = hash(input_val, s, maxx) |
|||
end |
|||
if isodd(input_val) |
|||
out |= 1 << j |
|||
end |
|||
end |
|||
return out |
|||
end |
|||
println(inference(42, 64, [[0, 2]])) |
|||
for i in 0x0:0xff |
|||
println(i, " ", inference(i, 4, [ |
|||
[8776, 79884], [12638, 1259], [9953, 1242], [4658, 1228], [5197, 1210], [12043, 1201], |
|||
[6892, 1183], [7096, 1168], [10924, 1149], [5551, 1136], [5580, 1123], [3735, 1107], |
|||
[3652, 1091], [12191, 1076], [14214, 1062], [13056, 1045], [14816, 1031], [15205, 1017], |
|||
[10736, 1001], [9804, 989], [13081, 974], [6706, 960], [13698, 944], [14369, 928], |
|||
[16806, 917], [9599, 906], [9395, 897], [4885, 883], [10237, 870], [10676, 858], |
|||
[18518, 845], [2619, 833], [13715, 822], [11065, 810], [9590, 799], [5747, 785], |
|||
[2627, 776], [8962, 764], [5575, 750], [3448, 738], [5731, 725], [9434, 714], |
|||
[3163, 703], [3307, 690], [3248, 678], [3259, 667], [3425, 657], [3506, 648], |
|||
[3270, 639], [3634, 627], [3077, 617], [3511, 606], [27159, 597], [27770, 589], |
|||
[28496, 580], [28481, 571], [29358, 562], [31027, 552], [30240, 543], [30643, 534], |
|||
[31351, 527], [31993, 519], [32853, 510], [33078, 502], [33688, 495], [29732, 487], |
|||
[29898, 480], [29878, 474], [26046, 468], [26549, 461], [28792, 453], [26101, 446], |
|||
[32971, 439], [29704, 432], [23193, 426], [29509, 421], [27079, 415], [32453, 409], |
|||
[24737, 404], [25725, 400], [23755, 395], [52538, 393], [53242, 386], [19609, 380], |
|||
[26492, 377], [24566, 358], [31163, 368], [57174, 363], [26639, 364], [31365, 357], |
|||
[60918, 350], [21235, 338], [28072, 322], [28811, 314], [27571, 320], [17635, 309], |
|||
[51968, 169], [54367, 323], [60541, 254], [26732, 270], [52457, 157], [27181, 276], |
|||
[19874, 227], [22797, 320], [59346, 271], [25496, 260], [54265, 231], [22281, 250], |
|||
[42977, 318], [26008, 240], [87604, 142], [94647, 314], [52292, 157], [20999, 216], |
|||
[89253, 316], [22746, 29], [68338, 312], [22557, 317], [110904, 104], [70975, 285], |
|||
[51835, 277], [51871, 313], [132221, 228], [18522, 290], [68512, 285], [118816, 302], |
|||
[150865, 268], [68871, 273], [68139, 290], [84984, 285], [150693, 266], [396047, 272], |
|||
[84923, 269], [215562, 258], [68015, 248], [247689, 235], [214471, 229], [264395, 221], |
|||
[263287, 212], [280193, 201], [108065, 194], [263616, 187], [148609, 176], [263143, 173], |
|||
[378205, 162], [312547, 154], [50400, 147], [328927, 140], [279217, 132], [181111, 127], |
|||
[672098, 118], [657196, 113], [459383, 111], [833281, 105], [520281, 102], [755397, 95], |
|||
[787994, 91], [492444, 82], [1016592, 77], [656147, 71], [819893, 66], [165531, 61], |
|||
[886503, 57], [1016551, 54], [3547827, 49], [14398170, 43], [395900, 41], [4950628, 37], |
|||
[11481175, 33], [100014881, 30], [8955328, 31], [11313984, 27], [13640855, 23], |
|||
[528553762, 21], [63483027, 17], [952477, 8], [950580, 4], [918378, 2], [918471, 1], |
|||
])) |
|||
end |
|||
</syntaxhighlight> {{out}} Same as Go example. |
|||
==={{header|Wren}}=== |
==={{header|Wren}}=== |