1.) Rechne die Zahl in binaer Darstellung in eine Dezimale Darstellung um
1111100110001100b 63884d
2.) Rechne die Zahl in dezimal darstellung in eine Binaerdarstellung um
1778 0000011011110010
3.) Addiere die drei Zahlen schriftlich
60875p0
+ 46115
+ 38602
-----------------
145592
4.) Subtrahiere die letzten drei Zahlen schriftlich von der ersten schriftlich
1322
- 11342
- 2078
- 8884
-----------------
-20982
5.) Rechne die Zahl ins zweier komplement um, mit 8 Bit - und subtrahiere diese zahl von der ersten und rechne das Ergebnis nach dezimal
-58 -60 = -118
11000110 11000100 = 10001010
6.) Multipliziere die zwei Zahlen schriftlich
26021*49394 = 1285281274
7.) Dividiere die zwei Zahlen schriftlich
51349/2178 = 23
8.) Errechne x Logarithmisch mit dem Taschenrechner
40656^x = 2088425080
9.) Errechne mit dem Abakus
2 + 87 + 16 + 41 + 76 + 65 + 33 + 91 + 7 + 32
10.) Errechne mit dem Abakus
4572 + 4894 + 9700 + 2341 + 1662 + 4208 + 5030 + 4186 + 6231 + 6863
====================== solutions:
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 5
m = 97
b = 100
y = 84
x_5 = 65
y := (b * x_i + y) % m;
y = (100 * 65 + 84) % 97;
taschenrechner:
y = (100 * 65 + 84) % 97 = 85
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 6
m = 97
b = 100
y = 85
x_6 = 33
y = (100 * 33 + 85) % 97 = 87
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 7
m = 97
b = 100
y = 87
x_7 = 91
y = (100 * 91 + 91) % 97 = 73
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 8
m = 97
b = 100
y = 91
x_8 = 7
y = (100 * 7 + 91) % 97 = 15
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 9
m = 97
b = 100
y = 15
x_9 = 32
y = (100 * 32 + 15) % 97 = 14
ok: hash-val: 14
################################# 14
#!/bin/bash
# 10/03/25
# (c) David Vajda
# hash table excersize sh
X=(2 87 16 41 76 65 33 91 7 32)
y=0
i=0
b=100
m=97
echo "X=(${X[@]})"
i=0
while [ $i -lt ${#X[@]} ]
do
y=$((($b*${X[$i]}+$y)%97))
echo -n "i=$i,x=${X[$i]},y=$y,b=$b,m=$m; "
i=$(($i+1))
done
echo "(c) David Vajda"
echo "hash table excersize sh"
echo "10/03/25"
date
echo "hash-value: $y"
X=(2 87 16 41 76 65 33 91 7 32)
i=0,x=2,y=6,b=100,m=97; i=1,x=87,y=73,b=100,m=97; i=2,x=16,y=24,b=100,m=97; i=3,x=41,y=50,b=100,m=97; i=4,x=76,y=84,b=100,m=97; i=5,x=65,y=85,b=100,m=97; i=6,x=33,y=87,b=100,m=97; i=7,x=91,y=69,b=100,m=97; i=8,x=7,y=90,b=100,m=97; i=9,x=32,y=89,b=100,m=97; (c) David Vajda
hash table excersize sh
10/03/25
Fr 3. Okt 12:29:09 CEST 2025
hash-value: 89
da war vorher ein fehler drin, nur wo?
AHA, BEI i=8
###############################
y = (100 * 91 + 91) % 97 = 73
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 8
m = 97
b = 100
y = 73
x_8 = 7
y = (100 * 7 + 73) % 97 = 94
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 9
m = 97
b = 100
y = 94
x_9 = 32
y = (100 * 94 + 32) % 97 = 94
nein, da ist irgendein laengerer fehler drin
############# time exceeded, keine lust zu suchen ...
#### jetzt mit C, python 3, pascal, mySQL
/* (C) David Vajda */
/* 10/03/25 */
/* hash excersize C */
#include <stdio.h>
unsigned int hash (unsigned int *, int, int, int);
void hashprintdata (unsigned int *, int);
int main (void) {
unsigned int X [] = {2, 87, 16, 41, 76, 65, 33, 91, 7, 32};
printf ("(c) David Vajda\n");
printf ("10/03/25\n");
printf ("hash excersize in C\n");
hashprintdata (X, 10);
printf ("base=100, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 100));
printf ("base=64, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 64));
#define HASHDEBUG
printf ("base=100, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 100));
printf ("base=64, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 64));
return 0;
}
void hashprintdata (unsigned int *X, int n) {
int i;
printf ("X = (");
for (i = 0; i < (n-1); i++)
printf ("%i, ", X[i]);
printf ("%i)\n", X[i]);
}
unsigned int hash (unsigned int *X, int n, int m, int b) {
int i;
int y = 0;
for (i = 0; i < n; i++) {
y = (b * X[i] + y) % m;
#ifdef HASHDEBUG
printf ("i = %i, x = %i, y = %i, m = %i, b = %i\n", i, X[i], y, m, b);
#endif
}
return y;
}
(c) David Vajda
10/03/25
hash excersize in C
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
i = 0, x = 2, y = 6, m = 97, b = 100
i = 1, x = 87, y = 73, m = 97, b = 100
i = 2, x = 16, y = 24, m = 97, b = 100
i = 3, x = 41, y = 50, m = 97, b = 100
i = 4, x = 76, y = 84, m = 97, b = 100
i = 5, x = 65, y = 85, m = 97, b = 100
i = 6, x = 33, y = 87, m = 97, b = 100
i = 7, x = 91, y = 69, m = 97, b = 100
i = 8, x = 7, y = 90, m = 97, b = 100
i = 9, x = 32, y = 89, m = 97, b = 100
base=100, Ergebnis vom Hashing: 89,
i = 0, x = 2, y = 31, m = 97, b = 64
i = 1, x = 87, y = 70, m = 97, b = 64
i = 2, x = 16, y = 27, m = 97, b = 64
i = 3, x = 41, y = 32, m = 97, b = 64
i = 4, x = 76, y = 46, m = 97, b = 64
i = 5, x = 65, y = 35, m = 97, b = 64
i = 6, x = 33, y = 13, m = 97, b = 64
i = 7, x = 91, y = 17, m = 97, b = 64
i = 8, x = 7, y = 77, m = 97, b = 64
i = 9, x = 32, y = 88, m = 97, b = 64
base=64, Ergebnis vom Hashing: 88,
i = 0, x = 2, y = 6, m = 97, b = 100
i = 1, x = 87, y = 73, m = 97, b = 100
i = 2, x = 16, y = 24, m = 97, b = 100
i = 3, x = 41, y = 50, m = 97, b = 100
i = 4, x = 76, y = 84, m = 97, b = 100
i = 5, x = 65, y = 85, m = 97, b = 100
i = 6, x = 33, y = 87, m = 97, b = 100
i = 7, x = 91, y = 69, m = 97, b = 100
i = 8, x = 7, y = 90, m = 97, b = 100
i = 9, x = 32, y = 89, m = 97, b = 100
base=100, Ergebnis vom Hashing: 89,
i = 0, x = 2, y = 31, m = 97, b = 64
i = 1, x = 87, y = 70, m = 97, b = 64
i = 2, x = 16, y = 27, m = 97, b = 64
i = 3, x = 41, y = 32, m = 97, b = 64
i = 4, x = 76, y = 46, m = 97, b = 64
i = 5, x = 65, y = 35, m = 97, b = 64
i = 6, x = 33, y = 13, m = 97, b = 64
i = 7, x = 91, y = 17, m = 97, b = 64
i = 8, x = 7, y = 77, m = 97, b = 64
i = 9, x = 32, y = 88, m = 97, b = 64
base=64, Ergebnis vom Hashing: 88,
# (c) David Vajda
# 10/03/25
# python 3 - hash excersize
def hash_davevajda (X,n,m,b):
i = 0
y = 0
while i < n:
y = (b*X[i]+y)%m
i = i + 1
return y
print ("(c) David Vajda")
print ("10/03/25")
print ("python 3 - hash excersize")
X = [2, 87, 16, 41, 76, 65, 33, 91, 7, 32]
i = 0
n = len (X)
print (end="X = [")
while i < n - 1:
print (X[i], end=", ")
i = i + 1
print (X[i], "]")
i=0
y=0
m=97
b=64
print ("m=97, base=64, hashval=",hash_davevajda(X,n,m,b))
print ("m=97, base=64, hashval=",hash_davevajda(X,n,m,100))
(c) David Vajda
10/03/25
python 3 - hash excersize
X = [2, 87, 16, 41, 76, 65, 33, 91, 7, 32 ]
m=97, base=64, hashval= 88
m=97, base=64, hashval= 89
{ (c) David Vajda }
{ 10/03/25 }
{ Pascal Hash Excersize Program }
program pashash(input,output);
{ hier musste ich mir ein wenig wieder ins gedaechtnis rufen }
{ const, type, var ... das ist die richtige art und weise, variablen, ... zu definieren}
const
tMinIndex = 1;
tMaxIndex = 10;
type
tIndex = tMinIndex .. tMaxIndex;
tFeld = array [tIndex] of ShortInt;
var
X: tFeld = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32);
i: tIndex;
m: ShortInt;
b: ShortInt;
function pashash (X: tFeld; n: tIndex; m: ShortInt; b: ShortInt): ShortInt;
var
i: tIndex;
y: ShortInt = 0;
begin
for i := tMinIndex to tMaxIndex do
begin
y := (b * X[i] + y) mod m;
end;
pashash := y;
end;
begin
writeln ('(c) David Vajda');
writeln ('10/03/25');
writeln ('Pascal Hash Excersize Program');
write ('X = (');
for i := tMinIndex to tMaxIndex do
begin
write (X[i], ', ')
end;
writeln (X[i], ')');
writeln ('base=64,m=97,hashval=', pashash(X,tMaxIndex,97,64));
writeln ('base=100,m=97,hashval=', pashash(X,tMaxIndex,97,100));
end.
(c) David Vajda
10/03/25
Pascal Hash Excersize Program
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32, 32)
base=64,m=97,hashval=88
base=100,m=97,hashval=89
URL: https://mariadb.com/kb/en/user/
MariaDB [(none)]> CREATE USER 'phptest100325'@'localhost';
Query OK, 0 rows affected (0.019 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'phptest100325'@'localhost';
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> SET PASSWORD FOR 'phptest100325'@'localhost' = PASSWORD ('phptest100325');
Query OK, 0 rows affected (0.012 sec)
MariaDB [(none)]> QUIT
Bye
root@www001:/home/david#
<?php
session_start ();
?>
<!-- (c) David Vajda
php/javascript/hash excersize programm
10/03/25
-->
<style>
</style>
<script>
</script>
<?php
/* (c) David Vajda
php/javascript/hash excersize programm
10/03/25
*/
$X = array(2, 87, 16, 41, 76, 65, 33, 91, 7, 32);
$i = 0;
$m = 97;
$b = 64;
$n = count($X);
// ich wusste nicht, wie man die laenge eines arrays in php ausdrueckt...
$y = 0;
for ($i = 0; $i < $n; $i++)
$y = ($X[$i]*$b+$y) % $m;
echo "$y";
include ("/home/david/mysqltestuser100325.php");
$dbname="php100325hash";
$db = new PDO ("mysql: localhost", $db_user, $db_password);
$db->query ("CREATE DATABASE " . $dbname . "; ");
$db->query ("USE " . $dbname . "; " );
try {
$db->query ("CREATE TABLE X (x INTEGER); ");
$db->query ("CREATE TABLE FuncY (Func TEXT(64), y INTEGER); ");
$stmt = "";
for ($i = 0; $i < $n; $i++)
$stmt = $stmt . "INSERT INTO X (x) VALUES ('" . $X[$i] . "'); ";
echo $stmt;
$db->query ($stmt);
$X2 = array ();
$stmt = $db->query("SELECT x FROM X;");
while ($row = $stmt->fetch ())
array_push ($X2, intval($row[0]));
$i = 0;
while ($i < $n) {
echo $X2[$i] . ", ";
$i = $i + 1;
}
$i = 0;
$y = 0;
echo "X = (";
while ($i < $n) {
echo $X2[$i] . ", ";
$y = ($b * $X2[$i] + $y) % $m;
$i = $i + 1;
}
echo ")<BR>\n";
echo "hash val is: " . $y . "<br>\n";
$db->query ("INSERT INTO FuncY (Func, y) VALUES ('hash-std', " . $y . "); ");
//$db->query ("DROP DATABASE " . $dbname . "; ");
session_destroy ();
exit (0);
}
catch (Exception $e) {
//$db->query ("DROP DATABASE " . $dbname . "; ");
session_destroy ();
exit (0);
}
?>
URL: https://mariadb.com/kb/en/user/
MariaDB [(none)]> CREATE USER 'phptest100325'@'localhost';
Query OK, 0 rows affected (0.019 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'phptest100325'@'localhost';
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> SET PASSWORD FOR 'phptest100325'@'localhost' = PASSWORD ('phptest100325');
Query OK, 0 rows affected (0.012 sec)
MariaDB [(none)]> QUIT
Bye
root@www001:/home/david#
<?php
session_start ();
/* (c) David Vajda
php/javascript/hash excersize programm
10/03/25
*/
$db_user = "phptest100325";
$db_password = "phptest100325";
session_destroy ();
?>
88PHP Notice: session_start(): Ignoring session_start() because a session is already active in /home/david/mysqltestuser100325.php on line 2
INSERT INTO X (x) VALUES ('2'); INSERT INTO X (x) VALUES ('87'); INSERT INTO X (x) VALUES ('16'); INSERT INTO X (x) VALUES ('41'); INSERT INTO X (x) VALUES ('76'); INSERT INTO X (x) VALUES ('65'); INSERT INTO X (x) VALUES ('33'); INSERT INTO X (x) VALUES ('91'); INSERT INTO X (x) VALUES ('7'); INSERT INTO X (x) VALUES ('32'); 2, 87, 16, 41, 76, 65, 33, 91, 7, 32, X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32, )<BR>
hash val is: 88<br>
PHP Warning: session_destroy(): Trying to destroy uninitialized session in /home/david/php100325hash.php on line 73
david@www001:~$
MariaDB [php100325hash]> SELECT * FROM X;
+------+
| x |
+------+
| 2 |
| 87 |
| 16 |
| 41 |
| 76 |
| 65 |
| 33 |
| 91 |
| 7 |
| 32 |
+------+
10 rows in set (0,021 sec)
MariaDB [php100325hash]> DROP DATABASE php100325hash;
Query OK, 2 rows affected (0,028 sec)
MariaDB [(none)]> SELECT * FROM FuncY
-> ;
ERROR 1046 (3D000): No database selected
MariaDB [(none)]> USE php100325hash;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [php100325hash]> SELECT * FROM FuncY
-> ;
+----------+------+
| Func | y |
+----------+------+
| hash-std | 88 |
+----------+------+
1 row in set (0,001 sec)
MariaDB [php100325hash]>
################################################# adler-32
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
https://de.wikipedia.org/wiki/Adler-32
/* Beispielcode zur Berechnung der Adler-32-Prüfsumme */
#include <stdint.h> // fuer uint8_t/uint32_t
#include <stddef.h> // fuer size_t
uint32_t adler32(const void *buf, size_t buflength) {
const uint8_t *buffer = (const uint8_t*)buf;
uint32_t s1 = 1;
uint32_t s2 = 0;
for (size_t n = 0; n < buflength; n++) {
s1 = (s1 + buffer[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) | s1;
}
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
groesste primzahl, kleiner 255? (266)
249? 251? 253?
let's make a primzahl check ...
oder sollen wir 100 nehmen, was dann? 97???
informatik gemaess 255 ...
#!/bin/bash
# (c) David Vajda
# Primzahl check from 255 ...
# 10/03/25
echo "(c) David Vajda"
echo "Primzahl check from 255 ..."
echo "10/03/25"
y=255
x=0
while [ $y -gt 0 ]
do
x=$(($y-1))
while [ $x -gt 1 ]
do
if [ $(($y%$x)) -eq 0 ]
then
break
fi
x=$(($x-1))
done
if [ $x -eq 1 ]
then
echo "$y ist eine primazahl"
break
fi
y=$(($y-1))
done
exit
for (size_t n = 0; n < buflength; n++) {
s1 = (s1 + buffer[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
(c) David Vajda
Primzahl check from 255 ...
10/03/25
251 ist eine primazahl
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32)
s1 = 1;
s2 = 0;
s1 = (s1 + X_0) % 251 = 3;
s2 = (s2 + s1) % 251 = 3;
s1 = (s1 + X_1) % 251 = (3 + 87) % 251 = 90
s2 = (s2 + s1) % 251 = (3 + 90) % 251 = 93
s1 = (s1 + X_2) % 251 = (90 + 16) % 251 = 106;
s2 = (s2 + s1) % 251 = (93 + 106) % 251 = 199;
s1 = (s1 + X_3) % 251 = (106 + 41) % 251 = 147;
s2 = (s2 + s1) % 251 = (199 + 147) % 251 = 95
s1 = (s1 + X_4) % 251 = (147 + 76) % 251 = 223;
s2 = (s2 + s1) % 251 = (223 + 95) % 251 = 67;
s1 = (s1 + X_5) % 251 = (223 + 65) % 251 = 37
s2 = (s2 + s1) % 251 = (37 + 67) % 251 = 104
s1 = (s1 + X_6) % 251 = (37 + 33) % 251 = 70
s2 = (s2 + s1) % 251 = (70 + 104) % 251 = 174
s1 = (s1 + X_7) % 251 = (70 + 91) % 251 = 161
s2 = (s2 + s1) %2 251 = (161 + 174) % 251 = 84
s1 = (s1 + X_8) % 251 = (161 + 7) % 251 = 168
s2 = (s2 + s1) % 251 = (168+84) % 251 = 1
s1 = (s1 + X_9) % 251 = (168+32) % 251 = 200
s2 = (s2 + s1) % 251 = (1 + 200) % 251 = 201
s2 = 201, in binaercode:
200/2 = 100 Rest 1
100/2 = 50 Rest 0
50/2 = 25 Rest 0
25/2 = 12 Rest 1
12/2 = 6 Rest 0
6/2 = 3 Rest 0
3/2 = 1 Rest 1
1/2 = 0 Rest 1
1100.1001
ueberpruefung mit kde taschenrechner:
richtig, ok
s2 << 8
1100.1001.0000.0000
s2 << 8 | s1
1100.1001.1100.1000
bzw:
201200
#!/bin/bash
# 10/03/25
# (c) David Vajda
# hash table excersize sh
X=(2 87 16 41 76 65 33 91 7 32)
y=0
i=0
b=100
m=97
echo "X=(${X[@]})"
i=0
while [ $i -lt ${#X[@]} ]
do
y=$((($b*${X[$i]}+$y)%97))
echo -n "i=$i,x=${X[$i]},y=$y,b=$b,m=$m; "
i=$(($i+1))
done
echo "(c) David Vajda"
echo "hash table excersize sh"
echo "10/03/25"
date
echo "hash-value: $y"
s1=1
s2=0
m=251
echo "X=(${X[@]})"
i=0
while [ $i -lt ${#X[@]} ]
do
s1=$((($s1+${X[$i]})%$m))
s2=$((($s1+$s2)%$m))
echo -n "i=$i,x=${X[$i]},s1=$s1,s2=$s2,m=$m; "
i=$(($i+1))
done
echo "adler-32-checksum: $s2$s1"
X=(2 87 16 41 76 65 33 91 7 32)
i=0,x=2,y=6,b=100,m=97; i=1,x=87,y=73,b=100,m=97; i=2,x=16,y=24,b=100,m=97; i=3,x=41,y=50,b=100,m=97; i=4,x=76,y=84,b=100,m=97; i=5,x=65,y=85,b=100,m=97; i=6,x=33,y=87,b=100,m=97; i=7,x=91,y=69,b=100,m=97; i=8,x=7,y=90,b=100,m=97; i=9,x=32,y=89,b=100,m=97; (c) David Vajda
hash table excersize sh
10/03/25
Fr 3. Okt 17:34:15 CEST 2025
hash-value: 89
X=(2 87 16 41 76 65 33 91 7 32)
i=0,x=2,s1=3,s2=3,m=251; i=1,x=87,s1=90,s2=93,m=251; i=2,x=16,s1=106,s2=199,m=251; i=3,x=41,s1=147,s2=95,m=251; i=4,x=76,s1=223,s2=67,m=251; i=5,x=65,s1=37,s2=104,m=251; i=6,x=33,s1=70,s2=174,m=251; i=7,x=91,s1=161,s2=84,m=251; i=8,x=7,s1=168,s2=1,m=251; i=9,x=32,s1=200,s2=201,m=251; adler-32-checksum: 201200
/* (C) David Vajda */
/* 10/03/25 */
/* hash excersize C */
#include <stdio.h>
unsigned int hash (unsigned int *, int, int, int);
void hashprintdata (unsigned int *, int);
unsigned int adler32 (unsigned int *X, int, unsigned);
int main (void) {
unsigned int X [] = {2, 87, 16, 41, 76, 65, 33, 91, 7, 32};
printf ("(c) David Vajda\n");
printf ("10/03/25\n");
printf ("hash and other checksum excersize in C\n");
hashprintdata (X, 10);
printf ("base=100, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 100));
printf ("base=64, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 64));
printf ("m=251, Ergebnis vom adler-32-checksum: %u, \n", adler32 (X, 10, 251));
#define HASHDEBUG
printf ("base=100, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 100));
printf ("base=64, Ergebnis vom Hashing: %i, \n", hash (X, 10, 97, 64));
printf ("m=251, Ergebnis vom adler-32-checksum: %u, \n", adler32 (X, 10, 251));
return 0;
}
void hashprintdata (unsigned int *X, int n) {
int i;
printf ("X = (");
for (i = 0; i < (n-1); i++)
printf ("%i, ", X[i]);
printf ("%i)\n", X[i]);
}
unsigned int adler32 (unsigned int *X, int n, unsigned m) {
int i;
unsigned char s1 = 1;
unsigned char s2 = 0;
for (i = 0; i < n; i++) {
s1 = (s1 + X[i]) % m;
s2 = (s2 + s1) % m;
#ifdef HASHDEBUG
printf ("i = %i, x = %i, s1 = %i, s2 = %i, m = %i\n", i, X[i], s1, s2, m);
#endif
}
//return ((s2 << 8) | s1);
return (s2 * 256) + s1;
}
unsigned int hash (unsigned int *X, int n, int m, int b) {
int i;
int y = 0;
for (i = 0; i < n; i++) {
y = (b * X[i] + y) % m;
#ifdef HASHDEBUG
printf ("i = %i, x = %i, y = %i, m = %i, b = %i\n", i, X[i], y, m, b);
#endif
}
return y;
}
wobei das wiederum nicht stimmt, schliesslich kann ich s1 und s2 ja auch einzeln ausgeben...
### ok, eigentlich stimmt dieses ergebnis, wie in C richtig gesagt, denn, was ich gemacht habe war nicht ganz falsch, aber auch nicht ganz richtig. denn: zunaechst was ich gemacht habe ist BCD 200 und 201 sind so: 201200 bcd zahlen. zahlen wie 256 oder 78 koennen 8 bit zahlen sein, also z.B. 0xef. zunaechst wenn die Ziffern a .. f wie im hex nicht auftauchen, sagt das nichts darueber aus, dass es das nicht ist. diese hier sind mehr oder weniger keine zahlen wie sie ins hex system passen, sondern, wie ip addressen 0..255 also ein byte, dec dargestellt
mit der rueckgabe ist, das, was ich machte, aber ... BCD aehnlich
base=64, Ergebnis vom Hashing: 88,
i = 0, x = 2, s1 = 3, s2 = 3, m = 251
i = 1, x = 87, s1 = 90, s2 = 93, m = 251
i = 2, x = 16, s1 = 106, s2 = 199, m = 251
i = 3, x = 41, s1 = 147, s2 = 95, m = 251
i = 4, x = 76, s1 = 223, s2 = 67, m = 251
i = 5, x = 65, s1 = 37, s2 = 104, m = 251
i = 6, x = 33, s1 = 70, s2 = 174, m = 251
i = 7, x = 91, s1 = 161, s2 = 84, m = 251
i = 8, x = 7, s1 = 168, s2 = 1, m = 251
i = 9, x = 32, s1 = 200, s2 = 201, m = 251
m=251, Ergebnis vom adler-32-checksum: 51656,
david@www001:~$
{ (c) David Vajda }
{ 10/03/25 }
{ Pascal Hash Excersize Program }
program pashash(input,output);
{ hier musste ich mir ein wenig wieder ins gedaechtnis rufen }
{ const, type, var ... das ist die richtige art und weise, variablen, ... zu definieren}
const
tMinIndex = 1;
tMaxIndex = 10;
type
tIndex = tMinIndex .. tMaxIndex;
tFeld = array [tIndex] of ShortInt;
var
X: tFeld = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32);
i: tIndex;
m: ShortInt;
b: ShortInt;
function Adler32 (X: tFeld; n: tIndex; m: Integer): Integer;
var
i: tIndex;
s1: Integer = 1;
s2: Integer = 0;
begin
for i := tMinIndex to tMaxIndex do
begin
s1 := (s1 + X[i]) mod m;
s2 := (s2 + s1) mod m;
end;
writeln (s1,s2);
Adler32 := s2 * 256 + s1;
end;
function pashash (X: tFeld; n: tIndex; m: ShortInt; b: ShortInt): ShortInt;
var
i: tIndex;
y: ShortInt = 0;
begin
for i := tMinIndex to tMaxIndex do
begin
y := (b * X[i] + y) mod m;
end;
pashash := y;
end;
begin
writeln ('(c) David Vajda');
writeln ('10/03/25');
writeln ('Pascal Hash Excersize Program');
write ('X = (');
for i := tMinIndex to tMaxIndex do
begin
write (X[i], ', ')
end;
writeln (X[i], ')');
writeln ('base=64,m=97,hashval=', pashash(X,tMaxIndex,97,64));
writeln ('base=100,m=97,hashval=', pashash(X,tMaxIndex,97,100));
writeln ('base=256,m=251,adler-32-checksum-val=', Adler32(X,tMaxIndex,251));
end.
david@www001:~$ ./pas100325hashchecksumall
(c) David Vajda
10/03/25
Pascal Hash Excersize Program
X = (2, 87, 16, 41, 76, 65, 33, 91, 7, 32, 32)
base=64,m=97,hashval=88
base=100,m=97,hashval=89
base=256,m=251,adler-32-checksum-val=200201
-13880
david@www001:~$
# (c) David Vajda
# 10/03/25
# python 3 - hash excersize
def hash_davevajda (X,n,m,b):
i = 0
y = 0
while i < n:
y = (b*X[i]+y)%m
i = i + 1
return y
def adler32_davevajda (X,n,m):
i = 0
s1 = 1
s2 = 0
while i < n:
s1 = (s1 + X[i]) % m
s2 = (s2 + s1) % m
i = i + 1
print(s2,s1)
return (s2*256)+s1
print ("(c) David Vajda")
print ("10/03/25")
print ("python 3 - hash excersize")
X = [2, 87, 16, 41, 76, 65, 33, 91, 7, 32]
i = 0
n = len (X)
print (end="X = [")
while i < n - 1:
print (X[i], end=", ")
i = i + 1
print (X[i], "]")
i=0
y=0
m=97
b=64
print ("m=97, base=64, hashval=",hash_davevajda(X,n,m,b))
print ("m=97, base=100, hashval=",hash_davevajda(X,n,m,100))
print ("m=97, base=256, adler 32 - checksum=",adler32_davevajda(X,n,251))
david@www001:~$ python3 py100325hashchecksumall.py
(c) David Vajda
10/03/25
python 3 - hash excersize
X = [2, 87, 16, 41, 76, 65, 33, 91, 7, 32 ]
m=97, base=64, hashval= 88
m=97, base=100, hashval= 89
201 200
m=97, base=256, adler 32 - checksum= 51656
david@www001:~$
# stark unterscheiden, tut sich fletcher's checksum nicht von adler-32
https://de.wikipedia.org/wiki/Fletcher%E2%80%99s_Checksum
# sum1 und sum2 sind am anfang beide 0 und es wird nicht die letzte primzahl genommen, sondern 255?
# ok ... wie auch immer, kann sein ein paar bestimmte bloecke werden am anfang getan...
sum1 := 0
sum2 := 0
for i := 0 to length (data) do
sum1 := (sum1 + data[i]) modulo 255
sum2 := (sum2 + sum1) modulo 255
endfor
checksum := sum1 gefolgt von sum2
return checksum
1995 stellte Mark Adler mit Adler-32 eine Variation von Fletcher-32 vor, bei der modulo 65.521 (die größte Primzahl kleiner 216) gerechnet wird.
... aha!!!
Adler-32 ist eine Variante von Fletcher-32
und ... 1982: Fletcher-32
Adler-32: 1995
######################### parity:
BLOCK: 2, 87, 16, 41, 76, 65, 33, 91, 7, 32
2: 0000 0010b
87/2 = 43 Rest 1
43/2 = 21 Rest 1
21/2 = 10 Rest 1
10/2 = 5 Rest 0
5/2 = 2 Rest 1
2/2 = 1 Rest 0
1/2 = 0 Rest 1
0101 0111b
16: 0001 0000
41/2 = 20 Rest 1
20/2 = 10 Rest 0
10/2 = 5 Rest 0
5/2 = 2 Rest 1
2/2 = 1 Rest 0
1/2 = 0 Rest 1
0010 1001b
76/2 = 38 Rest 0
38/2 = 19 Rest 0
19/2 = 9 Rest 1
9/2 = 4 Rest 1
4/2 = 2 Rest 0
2/2 = 1 Rest 0
1/2 = 0 Rest 1
0100 1100b
65/2 = 32 Rest 1
32/2 = 16 Rest 0
16/2 = 8 Rest 0
8/2 = 4 Rest 0
4/2 = 2 Rest 0
2/2 = 1 Rest 0
1/2 = 0 Rest 1
0100 0001b
33/2 = 16 Rest 1
16/2 = 8 Rest 0
8/2 = 4 Rest 0
4/2 = 2 Rest 0
2/2 = 1 Rest 0
1/2 = 0 Rest 1
0010 0001b
logisch: 0010 0000b ^= 32d
91/2 = 45 Rest 1
45/2 = 22 Rest 1
22/2 = 11 Rest 0
11/2 = 5 Rest 1
5/2 = 2 Rest 1
2/2 = 1 Rest 0
1/2 = 0 Rest 1
0101 1011b
7: 0000 0111b
32: 0010 0000b
ALSO:
BLOCK: 2, 87, 16, 41, 76, 65, 33, 91, 7, 32
2: 0000 0010b
87: 0101 0111b
16: 0001 0000
41:0010 1001b
76: 0100 1100b
65: 0100 0001b
33: 0010 0001b
91: 0101 1011b
7: 0000 0111b
32: 0010 0000b
0000 0010 0101 0111
0001 0000 0010 1001
0100 1100 0100 0001
0010 0001 0101 1011
0000 0111 0010 0000
ANZAHL 1ER:
0000 0010 0101 0111: 6 1er und 10 0er
0001 0000 0010 1001: 4 1er und 12 0er
0100 1100 0100 0001: 5 1er und 11 0er
0010 0001 0101 1011: 7 1er und 9 0er
0000 0111 0010 0000: 4 1er und 12 0er
1er-parity: 26
0er-parity: 54
odd: ja
even: no
none: x
############################### base64
80 Bit nachricht ... 5x16 Byte
what we need is N Bit MOD 6 = 0
aber muss mit byte aufgepumpt werden
96 laesst sich durch 6 teilen, ja weil 48?, 48, weil: 42 ja, weil 30 und 48 auch... ok, ein byte anhaengen
48 * 2 = 96
0000 0010 0101 0111
0001 0000 0010 1001
0100 1100 0100 0001
0010 0001 0101 1011
0000 0111 0010 0000
0000 0000 0000 0000
00:01 0000 0010 0101 0111
02:03 0001 0000 0010 1001
04:05 0100 1100 0100 0001
06:07 0010 0001 0101 1011
08:09 0000 0111 0010 0000
10:11 0000 0000 0000 0000
oder little endian:
01:00 0101 0111 0000 0010
03:02 0010 1001 0001 0000
05:04 0100 0001 0100 1100
07:06 0101 1011 0010 0001
09:08 0010 0000 0000 0111
11:10 0000 0000 0000 0000
base64, an und fuer sich binaer...
base64
000000 100101 011100
010000 001010 010100
110001 000001 001000
010101 101100 000111
001000 000000 000000
000000
ungepacktes base64
00000000 00100101
00011100 00010000
00001010 00010100
00110001 00000001
00001000 00010101
00101100 00000111
00001000 00000000
00000000 00000000
00000000 00100101 00011100 00010000
00001010 00010100 00110001 00000001
00001000 00010101 00101100 00000111
00001000 00000000 00000000 00000000
00:03 00000000 00100101 00011100 00010000
04:07 00001010 00010100 00110001 00000001
08:0B 00001000 00010101 00101100 00000111
0C:0F 00001000 00000000 00000000 00000000
base64 - ascii
https://en.wikipedia.org/wiki/Base64
000000 100101 011100
010000 001010 010100
110001 000001 001000
010101 101100 000111
001000 000000 000000
000000
AlcQKUxBIVsHIAAA
LZW:
achso, halt habe es kapiert!
was inzwischen nicht richtig war, das woerterbuch inzwischen, schon!
https://de.wikipedia.org/wiki/Lempel-Ziv-Welch-Algorithmus
Bei LZW ist Ausgabe wichtig!!!
zeichenlaenge: 1 bit:
0000 0010 0101 0111
0001 0000 0010 1001
0100 1100 0100 0001
0010 0001 0101 1011
0000 0111 0010 0000
0000 0000 0000 0000
00-000-01-001-010-11-10-
0010-0000-0101-00101-
0011-0001-00000-100-1000-01010-110-
1100-00011-1001-000000-0000000-00000000
0x00: 0
0x01: 1
0x02: 00
0x03: 000
0x04: 01
0x05: 001
0x06: 010
0x07: 11
0x08: 10
0x09: 0010
0x0a: 0000
0x0b: 0101
0x0c: 00101
0x0d: 0011
0x0e: 0001
0x0f: 00000
0x10: 100
0x11: 1000
0x12: 01010
0x13: 110
0x14: 1100
0x15: 00011
0x16: 1001
0x17: 000000
0x18: 0000000
triviale tabelle:
0x18 = 11000
5 bit
5Bit * 24 = 120 bit + tabelle
vorher: 16*6 = 96 Bit
ok
bessere tabelle
achso, halt habe es kapiert!
was inzwischen nicht richtig war, das woerterbuch inzwischen, schon!
https://de.wikipedia.org/wiki/Lempel-Ziv-Welch-Algorithmus
Bei LZW ist Ausgabe wichtig!!!
0000 0010 0101 0111
0001 0000 0010 1001
0100 1100 0100 0001
0010 0001 0101 1011
0000 0111 0010 0000
0000 0000 0000 0000
00-000-01-001-010-11-10-
0010-0000-0101-00101-
0011-0001-00000-100-1000-01010-110-
1100-00011-1001-000000-0000000-00000000
0:0-00:0-01-001-010-11-10-
0010-0000-0101-00101-
0011-0001-00000-100-1000-01010-110-
1100-00011-1001-000000-0000000-00000000
??? irgendwie so, jetzt nicht weiter ueben, time exceeded!
ausgabe: 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x01
0x00: 0
0x01: 1
0x02: 00
0x03: 000
0x04: 01
0x05: 001
0x06: 010
0x07: 11
0x08: 10
0x09: 0010
0x0a: 0000
0x0b: 0101
0x0c: 00101
0x0d: 0011
0x0e: 0001
0x0f: 00000
0x10: 100
0x11: 1000
0x12: 01010
0x13: 110
0x14: 1100
0x15: 00011
0x16: 1001
0x17: 000000
0x18: 0000000