Discussion thread for Caesar cipher.
How do you solve this problem if the âknown_wordâ is made of just one letter? Currently my approach to solving this is:
(1) Go to each separate word in encrypted sentence
(2) Take the first letter and look calculate the shift
(3) Check if the shift is the same in other letters of the word too. If yes, this is the shift you were looking for
(4) Decrypt the sentence using the shift.
It obviously fails if the âknown_wordâ is made of just one letter!
I agree that this is a little misleading. Even when the âknown_wordâ is a single character, you should treat it as a âwordâ. This means that in step (3), you would need to figure out the shift based on that one-letter word alone.
To be honest, I think we need to improve the problem to avoid making the âknown_wordâ one-letter long. As a workaround for you: if you have a solution you think is good but isnât passing the ârandom test caseâ, try submitting a few times.
Thanks for the response. I did submit it a few times and it passed all the test cases except those where the known_word was a single letter. I will take your suggestions and re-look at my code. Thanks again for taking the time to write.
The submission guidelines are a little confusing. The example text shows lowercase output, but all of the test cases expect uppercase output.
Either is fine, but it has to be consistent.
@POGtastic thanks for reporting this, definitely a mistake as I think plaintexts are usually in lowercase and yes, good to be consistent.
Just fixed it!
Similar to the above issue, the example gives the âInput wordâ in lower case, but all the test cases have an upper case known word.
If this were a program âin-the-wildâ, i.e. you might get any kind of input, then you should do some validity checking of those inputs, e.g check that the known word is all lower case, contains no punctuation, numbers or other special characters.
As for the single letter issue, assuming you are working in English, there arenât that many single letter words, in fact only 2, âIâ and âaâ; somebody correct me if Iâm wrong. Obviously, a computer canât understand English (unless youâve got some kind of clever machine learning algorithm) so youâd have to return both valid translations; one will be correct English, the other garbage. As for random input youâd have to know what the output is in the first place, which defeats the purpose of the function. I guess you could treat a single letter known word as invalid input and return something appropriate in response.
Hey @Will thanks for pointing that out! Kind of embarrasing on my end, I fixed the example but forgot to fix the actual problem lol. Should all be consistent now which should make things less frustrating for anyone submitting a solution. Old solutions may need to be fixed now that known_word
is lowercase as intended.
@djwalker Good point about one-letter words. I guess right now the known_word
is generated randomly so in practice people probably resubmit if they get a one-letter known_word
and return the wrong decrypted message. We probably should modify the problem so that known_word
will be at least two or three letters long which will reduce the chances of a âwrongâ decryption.
Youâre right that any real-world program would have to sanitize the input and check stuff. I guess we try to always pass valid input so that people can just focus on solving the problem.