Des lignes directrices
Tâche
Écrivez une méthode qui prend en entrée un tableau de lettres consécutives (croissantes) et qui renvoie la lettre manquante dans le tableau (liste dans certaines langues).
Règles
- C'est le golf de code, donc la réponse la plus courte en octets gagne!
- Vous obtiendrez toujours un tableau valide
- Il manquera toujours exactement une lettre
- La longueur du tableau sera toujours d'au moins 2.
- Le tableau contiendra toujours des lettres dans un seul cas (majuscule ou minuscule)
- Vous devez sortir dans le même cas (majuscule ou minuscule) que l'entrée est
- Le tableau n'ira toujours qu'une lettre à la fois (en sautant la lettre manquante)
- La longueur du tableau sera comprise entre 2 et 25
- Le premier ou le dernier élément du tableau ne sera jamais manquant
Exemples
['a','b','c','d','f'] -> 'e'
['O','Q','R','S'] -> 'P'
['x','z'] -> 'y'
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','w','x','y','z'] -> 'v'
code-golf
array-manipulation
alphabet
Amorris
la source
la source
['a','b','c','d','f','g']
, la sortie['e']
, si cela rend le code plus court?Réponses:
Pyth , 5 octets
Essayez-le en ligne!
la source
C # (.NET Core) ,
48 4746 octets, entrée en tant que tableau de caractèresEssayez-le en ligne!
Explication: le premier élément du tableau est incrémenté ainsi qu'un pointeur itérant les éléments suivants. Lorsque le premier élément et l'élément actuel sont différents, il renvoie le premier élément.
C # (.NET Core) ,
58 5650 octets, entrée sous forme de chaîneEssayez-le en ligne!
Solution précédente de 58 octets (référencée dans le premier commentaire):
Algorithmes utilisant System.Linq
Les algorithmes suivants doivent ajouter
using System.Linq;
(18 octets) au nombre d'octets et sont donc plus longs.J'ai bien aimé celui-ci (52 + 18 octets):
Et vous avez également une solution à une ligne (45 + 18) octets:
Et une solution très intelligente (37 + 18) octets, gracieuseté d'Ed'ka:
la source
s[i]-s[0]
, assez intelligent!for
boucle n'a pas de condition d'arrêt, il continuera donc à itérer jusqu'à ce que laif
condition soit évaluéetrue
.a=>{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
(lorsque vous prenez l'entrée commechar[]
). Pas grâce à moi btw, grâce au commentaire de @Nevay sur ma réponse Java 8 .s=>s.Select(e=>++e).Except(s).First()
Alice , 10 octets
Essayez-le en ligne!
Explication
Ceci est juste un cadre pour les programmes linéaires qui fonctionnent entièrement en mode Ordinal (traitement de chaîne):
Le code linéaire réel est alors:
Qui fait:
la source
Haskell ,
3330 octetsEssayez-le en ligne!
la source
until
enregistre un octet:f(a:b)=until(`notElem`a:b)succ a
Ruby, 21 caractères
Renvoie un tableau d'éléments unique, selon le commentaire du propriétaire de la question .
Exemple d'exécution:
Essayez-le en ligne!
la source
Java 8,
7057564846 octets-14 (70 → 56) et -2 (48 → 46) octets grâce à @CarlosAlejo .
-8 (56 → 48) octets grâce à @Nevay .
Explication:
Essayez-le ici.
la source
a->{int i=0;for(;a[++i]-a[0]<=i;);return--a[i];}
.C (gcc) , 33
35364860octetsToutes les optimisations doivent être désactivées et uniquement sur GCC 32 bits.
Prenez l'entrée comme une chaîne.
Essayez-le en ligne!
la source
foo(char*a){return*a+1==a[1]?foo(a+1):++*a;}
c'est assez bon; Seulement 1 caractère plus court que le plus naturelfoo(char*a){while(*a+1==a[1])a++;return++*a;}
Python 3 ,
7462584440 octets-12 octets grâce à Erik l'Outgolfer. -18 octets grâce à Leaky Nun. -4 octets grâce à musicman523.
Prend l'entrée comme un bytestring.
Essayez-le en ligne!
Une autre solution intéressante:
la source
.difference({*s})
->-{*s}
Mathematica, 46 octets
la source
Min@Complement[CharacterRange@@#[[{1,-1}]],#]&
cela économiserait un octet.JavaScript (ES6), 70 octets
Saisie sous forme de tableau de caractères
Moins golfé
Tester
la source
PHP> = 7,1, 46 octets
Prendre l'entrée comme chaîne
PHP Sandbox Online
la source
Rétine ,
3325 octetsEssayez-le en ligne! Fonctionne avec n'importe quelle plage de caractères ASCII. Edit: 8 octets enregistrés grâce à @MartinEnder. Explication: La première étape duplique l'entrée. La seconde diminue tous les caractères de la copie de 1 point de code. La troisième étape supprime tous les caractères de la copie qui apparaissent toujours dans l'original. Cela laisse juste l'entrée d'origine, le caractère qui précède le premier caractère de l'entrée d'origine et le caractère manquant. La dernière étape correspond alors juste au personnage manquant.
la source
SWI Prolog, 124 octets
Exemples:
Petite explication:
C'est
m
la procédure "principale", len
produit le prochain caractère attendu dans la liste. Lac
comparaison ne - si l'attente correspond à l'élément suivant, continuez, sinon imprimez le caractère attendu et sautez par la fenêtre.la source
fail
:0=1
.C ++ 14, bibliothèque standard, type de conteneur générique (
8786 octets)Le type de conteneur de l'espace de noms
::std
est supposé (par exemplestd::string
,std::list
oustd::vector
. Sinonusing namespace std;
ou similaire serait supposé.Le voir Live On Coliru
C ++ 14 pas de bibliothèque standard (toujours générique,
6463 octets)Encore une fois, vous ne devez aider à la recherche de noms que si le type de conteneur ne provient pas de l'espace de noms
::std
(ou ne lui est pas associé)Live On Colirupar
std::string
exempleLive On Colirupar
char const[]
exemplela source
Fusain , 18 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée sous forme de chaîne. Fonctionne avec n'importe quelle séquence presque contiguë de caractères ASCII.
la source
C #, 104 octets
Version complète / formatée:
la source
s=>s.Select(e=>++e).Except(s).First()
MATL,
87 octets1 octet enregistré grâce à @Luis
Essayez-le sur MATL Online
Explication
la source
Excel, 110 + 2 = 112 octets
Doit être entré sous la forme d'une formule matricielle ( Ctrl+ Shift+ Enter) qui ajoute des accolades
{ }
à chaque extrémité, en ajoutant deux octets. L'entrée est sous forme de chaîneA1
, ce qui est OK par OP .Ce n'est pas de loin la réponse la plus courte (Excel l'est rarement) mais j'aime voir si cela peut être fait.
la source
Rexx (Regina) , 56 octets
Essayez-le en ligne!
Enfin un qui permet à REXX d'utiliser sa forte manipulation de chaînes.
la source
CJam , 6 octets (programme complet) / 7 octets (bloc de code)
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:
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 étaitcdfgh
, alors après),
la pile contiendrait les chaînescdfg
(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-dessousa
(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éecdfg
, le résultat après),^
sera...abe
, où correspond à...
nouveau un groupe de caractères avec les codes ASCII ci-dessousa
. Enfin,W=
extrait juste le dernier caractère de cette chaîne, qui est exactement le caractère manquante
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)
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.
la source
q
(programme) ou{...}
(bloc). +1 pour l'approche cependantHusk , 6 octets
Essayez-le en ligne!
Cette fonction prend une chaîne (liste de caractères) en entrée et renvoie un caractère en sortie.
Explication
la source
Python 2 - 76 octets
Perd à la solution python 2 existante mais c'est une approche légèrement différente, donc j'ai pensé que je la publierais quand même:
la source
8ème , 99 octets
Raisonnement
Si la distance entre les lettres est supérieure à deux, il manque une lettre. La distance entre les lettres est obtenue en calculant la différence entre le code ASCII de chaque lettre.
Code
Version non golfée
Utilisation et exemples
la source
JavaScript (ES6), 64 octets
Prend l'entrée sous forme de chaîne.
Comment?
Initialisation: Nous commençons par n = 0 et p = 0 et appelons la fonction récursive g () .
Étape # 1: Nous incrémentons n jusqu'à ce qu'il
c = String.fromCharCode(n)
soit égal au premier caractère de la chaîne d'entrée s [0] .Étape # 2: Maintenant que nous sommes synchronisés, nous incrémentons simultanément n et p jusqu'à ce que
c = String.fromCharCode(n)
ne soit plus égal à s [p] .Étape # 3: Nous retournons c : le caractère attendu qui n'a pas été trouvé.
Cas de test
Afficher l'extrait de code
la source
J, 20 octets
a.e.
masque booléen pour les lettres d'entrée à travers le jeu de caractères ascii1 0 1&E.
nouveau masque booléen indiquant si la séquence101
commence à cet index, c'est-à-dire trouver n'importe quel endroit où une séquence "sauter" commenceI.
l'index de cette correspondance, c'est-à-dire le caractère avant celui ignoré>:
incrémenter de 1, c.-à-d. l'indice du caractère ignoré dans le jeu de caractères ascii{&a.
choisir cet index dans le jeu de caractères ascii, c'est-à-dire renvoyer le caractère ignoréEssayez-le en ligne!
la source
ES6, 125 octets:
http://jsbin.com/vasoqidawe/edit?console
La fonction retournée doit être appelée avec un tableau
on pourrait économiser encore 9 octets en supprimant .join ("") et en passant une chaîne:
ES6, 108 octets:
http://jsbin.com/tudiribiye/edit?console
la source
a.join("")
pourrait êtrea.join``
Lisp commun, 88 octets
Essayez-le en ligne!
la source
Python 2 , 69 octets
Essayez-le en ligne!
Quelques explications Comme nous connaissons le premier et le dernier élément de la liste, nous pouvons facilement calculer la somme des codes de tous les caractères du
list + the missed char
(en utilisant des formules récapitulatives de progression arithmétique ). La différence entre cette somme et la somme des codes de tous les caractères dulist
donne le code de la lettre manquée.la source
05AB1E ,
97 octetsEssayez-le en ligne!
la source
2
que nous utilisons le même algorithme, même si je connais à peine 05AB1E :)APL (Dyalog) , 17 octets
Essayez-le en ligne!
⎕AV∘∊
Booléenne: chaque caractère dans le A tomic V membre ector (jeu de caractères) de l'argument?(
…)
Appliquez la fonction tacite suivante:⊃
le premier élément de⎕AV
l' A tomic V (le jeu de caractères)/⍨
lequel∨\
suit l'initiale (membre de l'argument)∧
mais~
n'est pas (un membre de l'argument)la source