Skip to content

Instantly share code, notes, and snippets.

@mgiuffrida
Created December 8, 2015 10:43
Show Gist options
  • Save mgiuffrida/f275912b9bd92a3f403e to your computer and use it in GitHub Desktop.
Save mgiuffrida/f275912b9bd92a3f403e to your computer and use it in GitHub Desktop.
sed rules to convert input to C program
s/^([0-9]+) -> (.*)$/unsigned short solve_\2() { return \1; }/
s/^([a-z]+) -> (.*)$/unsigned short solve_\2() { static unsigned short \2_answer; static bool \2_solved; if (!\2_solved) { \2_answer = solve_\1(); \2_solved = true; } return \2_answer; }/
s/^([a-z]+) AND ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() \& solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([0-9]+) AND ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 \& solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([a-z]+) AND ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() \& \2; \3_solved = true; } return \3_answer; }/
s/^([0-9]+) AND ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 \& \2; \3_solved = true; } return \3_answer; }/
s/^([a-z]+) OR ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() | solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([0-9]+) OR ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 | solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([a-z]+) OR ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() | \2; \3_solved = true; } return \3_answer; }/
s/^([0-9]+) OR ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 | \2; \3_solved = true; } return \3_answer; }/
s/^([a-z]+) LSHIFT ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() << solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([0-9]+) LSHIFT ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 << solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([a-z]+) LSHIFT ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() << \2; \3_solved = true; } return \3_answer; }/
s/^([0-9]+) LSHIFT ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 << \2; \3_solved = true; } return \3_answer; }/
s/^([a-z]+) RSHIFT ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() >> solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([0-9]+) RSHIFT ([a-z]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 >> solve_\2(); \3_solved = true; } return \3_answer; }/
s/^([a-z]+) RSHIFT ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = solve_\1() >> \2; \3_solved = true; } return \3_answer; }/
s/^([0-9]+) RSHIFT ([0-9]+) -> (.*)$/unsigned short solve_\3() { static unsigned short \3_answer; static bool \3_solved = false; if (!\3_solved) { \3_answer = \1 >> \2; \3_solved = true; } return \3_answer; }/
s/^NOT ([a-z]+) -> (.*)$/unsigned short solve_\2() { static unsigned short \2_answer; static bool \2_solved = false; if (!\2_solved) { \2_answer = ~solve_\1() \& 0xffff; \2_solved = true; } return \2_answer; }/
s/^NOT ([0-9]+) -> (.*)$/unsigned short solve_\2() { return ~\1 \& 0xffff; }/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment