Votre objectif : écrire un morceau de code qui donnera le résultat classique de "Hello, world!" en cours d'impression sur STDOUT ou équivalent.
Règles : Le code doit être entièrement imprimé en ASCII. Tout le code doit être fonctionnel - la suppression de tout caractère de comptage unique doit modifier le résultat ou empêcher le code de fonctionner. Toutes les variables doivent être utilisées après l'affectation. Les littéraux de caractère et de chaîne doivent être nécessaires à la sortie - c'est-à-dire que le remplacement de tout littéral de caractère ou de tout caractère dans un littéral de chaîne par un autre caractère doit être capable de changer le résultat (et non via l'effet de la séquence d'échappement - remplacer le caractère par une barre oblique inverse) ou équivalent)
(REMARQUE: la règle finale a été modifiée dans)
Scoring : C'est là que ça devient intéressant. Le score le plus élevé l'emporte en fonction du nombre de caractères, selon les règles de bowling de code typiques. Mais l'utilisation répétée de caractères entraînera des déductions de points. Plus précisément...
- L'utilisation répétée de tout caractère alphanumérique (az, AZ, 0-9) entraînera une déduction de 3 points par répétition (la première utilisation n'entraîne pas de déduction).
- L'utilisation répétée de la ponctuation de base ([!? .-, ": ';]) - y compris les crochets - entraînera une déduction de 2 points par répétition.
- L'utilisation répétée d'autres caractères ASCII {`~ @ # $% ^ & * _ + = | \ /> <} - y compris les accolades - entraînera une déduction de 4 points par répétition.
- L'utilisation répétée d'espaces, de tabulations et de nouvelles lignes entraînera une déduction de 1 point par répétition. Autrement dit, seule la première utilisation d'un espace, d'un onglet ou d'une nouvelle ligne comptera pour votre total.
Remarque: les commentaires ne comptent pas dans le total, bien que les caractères marquant le début / la fin d'un commentaire le soient. Par exemple, en C / C ++, si vous en avez /* This is a comment */
, alors il comptera deux barres obliques et deux astérisques, mais rien entre eux.
Quelques exemples (remarque: utiliser Julia comme exemple de langue) ...
print("Hello, world!");
Nombre total de caractères visibles: 22
Contient un espace: +1
Alphanumériques répétés: -12 pour llor Ponctuation
répétée: -2 pour "
Score final: 22 + 1-12-2 = 9
print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII
Nombre total de caractères: 43 (ne compte aucun caractère après #, qui est le caractère de commentaire)
Contient un espace: +1
Alphanumériques répétés: -18 pour rr1008 Ponctuation
répétée: -24 pour () "" "" ",,,,,
Final score: 43 + 1-24-18 = 2
xy=STDOUT
m="Hello, world!"
print(xy,m);
Nombre total de caractères visibles: 37
Contient une nouvelle ligne: +1
Contient un espace: +1
Alphanumériques répétés: -18 pour xyllor Ponctuation
répétée: -4 pour ",
Autres ASCII répétés: -4 pour =
Score final: 37 + 1 + 1-18-4 -4 = 13
Quelques morceaux de code invalides ...
x=2;print("Hello,world!")
Problème: x
est attribué, mais pas utilisé.
print("Hello,"*" world!")
Problème: *
inutile, le résultat sera le même sans lui.
k=1
if k>0
print("Hello, world!")
else
print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end
Problème: la deuxième print
commande ne s'exécutera pas. De plus, la suppression des caractères entre guillemets dans la deuxième print
commande ne changera pas la sortie.
x="Hello, world!";
print(x)
Problème: la suppression de la nouvelle ligne ne changera pas le résultat ou ne provoquera pas d'erreur (dans Julia, le point-virgule n'est nécessaire que si plusieurs commandes sont sur la même ligne, sinon supprime simplement la valeur de retour).
print("Hellos\b, world!")
Problème: le s
caractère n'affecte pas le résultat, car il est effacé par \b
. Ceci est acceptable si cela se fait via le code ( "Hello",char(100),"\b, world!"
), mais ne peut pas être fait via des littéraux de chaîne ou des littéraux de caractère.
Calculatrice de score pratique - http://jsfiddle.net/4t7qG/2/ - grâce à Doorknob