From 0dd497895a93bec09c911154ffefab85a9559375 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Sat, 23 Dec 2017 12:53:06 +0000 Subject: C attempt. Probably slightly faster. No free optimisations. --- day23/part2gen | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 day23/part2gen (limited to 'day23/part2gen') diff --git a/day23/part2gen b/day23/part2gen new file mode 100755 index 0000000..2cdcdf6 --- /dev/null +++ b/day23/part2gen @@ -0,0 +1,63 @@ +#!/usr/bin/env ruby + +def gen_label(here, there) + return "label_#{here}_#{there.gsub(/-/, '_')}" +end + +input = $stdin.readlines.map(&:chomp) +lines = [] +labels = {} + +input.each_with_index do |line, i| + istr = line.split + case istr[0] + when 'set' + lines << "#{istr[1]} = #{istr[2]};" + when 'sub' + lines << "#{istr[1]} -= #{istr[2]};" + when 'mul' + lines << "#{istr[1]} *= #{istr[2]};" + when 'jnz' + lab = gen_label(i, istr[2]) + lines << "if (#{istr[1]}) goto #{lab};" + jmp = istr[2].to_i + labels[i+jmp] = [] if labels[i+jmp].nil? + labels[i+jmp] << "#{lab}:" + end +end + +labels.keys.sort.reverse.each do |i| + labels[i].each do |lab| + lines.insert(i, lab) + end +end + +puts < + +void main() { + int + a = 1, + b = 0, + c = 0, + d = 0, + e = 0, + f = 0, + g = 0, + h = 0; + +// BEGIN GENERATED CODE BLOCK + +EOT + +lines.each do |line| + puts "#{line[0] == "l" ? "" : " "} #{line}" +end + +puts <