encore """ # à la Fortran; ça n'est pas forcément # la bonne approche ici bien sûr # mais si un élève a des envies de benchmarking... result = np.zeros(shape=(lines, columns), dtype=int) for i in range(lines): for j in range(columns): result[i, j] = 100 * i + 10 * j + offset return result # @END@ def hundreds_ko(lines, columns, offset): result = np.ones(shape=(lines, columns), dtype=float) return result hundreds_inputs = [ Args(2, 4, 0), Args(3, 3, 1), ] exo_hundreds = ExerciseFunctionNumpy( hundreds, hundreds_inputs, nb_examples=2, )
matches += 1 return matches # @END@ def dice_ko(target, nb_dice=2, sides=6): return sides**(nb_dice - 1) SIDES = 5 dice_inputs = [ Args(7), Args(2), Args(20, sides=10), Args(3, nb_dice=3), Args(4, nb_dice=3), Args(50, nb_dice=8), ] + [ Args(target, sides=SIDES, nb_dice=3) for target in range(3, 3 * SIDES + 1) ] exo_dice = ExerciseFunctionNumpy( dice, dice_inputs, nb_examples=5, layout_args=(50, 10, 10), )
""" # Je vous laisse vous convaincre que ça fonctionne aussi # en utilisant le broadcasting # pour s'économiser une transposition explicite return (lambda x: x + x[:, np.newaxis])(taille - np.abs(range(-taille, taille + 1))) # @END@ def stairs_ko(taille): n = 2 * taille + 1 ix, iy = np.indices((n, n), dtype=np.float) return ((taille - 1) + 2 * taille - (np.abs(ix - taille) + np.abs(iy - taille))) stairs_inputs = [ Args(1), Args(2), Args(3), Args(4), ] exo_stairs = ExerciseFunctionNumpy( stairs, stairs_inputs, nb_examples=2, )
return (np.resize((corner_0_0, 1 - corner_0_0), (1, size)) ^ np.arange(size)[:, np.newaxis] & 1) # @END@ # faux parce qu'on ignore corner_0_0 # voir aussi si la correction est contente avec des float def checkers_ko(size, ignored=True): result = np.ones(shape=(size, size), dtype=float) # on remplit les cases blanches en deux fois result[1::2, 0::2] = 0 result[0::2, 1::2] = 0 return result checkers_inputs = [ Args(3), Args(3, False), Args(1), Args(2), Args(4), ] exo_checkers = ExerciseFunctionNumpy( checkers, checkers_inputs, nb_examples=2, )