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». Технічно вкладки та нові рядки - це фактично контрольні символи.