Skip to content

Instantly share code, notes, and snippets.

@vaclavbohac
Created October 12, 2011 17:30
Show Gist options
  • Save vaclavbohac/1281913 to your computer and use it in GitHub Desktop.
Save vaclavbohac/1281913 to your computer and use it in GitHub Desktop.
Solution to the 337 UVa Judge problem
/* Solution to the UVa Online Judge problem no. 337 */
#include <stdio.h>
#include <stdlib.h>
int row, column, insmode = 0, ctrlseq = 0;
char display[10][10];
void display_reset() {
int i, j;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
display[i][j] = ' ';
}
}
row = column = 0;
}
void display_print() {
int i, j;
printf("+----------+\n");
for (i = 0; i < 10; i++) {
printf("|");
for (j = 0; j < 10; j++) {
printf("%c", display[i][j]);
}
printf("|\n");
}
printf("+----------+\n");
}
void writechar(char c) {
if (c == '\n') {
return;
}
if (insmode) {
int i;
for (i = 9; i > column; i--) {
display[row][i] = display[row][i-1];
}
}
display[row][column] = c;
if (column < 9) {
column += 1;
}
}
void action(char c) {
int i, j;
switch (c) {
case 'r':
if (column < 9) {
column += 1;
}
break;
case 'l':
if (column > 0) {
column -= 1;
}
break;
case 'd':
if (row < 9) {
row += 1;
}
break;
case 'u':
if (row > 0) {
row -= 1;
}
break;
case 'b':
column = 0;
break;
case 'h':
row = 0;
column = 0;
break;
case 'c':
i = row;
j = column;
display_reset();
row = i;
column = j;
break;
case 'e':
for (i = column; i < 10; i++) {
display[row][i] = ' ';
}
break;
case 'i':
insmode = 1;
break;
case 'o':
insmode = 0;
break;
}
}
int main(void) {
int i, n, casenum = 1;
char sign;
while (scanf("%d\n", &n) == 1) {
if (n == 0) { /* Last line */
return 0;
}
display_reset();
for (i = 0; i < n; i++) {
for (;;) {
sign = getchar();
if ((sign != '^' && !ctrlseq) || (sign == '^' && ctrlseq)) {
if (sign == '\n') {
break;
}
writechar(sign);
ctrlseq = 0;
} else if (sign == '^') {
ctrlseq = 1;
} else if (ctrlseq && sign >= '0' && sign <= '9') {
row = sign - '0';
column = getchar() - '0';
ctrlseq = 0;
} else {
action(sign);
ctrlseq = 0;
}
}
}
printf("Case %d\n", casenum++);
display_print();
}
return 0;
}
#!/usr/bin/env ruby
class Display
attr_accessor :data, :row, :col, :insertmode
def initialize
reset
end
def reset
@data = Array.new(10) { Array.new(10) {' '} }
@insertmode = false
@row = @col = 0
end
def print_display
puts "+----------+"
@data.each do |row|
print "|"
row.each do |value|
print value
end
puts "|"
end
puts "+----------+"
end
def write(sign)
return if sign.include?("\n")
if @insertmode
i = 9
until i == @col do
@data[@row][i] = @data[@row][i - 1]
i -= 1
end
end
@data[@row][@col] = sign
@col += 1 if @col < 9
end
end
def action(display, key)
case key
when 'r'
display.col += 1 if display.col < 9
when 'l'
display.col -= 1 if display.col > 0
when 'd'
display.row += 1 if display.row < 9
when 'u'
display.row -= 1 if display.row > 0
when 'b'
display.col = 0
when 'h'
display.col = 0
display.row = 0
when 'c'
col = display.col
row = display.row
display.reset
display.col = col
display.row = row
when 'e'
for i in (display.col..9)
display.data[display.row][i] = ' '
end
when 'i'
display.insertmode = true
when 'o'
display.insertmode = false
when '^'
display.write '^'
end
end
def process_line(display, line)
rowset = control = false
line.each_char do |c|
unless control
control = c == "^"
unless control
display.write c
end
else
if '0' <= c and c <= '9'
unless rowset
display.row = c.to_i
rowset = true
next # skip iteration
else
display.col = c.to_i
rowset = false
end
else
action display, c
end
control = false
end
end
end
def line_nums
begin
l = gets.strip!
end while l.empty?
l.to_i
end
def create_print_case
i = 1
lambda {
puts "Case #{i}"
i += 1
}
end
if __FILE__ == $0
display = Display.new
f = create_print_case
loop do
lines = line_nums
break if lines.zero?
lines.times do
process_line display, gets
end
display.print_display
display.reset
f.call
end
end
7
This is bad^h^c
^05^^
^14/ \^d^b / \
^u^d^d^l^l^l^l^l^l^l^l^l
^r^r< ACM >^l^l^d/^b \
^b^d \ /
^d^l^lv
7
^i9^l8^l7^l6^l5^l4^l3^l2^l1^l0
^o^d^lThis is #1^d^bThis is #2
^d^bThis is #3^d^bThis is #4
^d^bThis is #5^d^bThis is #6
^d^bThis is #7^d^bThis is #8
^i^d^bThis is #9^d^bThis is #10
^54^e Hello^d^l^l^l^lWorld
0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment