По мотивам вчерашнего поста |
[Jul. 27th, 2018|11:58 am] |
В принципе, эту хуйню можно сделать и не взорвав пердак стек, но System.exit это читерство. Зато без if-ов и сравнений, а если с результатом нужно что-то сделать, результат можно и куда-нибудь бросить. На этом со школозадачами пожалуй всё, а в нешколозадачи я не умею.
static int[] etoPizdec = new int[Character.MAX_VALUE + 1];
static {
etoPizdec[0] = -1;
}
static int zeroOne(int x) {
return etoPizdec[x] + 1;
}
static void reverse(char[] string) {
Consumer<Integer>[] lengthAndRevert = new Consumer[2];
lengthAndRevert[1] = l -> {};
lengthAndRevert[0] = l -> {
char[] reversed = new char[l];
BiConsumer<Integer, Integer>[] revertor = new BiConsumer[2];
revertor[1] = (sPos, rPos) -> reversed[rPos] = string[sPos];
revertor[0] = (sPos, rPos) -> {
System.out.println(reversed);
System.exit(665);
};
int sPos = 0;
int rPos = l - 2;
while (true) {
BiConsumer<Integer, Integer> f = revertor[zeroOne(string[sPos])];
f.accept(sPos, rPos);
sPos++;
rPos--;
}
};
int length = 0;
int sPos = 0;
while (true) {
length++;
lengthAndRevert[zeroOne(string[sPos])].accept(length);
sPos++;
}
}
while (true) тут оставлен умышленно (хотя можно было бы точно так же возвращать значение функции или значение из масива и выходить из цикла kulturno), так как я засчитываю это за неявную условную операцию, а goto у меня для вас нет. |
|
|