#!/usr/bin/perl # made by Qajin $in = <>; ($x,$y) = split(/x/,$in); # X x Y size #read row pattern @ptx = (); for ($i = 0;$i < $y; $i++) { $in = <>; chomp($in); push(@ptx,$in); } #read column pattern @pty = (); for ($i = 0;$i < $x; $i++) { $in = <>; chomp($in); push(@pty,$in); } #make row bit pattern for ($i = 0;$i < $y; $i++) { $rbt = &make_bit($x,$ptx[$i]); push(@btx,$rbt); } #make column bit pattern for ($i = 0;$i < $x; $i++) { $rbt = &make_bit($y,$pty[$i]); push(@bty,$rbt); } #make bit pattern (recursive call) sub make_bit { local($i,$b); local($l,$pt) = @_; local($p1,$pn) = split(m/,/,$pt,2); #bad pattern return (undef) if ($l < $p1); return ( [' ' x $l] ) if ($p1 == 0); local(@bt) = (); for($i=0;$i<=$l-$p1;$i++) { $b = (' ' x $i) . ('#' x $p1); if ($pn ne '') { $b .= ' '; local($sbt) = &make_bit($l-$p1-$i-1,$pn); next if (@$sbt == 0); foreach (@$sbt) { push(@bt,($b . $_)); } } else { $b .= ' ' x ($l - $p1 - $i); push(@bt,$b); } } return (\@bt); } #initialize picture matrix @mt = (); for ($i=0; $i < $y; $i++) { push(@mt, ('.'x $x) ); } do { $om = $m = join("\n",@mt); for ($i = 0; $i < $y; $i++) { $par = $btx[$i]; @bt = grep(/${mt[$i]}/,@$par); $mt[$i] = &get_common(@bt); $btx[$i] = \@bt; } for ($i = 0; $i < $x; $i++) { $tmt = ''; foreach (@mt) { $tmt .= substr($_,$i,1); } $par = $bty[$i]; local(@bt) = grep(/$tmt/,@$par); $tmt = &get_common(@bt); for ($j = 0; $j < $y; $j++) { substr($mt[$j],$i,1) = substr($tmt,$j,1); } $bty[$i] = \@bt; } $m = join("\n",@mt); } while ($m ne $om); #get common part sub get_common { local($i); local(@pt) = @_; return ($pt[0]) if (@pt == 1); $cm = shift(@pt); foreach (@pt) { for ($i = 0; $i < length($cm) ; $i++) { substr($cm,$i,1) = '.' if (substr($cm,$i,1) ne substr($_,$i,1)); } last unless ($cm =~ /[^\.]/); } return ($cm); } print $m,"\n";