-
Notifications
You must be signed in to change notification settings - Fork 0
/
simulazione.sh
executable file
·157 lines (120 loc) · 4.24 KB
/
simulazione.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/bash
echo "Simulazione del Gioco dei Dadi"
file_base10="Base10.txt"
# Funzione per generare casualmente un numero tra 1 e 6
genera_numero_casuale() {
echo $((RANDOM % 6 + 1))
}
# Funzione per scrivere nel file dadoBinario.txt
scrivi_su_file_binario() {
echo "$1" >> dadoBinario.txt
}
# Funzione per scrivere nel file dadoInChiaro.txt
scrivi_su_file_chiaro() {
echo "$1" >> dadoInChiaro.txt
}
# Rimuovi dadoBinario.txt e dadoInChiaro.txt se esistono e ricreali
if [ -e dadoBinario.txt ]; then
rm dadoBinario.txt
fi
if [ -e dadoInChiaro.txt ]; then
rm dadoInChiaro.txt
fi
if [ -e > seed.txt ]; then
rm seed.txt
fi
if [ -e > debug.txt ]; then
rm debug.txt
fi
for round in {1..23}; do
echo -e "\nRound $round (Simulazione)"
codice_binario=""
cifre_chiaro=""
# Lancio di 4 dadi
for ((i = 0; i < 4; i++)); do
risultato=$((RANDOM % 6 + 1))
codice_binario="${codice_binario}$((risultato % 2))"
cifre_chiaro="${cifre_chiaro}${risultato}"
done
# Lancio di 4 dadi
for ((i = 0; i < 4; i++)); do
risultato=$((RANDOM % 6 + 1))
codice_binario="${codice_binario}$((risultato % 2))"
cifre_chiaro="${cifre_chiaro}${risultato}"
done
# Lancio di 3 dadi
for ((i = 0; i < 3; i++)); do
risultato=$((RANDOM % 6 + 1))
codice_binario="${codice_binario}$((risultato % 2))"
cifre_chiaro="${cifre_chiaro}${risultato}"
done
echo "dadi in chiaro $cifre_chiaro"
echo "dadi in binario $codice_binario"
scrivi_su_file_binario "$codice_binario"
scrivi_su_file_chiaro "$cifre_chiaro"
done
# Aggiungi l'ultimo round con un solo tiro di 3 dadi (simulazione)
echo -e "\nRound 24 (Simulazione)"
codice_binario=""
cifre_chiaro=""
# Lancio di 3 dadi
for ((i = 0; i < 3; i++)); do
risultato=$((RANDOM % 6 + 1))
codice_binario="${codice_binario}$((risultato % 2))"
cifre_chiaro="${cifre_chiaro}${risultato}"
done
echo "dadi in chiaro $cifre_chiaro"
echo "dadi in binario $codice_binario"
scrivi_su_file_binario "$codice_binario"
scrivi_su_file_chiaro "$cifre_chiaro"
# Verifica se il file ha 24 righe e che ogni riga ha 11 elementi binari
# File di destinazione
file_di_destinazione="dadoBinario.txt"
# Verifica se il file esiste
if [ ! -f "$file_di_destinazione" ]; then
echo "Errore: Il file $file_di_destinazione non esiste."
exit 1
fi
# Concatena tutti i binari senza spazi
binariNoSpazio=$(tr -d '[:space:]' < "$file_di_destinazione")
# # Calcola il checksum SHA-256
checksum=$(echo -n "$binariNoSpazio" | shasum -a 256 -0 | head -c 2)
BASE2=$(echo "ibase=16; obase=2; $(echo $checksum | tr '[:lower:]' '[:upper:]') " | bc | sed 's/\\//g' | tr -d '\n'| awk '{ len = (8 - length % 8) % 8; printf "%.*s%s\n", len, "00000000", $0}')
# Aggiungi l'esadecimale in fondo
sed -i -e "\$s/$/$BASE2/" "$file_di_destinazione"
# # Controlla il numero di righe nel file
numero_di_righe=$(wc -l < "$file_di_destinazione")
cat $file_di_destinazione
if [ "$numero_di_righe" -ne 24 ]; then
echo "Errore: Il file $file_di_destinazione deve contenere esattamente 24 righe."
exit 1
fi
# Controlla la lunghezza di ogni riga
while IFS= read -r riga; do
lunghezza_riga=${#riga}
if [ "$lunghezza_riga" -ne 11 ] || [[ ! "$riga" =~ ^[01]+$ ]]; then
echo "Errore: Ogni riga nel file $file_di_destinazione deve contenere esattamente 11 caratteri binari (0 e 1)."
exit 1
fi
done < "$file_di_destinazione"
printf "\n\n \e[45m Mappo i bytes al dizionario inglese \e[0m\n\n"
last_line=$(wc -l < "$file_di_destinazione")
current_line=0
# Converti da BASE2 a BASE10 e mappa al dizionario inglese
while IFS= read -r line; do
BASE10=$(echo "ibase=2; $line" | bc)
BASE10FIX=$(expr $BASE10 + 1)
WORD=$(sed ''$BASE10FIX'!d' dizionario.txt)
echo -n "$WORD " >> "seed.txt"
echo "ID: $BASE10FIX – $WORD"
echo "ID: $BASE10FIX – $WORD" >> debug.txt
done < "$file_di_destinazione"
cat seed.txt
# Verifica se i file esistono
if [ ! -f dadoInChiaro.txt ] || [ ! -f dadoBinario.txt ] || [ ! -f debug.txt ]; then
echo "Errore: I file necessari non esistono."
exit 1
fi
# Crea il file recap.txt
paste -d ' ' dadoInChiaro.txt dadoBinario.txt debug.txt > recap.txt
echo -e "\n\n Il Tuo seed è stato creato."