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.
43 # Jeder Finger bekommt ein Code
77 # Einlesen der Buchstabenhäufigkeiten
78 while ((getline < buchstaben
) != 0)
81 # Einlesen der Bigrammzahlen
83 while ((getline < bigramme
) != 0) {
88 # Initialisierung des Arrays wertungen[]
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
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
115 for (i =
1; i
<=
32; i
++) {
116 lagepunkte
+= lapu
[i
] * buh
[T
[i
]]
120 # Einordnung der Bigramme
126 z1 =
substr(bi
, 1, 1)
127 z2 =
substr(bi
, 2, 1)
129 if (fing
[z1
] > fing
[z2
]) {
130 unt = fing
[z1
] - fing
[z2
]
133 handwechsel
+= bih
[bi
]
139 if (fing
[z1
] < fing
[z2
]) {
140 unt = fing
[z2
] - fing
[z1
]
143 handwechsel
+= bih
[bi
]
149 wiederholung
+= bih
[bi
]
153 # auswaerts * 100 / bigesamt ist normal 16
154 auswaerts = auswaerts
* 200 / bigesamt
155 # wiederholung * 100 / bigesamt ist normal 0.8
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
175 v =
1 + int
(rand
() * 32) # Verschiebung zwischen 0 und 31
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
185 if (neuwert
>= altwert
) { # Verschlechterung
186 tausche
(t1
, t2
) # Rückgängig
187 } else { # Verbesserung
194 # Wenn die Funktion beendet ist, hat sich die Belegung geändert
197 # Funktion zum Drucken einer Tastatur
201 for (i =
1; i
<=
32; i
++) {
202 tastatur = tastatur T
[i
]
207 # Regel für alle Zeilen:
210 for (i =
1; i
<=
32; i
++) {
211 T
[i
] =
substr($
0, i
, 1)