/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static String duplicatePrefix
(final String source,
final int prefixLength,
final int count
) { if (source == null || source.length() == 0 || prefixLength <= 0 || count <= 0) {
return "";
}
final int actual
= Math.
min(source.
length(), prefixLength
); final int size = actual * count;
final char[] results = new char[size];
// copy the first prefix to the output
source.getChars(0, actual, results, 0);
// duplicate the previously populated chars as often as needed.
int currentpos = actual;
while (currentpos < size) {
// copy as much as you can, limited by the available space to copy to.
System.
arraycopy(results,
0, results, currentpos,
Math.
min(currentpos, size
- currentpos
)); // double the current position
currentpos <<= 1;
System.
out.
println("Currently writing to " + currentpos
); }
}
{
System.
out.
println(duplicatePrefix
("Hello World",
5,
10)); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQpwdWJsaWMgc3RhdGljIFN0cmluZyBkdXBsaWNhdGVQcmVmaXgoZmluYWwgU3RyaW5nIHNvdXJjZSwgZmluYWwgaW50IHByZWZpeExlbmd0aCwgZmluYWwgaW50IGNvdW50KSB7CiAgICBpZiAoc291cmNlID09IG51bGwgfHwgc291cmNlLmxlbmd0aCgpID09IDAgfHwgcHJlZml4TGVuZ3RoIDw9IDAgfHwgY291bnQgPD0gMCkgewogICAgICAgIHJldHVybiAiIjsKICAgIH0KCiAgICBmaW5hbCBpbnQgYWN0dWFsID0gTWF0aC5taW4oc291cmNlLmxlbmd0aCgpLCBwcmVmaXhMZW5ndGgpOwogICAgZmluYWwgaW50IHNpemUgPSBhY3R1YWwgKiBjb3VudDsKICAgIGZpbmFsIGNoYXJbXSByZXN1bHRzID0gbmV3IGNoYXJbc2l6ZV07CiAgICAvLyBjb3B5IHRoZSBmaXJzdCBwcmVmaXggdG8gdGhlIG91dHB1dAogICAgc291cmNlLmdldENoYXJzKDAsIGFjdHVhbCwgcmVzdWx0cywgMCk7CiAgICAvLyBkdXBsaWNhdGUgdGhlIHByZXZpb3VzbHkgcG9wdWxhdGVkIGNoYXJzIGFzIG9mdGVuIGFzIG5lZWRlZC4KICAgIGludCBjdXJyZW50cG9zID0gYWN0dWFsOwogICAgd2hpbGUgKGN1cnJlbnRwb3MgPCBzaXplKSB7CiAgICAgICAgLy8gY29weSBhcyBtdWNoIGFzIHlvdSBjYW4sIGxpbWl0ZWQgYnkgdGhlIGF2YWlsYWJsZSBzcGFjZSB0byBjb3B5IHRvLgogICAgICAgIFN5c3RlbS5hcnJheWNvcHkocmVzdWx0cywgMCwgcmVzdWx0cywgY3VycmVudHBvcywgTWF0aC5taW4oY3VycmVudHBvcywgc2l6ZSAtIGN1cnJlbnRwb3MpKTsKICAgICAgICAvLyBkb3VibGUgdGhlIGN1cnJlbnQgcG9zaXRpb24KICAgICAgICBjdXJyZW50cG9zIDw8PSAxOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ3VycmVudGx5IHdyaXRpbmcgdG8gIiArIGN1cnJlbnRwb3MpOwogICAgfQogICAgcmV0dXJuIG5ldyBTdHJpbmcocmVzdWx0cyk7Cn0KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN5c3RlbS5vdXQucHJpbnRsbihkdXBsaWNhdGVQcmVmaXgoIkhlbGxvIFdvcmxkIiwgNSwgMTApKTsKCX0KfQ==