Køres nedenstående algoritme skriver den at summen er 2080, men den skulle være 1990. Tilsyneladende (det er i hvert fald min konklusion efter at studere tallene), så lægger den 90 til en gang for meget. Nogen der kan forklare mig hvorfor?
i funktionen convert forstår jeg ikke linierne: my $k = 5; $k = 5; Den initialværdi bliver ødelagt hver gang for di $k kort efter benyttes som housekeeping-variabel.
Hvis $k oprindeligt var ment som en algoritmespecifik variabel kunne det måske være at der er en rest af kode der bruger den sådan (men med en værdi der er hvad pokker nu din housekeeping har efterladt i den).
Jo det vil man. Til gengæld ridikerer man ikke at 'springe over' et mindre foran større par som man gør hvis man altid sige $k=$k-2 MCMX loop 1 kikker på X og M og summer begge da M > X loop 2 kikker på C og M og summer begge sa M > C MCMX bliver så 2110.
Det kan ikke ske hvis vi nøjes med at dekrementere $k med een når bogstavet foran er større.
god pointe... og din kode har rettet nogle af de problemer der var... lækkert! :) Til gengæld har jeg opdaget andre fejl ved eksperimentere med inddata - men jeg kæmper videre :)
Du har da ærligt fortjent pointene... ville du være interesseret i sourcekoden hvis jeg får konstrueret en fejlfri algoritme?
vil nedenstående ikke tillade et romertal som "DDDDDDDDD" ? $k = check_numerals3($streng); $l = allsame($streng); if (($k != 1) && ($l != 1)) { die "fejl!"; }
PS: jeg har ikke perl, så jeg kan ikke teste; kun logikke.
jo du har helt ret... men jeg har jo kun implementeret de regler der var i det oprindelige spørgsmål. Faldt over denne side - http://search.cpan.org/doc/TELS/Math-Roman-1.05/lib/Math/Roman.pm - der er helt klart noget at arbejde videre med. Til gengæld kan man ikke skrive 90 som LXL - så han er lidt galt på den
mon ikke man bør skelne imellem 2 slags regler ting der er FORBUDT. og ting der blot må frarådes.
et romertal der kan misforstås bør være forbudt. XXM kan fortolkes både som 1000 og som 980. ILCXM kan fortolkes på utallige måder så det er ikke acceptable romertal. de skal afvises.
et romertal der er kluntet men eentydigt bør frarådes: DCD kan kun betyde 900 MIM kan kun betyde 1999 så det bør forstås, evt med en advarsel.
arabertal -> romertal konverteringen skal 100% overholde begge typer regler.
vil det ikke være det mest brugervenligt? lidt i stil med "HTML 4.01 transitional" romertal -> arabertal konverteren kunne så evt have en switch parameter der fik den til at afvise blot en 'bør frarådes' regel er overtrådt. ( "HTML 4.01 strict" :-))
men både XXM og ILXCM er ugyldige i henhold til de fastsatte regler. XXM dels fordi der står to ens mindre numeraler foran et større og dels fordi M er mere end 10 gange så stort som X. ILCXM er ugyldigt fordi eksempelvis LC er en ugyldig token.
DCD er ulovligt fordi D står umiddelbart til venstre for C og ikke er mindst 10 gange større end C. MIM er ugyldigt fordi IM er en ugyldig token (da M er mere end 10 gange større end I).
Men det var vist et sidespring... :) Mon ikke der findes et bevis for at der er et 1-1 forhold mellem romertal og arabertal. Altså at hvert arabertal kan skrives som et og kun et romertal og omvendt (vel at mærke hvis det skal overholde reglerne selvfølgelig)
og ja... cpan er et rigtig godt sted at lede efter information/inspiration. Derudover er der selvfølgelig http://www.perl.com :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.