Java - 126 caractères
minimisé:
class hjq{public static void main(String...w){for(char z='"'|0;++z!='a';)if("'()+.0;=OS".indexOf(z)==~0)System.out.print(z);}}
non minimisé:
class hjq {
public static void main(String... w) {
for (char z = '"'|0; ++z != 'a';) {
if ("'()+.0;=OS".indexOf(z) == ~0) {
System.out.print(z);
}
}
}
}
Ceci est un problème intéressant, car les jetons individuels pourraient bénéficier de leur forme plus longue car ils réutilisent des caractères. Par exemple, normalement String[]
serait plus court, mais String...
supprime la nécessité des crochets dans la chaîne conditionnelle.
J'ai trouvé que le truc était d'essayer d'utiliser des caractères au début et à la fin de la plage pour pouvoir les exclure de la sortie simplement en modifiant le début et la fin de votre boucle.
Pour Java, un caractère de clé à exclure est "
, car avoir cela dans la chaîne nécessite de l'échapper, ce qui ajoute \
à votre programme, ce qui doit aller dans la chaîne, ce qui ajoute \\
. En supprimant "
de votre chaîne conditionnelle, vous supprimez 4 caractères. Ceci peut être réalisé en veillant à ce que vous utilisez
et !
et démarrer votre boucle à partir #
.
Toutes les lettres minuscules apparaissent à la fin de la plage, avec seulement {
, |
, }
et à ~
venir après eux. En raison de la verbosité de Java, la plupart des lettres minuscules sont utilisées uniquement pour le passe-partout. De même, {
et }
sont triviales pour un programme Java, parce que le passe-partout les requiert.
|
peut être utilisé si vous avez une condition ou, mais je ne trouvais pas le moyen de tirer parti d’une condition qui conduirait à un programme plus court qu’un simple emploi en |
tant qu’opérateur au niveau du bit. La |0
me fait me sentir un peu sale, car il est la seule partie qui est un nop juste pour obtenir le caractère là - dedans.
~0
les rendements -1
, ce qui est pratique car c’est ce que nous devons vérifier indexOf
. En combinant ceci avec l'utilisation !=
de la boucle conditionnelle, le <
caractère est totalement éliminé , ce qui signifie qu'il n'est pas nécessaire d'entrer dans la chaîne conditionnelle.
0x20
de0x7e
, qui sont définis comme les "caractères ASCII imprimables". Techniquement, les onglets et les nouvelles lignes sont en réalité des caractères de contrôle.