• Caveman@lemmy.world
    link
    fedilink
    arrow-up
    3
    ·
    2 hours ago

    It’s not too bad, it’s readable and easily optimised by adding intermediate sums and removing whatever power of 10 you’re working on.

  • mkwt@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    1 hour ago

    You missed “CM,” which was common in copyright statements in the 20th century.

  • CookieOfFortune@lemmy.world
    link
    fedilink
    arrow-up
    50
    arrow-down
    1
    ·
    14 hours ago

    This isn’t sufficiently enterprisey for Java. There should be a Roman numeral factory followed by relevant fromString and toInteger methods.

    • vithigar@lemmy.ca
      link
      fedilink
      arrow-up
      9
      ·
      8 hours ago

      Ugh. Literally refactored multiple factories into straightforward functions in the most recent sprint where I work.

      Someone saw a public factory method which was a factory for a reason and just cargo culted multiple private methods using the same pattern.

    • qaz@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 hours ago

      I’m pretty sure it’s Java (due to the syntax and Eclipse editor default color scheme), so that isn’t an issue

    • dfyx@lemmy.helios42.de
      link
      fedilink
      arrow-up
      34
      ·
      17 hours ago

      There could be a hidden quadratic cost because the string needs to be reallocated and copied multiple times.

        • Gonzako@lemmy.world
          link
          fedilink
          arrow-up
          6
          arrow-down
          1
          ·
          13 hours ago

          Nah, I’d like to un-see recursion. It was way overblown on uni, I barely ever use it.

          • Cethin@lemmy.zip
            link
            fedilink
            English
            arrow-up
            8
            ·
            8 hours ago

            Recursion is amazing for a small selection of problems. Most of the time you don’t need, or want, it. When it is useful though, it tends to be really useful.

            I don’t understand people’s issue with it. I always found it easy. Maybe that’s why I feel this way. Maybe if you find it challenging you want to avoid it, even when it’s a good solution.

            • kamstrup@programming.dev
              link
              fedilink
              arrow-up
              3
              ·
              5 hours ago

              Most devs I know like recursion. Trouble is that many popular languages don’t support tail recursion, but throw a stackoverflow error after a few thousand levels. So you have to keep track of max recursion depth manually, and it starts to look like a complicated solution

            • Ephera@lemmy.ml
              link
              fedilink
              English
              arrow-up
              4
              ·
              6 hours ago

              I think, their point (and also my experience) is that you get taught about it in university a lot more than about simple loops, so it feels more important even though you rarely use it in reality.

              Same thing goes for linked lists and inheritance…

            • kamstrup@programming.dev
              link
              fedilink
              arrow-up
              1
              ·
              5 hours ago

              Most devs I know like recursion. Trouble is that many popular languages don’t support tail recursion, but throw a stackoverflow error after a few thousand levels. So you have to keep track of max recursion depth manually, and it starts to look like a complicated solution

  • theunknownmuncher@lemmy.world
    link
    fedilink
    arrow-up
    96
    arrow-down
    1
    ·
    edit-2
    20 hours ago

    Whenever you sit back and smile proudly to yourself about how clever the block of code you just wrote is, your next move should be to delete and rewrite it.

    This is a clever block of code! Great job, now rewrite it to be sane 😂

    • balsoft@lemmy.ml
      link
      fedilink
      arrow-up
      26
      ·
      18 hours ago

      I think it depends; some smart code is good actually, think 0x5f3759df. As long as you properly document it and leave plenty of comments. This one is not smart though, at best it’s what I would call witty.

      • Cethin@lemmy.zip
        link
        fedilink
        English
        arrow-up
        4
        ·
        8 hours ago

        This isn’t smart. This is clever. It’s a way to solve a problem in a novel way. It isn’t the best, or even most obvious, way to solve the problem. It’s just interesting.

  • rooroo@feddit.org
    link
    fedilink
    arrow-up
    21
    arrow-down
    1
    ·
    17 hours ago

    It also works the other way round: wanna convert Arabic n to Roman? Just write n times ‘I’ and revert these replacement in inverse order.

    • lugal@lemmy.dbzer0.com
      link
      fedilink
      arrow-up
      6
      ·
      17 hours ago

      I don’t know what happens when the substring overlaps. Like for the number 6, will it replace the first 5 I’s with V and end up correctly with VI or the last ones and come to IV? I would guess the former and maybe you know but I never thought about it before

  • TootSweet@lemmy.world
    link
    fedilink
    English
    arrow-up
    27
    ·
    edit-2
    19 hours ago

    My first thought was something along the lines of a “zip bomb”. For every “M” in the input string, it’d use more than a KiB of memory. But still, it’d take a string of millions of "M"s to exhaust memory on even a low-end modern server. Still probably not a good idea to expose to untrusted input on a public networked server, though. And it could easily peg a CPU core for a good while. Very good leveraged target for DDOSing.

    • trxxruraxvr@lemmy.world
      link
      fedilink
      arrow-up
      48
      ·
      edit-2
      19 hours ago

      No, M will be replaced by DD and then CD will be picked up, so it will go

      1. CM
      2. CDD
      3. CCCCD
      4. CCCCCCCCC
    • TheLazyNerd@europe.pub
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      4 hours ago

      I’m not too good with java, but it should be something like this:

      public static int convertRomanNumeral(string n){Map.of("M","DD","CD","CCCC","D","CCCCC","C","LL","XL","XXXX","L","XXXXX","X","VV","IV","IIII","V","IIIII");.forEach((k,v)->{n=n.replace(k,v);});return n.length();}

    • grue@lemmy.world
      link
      fedilink
      arrow-up
      23
      ·
      edit-2
      14 hours ago

      Code gulf, you say?

      public static String
      convertRomanNumeral(String numeral) {
          numeral = numeral.replace("America", "Mexico");
          return numeral;
      } 
      
    • ray@sh.itjust.works
      link
      fedilink
      arrow-up
      2
      ·
      13 hours ago
      public static int convertRomanNumeral(String numeral)
      {
        numeral = numeral.replace("M", "DD")
          .replace("CD", "CCCC")
          .replace("D", "CCCCC")
          .replace("C", "LL")
          .replace("XL", "XXXX")
          .replace("L", "XXXXX")
          .replace("X", "VV")
          .replace("IV", "IIII")
          .replace("V", "IIIII");
        return numeral.length();
      }
      
      • qaz@lemmy.worldOP
        link
        fedilink
        English
        arrow-up
        6
        ·
        8 hours ago
        public static int convertRomanNumeral(String numeral)
        {
          return numeral.replace("M", "DD")
            .replace("CD", "CCCC")
            .replace("D", "CCCCC")
            .replace("C", "LL")
            .replace("XL", "XXXX")
            .replace("L", "XXXXX")
            .replace("X", "VV")
            .replace("IV", "IIII")
            .replace("V", "IIIII")
            .length();
        }