# [gcj] Re: Why is this wrong

```Seems to me like you are checking from left to right whether there is a chance
to swap in the main function? ```
```
If yes, then the problem is that to get the maximum reduction of damage, we
should reduce the energy of the shooting that has been charged most, therefore
it should be from right to left instead.

Another thing is that maybe before you swap all shooting and charging that
could be swapped in a loop, the damage has already been reduced to a
value<=threshold. Therefore I suggest you to check after each swap.

On Thursday, April 12, 2018 at 10:19:21 AM UTC-7, Sahil Shetty wrote:
> def change(rcodeC, i):
>
>     holder = rcodeC[i + 1]
>     rcodeC[i + 1] = rcodeC[i]
>     rcodeC[i] = holder
>     return rcodeC
>
> def damage(rcodeD, dmg = 0, count = 0):
>
>     for i in rcodeD:
>
>         if i == 'S': dmg += 2 ** count
>         else: count += 1
>
>     return dmg
>
>
> def main(shield, rcode, hacks = 0, count = 0):
>
>     while damage(rcode) > shield:
>
>         for i in range(len(rcode) - 1):
>
>             try:
>
>                 if rcode[i] == 'C' and rcode[i + 1] != 'C':
>
>                     hacks += 1
>                     rcode = change(rcode, i)
>
>                 try:
>
>                     if all(e == 'C' for e in rcode[rcode.index('C'): -1]) ==
> True and damage(rcode) > shield: return 'IMPOSSIBLE'
>
>                 except ValueError:
>
>                     if all(e == 'S' for e in rcode[rcode.index('S'): -1]) ==
> True and damage(rcode) > shield: return 'IMPOSSIBLE'
>
>             except IndexError: None
>
>     return hacks
>
>
> test = int(raw_input("Test data: "))
> print '\n'
> while test < 1 or test > 100: test = int(raw_input("Between 1 and 100: "))
>
> for i in range(test):
>
>     shield = int(raw_input("Shield strength: "))
>     while shield < 1 or shield > (10 ** 9): shield = int(raw_input("Between 1
> and 10^9: "))
>
>     rcode = raw_input("Robot code: ")
>     while all(i == 'C' or i == 'S' for i in rcode) != True or len(rcode) > 30
> or len(rcode) < 2: rcode = raw_input("Must be greater than 2 and less than 1;
> only 'C' and 'S': ")
>
>
>     print 'Case #' + str(i + 1) + ':', main(shield, list(rcode)), '\n\n\n'

--
You received this message because you are subscribed to the Google Groups