djgudleif Skrevet 5. januar 2018 Del Skrevet 5. januar 2018 Var en venn som fikk en utfordring om å skrive kode som konverterer romertall til vanlig tall. Tenkte jeg skulle ta utfordringen selv, bare i PHP. Her er en gist som jeg har lagt ut: https://gist.github.com/kakemot/ccd80f6509b648e1cec42681efc8ee5d Noen som klarer færre enn 17 linjer? (dvs færre enn 13 faktiske linjer om man tar bort whitespace og "<?php". Mitt forsøk er ikke helt elegant da den ene for loopen er "out of bounds" på et punkt, men så lenge man får et output som er riktig og scriptet ikke feiler så er det greit. Så det er veldig åpne regler her: Vi tar kun hensyn til romertall som er gyldige i utgangspunktet som input, scriptet behøver ikke å gjenkjenne ugyldige tall. Man kunne sikkert satt romertall inn i et array på én linje, og spart mange linjer. F.eks: $rom = array('I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000); Men det er ikke helt gyldig føler jeg, så jeg valgte å generere et array, matematisk i en loop. Hvordan man gjør det får likevel være opp til hver enkelt. Lykke til! Lenke til kommentar
Enthroner Skrevet 5. januar 2018 Del Skrevet 5. januar 2018 Skrive kode som konverterer romertall til vanlig tall sier du? Med uspesifiserte regler for output så er enkleste jeg kommer på i windows 2 linjer. Behold roman.bat @echo off start http://www.convertromannumerals.com/roman-numeral/%1 C:\>roman XVI Lenke til kommentar
snippsat Skrevet 7. januar 2018 Del Skrevet 7. januar 2018 (endret) Noen som klarer færre enn 17 linjer? Har du hørt om Code golf? Code golf is a type of recreational computer programming competition Ha ha "rekreasjons",noen tar dette på alvor og kan bruke uker på og bli kvitt 1 tegn. Perl har noen av de beste,eller mest gærne i dette feltet. En Perl-golfer ved navn eyepopslikeamosquito, bestemte seg for å vinne alle fire språkene (Perl, PHP, Python og Ruby). Dette var når Code golf siden var opp,nedlagt nå. # Ruby, 53 strokes n=1;$.+=n/2-n%n=10**(494254%C/9)%4999while C=getc;p$. # Perl, 58 strokes and 53(not work any more it uses the $^T variable during a few second period in 2011!) $\+=$z-2*$z%($z=10**(19&654115/ord)%1645)for<>=~/./g;print $\+=$z-2*$z%($z=10**(7&$^T/ord)%1999)for<>=~/./g;print # PHP, 70 strokes # The six weird characters in the md5(..) are chr(111).chr(178).chr(219).chr(246).chr(172).chr(209) in Perl notation. <?while(A<$c=fgetc(STDIN))$t+=$n-2*$n%$n=md5(o²Ûö¬Ñ.$c)%1858+1?><?=$t; # Python, 78 strokes t=p=0 for r in raw_input():n=10**(205558%ord(r)%7)%9995;t+=n-2*p%n;p=n print t Kan ta Python løsning hans ned til 75 ved og bruke Python 3. t=p=0 for r in input():n=10**(205558%ord(r)%7)%9995;t+=n-2*p%n;p=n print(t) Test: λ python rom.py MMCMLXXI 2971 Endret 7. januar 2018 av snippsat Lenke til kommentar
Dan-Levi Skrevet 7. januar 2018 Del Skrevet 7. januar 2018 (endret) Bbcode vil ikke på mobilen men her: function romanToInt($roman) { $result = 0; $romans = array('M' => 1000,'CM' => 900,'D' => 500,'CD' => 400,'C' => 100,'XC' => 90,'L' => 50,'XL' => 40,'X' => 10,'IX' => 9,'V' => 5,'IV' => 4,'I' => 1,); foreach($romans as $key => $value) { while (strpos($roman, $key) === 0) { $result += $value; $roman = substr($roman, strlen($key)); } } return $result; } Endret 7. januar 2018 av Dan-Levi Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå