Who cares about time complexity
Who cares about time complexity
Who cares about time complexity
Still linear time at least, could always be much MUCH worse
This isn’t sufficiently enterprisey for Java. There should be a Roman numeral factory followed by relevant fromString and toInteger methods.
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.
Why don't you just ask Chat-GPT o3 every time? Works like a charm!
Because there are better random generators
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.
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.
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
Since Roman numerals have an upper bound, the time complexity is always O(1).
They forgot "CM" so this doesn't work for any number that ends in 900s
No, M will be replaced by DD and then CD will be picked up, so it will go
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.
My first thought was that it'd be a great oracle for randomized testing.
It's got some code duplication. Who can code gulf golf this?
public static int convertRomanNumeral(String numeral) { return 4; // todo }
Code gulf, you say?
public static String convertRomanNumeral(String numeral) { numeral = numeral.replace("America", "Mexico"); return numeral; }
Gulf clap.
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(); }
java
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(); }
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();}
IIV becomes IIIII, hm?
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.
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.
Yes, that does demonstrate my point.
According to this code, "CEREAL" is a valid Roman numeral which equals 154. Great job!
Should do a regex find all then iterate over each chunk recursively until unchanged.
there was no regex in ancient rome
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.
I just wrote something similar for decoding binary asm instructions.
If you have the time it's a good solution!
Alternatively pip install roman.
until(original=new) { run convertOriginal }
Depending on the language, you may be mutating the input value, which isn't great.
I'm pretty sure it's Java (due to the syntax and Eclipse editor default color scheme), so that isn't an issue
Oh right, my Java is a bit rusty. But if it was Javascript, that would have been a problem.
You missed "CM," which was common in copyright statements in the 20th century.
No, they didn't.
CM becomes CDD, which becomes CCCCD which becomes CCCCCCCCC.
unary!
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 😂
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.
I'd accept that "smart code" and "clever code" are 2 different things
Fast inverse square root eh?
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.