this post was submitted on 07 Dec 2023
115 points (100.0% liked)

Programming Horror

22 readers
1 users here now

Welcome to Programming Horror!

This is a place to share strange or terrible code you come across.

For more general memes about programming there's also Programmer Humor.

Looking for mods. If youre interested in moderating the community feel free to dm @Ategon@programming.dev

Rules

Credits

founded 1 year ago
MODERATORS
 
top 27 comments
sorted by: hot top controversial new old
[–] Thyrian@ttrpg.network 40 points 10 months ago (3 children)

You could do this in one line...

By removing all the linebreaks.

[–] DeathsEmbrace@lemmy.ml 9 points 10 months ago

Why even put spaces too many key presses.

[–] Strawberry@lemmy.blahaj.zone 1 points 10 months ago

i think it should one giant ternary expression composition

[–] iegod@lemm.ee 1 points 9 months ago

I love this thread 🫠

[–] noddy 24 points 10 months ago* (last edited 10 months ago) (1 children)

I know how to fix this!

bool IsEven(int number) {
    bool even = true;
    for (int i = 0; i < number; ++i) {
        if (even == true) {
            even = false;
        }
        else if (even == false) {
            even = true;
        }
        else {
            throw RuntimeException("Could not determine whether even is true or false.");
        }
    }

    if (even == true) {
        return even ? true : false;
    }
    else if (even == false) {
        return (!even) ? false : true;
    }
    else {
        throw RuntimeException("Could not determine whether even is true or false.");
    }
}
[–] odium@programming.dev 7 points 10 months ago (1 children)

Have you tried seeing if the recursive approach runs faster?

[–] noddy 13 points 10 months ago

I know an even better way. We can make it run in O(1) by using a lookup table. We only need to store 2^64 booleans in an array first.

[–] neidu@feddit.nl 15 points 10 months ago* (last edited 9 months ago) (1 children)

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" }

[–] lysdexic@programming.dev 15 points 10 months ago

Divide by 2 and check for a decimal point.

I mean, it ain't wrong.

[–] SpeakinTelnet@programming.dev 9 points 10 months ago* (last edited 10 months 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)
[–] recursive_recursion@programming.dev 7 points 10 months ago* (last edited 10 months ago) (4 children)

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 12 points 10 months ago* (last edited 10 months ago) (2 children)

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

[–] nullPointer@programming.dev 6 points 10 months ago

here is somewhat less:

return (number % 2) == 0;

[–] perviouslyiner@lemm.ee 2 points 10 months ago (1 children)

are the negative numbers all even?

[–] I_am_10_squirrels 2 points 10 months ago
[–] Vex_Detrause@lemmy.ca 2 points 10 months ago (1 children)
#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.

[–] PoolloverNathan@programming.dev 4 points 10 months ago

Don't put nbsps in code blocks, they show up literally.

[–] RandomVideos@programming.dev 1 points 10 months ago

This code is terrible. If you input 10.66 it returns "number is odd

It should be:

if number % 2 == 0
  return "number is even" (is_num_even = 1 or true)
else
  return "number is not even" (is_num_even = 0 or false)
[–] vrighter@discuss.tchncs.de 5 points 9 months ago
[–] Thyrian@ttrpg.network 4 points 10 months ago (1 children)

This could be optimized by using a recursive function.

[–] neeeeDanke@feddit.de 2 points 10 months ago

This could be made more servicavle by using a switch case

[–] FarraigePlaisteach@kbin.social 4 points 10 months ago* (last edited 10 months ago) (1 children)

I would replace each if/else with a while.

load more comments (1 replies)
[–] tweeks@feddit.nl 3 points 10 months ago

I would love it if someone edited this example and posted it with two statements near the end that are reversed, implying inconsistent behaviour at random in the list ahead, seemingly making this solution less inefficient.

[–] andioop@programming.dev 2 points 10 months ago
[–] AI_toothbrush@lemmy.zip 2 points 10 months ago

...btw a switch statement is better in this case(get it?)

[–] NostraDavid@programming.dev 1 points 9 months ago

You joke, but I've seen a programming language that didn't have a loop, and if you copied a line of text and pasted it in a text editor, JSON would come out...

The editor could barely handle 400+ lines because it probably converted the text to JSON, added a letter and converted it back to JSON... Per inserted symbol...