Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Coding Challenge Of The Day

Coding Challenge Of The Day

Scheduled Pinned Locked Moved The Lounge
c++architecture
51 Posts 30 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Chris Maunder

    Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

    cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

    G Offline
    G Offline
    Gary Wheeler
    wrote on last edited by
    #2

    Hmm. Too bad my first boss is now retired. One of his claims to fame was adding code to a FORTRAN compiler to support Roman numeral output in the FORMAT statement.

    Software Zen: delete this;

    1 Reply Last reply
    0
    • C Chris Maunder

      Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

      cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

      R Offline
      R Offline
      Ravi Bhavnani
      wrote on last edited by
      #3

      Spoiler[^] /ravi

      My new year resolution: 2048 x 1536 Home | Articles | My .NET bits | Freeware ravib(at)ravib(dot)com

      P 1 Reply Last reply
      0
      • C Chris Maunder

        Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

        cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

        C Offline
        C Offline
        Chris Meech
        wrote on last edited by
        #4

        Go out and hire some Brogrammers. They whip this stuff up while chuggin' brews. :)

        Chris Meech I am Canadian. [heard in a local bar] In theory there is no difference between theory and practice. In practice there is. [Yogi Berra] posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]

        1 Reply Last reply
        0
        • C Chris Maunder

          Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

          cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

          S Offline
          S Offline
          S Houghtelin
          wrote on last edited by
          #5

          Sub Roman_Numeral()
          Range("A1").Value = "2012"
          Range("B1").FormulaR1C1 = "=ROMAN(RC[-1],0)"
          End Sub

          [Edit] I know, I know... Wrong way... I was chuggin beers:sigh:

          It was broke, so I fixed it.

          C 1 Reply Last reply
          0
          • S S Houghtelin

            Sub Roman_Numeral()
            Range("A1").Value = "2012"
            Range("B1").FormulaR1C1 = "=ROMAN(RC[-1],0)"
            End Sub

            [Edit] I know, I know... Wrong way... I was chuggin beers:sigh:

            It was broke, so I fixed it.

            C Offline
            C Offline
            Chris Maunder
            wrote on last edited by
            #6

            You get points for at least writing code. As opposed to some members... (dark looks all 'round).

            cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

            W S 2 Replies Last reply
            0
            • C Chris Maunder

              Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

              cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

              C Offline
              C Offline
              Chris Losinger
              wrote on last edited by
              #7

              for well-formed roman numerals, modern rules:

              int r2d2(const char *r)
              {
              int val[128];
              memset(val,0,sizeof(int)*128);
              val['I']=1; val['V']=5;
              val['X']=10; val['L']=50;
              val['C']=100; val['D']=500; val['M']=1000;

              int a = 0;
              for (int cv, pv = 0, i=strlen(r)-1;i>=0;i--)
              {
              cv = val[r[i]];
              a += cv * (pv > cv ? -1 : 1);
              pv = cv;
              }

              return a;
              

              }

              image processing toolkits | batch image processing

              C P F 3 Replies Last reply
              0
              • C Chris Maunder

                Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

                cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                A Offline
                A Offline
                AspDotNetDev
                wrote on last edited by
                #8

                Chris Maunder wrote:

                obfuscated assembler

                Tautology.

                Thou mewling ill-breeding pignut!

                1 Reply Last reply
                0
                • C Chris Losinger

                  for well-formed roman numerals, modern rules:

                  int r2d2(const char *r)
                  {
                  int val[128];
                  memset(val,0,sizeof(int)*128);
                  val['I']=1; val['V']=5;
                  val['X']=10; val['L']=50;
                  val['C']=100; val['D']=500; val['M']=1000;

                  int a = 0;
                  for (int cv, pv = 0, i=strlen(r)-1;i>=0;i--)
                  {
                  cv = val[r[i]];
                  a += cv * (pv > cv ? -1 : 1);
                  pv = cv;
                  }

                  return a;
                  

                  }

                  image processing toolkits | batch image processing

                  C Offline
                  C Offline
                  Chris Meech
                  wrote on last edited by
                  #9

                  I once met a well formed roman, when I was touring through Italy. :cool:

                  Chris Meech I am Canadian. [heard in a local bar] In theory there is no difference between theory and practice. In practice there is. [Yogi Berra] posting about Crystal Reports here is like discussing gay marriage on a catholic church’s website.[Nishant Sivakumar]

                  L A 2 Replies Last reply
                  0
                  • C Chris Maunder

                    Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

                    cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                    B Offline
                    B Offline
                    Bassam Abdul Baki
                    wrote on last edited by
                    #10

                    In URL form: http://en.wikipedia.org/wiki/Roman_numerals#External_links[^] :-D Another interesting fact: http://answers.yahoo.com/question/index?qid=20100525032737AATfpBJ[^]

                    Web - BM - RSS - Math - LinkedIn

                    1 Reply Last reply
                    0
                    • C Chris Maunder

                      Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

                      cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                      J Offline
                      J Offline
                      Joan M
                      wrote on last edited by
                      #11

                      Chris... you should know that we don't make homework here... :rolleyes:

                      [www.tamautomation.com] Robots, CNC and PLC machines for grinding and polishing.

                      C 1 Reply Last reply
                      0
                      • C Chris Maunder

                        Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

                        cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                        W Offline
                        W Offline
                        wizardzz
                        wrote on last edited by
                        #12

                        I never enter a contest without knowing the prize, for tax purposes, but also in this case, it could be a job at CP... :doh:

                        C 1 Reply Last reply
                        0
                        • C Chris Maunder

                          You get points for at least writing code. As opposed to some members... (dark looks all 'round).

                          cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                          W Offline
                          W Offline
                          wizardzz
                          wrote on last edited by
                          #13

                          I didn't see you award him any points. Go on, 5 him!

                          S S 2 Replies Last reply
                          0
                          • W wizardzz

                            I never enter a contest without knowing the prize, for tax purposes, but also in this case, it could be a job at CP... :doh:

                            C Offline
                            C Offline
                            Chris Maunder
                            wrote on last edited by
                            #14

                            Actually it's a personality test to see who among you are worthy of being labelled a Brogrammer.

                            cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                            B 1 Reply Last reply
                            0
                            • W wizardzz

                              I didn't see you award him any points. Go on, 5 him!

                              S Offline
                              S Offline
                              S Houghtelin
                              wrote on last edited by
                              #15

                              Thanks wizardzz, I suppose he meant like virtual points, or maybe pints, I'll definitely takes pints! :-D

                              It was broke, so I fixed it.

                              1 Reply Last reply
                              0
                              • W wizardzz

                                I didn't see you award him any points. Go on, 5 him!

                                S Offline
                                S Offline
                                Steve Mayfield
                                wrote on last edited by
                                #16

                                Don't you mean 'V' him?

                                Steve _________________ I C(++) therefore I am

                                A 1 Reply Last reply
                                0
                                • C Chris Maunder

                                  Actually it's a personality test to see who among you are worthy of being labelled a Brogrammer.

                                  cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                                  B Offline
                                  B Offline
                                  Bassam Abdul Baki
                                  wrote on last edited by
                                  #17

                                  You may want to snag CodeBroject.com just in case (CodePreject.com too).

                                  Web - BM - RSS - Math - LinkedIn

                                  1 Reply Last reply
                                  0
                                  • C Chris Maunder

                                    You get points for at least writing code. As opposed to some members... (dark looks all 'round).

                                    cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                                    S Offline
                                    S Offline
                                    S Houghtelin
                                    wrote on last edited by
                                    #18

                                    Just like positive reenforcment in the schools today, everybody gets a trophy, even when they're wrong. Thanks! :thumbsup: :-D

                                    It was broke, so I fixed it.

                                    1 Reply Last reply
                                    0
                                    • C Chris Maunder

                                      Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

                                      cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                                      S Offline
                                      S Offline
                                      Sentenryu
                                      wrote on last edited by
                                      #19

                                      as a nerd, i can't resist... between, it's only a quick n' dirty solution:

                                      public static int RomanToArabic(string romans) {
                                      if (string.IsNullOrWhiteSpace(romans))
                                      {
                                      return 0;
                                      }
                                      //remove whitespace...
                                      romans = romans.Replace(" ", string.Empty);
                                      //make sure no one pass out an "A" for example...
                                      if (!Regex.IsMatch(romans, "(I|V|X|C|M|D|L)+"))
                                      {
                                      throw new ArgumentException("Invalid numeral!!");
                                      }

                                              //actual validation that matters (based on http://en.wikipedia.org/wiki/Roman\_numerals): 
                                              //The symbols "I", "X", "C", and "M" can be repeated three times in succession, but no more. "D", "L", and "V" can never be repeated.
                                              string invalidSequences = "(XXXX+)|(IIII+)|(CCCC+)|(MMMM+)|(DD+)|(LL+)|(VV+)";
                                      
                                              if (Regex.IsMatch(romans, invalidSequences))
                                              {
                                                  throw new ArgumentException("Invalid sequence!!");
                                              }
                                      
                                              int result = 0;
                                      
                                              result += Regex.Matches(romans, "IV").Count \* 4;
                                              romans = Regex.Replace(romans, "IV", string.Empty);
                                      
                                              result += Regex.Matches(romans, "IX").Count \* 9;
                                              romans = Regex.Replace(romans, "IX", string.Empty);
                                      
                                              result += Regex.Matches(romans, "XL").Count \* 40;
                                              romans = Regex.Replace(romans, "XL", string.Empty);
                                      
                                              result += Regex.Matches(romans, "XC").Count \* 90;
                                              romans = Regex.Replace(romans, "XC", string.Empty);
                                      
                                              result += Regex.Matches(romans, "CD").Count \* 400;
                                              romans = Regex.Replace(romans, "CD", string.Empty);
                                      
                                              result += Regex.Matches(romans, "CM").Count \* 900;
                                              romans = Regex.Replace(romans, "CM", string.Empty);
                                      
                                              result += romans.Count(x => x == 'I');
                                              romans = romans.Replace("I", string.Empty);
                                      
                                              result += romans.Count(x => x == 'V') \* 5;
                                              romans = romans.Replace("V", string.Empty);
                                      
                                              result += romans.Count(x => x == 'X') \* 10;
                                              romans = romans.Replace("X", string.Empty);
                                      
                                              result += romans.Count(x => x == 'L') \* 50;
                                              romans = romans.Replace("L", string.Empty);
                                      
                                              result += romans.Count(x => x == 'C') \* 100;
                                              romans = romans.Replace("C", string.Empty);
                                      
                                              result += romans.Count(x => x == 'D') \* 500;
                                              romans = romans.Replace("D", strin
                                      
                                      1 Reply Last reply
                                      0
                                      • S Steve Mayfield

                                        Don't you mean 'V' him?

                                        Steve _________________ I C(++) therefore I am

                                        A Offline
                                        A Offline
                                        AspDotNetDev
                                        wrote on last edited by
                                        #20

                                        Good catch. Live long and prosper.

                                        Thou mewling ill-breeding pignut!

                                        1 Reply Last reply
                                        0
                                        • C Chris Maunder

                                          Write a function to convert Roman numerals to Arabic numbers. The smaller the better. Bonus points, as always, for obscure languages and obfuscated assembler.

                                          cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                                          K Offline
                                          K Offline
                                          Karl Sanford
                                          wrote on last edited by
                                          #21

                                          Chris Maunder wrote:

                                          Roman numerals to Arabic numbers

                                          totally read this backward... at least now I have a solution for Arabic to Roman Numerals :doh:

                                          Be The Noise

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups