Un sac , également appelé multiset, est une collection non ordonnée. Vous pouvez l'appeler un ensemble qui autorise les doublons, ou une liste (ou un tableau) qui n'est pas ordonnée / indexée. Dans ce défi, il vous est demandé de mettre en œuvre des opérations de sacs: addition, différence, multiplication, division, comptage et test d'égalité.
Les opérations
Les opérations spécifiées peuvent ne pas être conventionnelles.
- addition combine deux sacs en un, conservant le nombre total de chaque valeur
[1,2,2,3] + [1,2,4] = [1,1,2,2,2,3,4]
- la différence supprime d'un sac chaque élément d'un autre sac, ou ne fait rien si aucun de ces éléments
[1,2,2,4] - [1,2] = [2,4]
[1,2,3] - [2,4] = [1,3]
- la multiplication multiplie chaque élément du sac.
[1,2,3,3,4] * 3 = [1,1,1,2,2,2,3,3,3,3,3,3,4,4,4]
2 * [1,3] = [1,1,3,3]
- la division est rare: chaque élément n égal est placé dans n nouveaux sacs égaux, les éléments qui ne peuvent pas former un groupe n restent dans le sac. Retournez l'un des n nouveaux sacs.
[1,1,2,2,2] / 2 = [1,2]
[1,2,2,3,3,3] / 3 = [3]
- compter compter combien de sacs diviseurs peuvent être produits à partir du sac de dividendes
[1,1,2,2,2,2,3,3,3] c [1,2,3] = 2
- test d'égalité vérifie si deux sacs ont le même numéro de chaque élément
[1,2,2,3] == [3,2,1,2] = truthy
[1,2,3] == [1,2,2,3] = falsy
(peut également être utilisé=
pour cela)
Si vous utilisez vos propres symboles pour les opérateurs, veuillez préciser.
Les formats
Les sacs seront affichés sous forme de listes du formulaire [1,1,2,3,4]
. Vous pouvez utiliser n'importe quel autre support que les carrés, ou même utiliser des guillemets, ou rien du tout. Les éléments seront des entiers (mathématiquement, pas nécessairement int
) aux fins de cette question. Les sacs n'ont pas besoin d'être triés.
Le format d'entrée sera deux sacs ou un sac et un entier, avec un opérateur. Vous pouvez spécifier votre propre format tant qu'il contient ces trois formats.
Le format de sortie doit être un seul sac du même format.
Règles
- vous ne pouvez pas utiliser de fonctions, d'opérations ou de bibliothèques intégrées (y compris la bibliothèque standard) qui les mettent déjà en œuvre; il est cependant correct d'utiliser la concaténation et la multiplication de listes, car ce sont par définition des opérations de liste, et non des opérations de sac (qui font essentiellement la même chose)
- les échappatoires standard s'appliquent
- réponse la plus courte gagne
Cas de test
[1,2,2,3] + [1,2,4]
[1,1,2,2,2,3,4]
[1,2,2,4] - [1,2]
[2,4]
[1,2,3] - [2,4]
[1,3]
[1,2,3,3,4] * 3
[1,1,1,2,2,2,3,3,3,3,3,3,4,4,4]
2 * [1,3]
[1,1,3,3]
[1,1,2,2,2] / 2
[1,2]
[1,2,2,3,3,3] / 3
[3]
[1,1,2,2,2,2,3,3,3] c [1,2,3]
2
[3,2,1,2] == [1,2,2,3]
truthy
[1,2,3] == [1,2,2,3]
falsy