@@ -190,6 +190,31 @@ function stripCoreZeros(textMap, coreMap, pad = '') {
190190 return lines . join ( `\n${ pad } ` ) ;
191191}
192192
193+ function getCoreShapeMinMax ( coreShape , width ) {
194+ const minmax = [ ] ;
195+ minmax [ - 1 ] = [ width , - 1 ] ;
196+ for ( let j = 0 ; j < width ; j ++ ) {
197+ const halfJ = j < width / 2 ? j : width - j - 1 ;
198+ let minI = width ;
199+ let maxI = - 1 ;
200+ for ( let i = 0 ; i < width ; i ++ ) {
201+ if ( + coreShape [ j * width + i ] ) {
202+ minI = Math . min ( minI , i ) ;
203+ maxI = Math . max ( maxI , i + 1 ) ;
204+ }
205+ }
206+ minmax [ halfJ ] = minmax [ halfJ ]
207+ ? [ Math . min ( minI , minmax [ halfJ ] [ 0 ] ) , Math . max ( maxI , minmax [ halfJ ] [ 1 ] ) ]
208+ : [ minI , maxI ] ;
209+ }
210+ for ( let j = 1 ; j < width / 2 ; j ++ ) {
211+ // the previous row, away from the middle, sets a bound.
212+ minmax [ j ] [ 0 ] = Math . min ( minmax [ j - 1 ] [ 0 ] , minmax [ j ] [ 0 ] ) ;
213+ minmax [ j ] [ 1 ] = Math . max ( minmax [ j - 1 ] [ 1 ] , minmax [ j ] [ 1 ] ) ;
214+ }
215+ return minmax ;
216+ }
217+
193218function getCoreShape ( coremaps , inShapeMap = null ) {
194219 let coreShapeMap = inShapeMap ;
195220 // build a core_shape array.
@@ -205,6 +230,17 @@ function getCoreShape(coremaps, inShapeMap = null) {
205230 }
206231 } ) ;
207232 if ( coreShapeMap ) {
233+ // fill in interior locations with 1 for sparse maps.
234+ const width = Math . sqrt ( coreShapeMap . length ) ;
235+ const minmax = getCoreShapeMinMax ( coreShapeMap , width ) ;
236+ for ( let j = 0 ; j < width ; j ++ ) {
237+ const halfJ = j < width / 2 ? j : width - j - 1 ;
238+ for ( let i = 0 ; i < width ; i ++ ) {
239+ if ( i >= minmax [ halfJ ] [ 0 ] && i < minmax [ halfJ ] [ 1 ] ) {
240+ coreShapeMap [ j * width + i ] = 1 ;
241+ }
242+ }
243+ }
208244 return {
209245 type : 'coremaps' ,
210246 symmetry : 'none' ,
@@ -352,6 +388,7 @@ function writeToInp(state, GROUP_TYPES) {
352388
353389export default {
354390 getCoreShape,
391+ getCoreShapeMinMax,
355392 getNumPins,
356393 getTextMap,
357394 getFullMap,
0 commit comments