Retour au sujet

Avatar de FlodonChouffet FlodonChouffet 🍻
Après analyse des problèmes et de mes solutions, voici les critiques que je peux faire sur l’énoncé et le test :
Problème 1 - Points problématiques :

Imprécision sur les bords : L’énoncé ne spécifie pas clairement comment gérer le premier élément :
Si le premier élément est True, sa distance doit être 0 (logique)
Mais l’énoncé dit “at or before position i” sans préciser le cas i=0
Exigence de performance contradictoire :
Interdiction de boucles Python mais demande un type de sortie int64
Or numpy.pad/int64 peuvent forcer des copies mémoires coûteuses pour 1e8 éléments
Une solution réellement optimale pourrait nécessiter du Cython/Numba interdits

Problème 2 - Problèmes identifiés :

Paramètre w ambigu :
“i-w<j<=i” mais si w > i, faut-il considérer j>=0 ou autoriser des indices négatifs?
Mon implémentation suppose que w est fixe mais l’énoncé dit “w (N/10<=w<=N)”
Complexité mal définie :
L’énoncé interdit numpy.convolve pour sa complexité quadratique
Mais en pratique numpy.convolve utilise FFT (O(N log N)) pour grands tableaux
La critique de complexité est donc inexacte

Problème 3 - Incohérences :

Condition sur S[i] mal formulée :
“0<=S[i]<=i” mais le calcul utilise “S[i]<=k<=i”
Si S[i]=i, la somme porte sur un seul élément (A[i])
Mais si S[i]>i, la somme serait vide (non couvert par l’énoncé)
Test unitaire insuffisant :
Le test avec N=20 ne vérifie pas les cas limites :
S[i] = 0 (toute l’histoire)
S[i] = i (seul le dernier point)
Cas avec S[i] > i (impossible selon énoncé)

Problèmes transversaux :

Contradiction pratique :
Interdiction des boucles Python mais nécessité de gérer des conditions (S[i])
Certaines opérations conditionnelles vectorisées (comme np.where) sont en réalité des boucles masquées
Exigence mémoire irréaliste :
Pour N=1e8 et double précision (problème 2/3) :
800 Mo par tableau × plusieurs tableaux intermédiaires
La solution optimale nécessiterait du traitement par blocs non mentionné
Manque de cas tests types :
Aucun exemple concret n’est fourni pour valider l’implémentation
Les conditions aux limites ne sont pas documentées

Suggestions d’amélioration :
Pour chacun des problèmes, l’énoncé gagnerait à :

Donner 1-2 exemples d’entrée/sortie
Préciser explicitement la gestion des cas limites
Fournir des contraintes mémoires réalistes
Autoriser explicitement certaines optimisations (comme FFT)
Inclure des cas tests couvrant les conditions extrêmes

Ces améliorations permettraient d’éviter des ambiguïtés d’interprétation et des solutions sous-optimales causées par une mauvaise compréhension des attentes.
#20808093