Hashtron inference: Difference between revisions
Content added Content deleted
m (Removed "Example Code" heading and put all languages at the ssame level and in correct order - part 2) |
|||
Line 315: | Line 315: | ||
end |
end |
||
</syntaxhighlight> {{out}} Same as Go example. |
</syntaxhighlight> {{out}} Same as Go example. |
||
=={{header|Phix}}== |
|||
{{trans|Wren}} |
|||
<syntaxhighlight lang="phix"> |
|||
function hashtron(integer n, s, mx, bool bShow) |
|||
// Mixing stage, mix input with salt using subtraction |
|||
atom m = and_bitsu(n - s,#FFFFFFFF) |
|||
// Hashing stage, use xor shift with prime coefficients |
|||
for p in {-2,-3,+5,+7,-11,-13,+17,-19} do |
|||
m = xor_bitsu(m,and_bitsu(shift_bits(m,p),#FFFFFFFF)) |
|||
end for |
|||
// Mixing stage 2, mix input with salt using addition |
|||
m = and_bitsu(m+s,#FFFFFFFF) |
|||
// Modular stage using Lemire's fast alternative to modulo reduction |
|||
return (m * mx) >> 32 |
|||
end function |
|||
function inference(integer command, bits, sequence program) |
|||
atom out = 0 |
|||
if length(program) then |
|||
for j=0 to bits-1 do |
|||
integer input = or_bitsu(command,j<<16), |
|||
{ss, maxx} = program[1] |
|||
input = hashtron(input, ss, maxx,1) |
|||
for p in program from 2 do |
|||
integer {s, mx} = p |
|||
maxx -= mx |
|||
input = hashtron(input, s, maxx,0) |
|||
end for |
|||
if odd(input) then |
|||
out = or_bitsu(out,1<<j) |
|||
end if |
|||
end for |
|||
end if |
|||
return out |
|||
end function |
|||
constant program = { |
|||
{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} |
|||
} |
|||
printf(1,"Test demo:\n") |
|||
printf(1,"%d\n\n",inference(42, 64, {{0, 2}})) |
|||
sequence res = apply(true,inference,{tagset(255,0),4,{program}}) |
|||
res = join_by(res,1,16," ",fmt:="%2d") |
|||
printf(1,"Square root demo for commands in [0, 255]:\n%s",res) |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Test demo: |
|||
14106184687260844995 |
|||
Square root demo for commands in [0, 255]: |
|||
0 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 |
|||
4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 |
|||
5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 |
|||
6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 |
|||
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 |
|||
8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 |
|||
9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 |
|||
10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 |
|||
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 |
|||
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 |
|||
12 12 12 12 12 12 12 12 12 13 13 13 13 13 13 13 |
|||
13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 |
|||
13 13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 |
|||
14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 |
|||
14 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 |
|||
15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 |
|||
</pre> |
|||
=={{header|PHP}}== |
=={{header|PHP}}== |