예제 #1
0
        sum(x) == target for x in product(range(1, sides + 1), repeat=nb_dice))


# @END@


def dice_ko(target, nb_dice=2, nb_sides=6):
    return nb_sides**(nb_dice - 1)


SIDES = 5

dice_inputs = [
    Args(7),
    Args(2),
    Args(20, nb_sides=10),
    Args(3, nb_dice=3),
    Args(4, nb_dice=3),
    Args(50, nb_dice=8),
    Args(28, nb_dice=8),
] + [
    Args(target, nb_sides=SIDES, nb_dice=3)
    for target in range(3, 3 * SIDES + 1)
]

exo_dice = ExerciseFunctionNumpy(
    dice,
    dice_inputs,
    nb_examples=5,
)
예제 #2
0
    # le broadcasting c'est magique parfois
    # car avec cette méthode on peut multiplier
    # dans n'importe quel ordre !
    # ce qui fait que ceci marche ausi !
    # return column * column.T


# @END@


def xixj_ko(*args):
    # presque ça mais sans le reshape
    array = np.array(args)
    return array.T @ array


inputs_xixj = [
    Args(1),
    Args(1, 2),
    Args(1, 2, 4),
    Args(1, 0, 4),
    Args(8, 4, 2),
    Args(0, 1, 2, 4, 8),
]

exo_xixj = ExerciseFunctionNumpy(
    xixj,
    inputs_xixj,
    nb_examples=3,
)
예제 #3
0
# une solution qui NE MARCHE PAS pour les tailles paires
def checkers_ko_2(size, corner_0_0=True):
    return np.array([(i + corner_0_0) % 2 for i in range(size * size)],
                    dtype=np.int_).reshape(size, size)


# 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,
)
예제 #4
0
def matdiag_3(liste):
    """
    bon maintenant qu'on s'est bien creusé les méninges
    pour le faire à la main, il se trouve qu'il y a
    - bien sûr - une fonction pour ça dans numpy
    """
    return np.diag(liste)


# @END@


def matdiag_ko(liste):
    # presque ça mais sans le reshape
    n = len(liste)
    return np.zeros((n, n))


inputs_matdiag = [
    Args([1]),
    Args([1, 2j]),
    Args([1, 2.5, 4]),
    Args([0, 1, 2, 4, 8]),
]

exo_matdiag = ExerciseFunctionNumpy(
    matdiag,
    inputs_matdiag,
    nb_examples=3,
)
예제 #5
0
    """
    Une approche discutable
    """
    # à 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,
    )
예제 #6
0
    """
    # 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,
)