Java - 126 znaków
zminimalizowane:
class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}
niezminimalizowane:
class hjq {
public static void main(String... w) {
for (char z = '"'|0; ++z != 'a';) {
if ("'()+.0;=OS".indexOf(z) == ~0) {
System.out.print(z);
}
}
}
}
Jest to interesujący problem, ponieważ poszczególne tokeny mogą skorzystać z ich dłuższej formy, ponieważ ponownie wykorzystuje znaki. Na przykład normalnie String[]
byłby krótszy, ale String...
eliminuje potrzebę nawiasów kwadratowych w ciągu warunkowym.
Znalazłem sztuczkę polegającą na próbie użycia znaków na początku i na końcu zakresu, aby można było wykluczyć je z wyjścia, zmieniając początek i koniec pętli.
W Javie kluczowym znakiem, który należy wykluczyć, jest to "
, że posiadanie go w ciągu wymaga ucieczki, co dodaje \
do twojego programu, który musi iść w ciągu, który dodaje \\
. Usuwając "
z ciągu warunkowego, usuwasz 4 znaki. Można to osiągnąć poprzez zapewnienie korzystania
i !
i rozpoczęcie od pętli #
.
Wszystkie małe litery pojawiają się pod koniec zakresie, a tylko {
, |
, }
a ~
idzie za nimi. Ze względu na gadatliwość Javy większość małych liter jest używana tylko na płycie głównej. Podobnie {
i }
są trywialne dla programu Java, ponieważ wymaga ich płyta podstawowa.
|
może być użyty, jeśli masz warunek lub warunek, ale nie mogłem znaleźć sposobu, aby skorzystać z takiego, który prowadzi do krótszego programu, niż użycie go |
jako operatora bitowego. To |0
sprawia, że czuję się trochę brudny, ponieważ jest to jedyna część, która polega na tym, aby wprowadzić tam postać.
~0
plony -1
, co jest przydatne, ponieważ to właśnie musimy sprawdzić indexOf
. Połączenie tego z użyciem !=
warunkowej pętli <
całkowicie eliminuje znak, co oznacza, że nie musi on wchodzić do ciągu warunkowego.
0x20
do0x7e
, które są określane jako „znaków ASCII”. Technicznie zakładki i znaki nowej linii są w rzeczywistości znakami kontrolnymi.