Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

generate an official version of data.json #2

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

laowantong
Copy link

This JSON should be a drop-in replacement for yours. It was generated by the following program:

import json

descriptions = [
    (0, "Déclaration"),
    (1, "Expression primitive"),
    (2, "Fonction à un argument"),
    (3, "Expression fonctionnelle"),
    (4, "Définition locale simultanée"),
    (5, "Opérateur sous forme préfixée"),
    (6, "Fonction à plusieurs arguments"),
    (7, "Définition globale de fonction(s)"),
    (8, "Définition locale de valeur(s) primitive(s)"),
    (9, "Définition globale de valeur(s) primitive(s)"),
    (10, "Fonction appliquée à un argument"),
    (11, "Fonction appliquée à plusieurs arguments"),
]
chunks = [
    ("x+3", [1, 10, 11]),
    ("( + )", [2, 3, 5, 6]),
    ("let x = 2", [0, 9]),
    ("let x = 2 in x+3", [1, 8]),
    ("fun x y -> x+y", [2, 3, 6]),
    ("let succ x = x+1", [0, 7]),
    ("function x -> x+3", [2, 3]),
    ("let add x y = x+y", [0, 7]),
    ("let x = 2 and y = 3 in x+y", [1, 4, 8]),
    ("(fun x y -> x+y) 2 3", [1, 10, 11]),
    ("(function x -> x+3) 2", [1, 10]),
]
propositions = []
for (i, (name, answers)) in enumerate(chunks, 1):
    propositions.append({
        "id": i,
        "name": name,
        "answers": answers
    })
answers = []
for (i, value) in descriptions:
    answers.append({
        "id": i,
        "value": value
    })
result = {
    "propositions": propositions,
    "answers": answers,
}
print(json.dumps(result, ensure_ascii=False, indent=4))

The first two definitions were copy-pasted from my own program, which I use to generate the subjects and their solutions. This should ensure all associations are correct.

@t4rm
Copy link
Owner

t4rm commented Feb 8, 2024

Est-il plus judicieux d'adapter votre code à JS et de le mettre dans un fichier data.js duquel on exportera result qui sera directement utilisé dans notre context ?

Code adapté :

const descriptions = [
    [0, "Déclaration"],
    [1, "Expression primitive"],
    [2, "Fonction à un argument"],
    [3, "Expression fonctionnelle"],
    [4, "Définition locale simultanée"],
    [5, "Opérateur sous forme préfixée"],
    [6, "Fonction à plusieurs arguments"],
    [7, "Définition globale de fonction(s)"],
    [8, "Définition locale de valeur(s) primitive(s)"],
    [9, "Définition globale de valeur(s) primitive(s)"],
    [10, "Fonction appliquée à un argument"],
    [11, "Fonction appliquée à plusieurs arguments"]
];

const chunks = [
    ["x+3", [1, 10, 11]],
    ["( + )", [2, 3, 5, 6]],
    ["let x = 2", [0, 9]],
    ["let x = 2 in x+3", [1, 8]],
    ["fun x y -> x+y", [2, 3, 6]],
    ["let succ x = x+1", [0, 7]],
    ["function x -> x+3", [2, 3]],
    ["let add x y = x+y", [0, 7]],
    ["let x = 2 and y = 3 in x+y", [1, 4, 8]],
    ["(fun x y -> x+y) 2 3", [1, 10, 11]],
    ["(function x -> x+3) 2", [1, 10]]
];

const propositions = chunks.map(([name, answers], i) => ({
    id: i + 1,
    name,
    answers
}));

const answers = descriptions.map(([id, value]) => ({ id, value }));

export const result = {
    propositions,
    answers
};

Utilisation dans notre context :

...
import { result } from './data';
...

export const DataProvider = ({ children }) => {
    const data = result;

    return (
        <DataContext.Provider value={{ data }}>
            {children}
        </DataContext.Provider>
    );
};

...

Il n'y aurait alors plus de JSON et le fichier JS représentant les data sera lisible.

@laowantong
Copy link
Author

Disons que de façon générale, c'est mieux de séparer les données du code. Quand j'ai cherché les données sur lesquelles tu travaillais, je les ai trouvées facilement parce qu'elles étaient dans un fichier de données. Si elles avaient été noyées dans le code ç'aurait été plus problématique. Donc, non, utilise simplement la nouvelle version du JSON.

Après, je persiste à penser que la lisibilité de ce fichier pourrait être améliorée, mais ce n'est effectivement pas une priorité.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants