• misophist@lemmy.world
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      This is confusing. I’m already using the iSeven API to determine if a number is 7. I’m getting a namespace collision error when I try to load this new API. Bug report filed.

  • neidu@feddit.nl
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 year ago

    My solution in perl back in the day when I was a teenage hobbyist who didn’t know about the modulus operator: Divide by 2 and use regex to check for a decimal point.

    if ($num / 2 =~ /\./) { return “odd” }
    else { return “even” }

      • Chobbes@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        You know, I was going to let this slide under the notion that we’re just ignoring the limited precision of floating point numbers… But then I thought about it and it’s probably not right even if you were computing with real numbers! The decimal representation of real numbers isn’t unique, so this could tell me that “2 = 1.9999…” is odd. Maybe your string coercion is guaranteed to return the finite decimal representation, but I think that would be undecidable.

        • backgroundcow@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          Ackchyually-- IEEE 754 guarantees any integer with absolute value less than 2^24 to be exactly representable as a single precision float. So, the “divide by 2, check for decimals” should be safe as long as the origin of the number being checked is somewhat reasonable.

          • Chobbes@lemmy.world
            link
            fedilink
            arrow-up
            1
            ·
            1 year ago

            Of course, but it’s somewhat nasty when all of a sudden is_even doesn’t do what you expect :).

  • AwkwardLookMonkeyPuppet@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    Back when I was learning programming a lot of lessons would make you do something like this, and then show you the real way to do it in the next lesson. My reaction was always “why didn’t you lead with this?”.

    • Coreidan@lemmy.world
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Because the point of the lesson is to demonstrate that you can solve the same problem multiple ways where some paths are more efficient than others.

      Bad programmers are the ones that find the first solution and implement it no matter how inefficient it is.

      Good programmers spend time on figuring out the solution with the least amount broken or inefficient code. You don’t learn this by jumping straight to the best answer every time.

  • recursive_recursion [they/them]@programming.dev
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 year ago

    modulo

    pseudocode:

    if number % 2 == 0
      return "number is even" (is_num_even = 1 or true)
    else
      return "number is odd" (is_num_even = 0 or false)
    

    plus you’d want an input validation beforehand

    • Mac@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 year ago

      who needs modulo when you can get less characters out of

      while (number > 1) {
        number -= 2;
      }
      return number;
      

      very efficient

      edit: or theres the trusty iseven api

    • Vex_Detrause@lemmy.ca
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago
      #You are an input. You have value! You matter!
      if number % 2 == 0
        return "number is even" (is_num_even = 1 or true)
      else
        return "number is odd" (is_num_even = 0 or false)
      

      Am I doing it right? /S.

  • SpeakinTelnet@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    edit-2
    1 year ago
    def is_even(n):
        match n:
            case 1:
                return False
            case 0:
                return True
            # fix No1
            case n < 0:
                return is_even(-1*n)
            case _:
                return is_even(n-2)