Partage
  • Partager sur Facebook
  • Partager sur Twitter

Challenge Codility

17 août 2019 à 12:38:37

Coucou,

Je n'arrive pas à trouver une manière efficiente de résoudre le problème suivant :

https://app.codility.com/programmers/task/max_not_present/

(Je suppose par la suite que vous avez lu.) Comment vous y prendriez-vous ?

Je commencerais d'abord par supprimer toutes les cartes en double exemplaires (ou plus), puisqu'alors on peut se débrouiller pour que les deux numéros soient face visible. Avec les cartes restantes, je regarde quels numéros sont connectés entre eux. J'entends par connecté que si (1, 2) et (2, 3) existent, alors 1, 2 et 3 sont connectés entre eux, et on continue par transitivité. Je sépare les cartes restantes en plusieurs tas, où chaque tas contient des numéros connectés entre eux et entre eux uniquement.

Mais à partir de là, je ne vois pas comment me débrouiller pour obtenir le plus petit nombre non atteignible pour chaque tas. Si on représente un tas par l'ensemble { a1, a2, ..., aN } alors on obtient une matrice ( bIJ ) où bIJ = 0 si la carte (aI, aJ) n'existe pas, et 1 sinon. Et on est censé trouver le plus petit indice I tel qu'il n'y ait aucun 1 sur la Ième ligne ou sur la Ième colonne, une fois que l'on a fait notre choix.

Je ne vois pas comment faire ça simplement. Des idées ?

Edit: mauvais lien, my bad.

-
Edité par Law. 17 août 2019 à 13:41:07

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2019 à 15:17:16

Lu',

j'imagine que tu ne t'attendais pas à ce qu'on pose des questions sur ton topic, mais pourquoi dans le #3 exemple la solution est 4 et non 3???

  • Partager sur Facebook
  • Partager sur Twitter

Eug

17 août 2019 à 16:27:30

Ben la première carte a 4 sur une face et 3 sur l'autre. Donc en choisissant de mettre 4 face cachée, tu as 3 face visible. D'autres cartes te permettent de mettre 1 et 2 face visible donc le premier nombre non affiché vaut forcément au moins 4. Et dans ce cas il vaut 4.
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2019 à 16:42:59

Salut,

Je crois que ce que eugchriss voulait dire, c'est que si on choisi de ne pas retourner la carte justement, on a 3 en face cachée, et 4 en face visible, et à ce moment là la plus petite valeur non visible devient 3 et plus 4.

Dans l'exemple juste avant, on a A = [1, 2, 4, 3] et B = [1, 3, 2, 3], c'est expliqué que la réponse devrait être 5 mais je ne comprends pas non plus pourquoi, puisque si on choisi de retourner la deuxième carte, on obtient la séquence [1, 3, 4, 3] et la plus petite valeur non affichée est donc 2 au lieu de 5... ou alors je n'ai pas compris le résultat que l'on doit essayer d'obtenir.

EDIT : Effectivement je viens de comprendre, je n'avais pas fait attention qu'il fallait maximiser ce nombre qui n'était pas visible, my bad

-
Edité par MaxWelle 17 août 2019 à 16:51:15

  • Partager sur Facebook
  • Partager sur Twitter
Il y a 10 types de personnes : Ceux qui comprennent le binaire et ceux qui ne le comprennent pas.
19 août 2019 à 11:21:48

Up.

Je précise que je ne demande pas de code complet, j'imagine que ça prendrait beaucoup de temps. Juste l'idée directrice qui permet de résoudre le problème avec une bonne performance si vous la connaissez ! ^^

  • Partager sur Facebook
  • Partager sur Twitter
29 juillet 2020 à 12:56:06 - Message modéré pour le motif suivant : Toute forme de publicité est interdite


29 juillet 2020 à 13:51:37

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter