progs/catastrophic.js
author Christian Urban <urbanc@in.tum.de>
Thu, 14 Nov 2019 13:50:39 +0000
changeset 689 726cefd6a635
parent 614 3ed8ac396863
child 701 81377a3eb717
permissions -rw-r--r--
added
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
614
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     1
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     2
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     3
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     4
// A case of catastrophic backtracking in JavaScript/Node.js
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     5
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     6
// regex: (a*)*b
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     7
// strings: aa...
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     8
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
     9
// call with:
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    10
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    11
//  $> node catastrophic.py 20
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    12
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    13
// call with timing as:
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    14
//
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    15
//  $> time node catastrophic.py 25
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    16
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    17
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    18
const args = process.argv[2]
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    19
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    20
var str = 'a'.repeat(args);
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    21
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    22
console.log(str)
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    23
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    24
var re = /^((a)*)*b$/;
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    25
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    26
var res = re.test(str);
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    27
3ed8ac396863 updated
Christian Urban <urbanc@in.tum.de>
parents:
diff changeset
    28
console.log(res)