Add all the assignment code.
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
parent
58c6b1f81c
commit
cfe502c598
1277 changed files with 48709 additions and 1 deletions
104
hw6/hw5programs/ssumit_balancedparens.oat
Normal file
104
hw6/hw5programs/ssumit_balancedparens.oat
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
struct Node {
|
||||
int p;
|
||||
Node next
|
||||
}
|
||||
|
||||
struct Stack {
|
||||
int size;
|
||||
Node head;
|
||||
(Stack, int) -> Stack push;
|
||||
(Stack) -> Stack pop;
|
||||
(Stack) -> int peek
|
||||
}
|
||||
|
||||
Stack push(Stack stack, int paren) {
|
||||
var n = new Node {p = paren; next = stack.head};
|
||||
return new Stack {size = stack.size + 1; head = n; push = stack.push; pop = stack.pop; peek = stack.peek};
|
||||
}
|
||||
|
||||
Stack pop(Stack stack) {
|
||||
if (stack.size == 0) {
|
||||
return Stack null;
|
||||
}
|
||||
return new Stack{size = stack.size - 1; head = stack.head.next; push = stack.push; pop = stack.pop; peek = stack.peek};
|
||||
}
|
||||
|
||||
int peek(Stack stack) {
|
||||
if (stack.size == 0) {
|
||||
return -1;
|
||||
}
|
||||
return stack.head.p;
|
||||
}
|
||||
|
||||
global leftParen = 40;
|
||||
global leftBracket = 91;
|
||||
global leftBrace = 123;
|
||||
global rightParen = 41;
|
||||
global rightBracket = 93;
|
||||
global rightBrace = 125;
|
||||
|
||||
|
||||
bool isStringBalanced(string input) {
|
||||
var stack = new Stack {size = 0; head = Node null; push = push; pop = pop; peek = peek};
|
||||
var length = length_of_string(input);
|
||||
var char_arr = array_of_string(input);
|
||||
var result = new int[2*length];
|
||||
var ptr = 0;
|
||||
for (var i = 0; i < length; i = i + 1;) {
|
||||
var char = char_arr[i];
|
||||
if (char == leftParen | char == leftBracket | char == leftBrace) {
|
||||
stack = stack.push(stack, char);
|
||||
} else if (char == rightParen) {
|
||||
var head = stack.peek(stack);
|
||||
stack = stack.pop(stack);
|
||||
if (head != leftParen) {
|
||||
print_string("mismatch");
|
||||
return false;
|
||||
}
|
||||
result[ptr] = leftParen;
|
||||
ptr = ptr + 1;
|
||||
result[ptr] = rightParen;
|
||||
ptr = ptr + 1;
|
||||
} else if (char == rightBracket) {
|
||||
var head = stack.peek(stack);
|
||||
stack = stack.pop(stack);
|
||||
if (head != leftBracket) {
|
||||
print_string("mismatch");
|
||||
return false;
|
||||
}
|
||||
result[ptr] = leftBracket;
|
||||
ptr = ptr + 1;
|
||||
result[ptr] = rightBracket;
|
||||
ptr = ptr + 1;
|
||||
} else if (char == rightBrace) {
|
||||
var head = stack.peek(stack);
|
||||
stack = stack.pop(stack);
|
||||
if (head != leftBrace) {
|
||||
print_string("mismatch");
|
||||
return false;
|
||||
}
|
||||
result[ptr] = leftBrace;
|
||||
ptr = ptr + 1;
|
||||
result[ptr] = rightBrace;
|
||||
ptr = ptr + 1;
|
||||
}
|
||||
}
|
||||
if (stack.size != 0) {
|
||||
print_string("mismatch");
|
||||
return false;
|
||||
}
|
||||
var finalString = new int[ptr];
|
||||
for (var i = 0; i < ptr; i = i + 1;) {
|
||||
finalString[i] = result[i];
|
||||
}
|
||||
print_string(string_of_array(finalString));
|
||||
return true;
|
||||
}
|
||||
|
||||
int program(int argc, string[] argv) {
|
||||
var result = isStringBalanced(argv[1]);
|
||||
if (result) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue