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);}}
немінімізований:
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, тому що котлован вимагає їх.
|може використовуватися, якщо у вас є стан або стан, але я не міг знайти спосіб скористатись тим, що призводить до коротшої програми, ніж просто використання |в якості побітового оператора. The|0Змушує мене відчувати себе трохи брудний, тому що це єдина частина , що це NOP просто отримати символ там.
~0врожайність -1, що зручно, тому що саме це нам потрібно перевірити indexOf. Поєднуючи це з використанням !=умовного циклу, виключає <символ взагалі, а значить, не потрібно входити всередину умовного рядка.
0x20від0x7e, які визначаються як «друковані символи ASCII». Технічно вкладки та нові рядки - це фактично контрольні символи.