Java - 126 символов
свести к минимуму:
class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}
unminimized:
class hjq {
public static void main(String... w) {
for (char z = '"'|0; ++z != 'a';) {
if ("'()+.0;=OS".indexOf(z) == ~0) {
System.out.print(z);
}
}
}
}
Это интересная проблема, потому что отдельные токены могут выиграть от их более длинной формы, потому что они повторно используют символы. Например, обычно String[]
будет короче, но String...
устраняет необходимость в квадратных скобках в условной строке.
Я обнаружил, что хитрость заключается в том, чтобы попытаться использовать символы в начале и в конце диапазона, чтобы вы могли исключить их из вывода, просто изменив начало и конец цикла.
Для Java ключевым символом, который следует исключить, является то "
, потому что наличие этого в строке требует его экранирования, что добавляет \
к вашей программе то, что должно идти в строке, которая добавляет \\
. Удаляя "
из вашей условной строки, вы удаляете 4 символа. Это может быть достигнуто, убедившись , что вы используете
и !
и начать свой цикл из #
.
Все строчные буквы появляются ближе к концу диапазона, с только {
, |
, }
и ~
приходить за ними. Из-за многословия Java большинство строчных букв используются только для примера. Точно так же {
и }
тривиально для Java-программы, потому что шаблон требует их.
|
может использоваться, если у вас есть условие или, но я не смог найти способ воспользоваться тем, который приводит к более короткой программе, чем просто использование |
в качестве побитового оператора. Это |0
заставляет меня чувствовать себя немного грязно, потому что это единственная часть, которую нельзя делать, просто чтобы персонаж был там.
~0
доходность -1
, что удобно, потому что это то, что мы должны проверить с indexOf
. Объединение этого с использованием !=
для условного цикла полностью исключает <
символ, что означает, что ему не нужно входить в условную строку.
0x20
от0x7e
, которые определяются как «печатаемые символы ASCII». Технически вкладки и переводы строк на самом деле являются управляющими символами.