Youre not quite correct /dev/joe...

leads to some of your later numbers being fractions
>

This can never happen! ALL the values are products of 2 primes, and the GCD
used is one of that 2 primes, so there NEVER EVER can be a fraction.

The problem is this line:

for j in values[1:len(values)]:


Remember the problem description and the contraints for the length of the
cipher!

>
>    1. The number of values is one smaller than the number of characters
>    in the plaintext message.
>    2. 25 ≤ *L* ≤ 100.
>
>
If the given cipher only has a len of 25 values, then your set of primes
will ONLY have 25 vals and that one less than you need!


>    1.
>
>


Am So., 7. Apr. 2019 um 18:08 Uhr schrieb Joseph DeVincentis <
[email protected]>:

> It is possible when the message starts something like ABA for the first
> two values to be the same. In this case, you get gcd = values[0] instead of
> the prime shared between the first two values, and this wrong calculation
> leads to some of your later numbers being fractions, which probably leads
> to you computing more than 26 different values and then
> alphabets[primes.index(divisors[j])] indexes beyond the length of alphabets.
>
> You have to find the first two values which are different and take their
> GCD to start the process off, and possible wind it both forward and
> backward from that point.
>
> Also, if you use math.gcd() (fractions.gcd() in versions of Python before
> 3.5) instead of your GCD function, it will use the Euclidean algorithm to
> compute GCD which will be fast enough for the hidden input where the primes
> could be up to 100 digits long.
>
>
> On Sun, Apr 7, 2019 at 9:27 AM zombiepunkman <[email protected]>
> wrote:
>
>> I am unable to debug the runtime error in this solution to Cryptopangrams
>> problem.
>> Please help.
>>
>> def gcd(a,b):
>>         for i in range(min(a,b),0,-1):
>>                 if(a % i == 0 and b % i == 0):
>>                         return i
>>
>>
>>
>> if __name__=='__main__':
>>         alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
>>         T = int(input())
>>         answers = ["" for i in range(T)]
>>         for i in range(0,T):
>>                 N,L = [int(s) for s in input().split(" ")]
>>                 divisors = []
>>                 values = [int(s) for s in input().split(" ")]
>>                 div = gcd(values[0],values[1])
>>                 divisors.append(int(values[0]/div))
>>                 divisors.append(div)
>>                 for j in values[1:len(values)]:
>>                         div = int(j/div)
>>                         divisors.append(div)
>>                 primes = list(set(divisors))
>>                 primes.sort()
>>                 for j in range(0,len(divisors)):
>>                         answers[i] += alphabets[primes.index(divisors[j])]
>>         for i in range(0,T):
>>                 print("Case #{}: {}".format(i+1,answers[i]))
>>
>>
>> Python version 3.6
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google Code Jam" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/google-code/53742ecf-7373-4e3b-9e9e-f16717220df2%40googlegroups.com
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Google Code Jam" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/google-code/CAMAzhzjm7B82D_Bd6MnCvxXeg8FayvE54Dd34iPSqC2PiTaD4w%40mail.gmail.com
> <https://groups.google.com/d/msgid/google-code/CAMAzhzjm7B82D_Bd6MnCvxXeg8FayvE54Dd34iPSqC2PiTaD4w%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Code Jam" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-code/CAEWn8ohZuunBMj_Ga22sn9ewYctXbhF0edhxDESctHBcav%2BR3g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to