OldComp.cz http://www.oldcomp.cz/ |
|
Detekcia preklepov http://www.oldcomp.cz/viewtopic.php?f=26&t=8427 |
Stránka 1 z 1 |
Autor: | pedromagician [ 03.04.2020, 16:03 ] |
Předmět příspěvku: | Detekcia preklepov |
Naportoval som Levenshtein/Damerau-Levenshtein a Jaro/Jaro-Winkler algoritmy na detekciu preklepov... do Turbo-BASICU XL a Action! Takze od teraz uz je Atari aj na rosettacode https://rosettacode.org/wiki/Levenshtein_distance https://rosettacode.org/wiki/Jaro_distance pripadne priamo na stiahnutie u Wolfa https://txt.pohroma.de/2020/04/03/porov ... -retazcov/ |
Autor: | _dworkin [ 05.04.2020, 03:48 ] |
Předmět příspěvku: | Re: Detekcia preklepov |
Tak ted se citim trochu zahanbene ze tam neni zx basic... Dival jsem se u prvniho okazu na C variantu reseni (protoze jsem chtel videt algoritmus a prislo me C jako nesnazsi) a nelibi se mi Kód: /* if either string is empty, difference is inserting all chars * from the other */ if (!ls) return lt; if (!lt) return ls; Radsi bych to prepsal na Kód: /* if either string is empty, difference is inserting all chars * from the other */ if (!(ls*lt)) return ls+lt; Teda pro PC, takze pro procesor co ma instrukci nasobeni. Tady je to vic univerzalni.. takze je to asi dobre. .) |
Autor: | pedromagician [ 05.04.2020, 11:02 ] |
Předmět příspěvku: | Re: Detekcia preklepov |
Ukazky by som nechal citatelnejsie Mozes pridat a Jaro distance uz ma ZX https://rosettacode.org/wiki/Jaro_dista ... trum_Basic |
Autor: | _dworkin [ 06.04.2020, 01:29 ] | ||
Předmět příspěvku: | Re: Detekcia preklepov | ||
Nikdy jsem nebyl dobry v programovani basicu na Spectru. A stejne jsem vsechno zapomnel. Ale kdyz uz je basic na ZX Spectru znamy tim ze zvlada funkce s parametry, nekonecne rekurze a jine vymozenosti modernejsich jazyku tak jsem prepsal tu C variantu. Kód: 10 REM ZX Spectrum Levenshtein 20 INPUT "first word:", n$ 30 INPUT "second word:", m$ 40 LET r=LEN n$+LEN m$:DIM n(r):DIM m(r):DIM e(r) 50 LET n(2)=LEN n$:LET m(2)=LEN m$:LET n(1)=n(2)+1:LET m(1)=m(1)+1:LET r=1 60 GOSUB 1000 70 PRINT "The Levenshtein distance between """;n$;""", """;m$;""" is ";e(2);"." 80 STOP 1000 LET r=r+1 1010 IF n(r)=0 THEN LET e(r)=m(r):LET r=r-1:RETURN 1020 IF m(r)=0 THEN LET e(r)=n(r):LET r=r-1:RETURN 1030 IF n$(n(r) TO n(r))=m$(m(r) TO m(r)) THEN LET n(r)=n(r)-1:LET m(r)=m(r)-1:GOTO 1010 1040 LET n(r+1)=n(r)-1:LET m(r+1)=m(r)-1:GOSUB 1000:LET e(r)=e(r+1) 1050 IF n(r-1)>n(r) THEN LET n(r+1)=n(r)-1:LET m(r+1)=m(r):GOSUB 1000:if e(r+1)<e(r) THEN LET e(r)=e(r+1) 1060 IF m(r-1)>m(r) THEN LET n(r+1)=n(r):LET m(r+1)=m(r)-1:GOSUB 1000:if e(r+1)<e(r) THEN LET e(r)=e(r+1) 1070 LET e(r)=e(r)+1:LET r=r-1:RETURN Pridal jsem tam optimalizaci, protoze ta C varianta je napsana tak jednoduse, ze jednou umaze jeden znak z prvniho retezce (1050) a zavola se znova, kde pak umaze znak z druheho retezce (1060)... coz je to same co zamena znaku (1040), jen delsi. Obavam se ze tu trolim Atari forum a jeste hroznym kodem. Nevim kolik rekurzi ZX zvladne, ale aspon na testovacich slovech to ZX zvladnul (zrychlil jsem emulator 100x a cekal a cekal... ). Mozna by stalo za to predhodit to dalsim lidem, kdo to napise lepe. .) EDIT: Tak to trva 3h 11m a bez optimalizace asi nekolik dni.
|
Autor: | _dworkin [ 06.04.2020, 02:18 ] |
Předmět příspěvku: | Re: Detekcia preklepov |
Jinak bys mel tu Atari verzi dat na zacatek na treti misto, protoze to maji serazene podle abecedy. |
Autor: | pedromagician [ 06.04.2020, 07:54 ] |
Předmět příspěvku: | Re: Detekcia preklepov |
Vidíš a to som si nevšimol, diky premiestnim Odoslané pomocou Tapatalku |
Stránka 1 z 1 | Všechny časy jsou v UTC + 1 hodina [ Letní čas ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |