Problem C
Kvadranter
Antag att du har ett papper, och delar in det i 4 kvadranter, och sedan namnger varje kvadrant, så här:
Vi kan nu upprepa denna process och dela in varje kvadrant i del-kvadranter, och sedan namnge varje del-kvadrant så här:
och ytterligare en gång:
osv. Om vi upprepar denna process $n$ gånger så kommer vi ha delat in papperet i $4^ n$ rutor. Varje ruta kommer att ha ett namn som är en sekvens av $n$ siffror.
Vi är nu intresserade av att veta vilken ruta som ligger $x$ steg till höger och $y$ steg ovanför en given ruta. Om vi har delat papperet i kvadranter 2 gånger (och alltså fått 16 rutor), och t.ex. utgår från 1.3 och går 2 steg till höger och 2 steg uppåt så hamnar vi i rutan 4.3. Om vi utgår från 1.3 och går 0 steg till höger och -1 steg uppåt (dvs 1 steg nedåt) så hamnar vi i 1.1.
Om vi har delat papperet 3 gånger (och alltså fått 64 rutor), startar i 4.1.4, och förflyttar oss -3 steg till höger (3 steg till vänster) så hamnar vi i 3.2.3. Om vi förflyttar oss 5 steg uppåt så hamnar vi utanför papperet.
Indata
Indata består av en sträng som utgör namnet på rutan (dvs ett antal siffror med punkter emellan, som i exemplen ovan), och två heltal $x$ och $y$ som anger hur många steg vi vill gå åt höger respektive uppåt. Du kan förutsätta att $x$ och $y$ ligger mellan $-10\, 000$ och $10\, 000$ (inklusivt).
Notera att längden på namnet på rutan anger hur många gånger vi har delat in papperet: Om namnet innehåller $n$ siffror så har vi delat in pappret i $4^ n$ rutor.
Utdata
Utdata ska bestå av en enda sträng som anger namnet på den ruta man hamnar i efter förflyttningen, eller strängen “outside” om vi hamnar utanför papperet.
Sample Input 1 | Sample Output 1 |
---|---|
1.3 2 2 |
4.3 |
Sample Input 2 | Sample Output 2 |
---|---|
4.1.4 -3 0 |
3.2.3 |
Sample Input 3 | Sample Output 3 |
---|---|
4.1.4 0 5 |
outside |
Sample Input 4 | Sample Output 4 |
---|---|
4.1.4.1.4 -15 -15 |
1.1.4.4.1 |