HS12HDPW - Hidden Password

You are given two alphanumeric ASCII strings. An ancient manuscript says those strings contain a hidden password. Decode it!

The first string may be grouped into tuples of six characters each. For each such 6-tuple, taking from the i-th character (start counting from 0) the i-th bit of its ASCII code gives you a number (call it a), and likewise taking the (i+3 mod 6)-th bits gives you another number (call it b).

These two numbers tell you about the next two characters to be included in the password, namely the a-th and the b-th character from the second string (count starting from 0 as usual).


First, you are given t (t<100) - the number of test cases.

Each of the test cases starts with one number n (n < 100) - the number of 6-tuples in the first string, followed by the two strings in separate lines (please have a look at the example to see the correct format). The second string is 64 characters long.

Successive test cases are separated by an empty line.


For each of the test cases, output its hidden password in a separate line.


qwe345 rf3Arg

2S4J5K 111111 lrtb2A


Let us have a look at the first 6-tuple: qwe345

char. ASCII code
  q   113 = 01110001B      
  w   119 = 01110111B
  e   101 = 01100101B
  3    51 = 00110011B
  4    52 = 00110100B
  5    53 = 00110101B

a(blue bits)  = 110111B = 55
b(green bits) = 101110B = 46


By solving this problem you score 10 points.

hide comments
dziki_punk: 2020-04-30 22:58:35

Would be easy if author explained it better.

nadstratosfer: 2018-05-07 03:12:17

Statement contains a typo, but it's obvious from the example case that we're supposed to use (i+3)%6 -th bit.

ndrewxie: 2018-05-06 20:39:02

Wait, you're supposed to iterate for all 6 tuples! I see. Nevermind!

Wait, WTF????? If you apply their transformation i+3%6, it doesn't get you the right answer... Some weird rollover (it rolls over back to 0 if i+3%6 > 6)

The question clearly states that taking the i+3%6th bit of the ith character will get you the right answer, but it's obviously not! If you simply apply that transformation, you'll QUICKLY overflow the array bounds, so there's obviously some sort of rollover, WHICH IS NOT DESCRIBED IN THE PROBLEM! For example, for i=6 (the last case in the example), if you simply applied the transformation you were told to use, you would get 6+3%6=9, WHICH OVERFLOWS THE BINARY ARRAY!

YES GOT IT!!!! Problem is, I had to write a custom function map to actually MAP the value of the i+3%6 transformation to the correct array address, which is f(x) = x-6 if x>5, x otherwise (x is the value of i+3%6)... TBH, not a very well written problem, it didn't describe or even mention the rollover. aah well...

Last edit: 2018-05-06 21:57:00
ndrewxie: 2018-05-06 20:37:53

Last edit: 2018-05-06 20:39:11
ndrewxie: 2018-05-06 20:34:51

I know how to get the first 2 characters, but what about the next ones?

stoneark: 2017-11-27 10:15:46

Attention: "Successive test cases are separated by an empty line."

w4ff3l: 2017-10-16 20:55:05

First try, this was a good lesson!

love_god: 2017-10-12 12:38:39

plz someone explain it?

kejriwal_pk: 2017-07-26 09:42:10

Once you understand the question, its easy. C++ STL Bitset was helpful for solving this problem.

shivam_mnnit: 2017-05-05 18:07:19

what is to be done in the problem?? can anybody explain clearly??

Added by:kuszi
Time limit:1s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: ASM64
Resource:High School Programming League 2012