====== Lab ====== ===== - Unär nach Dezimal ===== FIXME ein- und ausgabe. optimieren für anzahl schritte. /αI{10}/Iα/g /αI{9}ω/ω9/ /αI{8}ω/ω8/ /αI{7}ω/ω7/ /αI{6}ω/ω6/ /αI{5}ω/ω5/ /αI{4}ω/ω4/ /αI{3}ω/ω3/ /αI{2}ω/ω2/ /αI{1}ω/ω1/ /αω/ω0/ /(I+)ω?/α$1ω/ /ω//! ===== Breaking Rings ===== Input 454665122334 Output 111 (drei ringe aufbrechen) Idee: Für jeden Ring entscheiden ob er aufgebrochen werden muss oder nicht. -> Binäres zählen Teilproblem binäres zählen: 10001 -> 10010 /1β/β0/ /0?β/1/ ! /$/β/ Teilproblem Ringliste: 454665122334 -> 454665122334χ456123 /χ(.*)(.)(.*)\2/χ$1$2$3/ /χ/χ/! /.*/$&χ$&/ Teilproblem Prüfe Konfiguration: 454665122334:456123:110001 -> CLEAN/CONNECTED hier würde 4, 5 und 3 aufgebrochen. /γ(.)(.*)ε0/γ$2ε/ /γ(.)(.*)ε1/$1γ$2ε/ /π(.)(.)(.*)φ(.*)\1(.*)γ/π$3φ$4$1$5γ/ /π(.)(.)(.*)φ(.*)\2(.*)γ/π$3φ$4$2$5γ/ /πφ.*/CLEAN/! /π.*/CONNECTED/! /(.*):(.*):(.*)/π$1φγ$2ε$3/ 454665122334:456123B:110001 -> 454665122334:456123B:110001 Ablaufsteuerung: ########################################################## Phase A) Initialisierung: 122334 -> 1111ξ122334:1234:0000B /A(.*)(.)(.*)\2(.*):/A$1$2$3$4:/ /(.*)A(.)(.*):/1$1$2A$3:0/ /(.*):(.*)A:(.*)/$1:$2:$3B/ /(.*)/ξ$1:A$1:/ ########################################################## Phase B) Prüfen der Konfiguration Ringe noch verbunden -> Phase C 1111ξ122334:1234:0000B -> 1111ξ122334:1234:0000C Ringe nicht verbunden -> Phase D 1111ξ122334:1234:0101B -> 1111ξ122334:1234:0101D /γ(.)(.*)ε0/γ$2ε/ /γ(.)(.*)ε1/$1γ$2ε/ /B(.)(.)(.*)φ(.*)\1(.*)γ/B$3φ$4$1$5γ/ /B(.)(.)(.*)φ(.*)\2(.*)γ/B$3φ$4$2$5γ/ /Bφ.*/D/ /B.+/C/ /ξ(.*):(.*):(.*)B/ξ$1:$2:$3B$1φγ$2ε$3/ ########################################################## Phase C) Binäres zählen & Schluss 1111ξ122334:1234:0011C -> 1111ξ122334:1234:0100B falls am ENDE 11ξ122334:1234:1111C -> 11 /1C/C0/ /ξ.*:C.*//! /0?C(.*)/1$1B/ ########################################################## Phase D+E) Auswerten 1111ξ122334:1234:0101D -> 11ξ122334:1234:0111C /E(.*)0/E$1/ /^(1*)(1*)ξ(.*)E\1$/$1ξ$3C/ /E.*/C/ /([01]*)D/$1E$1/ ########################################################## /1C/C0/ /:C/ all tested /! /0?C(.*)/1$1B/ /γ(.)(.*)ε0/γ$2ε/ /γ(.)(.*)ε1/$1γ$2ε/ /B(.)(.)(.*)φ(.*)\1(.*)γ/B$3φ$4$1$5γ/ /B(.)(.)(.*)φ(.*)\2(.*)γ/B$3φ$4$2$5γ/ /Bφ.*/E/ ! /B.+/C/ /(.*):(.*):(.*)B/$1:$2:$3B$1φγ$2ε$3/ /A(.*)(.)(.*)\2(.*):/A$1$2$3$4:/ /A(.)(.*):/$1A$2:0/ /(.*):(.*)A:(.*)/$1:$2:$3B/ ! /(.*)/$1:A$1:/ Programm am Schluss /E(.*)0/E$1/ /^(1*)(1*)ξ(.*)E\1$/$1ξ$3C/ /E.*/C/ /([01]*)D/$1E$1/ /1C/C0/ /ξ.*:C.*//! /0?C(.*)/1$1B/ /γ(.)(.*)ε0/γ$2ε/ /γ(.)(.*)ε1/$1γ$2ε/ /B(.)(.)(.*)φ(.*)\1(.*)γ/B$3φ$4$1$5γ/ /B(.)(.)(.*)φ(.*)\2(.*)γ/B$3φ$4$2$5γ/ /Bφ.*/D/ /B.+/C/ /ξ(.*):(.*):(.*)B/ξ$1:$2:$3B$1φγ$2ε$3/ /A(.*)(.)(.*)\2(.*):/A$1$2$3$4:/ /(.*)A(.)(.*):/1$1$2A$3:0/ /(.*):(.*)A:(.*)/$1:$2:$3B/ /(.*)/ξ$1:A$1:/ ===== 1 Marge Intervals (Unary) ===== ; Quelle : [[code:merge_intervals|]] ; Eingabe ex. : I:III,III:IIII,II:IIIIII,III:IIII ; Ausgabe ex. : I:IIIIII ; Lösung : /(I+)(I+):(I+),\1:(I+)/$1:$4,$1$2:$3/ /:(I+)(I*),I*:\1\b/:$1$2/ /:(I+)(I*),\1I?:/:/ ===== 2 Simulation eine Turing Maschine am Beispiel Busy Beaver 3 ===== ; Eingabe : # tape startzustand □ # zustandsübergänge q0, □ → q1, 1, R q0, 1 → qf, 1, R q1, □ → q2, □, R q1, 1 → q1, 1, R q2, □ → q2, 1, L q2, 1 → q0, 1, L ; Ausgabe : 111111 ; Code : TM Simulator für Markow Algorithmen# initialisierung /^#.*\n//gm kommentare entfernen /^([^τ])(.*)\n([^,]*)/τλ$1$2σ$3\n$3/ /\n([^,]*),([^→]*)→([^,]*),([^,]*),(.*)/δ$1ζ$2$4$5$3/g regeln strukturieren /\s//g leerschläge entfernen /τλ/τ□λ/ blanks links hinzufügen /λσ/λ□σ/ blanks rechts vom kopf 1 2 3 4 5 6 /λ(.)(.*)σ([^δ]+)(.*δ\3ζ\1(.)R([^δ]+))/$5λ$2σ$6$4/ r-regel anwenden 1 2 3 4 5 6 7 /(.)λ(.)(.*)σ([^δ]+)(.*δ\4ζ\2(.)L([^δ]+))/λ$1$6$3σ$7$5/ l-regel anwenden /τ□*(.*)λ(.*?)□*σ.*/$1$2/! terminieren