• Rentlar
    link
    fedilink
    105
    edit-2
    1 year ago

    They call me a StackOverflow expert:

    private bool isEven(int num) {
    if (num == 0) return true;
    if (num == 1) return false;
    if (num < 0) return isEven(-1 * num);
    return isEven(num - 2);
    }
    
    • nyoooom
      link
      fedilink
      341 year ago
      bool isEven(int num) {
       return num == 0 || !isEven(num - (num > 0 ? 1 : -1));
      }
      
    • Johanno
      link
      fedilink
      16
      edit-2
      1 year ago

      StackoverflowException.

      What do I do now?

      Nvm. Got it.

        if(num % 2 == 0){
             int num1 = num/2
             int num2 = num/2
             return isEven(num1) && isEven(num2)   
        } 
      
      if(num % 3 == 0){
            int num1 = num/3
            int num2 = num/3
            int num3 = num/3
            return isEven(num1) && isEven(num2) && isEven(num3) 
      }
      

      Obviously we need to check each part of the division to make sure if they are even or not. /s

  • ???
    link
    fedilink
    84
    edit-2
    1 year ago

    I shit you not but one coworker I had dared call himself a data scientist and did something really similar to this but in Python and in production code. He should never have been hired. Coding in python was a requirement. I spent a good year sorting out through his spaghetti code and eventually rebuilt everything he had been working on because it was so bad that it only worked on his computer and he always pip freezes all requirements, and since he never used a virtual environment that meant we got a list of ALL packages he had installed on pip for a project. Out of those 100, only about 20 were relevant to the project.

      • @[email protected]
        link
        fedilink
        15
        edit-2
        1 year ago

        Code reviews mean fuck all when the “senior” developer doing the review is someone who implements an entire API endpoint group in one single thousand-something lines magic function that is impossible to decipher for mere humans.

      • ???
        link
        fedilink
        8
        edit-2
        1 year ago

        A few members of my team were reviewing codes but lots of PRs could be merged without tests or checks passing and only about 2 people before I joined understood what cicd is, no one else believed in its importance. They thought doing otherwise would “slow down the work precess and waste time, we know what we’re doing anyway!”.

        I learned a lot from having to implement best practices and introduce tests in teams that don’t give a fuck or were never required to do it. I’m amazed at the industry standards and fully understand why job ads keep listing git as a requirement.

    • Rouxibeau
      link
      fedilink
      241 year ago

      Reminds me of the fake thermometers being sold during the peak of COVID that weren’t actually thermometers but just displayed numbers to make people think they were.

  • @[email protected]
    link
    fedilink
    English
    68
    edit-2
    1 year ago

    Wow. Amateur hour over here. There’s a much easier way to write this.

    A case select:

    select(number){
        case 1:
            return false;
        case 2:
            return true;
    }
    

    And so on.

    • robotica
      link
      fedilink
      13
      edit-2
      1 year ago

      Don’t forget that you can have fall-through cases, so you can simplify it even further:

      switch (number) {
          case 1:
          case 3:
          case 5:
          case 7:
          case 9:
            ...
      
  • @[email protected]
    link
    fedilink
    451 year ago

    Just do a while loop and subtract 2 if it’s positive or plus 2 is it’s negative until it reaches 1 or 0 and that’s how you know, easy! /s

  • enkers
    link
    fedilink
    42
    edit-2
    1 year ago

    This is your brain on python:

    def is_even (num):
         return num in [x*2 for x in range(sys.maxsize / 2)]
    
    • Goddard Guryon
      link
      fedilink
      101 year ago

      That won’t work tho, you need to make it sys.maxsize//2 to coerce the output into int form

        • Goddard Guryon
          link
          fedilink
          11 year ago

          IIRC it doesn’t; that has caused me pain so many times when trying to generate fractional range

  • @[email protected]
    link
    fedilink
    401 year ago

    amateurs

    def is_even(n: int):
        if n ==0return True
        elif n < 0:
            return is_even(-n)
        else:
            return not is_even(n-1)
    
    • @[email protected]
      link
      fedilink
      281 year ago

      here’s a constant time solution:

      def is_even(n: int):
          import math
          return sum(math.floor(abs(math.cos(math.pi/2 * n/i))) for i in range(1, 2 ** 63)) > 0
      
      spoiler

      i can’t imagine how long it’ll take to run, my computer took over 3 minutes to compute one value when the upper bound was replaced with 230. but hey, at least it’s O(1).

    • Karyoplasma
      link
      fedilink
      5
      edit-2
      1 year ago

      Don’t use recursion. Each call will need to allocate a new stack frame which leads to a slower runtime than an iterative approach in pretty much any language.

  • @[email protected]
    link
    fedilink
    33
    edit-2
    1 year ago

    You have to make it easy on yourself and just use a switch with default true for evens, then handle all the odd numbers in individual cases. There, cut your workload in half.

  • Karyoplasma
    link
    fedilink
    291 year ago
    while (true){
        if (number == 0) return true;
        if (number == 1) return false;
        number -= 2
    }
    
      • Karyoplasma
        link
        fedilink
        1
        edit-2
        1 year ago

        You know, shortly after posting this I did think about whether it’s still working if I just pass the underflow that will happen at some point or if I have to fix something in that case (like subtract 1 after the underflow). I deemed it “too complicated” and would just issue a warning that my code is only tested on positive numbers, but I think it will still work.

  • @[email protected]
    link
    fedilink
    27
    edit-2
    1 year ago

    Just in case anyone was looking for a decent way to do it…

    if (((number/2) - round(number/2)) == 0) return true;
    
    return false;
    

    Or whatever the rounding function is in your language of choice.

    EDIT: removed unnecessary else.

    • @[email protected]
      link
      fedilink
      15
      edit-2
      1 year ago

      Every bit aside for the ones bit is even. All you have to do is get the ones bit(the far right) for it being a 1 or 0. Which is the fastest and least amount of code needed.

      use bitwise &

      // n&1 is true, then odd, or !n&1 is true for even  
      
       return (!(n & 1));  
      
    • @[email protected]
      link
      fedilink
      5
      edit-2
      1 year ago
      number % 2 == 0
      and
      (number & 0b1) == 0
      

      Are the only sane ways to do this. No need to floor. Although If its C and you can’t modulo floats then (number/2 == floor(number/2))

        • @[email protected]
          link
          fedilink
          11 year ago

          Whats the alternative a macro? An inline function is perfectly fine for checking if a nunber is even. Compiler will probably optimize it to a single and instruction.

          • @[email protected]
            link
            fedilink
            2
            edit-2
            1 year ago

            No. The alternative is to not use a float. Testing if a float is even simply does not make sense.

            Even testing two floats for equality rarely makes sense.

            What is the correct output of isEven((.2 + .4) ×10)

            Hint: (.2 + .4) x 10 != 6

            • @[email protected]
              link
              fedilink
              1
              edit-2
              1 year ago

              It does if it dosen’t have a decimal. If it has decimal then it automatically isn’t and the function will return false. Are you talking about cases like 0.1 + 0.2 equaling 0.3000000004 because that is just due to the nature of floats and there is nothing a function can do other than use larger floats for more accuracy.

    • @[email protected]
      link
      fedilink
      151 year ago

      looks like it depends on isOdd, which is unmaintained. I have a dependency conflict, what should I do?

      • Kogasa
        link
        fedilink
        81 year ago

        Extract an interface and let the consumer supply the implementation.