CJam , 6 octets (programme complet) / 7 octets (bloc de code)
q),^W=
Essayez-le en ligne!
Il s'agit d'un programme CJam complet qui lit la chaîne d'entrée de l'entrée standard et imprime la lettre manquante sur la sortie standard. CJam n'a pas réellement de "méthodes", ce que demande le défi, mais le plus proche serait probablement un bloc de code exécutable, comme ceci:
{),^W=}
Essayez-le en ligne!
Ce bloc de code, une fois évalué, prend l'entrée sous forme de chaîne (c'est-à-dire un tableau de caractères) sur la pile, et renvoie également le caractère manquant sur la pile.
Explication: Dans le programme complet, q
lit la chaîne d'entrée et la place sur la pile. )
saute ensuite le dernier caractère de la chaîne d'entrée, et l'opérateur de plage le ,
transforme en un tableau contenant tous les caractères avec des points de code en dessous (y compris toutes les lettres avant dans l'alphabet). Ainsi, par exemple, si l'entrée était cdfgh
, alors après ),
la pile contiendrait les chaînes cdfg
(c'est-à-dire l'entrée avec la dernière lettre supprimée) et ...abcdefg
, où ...
représente un tas de caractères avec les codes ASCII ci-dessous a
(c'est-à-dire tous les caractères sous la dernière entrée supprimée lettre).
L'opérateur de différence d'ensemble symétrique ^
combine ensuite ces chaînes en une seule chaîne qui contient exactement les caractères qui apparaissent dans l'une des chaînes, mais pas dans les deux. Il préserve l'ordre dans lequel les caractères apparaissent dans les chaînes, donc pour l'exemple d'entrée cdfg
, le résultat après ),^
sera ...abe
, où correspond à ...
nouveau un groupe de caractères avec les codes ASCII ci-dessous a
. Enfin, W=
extrait juste le dernier caractère de cette chaîne, qui est exactement le caractère manquant e
que nous voulions trouver (et élimine le reste). À la fin du programme, l'interpréteur CJam imprime implicitement le contenu de la pile.
Bonus: GolfScript , 6 octets (programme complet)
),^-1>
Essayez-le en ligne!
Il s'avère que presque le même code fonctionne également dans GolfScript. Nous économisons un octet dans la version complète du programme en raison de l'entrée implicite de GolfScript, mais perdons un octet car, contrairement à CJam W
, GolfScript n'a pas de variable à une seule lettre pratique initialisée à -1.
En outre, CJam a des types d'entier et de caractères distincts (et les chaînes ne sont que des tableaux contenant des caractères), tandis que GolfScript n'a qu'un seul type d'entier (et a un type de chaîne spécial qui se comporte quelque peu différemment des tableaux normaux). Le résultat de tout cela est que, si nous voulons que l'interpréteur GolfScript imprime la lettre manquante réelle au lieu de son numéro de code ASCII, nous devons renvoyer une chaîne de caractères unique au lieu du seul caractère lui-même. Heureusement, effectuer ce changement ici nécessite simplement de remplacer l'opérateur d'indexation =
par l'opérateur de troncature gauche tableau / chaîne >
.
Bien sûr, grâce aux E / S implicites de GolfScript, le code ci-dessus peut également être utilisé comme un extrait de code qui lit une chaîne de la pile et renvoie une chaîne à un caractère contenant la lettre manquante. Ou plutôt, tout extrait qui prend une seule chaîne sur la pile comme argument et renvoie sa sortie sous forme de chaîne imprimable sur la pile, est également un programme GolfScript complet.