changeset 154:ee0bf994ab95 core-javascript.closure-exercises

Add remove_answers.py script (and clean up closure-exercises.py).
author jf3243
date Wed, 02 Nov 2011 17:27:39 +0000
parents e8007df28827
children c14a95ed1f58
files core-javascript/core-javascript-work/closure-exercises.js core-javascript/py/remove_answers.py
diffstat 2 files changed, 84 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/core-javascript/core-javascript-work/closure-exercises.js	Wed Nov 02 14:04:18 2011 +0000
+++ b/core-javascript/core-javascript-work/closure-exercises.js	Wed Nov 02 17:27:39 2011 +0000
@@ -4,12 +4,11 @@
 {
     var answer;                 
     
-    // Hint: Uncomment the next line.
-    // answer = function(){ return 1; };
-
+    // start
     answer = function(){
         return 1;
     };
+    // stop
 
     assert( answer() ===  1 );
 });
@@ -21,10 +20,11 @@
 
         var answer;
 
-        // Define answer here.
+        // start
         answer = function(){
             return 1;
         };
+        // stop
        
         return answer;
     };
@@ -42,10 +42,11 @@
 
         var answer;
 
-        // Define answer here.
+        // start
         answer = function(){
             return 1;
         };
+        // stop
        
         return answer;
     };
@@ -60,10 +61,11 @@
 
         var answer;
 
-        // Define answer here.
+        // start
         answer = function(){
             return n;
         };
+        // stop
        
         return answer;
     };
@@ -78,9 +80,11 @@
 {
     var outer_function = function(n){
 
+        // start
         return function(){
-          return n;             // ANSWER
+          return n;
         };
+        // stop
     };
     
     assert( outer_function(1)() === 1 );
@@ -143,12 +147,13 @@
 
     var ddd = function(aaa, bbb){
         return {
+            // start
             aaa: aaa,
             bbb: bbb
+            // stop
             };
     };
 
-
     var obj = ddd(1, 2);
 
     assert( obj.aaa === 1 );
@@ -162,6 +167,7 @@
 
     var get_set_factory = function(){
 
+        // start
         var value;
 
         var get = function(){
@@ -171,6 +177,7 @@
         var set = function(new_value){
             value = new_value;
         };
+        // stop
 
         return {
             get : get,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core-javascript/py/remove_answers.py	Wed Nov 02 17:27:39 2011 +0000
@@ -0,0 +1,69 @@
+'''Remove answers from exercises file.'''
+
+
+
+import sys
+
+
+NORMAL, SKIPPING, ERROR = range(3)
+LINE, SOMETHING, START, STOP = range(4)
+
+
+
+
+lookup = {}
+
+# All other states are an error.
+lookup[NORMAL, LINE] = NORMAL
+lookup[NORMAL, SOMETHING] = NORMAL
+lookup[NORMAL, START] = SKIPPING
+lookup[SKIPPING, LINE] = SKIPPING
+# lookup[NORMAL, STOP] = ERROR
+# lookup[SKIPPING, SOMETHING] = ERROR
+lookup[SKIPPING, STOP] = NORMAL
+
+
+filename = 'core-javascript-work/closure-exercises.js'
+
+write = sys.stdout.write
+with open(filename) as lines:
+
+    new_state = NORMAL
+
+    for lineno, line in enumerate(lines):
+
+        state = new_state
+
+
+        stripped_line = line.strip()
+
+        if stripped_line.startswith('something'):
+            event = SOMETHING
+
+        elif stripped_line == '// start':
+            event = START
+
+        elif stripped_line == '// stop':
+            event = STOP
+
+        else:
+            event = LINE
+
+        new_state = lookup[state, event]
+
+        if event == SOMETHING:
+            pass
+
+        elif event == STOP:
+            pass
+
+        elif event == START:
+            indent = len(line) - len(line.lstrip())
+            spaces = line[0:indent]
+            write(spaces + '// Please write your answer here.\n')
+
+        elif state == SKIPPING:
+            pass
+
+        elif event == LINE:
+            write(line)