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 |0sprawia, że czuję się trochę brudny, ponieważ jest to jedyna część, która polega na tym, aby wprowadzić tam postać.
~0plony -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.
0x20do0x7e, które są określane jako „znaków ASCII”. Technicznie zakładki i znaki nowej linii są w rzeczywistości znakami kontrolnymi.