# Problem

Given input a where a is a grid of characters in any input format as long as it has only one element for each 'block' of the output.

And input b where b is a grid of numbers the same size as input a.

There are two types of road, a 1 represents a stone road marked by @ and a 2 represents a dirt road marked by #

• A @ road is centered in the block and is size 6x6, if a road is adjacent, that side is extended to grid cell border
• A # road is centered in the block is size 4x4, if a road is adjacent, that side is extended to grid cell border

Output a grid offset by line number of 8x8 of the ASCII character in input a and overlay a 'road' from input b e.g.

Input a=[[a,b,a],[b,a,b],[a,b,a]] b=[[1,1,1],[2,0,1],[2,0,0]]

Output:

Step 1: the grid (8x8 representation of input a)

aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
bbbbbbbbaaaaaaaabbbbbbbb
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa


Step 2: Overlay with roads represented by b:

aaaaaaaabbbbbbbbaaaaaaaa
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@abbbbbbbba@@@@@@a
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaabbbbbbbb
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa


Step 3: Offset each line with linenumber:

aaaaaaaabbbbbbbbaaaaaaaa
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@@@@@@@@@@@@@@@@@a
a@@@@@@abbbbbbbba@@@@@@a
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaab@@@@@@b
bb####bbaaaaaaaabbbbbbbb
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aa####aabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa
aaaaaaaabbbbbbbbaaaaaaaa


### Rules:

• Leading whitespace or newlines allowed.
• Trailing whitespace and newlines allowed.
• This is code-golf so shortest code wins

Here is an extra test case with all edge cases in I can think of.

• why only 1 newline allowed? can there be leading newlines (with whitespace)? – dzaima Jul 18 '17 at 12:19
• In the extra test case, array a is smaller than array b. – Zgarb Jul 18 '17 at 12:26
• @dzaima Why should more be allowed? – LiefdeWen Jul 18 '17 at 12:26
• @LiefdeWen they don't do any bad and give more golfing opportunities – dzaima Jul 18 '17 at 12:28
• It seems to me that your question is not well defined. First off, in your test case second row of input a is ['.', ',', '.', ',', '.', ',', '.'], but output is like that row was [',', '.', ',', '.', ',', '.', ',']. Also, what prevents you to have this as output from your test case: gist.github.com/anonymous/dfcf3b754464f3ca4394d34e9f3bf123 Notice that the second 1 from the first row of input b is adjacent to two 2's. Why did you chose to connect it only to first 2 (in the same row)? – user72349 Jul 18 '17 at 16:41

# JavaScript (ES6), 250 207 bytes

Edit Bug fix :(

A function taking inputs in currying syntax (a)(b).

a=>b=>a.map((r,i)=>k.map(y=>(h+=' ')+r.map((c,j)=>k.map(x=>(t=x<v,s=x>7-v,!v|t&(!q[j-1]|w|u)|s&(!q[j+1]|w|u)|u&(!p[j]|t|s)|w&(!(b[i+1]||[])[j]|t|s)?c:'-@#'[v]),v=q[j],w=y>7-v,u=y<v).join).join,p=q,q=b[i]).join
,h=q=[],k=[...'01234567']).join



Less golfed

a=>b=>a.map((r,i)=>
[0,1,2,3,4,5,6,7].map(y=>
(h+=' ') + r.map((c,j)=>
[0,1,2,3,4,5,6,7].map(x=> (
t=x<v, s=x>7-v,
v == 0
|| t && (!B[i][j-1] | w|u)
|| s && (!B[i][j+1] | w|u)
|| u && (!(B[i-1]||[])[j] | t|s)
|| w && (!(B[i+1]||[])[j] | t|s)
? c : '-@#'[v] )
, v = B[i][j], w=y>7-v,u=y<v).join
).join
).join\n
,h = '').join\n


Test

F=
a=>b=>a.map((r,i)=>k.map(y=>(h+=' ')+r.map((c,j)=>k.map(x=>(t=x<v,s=x>7-v,!v|t&(!q[j-1]|w|u)|s&(!q[j+1]|w|u)|u&(!p[j]|t|s)|w&(!(b[i+1]||[])[j]|t|s)?c:'-@#'[v]),v=q[j],w=y>7-v,u=y<v).join).join,p=q,q=b[i]).join
,h=q=[],k=[...'01234567']).join

A=[['a','b','a'],['b','a','b'],['a','b','a']]
B=[[1,1,1],[2,0,1],[2,0,0]]

O.textContent = F(A)(B)+'\n'
A=[['.', ',', '.', ',', '.', ',', '.'],['.', ',', '.', ',', '.', ',', '.'],['.', ',', '.', ',', '.', ',', '1']]
B=[[0,1,0,0,1,2,0],[1,1,1,2,2,2,2],[0,2,0,0,0,1,0]]

O.textContent += F(A)(B)
<pre id=O></pre>

# PHP 857 bytes

Not really what anyone could call "golfed" but since nobody else seems to have entered anything at all, I figured this was a start. It's massive, but it seems to work. Will make an effort to golf it tomorrow if I get the time.

function a($a,$b){$c=sizeof($a);$d=sizeof($a[0]);for($e=0;$e<$c;$e++){for($f=0;$f<$d;$f++){$A=$GLOBALS['h']=$a[$e][$f];$i=$GLOBALS['i']=$b[$e][$f];$B=j($i==1&&$b[$e-1][$f]>0);$C=j($i==1&&$b[$e][$f+1]>0);$D=j($i==1&&$b[$e+1][$f]>0);$E=j($i==1&&$b[$e][$f-1]>0);$F=j($i>0&&$b[$e-1][$f]>0);$G=j($i>0&&$b[$e][$f+1]>0);$H=j($i>0&&$b[$e+1][$f]>0);$I=j($i>0&&$b[$e][$f-1]>0);$J=j($i==1);$K=j($i==1||($i>1&&$b[$e-1][$f]>0));$L=j($i==1||($i>1&&$b[$e][$f+1]>0));$M=j($i==1||($i>1&&$b[$e+1][$f]>0));$N=j($i==1||($i>1&&$b[$e][$f-1]>0));$O=j($i>0);$P=$e*8;$g[$P].="$A$B$F$F$F$F$B$A";$g[$P+1].="$E$J$K$K$K$K$J$C";$l="$I$N$O$O$O$O$L$G";$g[$P+2].=$l;$g[$P+3].=$l;$g[$P+4].=$l;$g[$P+5].=$l;$g[$P+6].="$E$J$M$M$M$M$J$C";$g[$P+7].="$A$D$H$H$H$H$D$A";}}foreach($g as$h){echo str_repeat(' ',$i++)."$h\n";}}function j($k){return($k)?strtr($GLOBALS['i'],'12','@#'):$GLOBALS['h'];}  Test case error_reporting(0);$a=[[a,b,a],[b,a,b],[a,b,a]];
$b=[[1,1,1],[2,0,1],[2,0,0]]; a($a,$b);  Output aaaaaaaabbbbbbbbaaaaaaaa a@@@@@@@@@@@@@@@@@@@@@@a a@@@@@@@@@@@@@@@@@@@@@@a a@@@@@@@@@@@@@@@@@@@@@@a a@@@@@@@@@@@@@@@@@@@@@@a a@@@@@@@@@@@@@@@@@@@@@@a a@@@@@@@@@@@@@@@@@@@@@@a a@@@@@@abbbbbbbba@@@@@@a bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaab@@@@@@b bb####bbaaaaaaaabbbbbbbb aa####aabbbbbbbbaaaaaaaa aa####aabbbbbbbbaaaaaaaa aa####aabbbbbbbbaaaaaaaa aa####aabbbbbbbbaaaaaaaa aa####aabbbbbbbbaaaaaaaa aa####aabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa aaaaaaaabbbbbbbbaaaaaaaa  Test case error_reporting(0);$a=[['.', ',', '.', ',', '.', ',', '.'],['.', ',', '.', ',', '.', ',', '.'],['.', ',', '.', ',', '.', ',', '1']];
$b=[[0,1,0,0,1,2,0],[1,1,1,2,2,2,2],[0,2,0,0,0,1,0]]; a($a,$b);  Output ........,,,,,,,,........,,,,,,,,........,,,,,,,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@@,,,,,,,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@@######,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@@######,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@@######,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@@######,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@@,,####,,........ ........,@@@@@@,........,,,,,,,,.@@@@@@.,,####,,........ ........,@@@@@@,........,,,,,,,,..####..,,####,,........ .@@@@@@@@@@@@@@@@@@@@@@@,,,,,,,,..####..,,####,,........ .@@@@@@@@@@@@@@@@@@@@@@@##############################.. .@@@@@@@@@@@@@@@@@@@@@@@##############################.. .@@@@@@@@@@@@@@@@@@@@@@@##############################.. .@@@@@@@@@@@@@@@@@@@@@@@##############################.. .@@@@@@@@@@@@@@@@@@@@@@@,,,,,,,,........,,####,,........ ........,@@@@@@,........,,,,,,,,........,,####,,........ ........,,####,,........,,,,,,,,........,@@@@@@,11111111 ........,,####,,........,,,,,,,,........,@@@@@@,11111111 ........,,####,,........,,,,,,,,........,@@@@@@,11111111 ........,,####,,........,,,,,,,,........,@@@@@@,11111111 ........,,####,,........,,,,,,,,........,@@@@@@,11111111 ........,,####,,........,,,,,,,,........,@@@@@@,11111111 ........,,,,,,,,........,,,,,,,,........,@@@@@@,11111111 ........,,,,,,,,........,,,,,,,,........,,,,,,,,11111111  Test case error_reporting(0);$a=[[p,p,p,p,h,h,h,p,p,p,p],[p,p,p,p,h,h,h,p,p,p,p],[p,p,p,p,h,h,h,p,p,p,p],[p,p,p,p,h,h,h,p,p,p,p],[p,p,p,p,h,h,h,p,p,p,p]];
$b=[[1,1,1,0,1,0,1,0,1,1,1],[1,0,1,0,1,0,1,0,1,0,1],[1,1,1,0,1,1,1,0,1,1,1],[1,0,0,0,1,0,1,0,1,0,0],[1,0,0,0,1,0,1,0,1,0,0]]; a($a,$b);  Output pppppppppppppppppppppppppppppppphhhhhhhhhhhhhhhhhhhhhhhhpppppppppppppppppppppppppppppppp p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@pppppppppp@@@@@@ppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@pppppppppp@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@@@@@@@@@@@@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@@@@@@@@@@@@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@@@@@@@@@@@@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@@@@@@@@@@@@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@@@@@@@@@@@@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@@@@@@@@@@@@@@@@@ppppppppph@@@@@@@@@@@@@@@@@@@@@@hppppppppp@@@@@@@@@@@@@@@@@@@@@@p p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp p@@@@@@ppppppppppppppppppppppppph@@@@@@hhhhhhhhhh@@@@@@hppppppppp@@@@@@ppppppppppppppppp pppppppppppppppppppppppppppppppphhhhhhhhhhhhhhhhhhhhhhhhpppppppppppppppppppppppppppppppp  # Java - 661 bytes Hi! This is my first submission here. If I did something wrong please tell me. static void m(char[][]b,int[][]t){String z="";int w=b[0].length;int h=b.length;char[][]r=new char[h*8][w*8];for(int j=0;j<h;j++){for(int i=0;i<w;i++){for(int x=0;x<8;x++)for(int y=0;y<8;y++){r[j*8+y][i*8+x]=b[j][i];int n=t[j][i];if(n!=0){char c;int d,e;if(n==1){c='@';e=0;d=7;}else{c='#';e=1;d=6;}if(x>e&&y>e&&x<d&&y<d)r[j*8+y][i*8+x]=c;if(x>e&&x<d){if(j>0&&y<2&&t[j-1][i]!=0)r[j*8+y][i*8+x]=c;if(j<h-1&&y>5&&t[j+1][i]!=0)r[j*8+y][i*8+x]=c;}if(y>e&&y<d){if(i>0&&x<2&&t[j][i-1]!=0)r[j*8+y][i*8+x]=c;if(i<w-1&&x>5&&t[j][i+1]!=0)r[j*8+y][i*8+x]=c;}}}}for(int l=0;l<8;l++){System.out.println(z+Arrays.toString(r[j*8+l]).replaceAll("[\$\$]|[, ]\\s",""));z+=" ";}}}  You can try it here :) Unminified: static void m(char[][] b, int[][] t) { String z=""; int w=b[0].length;int h=b.length; char[][]r=new char[h*8][w*8]; for(int j=0;j<h;j++){ for(int i=0;i<w;i++){ for(int x=0;x<8;x++)for(int y=0;y<8;y++){ r[j*8+y][i*8+x] = b[j][i]; int n=t[j][i]; if(n!=0){ char c;int d,e; if(n==1){c='@';e=0;d=7;} else{c='#';e=1;d=6;} if(x>e&&y>e&&x<d&&y<d)r[j*8+y][i*8+x]=c; if(x>e&&x<d){ if(j>0&&y<2&&t[j-1][i]!=0)r[j*8+y][i*8+x]=c; if(j<h-1&&y>5&&t[j+1][i]!=0)r[j*8+y][i*8+x]=c; } if(y>e&&y<d){ if(i>0&&x<2&&t[j][i-1]!=0)r[j*8+y][i*8+x]=c; if(i<w-1&&x>5&&t[j][i+1]!=0)r[j*8+y][i*8+x]=c; } } } } for(int l=0;l<8;l++){System.out.println(z+Arrays.toString(r[j*8+l]).replaceAll("[\$\$]|[, ]\\s",""));z+=" ";} } }  • Ah, I must have forgotten to update the static version. Thanks for pointing that out! – 100Toby1 Jul 19 '17 at 8:04 • @100Toby1 Hi Toby, Welcome and nice answer, you can change your ands to bitwise ands &&->& for a few bytes. – LiefdeWen Jul 19 '17 at 8:31 • also if you init c='#',d=6,e=1 then you can remove the else  else{c='#';e=1;d=6;} – LiefdeWen Jul 19 '17 at 8:34 # JavaScript - 299 bytes (a,b,g=(x,y)=>!(b[y]||0)[x],u=s=r='',L='length',R='repeat')=>{for(y=v=-1;++y<a[L];)for(i=v;++i<8;)for(x=v,s+= +r,r+=' ';m=b[y][++x],W=Q=a[y][x],W+=(Z=~m&1)?Q:u,D=(A=i<m)|(B=i>7-m)?W:u,p=g(x-1,y)?W:D,q=g(x+1,y)?W:D,x<a[0][L];)s+=p+(A&&g(x,y-1)||B&&g(x,y+1)||!m?Q:'@#'[Z])[R](8-(p+q)[L])+q;return s}  # Try it here # PHP, 275 268 266 264 252 bytes <?foreach($_GET[a]as$y=>$r)for($z=8;$z--;)for($x=-print" ".$f.=" ";$w--||$c=$r[++$x+!$w=7];)echo[$a=($s=($m=$_GET[b])[$y])[$x+1],$a|$b=2>$n=$s[$x],1,1,1,1,$b|$a=$s[$x-1],$a][$w]*[$a=$m[$y+1][$x],$a|$b,1,1,1,1,$b|$a=$m[$y-1][$x],$a][$z]*$n?" @#"[$n]:$c;


takes input from GET parameters a and b, prints to STDOUT. Try it online.

breakdown

foreach($_GET[a]as$y=>$r) # loop 1: through rows of first array for($z=8;$z--;) # loop 2:$z from 7 to 0 (line = 8*$y+7-$z)
for($x=-print"\n".$f.=" ";  # print newline and padding
$w-- # loop 4: loop$w from 7 to 0 (column = 8*$x+7-$w)
||$c=$r[++$x+!$w=7];)   # loop 3: loop $c through characters in row echo [ # vertical test$a=($s=($m=$_GET[b])[$y])[$x+1], #$m=2nd array, $s=current row #$a=block to the right has road
$a|$b=2>$n=$s[$x], #$b=current block has brick road
1,1,1,1,
$b|$a=$s[$x-1],                     # $a=block to the left has road$a
][$w] # index tests * [ # horizontal test$a=$m[$y+1][$x], #$a=block below has road
$a|$b,
1,1,1,1,
$b|$a=$m[$y-1][$x], #$a=block above has road
$a ][$z]                               # index tests
*$n # is a road in this block? ?" @#"[$n]:\$c;                  # if block&v-test&h-test then print road
# else print character from 1st array