Les hippocampes ont bien sûr besoin de chaussures. Cependant, un hippocampe, n'ayant qu'une seule queue, n'a besoin que d'une seule chaussure. Malheureusement, les chaussures ne viennent que par paires. L'argent est limité pour le gouvernement des hippocampes, ils doivent donc acheter le moins de paires possible. Chaque hippocampe a une pointure x où x est un entier positif. Cependant, un hippocampe peut porter une chaussure de taille x - 1 ou x + 1 si besoin est.
Votre tâche consiste à produire le nombre minimum de paires que le gouvernement des hippocampes doit acheter pour mettre des chaussures sur tous leurs hippocampes.
Vous pouvez saisir des informations comme vous le souhaitez, des failles standard, etc.
Comme il s'agit de code-golf , le code le plus court en octets l'emporte.
Cas de test
2 4 6 6 8 14 -> 4
2 1 3 1 1 -> 3
4 1 4 9 1 8 9 1 8 4 -> 6
1 2 3 5 7 8 10 12 -> 4
Réponses:
05AB1E , 13 octets
Utilise l'approche OP décrite dans les commentaires.
Essayez-le en ligne!
Explication
la source
Coque ,
1514 octetsUtilise l'algorithme gourmand: trier et coupler à partir de la gauche. Essayez-le en ligne!
Merci à Leo d'avoir économisé 1 octet.
Explication
Il s'agit de la première réponse Husk qui utilise
Γ
la fonction de motif correspondant à une liste. Dans ce cas d'utilisation, sia
est une valeur etg
est une fonction,Γag
correspond alors à la fonctionf
définie par l'extrait de code HaskellJe définis le cas de base comme
a = 0
etoù
line0
fait référence à la ligne entière. Dans le code Husk,x
etxs
sont des arguments implicites à la fonction lambda, etline0
est₀
. La liste est à nouveau triée à chaque appel récursif, mais cela n'a pas d'importance dans un défi de golf.la source
Python 3 ,
696660 octets9 octets grâce à xnor.
Essayez-le en ligne!
la source
a.sort()
.lambda
:f=lambda a:a[1:a.sort()]and-~f(a[1+(a[1]-a[0]<3):])or len(a)
or[]<a
pour économiser 3 octetsGelée ,
2018 octetsEssayez-le en ligne!
Fork de ma réponse Python .
la source
IḢ<3+2⁸ṫß‘µLḊ?
(fondamentalement, je ne vois aucune raison de le faireṢ
avantL
, etḊ
je retournerais[]
si la liste était de longueur 1 ou 0, puis je peux supprimer unµ
deLµḊ?
)Ṣ
à mon golf si je comprends bien.Python 2 , 49 octets
Essayez-le en ligne!
Basé sur la solution récursive de Leaky Nun .
Python 2 , 59 octets
Essayez-le en ligne!
Itère les tailles
x
dans l'ordre trié. Se souvient du seuil supérieurp
pour la taille actuelle à la paire avec la précédente. Si tel est le cas (x>p
), réinitialisez le seuil à0
pour empêcher le jumelage du suivant. Sinon, augmentez le nombre de sortiesc
et définissez le seuil suivantp
surx+2
.Le nouveau seuil
p=(x>p)*(x+2)
est une expression gonflée. J'aimerais trouver un moyen de le raccourcir.la source
C #,
111108137102 octetsCela ne gagnera jamais mais je voulais quand même résoudre l'exercice:
Grâce au commentaire de @grabthefish, j'ai pu grignoter quelques octets de plus:
En suivant les règles C&C spéciales de PC&G:
Utilisation d'une fonction lambda:
la source
Perl, 113 octets
Prend la liste des arguments de la ligne de commande (as
@ARGV
), imprimeSTDOUT
par défaut.À Seahorseville ...
UNE quartier est une séquence de pointures de chaussures voisines. Une fois triés, chaque hippocampe a des voisins immédiats qui peuvent partager la même taille de chaussure. Il peut y avoir plusieurs voisins dans le quartier et aucun voisin ne peut différer de plus de deux:
par exemple
3 3 4 5 5 6
est un seul quartier2 4 6 6
, et1 2 3 5 7 8 10 12
1 1 1 4 5 6
contient par exemple deux quartiers:1 1 1
et4 5 6
.Base de l'algorithme
Il existe deux types de quartiers:
De taille égale
Pour ceux-ci, les
n/2
paires sont toujours suffisantes:Par exemple,
3 3 4 5 5 6
nécessite trois paires pour3 3
,4 5
et5 6
De taille bizarre
Pour ceux-ci, les
ceil(n/2)
paires sont toujours suffisantes:par exemple ,
12 13 13 14 15
nécessite trois paires pour12 13
,13 14
et15
seul.Code non golfé pour tester l'algorithme
Exemples de résultats
(Quartiers fermés
[ ]
)la source
Mathematica, 67 octets
Essayez dans le bac à sable Wolfram .
la source
UpTo
Perl, 103 octets
Prend la liste des arguments de la ligne de commande (as
@ARGV
), imprime versSTDOUT
par défaut.Il s'agit d'une approche alternative, basée sur la relation suivante:
(Voir cette réponse pour la définition du quartier )
la source
Javascript, 67 octets
Exemple d'extrait de code:
la source