WIP
[evolve-layout.git] / nordtast_skripte / entw2.awk
blobfe4e2a0e8d5188071bb60da08ecfb5ed351c3977
1 BEGIN {
3 # Hier den Namen der Datei mit den Buchstabenhäufigkeiten angeben
4 buchstaben = "buchstaben.txt"
6 # Hier den Namen der Datei mit den Bigrammzählungen angeben
7 bigramme = "bigramme.txt"
9 # Hier die Lagepunkte jeder Taste angeben. 1 ist oben links, 32 unten rechts.
10 lapu[1] = 5
11 lapu[2] = 3
12 lapu[3] = 3
13 lapu[4] = 3
14 lapu[5] = 4
15 lapu[6] = 4
16 lapu[7] = 3
17 lapu[8] = 3
18 lapu[9] = 3
19 lapu[10] = 5
20 lapu[11] = 7
21 lapu[12] = 1
22 lapu[13] = 0
23 lapu[14] = 0
24 lapu[15] = 0
25 lapu[16] = 2
26 lapu[17] = 2
27 lapu[18] = 0
28 lapu[19] = 0
29 lapu[20] = 0
30 lapu[21] = 1
31 lapu[22] = 7
32 lapu[23] = 6
33 lapu[24] = 5
34 lapu[25] = 5
35 lapu[26] = 5
36 lapu[27] = 7
37 lapu[28] = 7
38 lapu[29] = 5
39 lapu[30] = 5
40 lapu[31] = 5
41 lapu[32] = 6
43 # Jeder Finger bekommt ein Code
44 fing[1] = 1
45 fing[2] = 2
46 fing[3] = 3
47 fing[4] = 4
48 fing[5] = 4
49 fing[6] = 14
50 fing[7] = 14
51 fing[8] = 13
52 fing[9] = 12
53 fing[10] = 11
54 fing[11] = 11
55 fing[12] = 1
56 fing[13] = 2
57 fing[14] = 3
58 fing[15] = 4
59 fing[16] = 4
60 fing[17] = 14
61 fing[18] = 14
62 fing[19] = 13
63 fing[20] = 12
64 fing[21] = 11
65 fing[22] = 11
66 fing[23] = 1
67 fing[24] = 2
68 fing[25] = 3
69 fing[26] = 4
70 fing[27] = 4
71 fing[28] = 14
72 fing[29] = 14
73 fing[30] = 13
74 fing[31] = 12
75 fing[32] = 11
77 # Einlesen der Buchstabenhäufigkeiten
78 while ((getline < buchstaben) != 0)
79 buh[$2] = $1
81 # Einlesen der Bigrammzahlen
82 bigesamt = 0
83 while ((getline < bigramme) != 0) {
84 bih[$2] = $1
85 bigesamt += $1
88 # Initialisierung des Arrays wertungen[]
89 wertungen[""] = 0
91 # Zufallsfunktion neu
92 srand()
95 # Funktion zum Tauschen zweier Buchstaben
97 function tausche(x, y, tmp) {
98 # Setzt voraus, dass eine Tastaturbelegung vorhanden ist in Form eines
99 # Arrays namens T[], dessen Indices Zahlen von 1 bis 32 sind.
100 # Die Argumente sind zwei Zahlen von 1 bis 32
101 tmp = T[x]
102 T[x] = T[y]
103 T[y] = tmp
106 # Festlegung der Bewertungsfunktion
108 function ausw(i, z) {
109 # Voraussetzung: es liegt eine Tastatur vor, sodass
110 # T[1] = "ä", T[2] = "u" usw
112 # Lagepunkte addieren
113 # Finger in Abhängigkeit des Buchstaben verzeichnen
114 lagepunkte = 0
115 for (i = 1; i <= 32; i++) {
116 lagepunkte += lapu[i] * buh[T[i]]
117 fing[T[i]] = fing[i]
120 # Einordnung der Bigramme
121 wiederholung = 0
122 auswaerts = 0
123 handwechsel = 0
124 einwaerts = 0
125 for (bi in bih) {
126 z1 = substr(bi, 1, 1)
127 z2 = substr(bi, 2, 1)
129 if (fing[z1] > fing[z2]) {
130 unt = fing[z1] - fing[z2]
131 if (unt > 5) {
132 # Handwechsel
133 handwechsel += bih[bi]
135 else {
136 auswaerts += bih[bi]
138 } else {
139 if (fing[z1] < fing[z2]) {
140 unt = fing[z2] - fing[z1]
141 if (unt > 5) {
142 # Handwechsel
143 handwechsel += bih[bi]
144 } else {
145 einwaerts += bih[bi]
147 } else {
148 # Fingerwiederholung
149 wiederholung += bih[bi]
153 # auswaerts * 100 / bigesamt ist normal 16
154 auswaerts = auswaerts * 200 / bigesamt
155 # wiederholung * 100 / bigesamt ist normal 0.8
156 # * 3000 ist 24
157 wiederholung = wiederholung * 3000 / bigesamt
158 # einwaerts * 100 / bigesamt ist normal 16
159 einwaerts = einwaerts * 100 / bigesamt
160 return lagepunkte + auswaerts + wiederholung + einwaerts
163 # Die Verbesserungsfunktion
165 function verbessere (flag, i, j, t1, t2) {
166 # Setzt voraus, dass:
167 # • eine Tastaturbelegung T vorhanden ist sodass T[1] = 'ä' usw
168 # • dass es eine Funktion tausche() gibt, die zwei Tasten tauschen kann
169 # • dass es eine Funktion ausw() gibt, die die Belegung auswerten kann
170 # Um nicht immer mit Tausch von 1 und 2 anzufangen und mit 31 und 32
171 # aufzuhören, wird hier eine Verschiebung eingeführt, die
172 # durch Zufall festgelegt wird, und zwar für jeden Funktionsaufruf neu
173 # Erfassung des Altwertes
174 altwert = ausw()
175 v = 1 + int(rand() * 32) # Verschiebung zwischen 0 und 31
176 flag = 1
177 while (flag == 1) {
178 flag = 0
179 for (i = 1; i <= 31; i++) {
180 for (j = i + 1; j <= 32; j++) {
181 t1 = (i + v) % 32 + 1
182 t2 = (j + v) % 32 + 1
183 tausche(t1, t2)
184 neuwert = ausw()
185 if (neuwert >= altwert) { # Verschlechterung
186 tausche(t1, t2) # Rückgängig
187 } else { # Verbesserung
188 altwert = neuwert
189 flag = 1
194 # Wenn die Funktion beendet ist, hat sich die Belegung geändert
197 # Funktion zum Drucken einer Tastatur
199 function drucke(i) {
200 tastatur = ""
201 for (i = 1; i <= 32; i++) {
202 tastatur = tastatur T[i]
204 print tastatur
207 # Regel für alle Zeilen:
210 for (i = 1; i <= 32; i++) {
211 T[i] = substr($0, i, 1)
213 verbessere()
214 drucke()