  Supporting learners in introductory programming assignments at scale is a
necessity. This support includes automated feedback on what learners did
incorrectly. Existing approaches cast the problem as automatically repairing
learners' incorrect programs extrapolating the data from an existing correct
program from other learners. However, such approaches are limited because they
only compare programs with similar control flow and order of statements. A
potentially valuable set of repair feedback from flexible comparisons is thus
missing. In this paper, we present several modifications to CLARA, a
data-driven automated repair approach that is open source, to deal with
real-world introductory programs. We extend CLARA's abstract syntax tree
processor to handle common introductory programming constructs. Additionally,
we propose a flexible alignment algorithm over control flow graphs where we
enrich nodes with semantic annotations extracted from programs using operations
and calls. Using this alignment, we modify an incorrect program's control flow
graph to match the correct programs to apply CLARA's original repair process.
We evaluate our approach against a baseline on the twenty most popular
programming problems in Codeforces. Our results indicate that flexible
alignment has a significantly higher percentage of successful repairs at 46%
compared to 5% for baseline CLARA. Our implementation is available at
https://github.com/towhidabsar/clara.
