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». Технически вкладки и переводы строк на самом деле являются управляющими символами.