{"action":"opened","issue":{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/issues/21","labels_url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/issues/21/labels{/name}","comments_url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/issues/21/comments","events_url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/issues/21/events","html_url":"https://github.com/deb-sandeep/PHPWebApps/issues/21","id":104851679,"number":21,"title":"[Feature] - Support for mutating questions!","user":{"login":"deb-sandeep","id":7188035,"avatar_url":"https://avatars.githubusercontent.com/u/7188035?v=3","gravatar_id":"","url":"https://api.github.com/users/deb-sandeep","html_url":"https://github.com/deb-sandeep","followers_url":"https://api.github.com/users/deb-sandeep/followers","following_url":"https://api.github.com/users/deb-sandeep/following{/other_user}","gists_url":"https://api.github.com/users/deb-sandeep/gists{/gist_id}","starred_url":"https://api.github.com/users/deb-sandeep/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/deb-sandeep/subscriptions","organizations_url":"https://api.github.com/users/deb-sandeep/orgs","repos_url":"https://api.github.com/users/deb-sandeep/repos","events_url":"https://api.github.com/users/deb-sandeep/events{/privacy}","received_events_url":"https://api.github.com/users/deb-sandeep/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/jove_notes_db","name":"jove_notes_db","color":"006b75"},{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/jove_notes_grammar","name":"jove_notes_grammar","color":"006b75"},{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/jove_notes_processor","name":"jove_notes_processor","color":"207de5"},{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/jove_notes_server","name":"jove_notes_server","color":"009800"},{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/jove_notes_ui","name":"jove_notes_ui","color":"0052cc"},{"url":"https://api.github.com/repos/deb-sandeep/PHPWebApps/labels/released%20/%20closed","name":"released / closed","color":"009800"}],"state":"open","locked":false,"assignee":{"login":"deb-sandeep","id":7188035,"avatar_url":"https://avatars.githubusercontent.com/u/7188035?v=3","gravatar_id":"","url":"https://api.github.com/users/deb-sandeep","html_url":"https://github.com/deb-sandeep","followers_url":"https://api.github.com/users/deb-sandeep/followers","following_url":"https://api.github.com/users/deb-sandeep/following{/other_user}","gists_url":"https://api.github.com/users/deb-sandeep/gists{/gist_id}","starred_url":"https://api.github.com/users/deb-sandeep/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/deb-sandeep/subscriptions","organizations_url":"https://api.github.com/users/deb-sandeep/orgs","repos_url":"https://api.github.com/users/deb-sandeep/repos","events_url":"https://api.github.com/users/deb-sandeep/events{/privacy}","received_events_url":"https://api.github.com/users/deb-sandeep/received_events","type":"User","site_admin":false},"milestone":null,"comments":0,"created_at":"2015-09-04T08:47:21Z","updated_at":"2015-09-04T08:47:21Z","closed_at":null,"body":"### Story\r\nAs a **tutor**, I would want to show _mutating_ questions when it comes to practicing applicability, so that the student is coached more on the concept and methodology of problem solving as compared to retention and recollection.\r\n\r\n### Example\r\n**Current  situation and cons**\r\nIn the current way of working, the digitized questions are pretty much static in nature (with a tiny bit of dynamic behavior when it comes to multiple choice questions). While this is quite effective when it comes to retention and recollection, it is counter productive for teaching/learning applicability problems.\r\n\r\nIn case of learning applicability, the student learns a _methodology_ of working with a _pattern_ of problems, rather than just memorize the final answer. We can work around this problem by creating multiple questions related to a concept, but this way we loose the ability to track the learning efficiency on the methodology for solving the problem pattern.\r\n\r\n**Proposed enhancement**\r\nThe digitized questions should be made parametrized, with support for injecting custom logic to derive the values of the parameters. The custom logic can be fed inputs like the learning efficiency of the question etc, through which it can decide on the proper values of parameters.\r\n\r\nRefer to the following snippet as an example. This question is intended to make the student learn the appliability of the rules of divisibility of 3. \r\n\r\n```java\r\n@multi_choice \"Find the number which is divisible by 3\" {\r\n    @options {\r\n        \"{{@var N1}}\" correct,\r\n        \"{{@var N2}}\", \r\n        \"{{@var N3}}\", \r\n        \"{{@var N4}}\", \r\n        \"{{@var N5}}\"\r\n    }\r\n}\r\nscript_expressions {\r\n    \"N1\" = \"$q.N[0]\", \r\n    \"N2\" = \"$q.N[1]\", \r\n    \"N3\" = \"$q.N[2]\", \r\n    \"N4\" = \"$q.N[3]\", \r\n    \"N5\" = \"$q.N[4]\"\r\n}\r\nscript {\"\r\n    this.N = [] ;\r\n    this.initialize = function( $e ) {\r\n        this.N = $c.computeDivisibilityChoices( $c.getRangeMean( $e ), 3 ) ;\r\n    }\r\n\"}\r\n```\r\n\r\nAs you can observe, the question has been made dynamic by the optional support of scripting. The script is intelligent enough to vary the difficulty level of the displayed choices based on the learning efficiency of the user on this particular concept.\r\n\r\n"}}