generator-homework
Version:
CS 3300 Homework Template Generator
14 lines (13 loc) • 6.16 kB
JavaScript
!function(){function u(c,d){function k(f){var a=c.arcs[0>f?~f:f],b=a[0],e;c.transform?(e=[0,0],a.forEach(function(a){e[0]+=a[0];e[1]+=a[1]})):e=a[a.length-1];return 0>f?[e,b]:[b,e]}function g(f,a){for(var e in f){var c=f[e];delete a[c.start];delete c.start;delete c.end;c.forEach(function(a){l[0>a?~a:a]=1});b.push(c)}}var l={},h={},e={},b=[],m=-1;d.forEach(function(f,a){var b=c.arcs[0>f?~f:f];3>b.length&&!b[1][0]&&!b[1][1]&&(b=d[++m],d[m]=f,d[a]=b)});d.forEach(function(b){var a=k(b),c=a[0],d=a[1];
(a=e[c])?(delete e[a.end],a.push(b),a.end=d,(b=h[d])?(delete h[b.start],c=b===a?a:a.concat(b),h[c.start=a.start]=e[c.end=b.end]=c):h[a.start]=e[a.end]=a):(a=h[d])?(delete h[a.start],a.unshift(b),a.start=c,(b=e[c])?(delete e[b.end],c=b===a?a:b.concat(a),h[c.start=b.start]=e[c.end=a.end]=c):h[a.start]=e[a.end]=a):(a=[b],h[a.start=c]=e[a.end=d]=a)});g(e,h);g(h,e);d.forEach(function(c){l[0>c?~c:c]||b.push([c])});return b}function v(c,d,k){var g=[];if(1<arguments.length){var l=function(b){"GeometryCollection"===
b.type?b.geometries.forEach(l):b.type in a&&(f=b,a[b.type](b.arcs))},h=function(a){a.forEach(e)},e=function(a){a.forEach(b)},b=function(a){var b=0>a?~a:a;(m[b]||(m[b]=[])).push({i:a,g:f})},m=[],f,a={LineString:e,MultiLineString:h,Polygon:h,MultiPolygon:function(a){a.forEach(h)}};l(d);m.forEach(3>arguments.length?function(a){g.push(a[0].i)}:function(a){k(a[0].g,a[a.length-1].g)&&g.push(a[0].i)})}else for(var p=0,B=c.arcs.length;p<B;++p)g.push(p);return{type:"MultiLineString",arcs:u(c,g)}}function w(c,
d){function k(b){b.forEach(function(c){c.forEach(function(c){(l[c=0>c?~c:c]||(l[c]=[])).push(b)})});h.push(b)}function g(b){b=q(c,{type:"Polygon",arcs:[b]}).coordinates[0];for(var e=-1,f=b.length,a,d=b[f-1],h=0;++e<f;)a=d,d=b[e],h+=a[0]*d[1]-a[1]*d[0];return 0<.5*h}var l={},h=[],e=[];d.forEach(function(b){"Polygon"===b.type?k(b.arcs):"MultiPolygon"===b.type&&b.arcs.forEach(k)});h.forEach(function(b){if(!b._){var c=[],f=[b];b._=1;for(e.push(c);b=f.pop();)c.push(b),b.forEach(function(a){a.forEach(function(a){l[0>
a?~a:a].forEach(function(a){a._||(a._=1,f.push(a))})})})}});h.forEach(function(b){delete b._});return{type:"MultiPolygon",arcs:e.map(function(b){var e=[];b.forEach(function(a){a.forEach(function(a){a.forEach(function(a){2>l[0>a?~a:a].length&&e.push(a)})})});e=u(c,e);if(1<(n=e.length)){var f=g(b[0][0]);for(b=0;b<n;++b)if(f===g(e[b])){f=e[0];e[0]=e[b];e[b]=f;break}}return e})}}function x(c,d){var k={type:"Feature",id:d.id,properties:d.properties||{},geometry:q(c,d)};null==d.id&&delete k.id;return k}
function q(c,d){function k(a){a=a.slice();b(a,0);return a}function g(a){for(var c=[],e=0,f=a.length;e<f;++e){var d=a[e],h=c;h.length&&h.pop();for(var g=m[0>d?~d:d],k=0,l=g.length,q=void 0;k<l;++k)h.push(q=g[k].slice()),b(q,k);if(0>d)for(d=h,h=void 0,g=d.length,l=g-l;l<--g;)h=d[l],d[l++]=d[g],d[g]=h}2>c.length&&c.push(c[0].slice());return c}function l(a){for(a=g(a);4>a.length;)a.push(a[0].slice());return a}function h(a){return a.map(l)}function e(a){var b=a.type;return"GeometryCollection"===b?{type:b,
geometries:a.geometries.map(e)}:b in f?{type:b,coordinates:f[b](a)}:null}var b=y(c.transform),m=c.arcs,f={Point:function(a){return k(a.coordinates)},MultiPoint:function(a){return a.coordinates.map(k)},LineString:function(a){return g(a.arcs)},MultiLineString:function(a){return a.arcs.map(g)},Polygon:function(a){return h(a.arcs)},MultiPolygon:function(a){return a.arcs.map(h)}};return e(d)}function z(c,d){for(var k=0,g=c.length;k<g;){var l=k+g>>>1;c[l]<d?k=l+1:g=l}return k}function C(c){var d=c[0],k=
c[1];c=c[2];return Math.abs((d[0]-c[0])*(k[1]-d[1])-(d[0]-k[0])*(c[1]-d[1]))}function D(){function c(c,e){for(;0<e;){var b=(e+1>>1)-1,d=g[b];if(0<=c[1][2]-d[1][2])break;g[d._=e]=d;g[c._=e=b]=c}}function d(c,e){for(;;){var b=e+1<<1,d=b-1,f=e,a=g[f];d<l&&0>g[d][1][2]-a[1][2]&&(a=g[f=d]);b<l&&0>g[b][1][2]-a[1][2]&&(a=g[f=b]);if(f===e)break;g[a._=e]=a;g[c._=e=f]=c}}var k={},g=[],l=0;k.push=function(d){c(g[d._=l]=d,l++);return l};k.pop=function(){if(!(0>=l)){var c=g[0],e;0<--l&&(e=g[l],d(g[e._=0]=e,0));
return c}};k.remove=function(h){var e=h._,b;if(g[e]===h)return e!==--l&&(b=g[l],(0>b[1][2]-h[1][2]?c:d)(g[b._=e]=b,e)),e};return k}function y(c){if(!c)return A;var d,k,g=c.scale[0],l=c.scale[1],h=c.translate[0],e=c.translate[1];return function(b,c){c||(d=k=0);b[0]=(d+=b[0])*g+h;b[1]=(k+=b[1])*l+e}}function E(c){if(!c)return A;var d,k,g=c.scale[0],l=c.scale[1],h=c.translate[0],e=c.translate[1];return function(b,c){c||(d=k=0);var f=(b[0]-h)/g|0,a=(b[1]-e)/l|0;b[0]=f-d;b[1]=a-k;d=f;k=a}}function A(){}
var t={version:"1.6.19",mesh:function(c){return q(c,v.apply(this,arguments))},meshArcs:v,merge:function(c){return q(c,w.apply(this,arguments))},mergeArcs:w,feature:function(c,d){return"GeometryCollection"===d.type?{type:"FeatureCollection",features:d.geometries.map(function(d){return x(c,d)})}:x(c,d)},neighbors:function(c){function d(a,b){a.forEach(function(a){0>a&&(a=~a);var c=l[a];c?c.push(b):l[a]=[b]})}function k(a,b){a.forEach(function(a){d(a,b)})}function g(a,b){if("GeometryCollection"===a.type)a.geometries.forEach(function(a){g(a,
b)});else if(a.type in e)e[a.type](a.arcs,b)}var l={},h=c.map(function(){return[]}),e={LineString:d,MultiLineString:k,Polygon:k,MultiPolygon:function(a,b){a.forEach(function(a){k(a,b)})}};c.forEach(g);for(var b in l){c=l[b];for(var m=c.length,f=0;f<m;++f)for(var a=f+1;a<m;++a){var p=c[f],q=c[a],r;(r=h[p])[b=z(r,q)]!==q&&r.splice(b,0,q);(r=h[q])[b=z(r,p)]!==p&&r.splice(b,0,p)}}return h},presimplify:function(c,d){function k(c){h.remove(c);c[1][2]=d(c);h.push(c)}var g=y(c.transform),l=E(c.transform),
h=D();d||(d=C);c.arcs.forEach(function(c){for(var b=[],m=0,f,a=0,p=c.length;a<p;++a)f=c[a],g(c[a]=[f[0],f[1],Infinity],a);a=1;for(p=c.length-1;a<p;++a)f=c.slice(a-1,a+2),f[1][2]=d(f),b.push(f),h.push(f);a=0;for(p=b.length;a<p;++a)f=b[a],f.previous=b[a-1],f.next=b[a+1];for(;f=h.pop();)b=f.previous,a=f.next,f[1][2]<m?f[1][2]=m:m=f[1][2],b&&(b.next=a,b[2]=f[2],k(b)),a&&(a.previous=b,a[0]=f[0],k(a));c.forEach(l)});return c}};"function"===typeof define&&define.amd?define(t):"object"===typeof module&&module.exports?
module.exports=t:this.topojson=t}();