this post was submitted on 11 Oct 2025
269 points (99.6% liked)

Programmer Humor

26827 readers
1972 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
top 35 comments
sorted by: hot top controversial new old
[–] CookieOfFortune@lemmy.world 28 points 7 hours ago (1 children)

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

[–] vithigar@lemmy.ca 2 points 1 hour 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.

[–] anugeshtu@lemmy.world 30 points 10 hours ago (1 children)

Why don't you just ask Chat-GPT o3 every time? Works like a charm!

[–] lugal@lemmy.dbzer0.com 27 points 10 hours ago

Because there are better random generators

[–] douglasg14b@lemmy.world 35 points 11 hours ago (2 children)

Still linear time at least, could always be much MUCH worse

[–] dfyx@lemmy.helios42.de 22 points 10 hours ago (2 children)

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

[–] kogasa@programming.dev 1 points 1 hour ago

Not quadratic in the length of the input. Assuming replace is linear this is also linear

[–] Jerkface@lemmy.world 21 points 7 hours ago (1 children)
[–] aaaaaaaaargh@feddit.org 4 points 3 hours ago

This is the spirit

[–] lugal@lemmy.dbzer0.com 12 points 10 hours ago (1 children)

True. Lost opportunity to blow things up with useless recursivity

[–] bleistift2@sopuli.xyz 8 points 9 hours ago (2 children)

The word you’re looking for is recursion (see recursion).

[–] lugal@lemmy.dbzer0.com 1 points 12 minutes ago

Thanks. I knew something was off

[–] Gonzako@lemmy.world 4 points 6 hours ago (1 children)

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

[–] Cethin@lemmy.zip 4 points 1 hour 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.

[–] theunknownmuncher@lemmy.world 80 points 13 hours ago* (last edited 13 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 😂

[–] rooroo@feddit.org 15 points 10 hours ago (1 children)

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 6 points 10 hours ago (1 children)

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

[–] Atlas_@lemmy.world 5 points 6 hours ago (1 children)

Also does not handle 'IIIIIIIII' -> 'IX' properly

[–] pitiable_sandwich540@feddit.org 1 points 2 hours ago

If the substitution went right to left it might work.

[–] TootSweet@lemmy.world 23 points 12 hours ago* (last edited 12 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.

[–] Zangoose@lemmy.world 11 points 12 hours ago (1 children)

They forgot "CM" so this doesn't work for any number that ends in 900s

[–] trxxruraxvr@lemmy.world 44 points 12 hours ago* (last edited 12 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
  5. ......
[–] SpaceNoodle@lemmy.world 6 points 12 hours ago (1 children)
[–] trxxruraxvr@lemmy.world 25 points 12 hours ago* (last edited 12 hours ago) (2 children)

IIV would never be used. In Roman numerals at most one smaller unit can come in front of a larger one. The code doesn't do any validation though.

[–] Mirodir@discuss.tchncs.de 11 points 10 hours ago

While it doesn't say anything about IIV specifically, they sure got creative enough to sometimes subtract more than one of the smaller units from a larger one.

[–] SpaceNoodle@lemmy.world -3 points 12 hours ago

Yes, that does demonstrate my point.

[–] eah@programming.dev 6 points 12 hours ago (3 children)

It's got some code duplication. Who can code gulf this?

[–] grue@lemmy.world 13 points 7 hours ago* (last edited 7 hours ago)

Code gulf, you say?

public static String
convertRomanNumeral(String numeral) {
    numeral = numeral.replace("America", "Mexico");
    return numeral;
} 
[–] ray@sh.itjust.works 2 points 6 hours ago (1 children)
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.world 2 points 1 hour 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();
}
[–] tourist@lemmy.world 37 points 11 hours ago
public static int convertRomanNumeral(String numeral) {
    return 4; // todo
}
[–] Olap@lemmy.world 6 points 13 hours ago

until(original=new) { run convertOriginal }

[–] panda_abyss@lemmy.ca 4 points 12 hours ago (1 children)

Should do a regex find all then iterate over each chunk recursively until unchanged.

[–] ZTechnical@programming.dev 5 points 7 hours ago (1 children)

there was no regex in ancient rome

[–] felbane@lemmy.world 1 points 2 hours ago

Actually there were seven kings prior to the establishment of the republic, at which point they expelled the rulers... a reg-ex if you will.