Fatigué de la fiabilité du stockage flash, vous avez décidé de stocker tous vos programmes sur l’une de ces vieilles vieilles disquettes de 1 440 Ko. Cependant, après avoir copié pas même 3 000 programmes, le disque était plein. Comment est-ce possible? Habile dans l'art du code-golf tel que vous l'êtes, la plupart de vos programmes ne mesurent même pas 100 octets; il devrait donc rester beaucoup de place ...
Après avoir posé votre question sur Super User, vous découvrez que la taille du cluster du système de fichiers vous a causé du tort , un complot pervers des concepteurs de FAT12 qui laisse une partie importante de votre disquette inutilisée et vous oblige à acheter plus que ce dont vous avez réellement besoin.
Acheter plus de disquettes? Jamais! La taille du cluster sera moins un problème si nous sauvegardons simplement plusieurs programmes dans un seul fichier, ce qui est possible car différents compilateurs / interprètes se comporteront différemment pour le même code source.
Tâche
Ecrivez un polyglotte qui s'intègre dans un seul cluster (512 octets ou moins) et résout le plus grand nombre possible des tâches suivantes.
Lire toutes les entrées et les imprimer.
Imprimer Bonjour le monde! .
Lire une ligne / argument ( nom ) comme entrée et imprimer joyeux anniversaire, [nom]! .
Lire toutes les entrées et imprimer J'aime les onglets! s'il contient un ou plusieurs tabulateurs (0x09) et que je déteste les espaces! si ce n'est pas le cas.
Lisez deux lignes / arguments et imprimez une valeur de vérité si la seconde est une sous-chaîne de la première et une valeur de faux si ce n’est pas le cas.
Lire une ligne / un argument et imprimer une valeur de vérité si ses caractères sont dans un ordre strictement croissant et une valeur de faux si ce n’est pas le cas.
Lire une ligne / un argument et un caractère et imprimer les index de toutes les occurrences de ce caractère.
Lire une ligne / un argument et imprimer l'un des caractères avec le plus grand nombre d'occurrences.
Lire deux nombres entiers compris entre 0 et 255 et imprimer leur somme.
Lire un seul entier compris entre 0 et 255 et imprimer le quotient et le résidu de sa division par 7 .
Lire un seul entier compris entre 1 et 255 et imprimer une valeur de vérité s'il s'agit d'un nombre composé (ni 1 ni premier) et une valeur de faux si ce n'est pas le cas.
Lire un seul entier compris entre 1 et 255 et imprimer une valeur de vérité s'il s'agit d'une puissance de 2 et une valeur de faux sinon.
Lire deux nombres entiers compris entre 0 et 255 et imprimer le plus grand.
Lire un entier décimal compris entre 0 et 255 affiche sa représentation hexadécimale.
Lit un seul entier compris entre 0 et 255 et affiche son poids de Hamming (nombre de 1 bits).
Lire un entier n entre 1 et 13 et imprimer la F n , la n ième nombre de Fibonacci .
Par exemple, pour l’entrée
13
, imprimez233
.
Lire une ligne / argument d'entrée et le cadrer.
Par exemple, pour l'entrée
Programming Puzzles & Code Golf
, imprimez ceci:+---------------------------------+ | Programming Puzzles & Code Golf | +---------------------------------+
Lisez un bloc rectangulaire de caractères et faites-le pivoter d'un quart de tour dans le sens des aiguilles d'une montre.
Par exemple, pour l'entrée
tye xll epb tma id sa s e i r hsn Tiu
imprimer ceci:
This text is simply unreadable
Lire un entier compris entre 1 et 40 et imprimer un losange de la longueur de ce côté.
Par exemple, pour l'entrée
3
, imprimez ceci:/\ / \ / \ \ / \ / \/
Imprimer ceci:
....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ ....@@@@....@@@@....@@@@....@@@@ @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@.... @@@@....@@@@....@@@@....@@@@....
Notation
La réponse qui parvient à incorporer le plus grand nombre de programmes dans un seul fichier qui s'inscrit dans un seul cluster gagne 512 octets. Les liens sont décomposés par le nombre d'octets (plus bas est le meilleur).
Règles supplémentaires
Pour chaque tâche que vous réclamez pour votre partition, le même fichier (octet par octet) doit constituer un programme complet - dans la langue de votre choix - permettant de résoudre cette tâche particulière.
Chaque tâche doit être résolue dans une langue différente.
Les langues sont considérées différentes s'il ne s'agit pas de versions différentes de la même langue. Par exemple, il n'y a qu'un seul JavaScript, un Python et un TI-BASIC, mais C, C ++, Octave et MATLAB sont quatre langages différents.
Le langage sélectionné pour chaque tâche doit satisfaire à notre définition habituelle du langage de programmation .
De plus, la langue doit avoir été publiée et mise en œuvre avant le 9 septembre 2015.
Votre compilateur / interprète peut ne nécessiter aucun indicateur non standard pour produire le comportement attendu.
Les exceptions à cette règle incluent les indicateurs requis pour spécifier une langue particulière, pour lire le programme à partir d'un fichier (unique) ou pour supprimer une bannière.
L'entrée de chaque tâche comprendra des caractères ASCII imprimables (0x20 à 0x7E) et des sauts de ligne (0x0A) sans dépasser 255 octets de longueur.
Tous les nombres entiers peuvent être lus en décimal ou unaire, sauf indication contraire dans la tâche.
Le comportement pour une entrée non valide n'est pas défini.
Vous pouvez lire les entrées de STDIN (ou de son alternative la plus proche) ou sous forme d'arguments de ligne de commande.
Si une tâche nécessite la lecture de deux entrées, vous pouvez les lire - dans n'importe quel ordre - séparées par un séparateur d'un octet de votre choix, en tant qu'arguments de ligne de commande distincts ou l'un de STDIN et l'autre en tant qu'argument de ligne de commande.
Si l'une des pièces d'entrée est une ligne, le seul séparateur possible est un saut de ligne.
Imprimez la sortie sur STDOUT (ou l’alternative la plus proche). Toutes les sorties sur STDERR seront ignorées.
Les règles standard de code-golf s'appliquent à chaque tâche .
Cela inclut notamment les échappatoires interdites par défaut , à l'exception du codage en dur de la sortie , qui est explicitement autorisée pour ce défi.
2>/dev/null
et obtenons la sortie correcte sur stdout, tout va bien? Juste pour être sûr.