package test;
import org.junit.Assert;
import org.junit.Test;
public class TestHomework {
public static interface Homework2{
}
public static class Homework2ImpleA implements Homework2{
int sep;
public Homework2ImpleA(int sep){
this.sep=sep;
}
char[][] buildContainer(int inputsize ){
char[][] rs= new char[this.sep][];
int d = (inputsize / this.sep);
int m = (inputsize % this.sep);
for(int i=0,j=m+this.sep-1;i<this.sep;i++,j--){
rs
[i
]=new char[d
+Math.
max((j
/this.
sep),
0)];
}
return rs;
}
String outputContainer
(char[][] container
){ StringBuilder rs = new StringBuilder();
for(char[] co : container){
}
return rs.toString();
}
char [] o = input.toCharArray();
char[][] container=buildContainer(o.length);
for(int i=0,p=(i/this.sep);i<o.length;i+=this.sep,p=(i/this.sep)){
for(int j=0,cp=i+j;j<this.sep && cp <o.length;j++,cp=i+j){
if(p<container[j].length){
container[j][p] = o[cp];
}
}
}
return outputContainer(container);
}
char [] o = input.toCharArray();
char[][] container=buildContainer(o.length);
for(int i=0,os=0;i<this.sep;i++){
System.
arraycopy(o, os, container
[i
],
0, container
[i
].
length); os+=container[i].length;
}
for(int i=0;i<container.length;i++){
for(int j=0 ;j<container[i].length;j++){
o[(j*sep)+i]=container[i][j];
}
}
}
}
@Test
public void doHomework(){
Homework2 t = new Homework2ImpleA(2);
{"135246","123456"}
,{"acebd","abcde"}
,{"wrdol","world"}
}){
String decode
= t.
decode(test
); System.
out.
printf("%s : %s == %s \n",test,check,decode
); Assert.assertEquals(check, decode);
}
}
@Test
public void doHomework2_2(){
Homework2 t = new Homework2ImpleA(2);
{"123456","135246"}
,{"abcde","acebd"}
,{"world","wrdol"}
}){
String encode
= t.
encode(test
); String decode
= t.
decode(encode
); System.
out.
printf("%s,%s,%s,%s\n",test,check,encode,decode
); Assert.assertEquals(check, encode);
Assert.assertEquals(test, decode);
}
}
@Test
public void doHomework2_3(){
Homework2 t = new Homework2ImpleA(3);
{"123456","142536"}
,{"abcde","adbec"}
,{"world","wlodr"}
}){
String encode
= t.
encode(test
); String decode
= t.
decode(encode
); System.
out.
printf("%s,%s,%s,%s\n",test,check,encode,decode
); Assert.assertEquals(check, encode);
Assert.assertEquals(test, decode);
}
}
@Test
public void doHomework2_4(){
Homework2 t = new Homework2ImpleA(4);
{"1234","1234"}
,{"12345","15234"}
,{"123456","152634"}
,{"1234567","1526374"}
,{"12345678","15263748"}
,{"123456789","159263748"}
}){
String encode
= t.
encode(test
); String decode
= t.
decode(encode
); System.
out.
printf("%s,%s,%s,%s\n",test,check,encode,decode
); Assert.assertEquals(check, encode);
Assert.assertEquals(test, decode);
}
}
}
cGFja2FnZSB0ZXN0OwoKaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7CmltcG9ydCBvcmcuanVuaXQuVGVzdDsKCiAKcHVibGljIGNsYXNzIFRlc3RIb21ld29yayB7CglwdWJsaWMgc3RhdGljIGludGVyZmFjZSBIb21ld29yazJ7CQkKCQlwdWJsaWMgU3RyaW5nIGVuY29kZShTdHJpbmcgaW5wdXQpOwoJCXB1YmxpYyBTdHJpbmcgZGVjb2RlKFN0cmluZyBpbnB1dCk7CQkKCX0KCQoJcHVibGljIHN0YXRpYyBjbGFzcyBIb21ld29yazJJbXBsZUEgaW1wbGVtZW50cyBIb21ld29yazJ7CgkJaW50IHNlcDsJCQkKCQkKCQlwdWJsaWMgSG9tZXdvcmsySW1wbGVBKGludCBzZXApewoJCQl0aGlzLnNlcD1zZXA7CQkJCgkJfQoJCQoJCWNoYXJbXVtdIGJ1aWxkQ29udGFpbmVyKGludCBpbnB1dHNpemUgKXsKCQkJCgkJCWNoYXJbXVtdIHJzPSBuZXcgY2hhclt0aGlzLnNlcF1bXTsKCQkJaW50IGQgPSAoaW5wdXRzaXplIC8gdGhpcy5zZXApOwoJCQlpbnQgbSA9IChpbnB1dHNpemUgJSB0aGlzLnNlcCk7CQkJCQkJIAoJCQlmb3IoaW50IGk9MCxqPW0rdGhpcy5zZXAtMTtpPHRoaXMuc2VwO2krKyxqLS0pewoJCQkJcnNbaV09bmV3IGNoYXJbZCtNYXRoLm1heCgoai90aGlzLnNlcCksMCldOwoJCQkJCQkJCQkJCQoJCQl9IAkJCQkJCQoJCQlyZXR1cm4gcnM7CgkJfQoJCQoJCVN0cmluZyBvdXRwdXRDb250YWluZXIoY2hhcltdW10gY29udGFpbmVyKXsKCQkJU3RyaW5nQnVpbGRlciBycyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CgkJCWZvcihjaGFyW10gY28gOiBjb250YWluZXIpewoJCQkJcnMuYXBwZW5kKG5ldyBTdHJpbmcoY28pKTsKCQkJfQoJCQlyZXR1cm4gcnMudG9TdHJpbmcoKTsKCQl9CQkJCQkJCQkKCQlwdWJsaWMgU3RyaW5nIGVuY29kZShTdHJpbmcgaW5wdXQpewkJCQoJCQljaGFyIFtdIG8gPSBpbnB1dC50b0NoYXJBcnJheSgpOwoJCQljaGFyW11bXSBjb250YWluZXI9YnVpbGRDb250YWluZXIoby5sZW5ndGgpOwkJCgkJCWZvcihpbnQgaT0wLHA9KGkvdGhpcy5zZXApO2k8by5sZW5ndGg7aSs9dGhpcy5zZXAscD0oaS90aGlzLnNlcCkpewoJCQkJZm9yKGludCBqPTAsY3A9aStqO2o8dGhpcy5zZXAgJiYgY3AgPG8ubGVuZ3RoO2orKyxjcD1pK2opewoJCQkJCWlmKHA8Y29udGFpbmVyW2pdLmxlbmd0aCl7CgkJCQkJCWNvbnRhaW5lcltqXVtwXSA9IG9bY3BdOwoJCQkJCX0JCQkJCQkJCQkJCgkJCQl9CgkJCX0KCQkJcmV0dXJuIG91dHB1dENvbnRhaW5lcihjb250YWluZXIpOwoJCX0KCQlwdWJsaWMgU3RyaW5nIGRlY29kZShTdHJpbmcgaW5wdXQpewkJCQoJCQljaGFyIFtdIG8gPSBpbnB1dC50b0NoYXJBcnJheSgpOwoJCQljaGFyW11bXSBjb250YWluZXI9YnVpbGRDb250YWluZXIoby5sZW5ndGgpOwkJCQkJCQoJCQlmb3IoaW50IGk9MCxvcz0wO2k8dGhpcy5zZXA7aSsrKXsKCgkJCQlTeXN0ZW0uYXJyYXljb3B5KG8sIG9zLCBjb250YWluZXJbaV0sIDAsIGNvbnRhaW5lcltpXS5sZW5ndGgpOwoJCQkJb3MrPWNvbnRhaW5lcltpXS5sZW5ndGg7CgkJCX0KCQkJCgkJCWZvcihpbnQgaT0wO2k8Y29udGFpbmVyLmxlbmd0aDtpKyspewoJCQkJZm9yKGludCBqPTAgO2o8Y29udGFpbmVyW2ldLmxlbmd0aDtqKyspewoJCQkJCW9bKGoqc2VwKStpXT1jb250YWluZXJbaV1bal07CgkJCQl9CgkJCX0KCQkJCgkJCXJldHVybiBuZXcgU3RyaW5nKG8pOwoJCX0JCQkKCX0KCQoJCglAVGVzdAoJcHVibGljIHZvaWQgZG9Ib21ld29yaygpewoJCUhvbWV3b3JrMiB0ID0gbmV3IEhvbWV3b3JrMkltcGxlQSgyKTsKCQlmb3IoU3RyaW5nIFtdIHN0ciA6IG5ldyBTdHJpbmdbXVtdewoJCQkJeyIxMzUyNDYiLCIxMjM0NTYifQoJCQkJLHsiYWNlYmQiLCJhYmNkZSJ9CgkJCQkseyJ3cmRvbCIsIndvcmxkIn0KCQkJCX0pewoJCQlTdHJpbmcgdGVzdCA9IHN0clswXTsKCQkJU3RyaW5nIGNoZWNrID0gc3RyWzFdOwkKCQkJU3RyaW5nIGRlY29kZSA9IHQuZGVjb2RlKHRlc3QpOwoJCQlTeXN0ZW0ub3V0LnByaW50ZigiJXMgOiAlcyA9PSAgJXMgXG4iLHRlc3QsY2hlY2ssZGVjb2RlKTsKCQkJQXNzZXJ0LmFzc2VydEVxdWFscyhjaGVjaywgZGVjb2RlKTsJCQkKCQl9CQkJCgl9CgoJQFRlc3QKCXB1YmxpYyB2b2lkIGRvSG9tZXdvcmsyXzIoKXsKCQlIb21ld29yazIgdCA9IG5ldyBIb21ld29yazJJbXBsZUEoMik7CgkJZm9yKFN0cmluZyBbXSBzdHIgOiBuZXcgU3RyaW5nW11bXXsKCQkJCXsiMTIzNDU2IiwiMTM1MjQ2In0KCQkJCSx7ImFiY2RlIiwiYWNlYmQifQoJCQkJLHsid29ybGQiLCJ3cmRvbCJ9CgkJCQkKCQkJCX0pewoJCQlTdHJpbmcgdGVzdCA9IHN0clswXTsKCQkJU3RyaW5nIGNoZWNrID0gc3RyWzFdOwoJCQlTdHJpbmcgZW5jb2RlID0gdC5lbmNvZGUodGVzdCk7CgkJCVN0cmluZyBkZWNvZGUgPSB0LmRlY29kZShlbmNvZGUpOwoJCQlTeXN0ZW0ub3V0LnByaW50ZigiJXMsJXMsJXMsJXNcbiIsdGVzdCxjaGVjayxlbmNvZGUsZGVjb2RlKTsKCQkJQXNzZXJ0LmFzc2VydEVxdWFscyhjaGVjaywgZW5jb2RlKTsJCQoJCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKHRlc3QsIGRlY29kZSk7CQoJCX0JCQoJfQkKCQoJQFRlc3QKCXB1YmxpYyB2b2lkIGRvSG9tZXdvcmsyXzMoKXsKCQlIb21ld29yazIgdCA9IG5ldyBIb21ld29yazJJbXBsZUEoMyk7CgkJZm9yKFN0cmluZyBbXSBzdHIgOiBuZXcgU3RyaW5nW11bXXsKCQkJCXsiMTIzNDU2IiwiMTQyNTM2In0KCQkJCSx7ImFiY2RlIiwiYWRiZWMifQoJCQkJLHsid29ybGQiLCJ3bG9kciJ9CQkJCQoJCQkJfSl7CgkJCVN0cmluZyB0ZXN0ID0gc3RyWzBdOwoJCQlTdHJpbmcgY2hlY2sgPSBzdHJbMV07CgkJCVN0cmluZyBlbmNvZGUgPSB0LmVuY29kZSh0ZXN0KTsKCQkJU3RyaW5nIGRlY29kZSA9IHQuZGVjb2RlKGVuY29kZSk7CgkJCVN5c3RlbS5vdXQucHJpbnRmKCIlcywlcywlcywlc1xuIix0ZXN0LGNoZWNrLGVuY29kZSxkZWNvZGUpOwoJCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKGNoZWNrLCBlbmNvZGUpOwkJCgkJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdCwgZGVjb2RlKTsJCgkJfQkJCgl9CQoJCglAVGVzdAoJcHVibGljIHZvaWQgZG9Ib21ld29yazJfNCgpewoJCUhvbWV3b3JrMiB0ID0gbmV3IEhvbWV3b3JrMkltcGxlQSg0KTsKCQlmb3IoU3RyaW5nIFtdIHN0ciA6IG5ldyBTdHJpbmdbXVtdewoJCQkJeyIxMjM0IiwiMTIzNCJ9CgkJCQkseyIxMjM0NSIsIjE1MjM0In0KCQkJCSx7IjEyMzQ1NiIsIjE1MjYzNCJ9CQkJCQoJCQkJLHsiMTIzNDU2NyIsIjE1MjYzNzQifQoJCQkJLHsiMTIzNDU2NzgiLCIxNTI2Mzc0OCJ9CgkJCQkseyIxMjM0NTY3ODkiLCIxNTkyNjM3NDgifQoJCQkJfSl7CgkJCVN0cmluZyB0ZXN0ID0gc3RyWzBdOwoJCQlTdHJpbmcgY2hlY2sgPSBzdHJbMV07CgkJCVN0cmluZyBlbmNvZGUgPSB0LmVuY29kZSh0ZXN0KTsKCQkJU3RyaW5nIGRlY29kZSA9IHQuZGVjb2RlKGVuY29kZSk7CgkJCVN5c3RlbS5vdXQucHJpbnRmKCIlcywlcywlcywlc1xuIix0ZXN0LGNoZWNrLGVuY29kZSxkZWNvZGUpOwoJCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKGNoZWNrLCBlbmNvZGUpOwkJCgkJCUFzc2VydC5hc3NlcnRFcXVhbHModGVzdCwgZGVjb2RlKTsJCgkJfQkJCgl9CQoJCn0K