Hashtron inference: Difference between revisions

Content added Content deleted
m (test demo)
(Added FreeBASIC)
Line 71: Line 71:


== Example Code ==
== Example Code ==

=== {{header|Python}} ===
=== {{header|Python}} ===

<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>

def hash(n, s, max_val):
def hash(n, s, max_val):
# Mixing stage, mix input with salt using subtraction
# Mixing stage, mix input with salt using subtraction
Line 114: Line 111:
return out
return out


print(inference(42,64,[[0,2]]))
print(inference(42,64,[[0,2]]))</syntaxhighlight>
</syntaxhighlight>


=== {{header|Go}} ===
==={{header|FreeBASIC}}===
<syntaxhighlight lang="vbnet">Function hash(n As Ulongint, s As Ulongint, max As Ulongint) As Ulongint
Dim As Ulongint k = &hFFFFFFFF
' Mixing stage, mix input with salt using subtraction
Dim As Ulongint m = (n - s) And k
' Hashing stage, use xor shift with prime coefficients
m Xor= ((m Shl 2) And k)
m Xor= ((m Shl 3) And k)
m Xor= ((m Shr 5) And k)
m Xor= ((m Shr 7) And k)
m Xor= ((m Shl 11) And k)
m Xor= ((m Shl 13) And k)
m Xor= ((m Shr 17) And k)
m Xor= ((m Shl 19) And k)
' Mixing stage 2, mix input with salt using addition
m = (m + s) And k
' Modular stage using Lemire's fast alternative to modulo reduction
Return ((m * max) Shr 32) And k
End Function


Function inference(comando As Ulongint, bits As Integer, program() As Ulong) As Ulongint
Dim As Ulongint salida = 0
' Check if the program is empty
If Ubound(program) = -1 Then Return salida
' Iterate over the bits
For j As Integer = 0 To bits - 1
Dim As Ulongint entrada = comando Or (j Shl 16)
Dim As Ulongint ss = program(0)
Dim As Ulongint maxx = program(1)
entrada = hash(entrada, ss, maxx)
For i As Integer = 1 To Ubound(program)
Dim As Ulongint s = program(i)
Dim As Ulongint max = program(i + 1)
maxx -= max
entrada = hash(entrada, s, maxx)
Next i
entrada And= 1
If entrada <> 0 Then salida Or= (1 Shl j)
Next j
Return salida
End Function

Dim As Ulong program(1) = {0, 2}
Print "Test demo:"
Print inference(42, 64, program())

Sleep</syntaxhighlight>

=== {{header|Go}} ===
<syntaxhighlight lang="go" line>
<syntaxhighlight lang="go" line>
package main
package main
Line 169: Line 212:
func main() {
func main() {
println(Inference(42, 64, [][2]uint32{{0, 2}}))
println(Inference(42, 64, [][2]uint32{{0, 2}}))
}</syntaxhighlight>
}
</syntaxhighlight>


https://go.dev/play/p/AsmOzKWx7jB
https://go.dev/play/p/AsmOzKWx7jB


=== {{header|PHP}} ===
=== {{header|PHP}} ===

<syntaxhighlight lang="php" line>
<syntaxhighlight lang="php" line>

// define hashtron hash
// define hashtron hash
$hash = function($n, $s, $max) {
$hash = function($n, $s, $max) {
Line 242: Line 282:


return $out;
return $out;
};</syntaxhighlight>
};
</syntaxhighlight>


=== {{header|Java}} ===
=== {{header|Java}} ===

<syntaxhighlight lang="java" line>
<syntaxhighlight lang="java" line>

public class Main {
public class Main {
public static long inference(long command, long bits, long[][] program) {
public static long inference(long command, long bits, long[][] program) {
Line 308: Line 345:


}
}
}</syntaxhighlight>
}
</syntaxhighlight>


==={{header|Wren}}===
==={{header|Wren}}===