PageSourceSearch

https://naemo.ai/_next/static/chunks/4635.101134af52938eb8.js

js naemo.ai collected 2026-09-24 14:31:05 UTC 11,503 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4635,6919],{20067:function(){},72061:function(){},73947:function(e,t,n){"use strict";n.d(t,{_O:function(){return d},no:function(){return u},parseGradeExcel:function(){return g}});var r=n(2093);let l={국어:"국어","화법과 작문":"국어",독서:"국어","언어와 매체":"국어",문학:"국어","실용 국어":"국어","심화 국어":"국어","고전 읽기":"국어",공통국어1:"국어",공통국어2:"국어","화법과 언어":"국어","독서와 작문":"국어","주제 탐구 독서":"국어","문학과 영상":"국어","직무 의사소통":"국어","독서 토론과 글쓰기":"국어","매체 의사소통":"국어","언어생활 탐구":"국어",수학:"수학",수학Ⅰ:"수학",수학Ⅱ:"수학",미적분:"수학","확률과 통계":"수학","기본 수학":"수학","실용 수학":"수학","인공지능 수학":"수학",기하:"수학","경제 수학":"수학","수학과제 탐구":"수학",공통수학1:"수학",공통수학2:"수학",기본수학1:"수학",기본수학2:"수학",대수:"수학",미적분Ⅰ:"수학",미적분Ⅱ:"수학",직무수학:"수학","수학과 문화":"수학","실용 통계":"수학",영어:"영어","영어 회화":"영어",영어Ⅰ:"영어",영어Ⅱ:"영어","영어 독해와 작문":"영어","기본 영어":"영어","실용 영어":"영어","영어권 문화":"영어","진로 영어":"영어","영미 문학 읽기":"영어",공통영어1:"영어",공통영어2:"영어",기본영어1:"영어",기본영어2:"영어","영어 발표와 토론":"영어","심화 영어":"영어","심화 영어 독해와 작문":"영어","직무 영어":"영어","실생활 영어 회화":"영어","미디어 영어":"영어","세계 문화와 영어":"영어",한국사:"한국사",한국사1:"한국사",한국사2:"한국사",사회:"사회(역사/도덕 포함)",통합사회:"사회(역사/도덕 포함)",한국지리:"사회(역사/도덕 포함)",세계지리:"사회(역사/도덕 포함)",세계사:"사회(역사/도덕 포함)",동아시아사:"사회(역사/도덕 포함)",경제:"사회(역사/도덕 포함)","정치와 법":"사회(역사/도덕 포함)",사회·문화:"사회(역사/도덕 포함)","생활과 윤리":"사회(역사/도덕 포함)","윤리와 사상":"사회(역사/도덕 포함)",여행지리:"사회(역사/도덕 포함)","고전과 윤리":"사회(역사/도덕 포함)",통합사회1:"사회(역사/도덕 포함)",통합사회2:"사회(역사/도덕 포함)","세계시민과 지리":"사회(역사/도덕 포함)","사회와 문화":"사회(역사/도덕 포함)","현대사회와 윤리":"사회(역사/도덕 포함)","역사로 탐구하는 현대 세계":"사회(역사/도덕 포함)","사회문제 탐구":"사회(역사/도덕 포함)","금융과 경제생활":"사회(역사/도덕 포함)","윤리문제 탐구":"사회(역사/도덕 포함)","기후변화와 지속가능한 세계":"사회(역사/도덕 포함)","도시의 미래 탐구":"사회(역사/도덕 포함)","동아시아 역사 기행":"사회(역사/도덕 포함)","정치\xb7법과 사회":"사회(역사/도덕 포함)","국제 관계의 이해":"사회(역사/도덕 포함)","인문학과 윤리":"사회(역사/도덕 포함)",통합과학:"과학",과학탐구실험:"과학",물리학Ⅰ:"과학",물리학Ⅱ:"과학",화학Ⅰ:"과학",화학Ⅱ:"과학",생명과학Ⅰ:"과학",생명과학Ⅱ:"과학",지구과학Ⅰ:"과학",지구과학Ⅱ:"과학",융합과학:"과학",통합과학1:"과학",통합과학2:"과학",과학탐구실험1:"과학",과학탐구실험2:"과학",물리학:"과학",화학:"과학",생명과학:"과학",지구과학:"과학","역학과 에너지":"과학","전자기와 양자":"과학","물질과 에너지":"과학","화학반응의 세계":"과학","세포와 물질대사":"과학","생물의 유전":"과학",지구시스템과학:"과학",행성우주과학:"과학","과학의 역사와 문화":"과학","기후변화와 환경생태":"과학","융합과학 탐구":"과학",기술·가정:"기술\xb7가정/제2외국어/한문/교양",정보:"기술\xb7가정/제2외국어/한문/교양",일본어:"기술\xb7가정/제2외국어/한문/교양",중국어:"기술\xb7가정/제2외국어/한문/교양",일본어Ⅰ:"기술\xb7가정/제2외국어/한문/교양",중국어Ⅰ:"기술\xb7가정/제2외국어/한문/교양",일본어Ⅱ:"기술\xb7가정/제2외국어/한문/교양",중국어Ⅱ:"기술\xb7가정/제2외국어/한문/교양","진로와 직업":"기술\xb7가정/제2외국어/한문/교양",환경:"기술\xb7가정/제2외국어/한문/교양","보건 간호":"기술\xb7가정/제2외국어/한문/교양","인공지능 기초":"기술\xb7가정/제2외국어/한문/교양","데이터 과학":"기술\xb7가정/제2외국어/한문/교양","소프트웨어와 생활":"기술\xb7가정/제2외국어/한문/교양","인공지능과 미래 사회":"기술\xb7가정/제2외국어/한문/교양",체육:"체육","스포츠 생활":"체육","운동과 건강":"체육","스포츠 과학":"체육","스포츠 헬스케어":"체육",음악:"예술",미술:"예술","음악 연주":"예술","미술 창작":"예술","음악과 미디어":"예술","미술과 매체":"예술","예술적 감성과 표현":"예술"},i={Ⅰ:"1",Ⅱ:"2",Ⅲ:"3",Ⅳ:"4",Ⅴ:"5",Ⅵ:"6",Ⅶ:"7",Ⅷ:"8",Ⅸ:"9",Ⅹ:"10",ⅰ:"1",ⅱ:"2",ⅲ:"3",ⅳ:"4",ⅴ:"5"};function u(e){return e.replace(/[ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅰⅱⅲⅳⅴ]/g,e=>i[e]||e)}function s(e){return u(e).replace(/\s/g,"")}let a=Object.fromEntries(Object.entries(l).map(e=>{let[t,n]=e;return[s(t),n]})),c={NUM:"NUM",NAME:"NAME",YEAR:"YEAR",SEM:"SEM",CATE:"CATE",SUBJ:"SUBJ",UNIT:"UNIT",SCORE_INFO:"SCORE_INFO",ACH_INFO:"ACH_INFO",RANK:"RANK",DIST_RATIO:"DIST_RATIO"};function d(e,t){if(!e)return t||"";if(l[e])return l[e];let n=s(e);return a[n]?a[n]:e.includes("외국어")?"기술\xb7가정/제2외국어/한문/교양":t||""}function o(e){let t=e.map(e=>String(e).replace(/\s/g,""));return t.includes("번호")&&(t.includes("성명")||t.includes("이름"))}function f(e){if(!e||"-"===e)return{achievement:null,studentsCount:null};let t=e.replace(/\s/g,""),n=t.match(/^([A-EFP])\((\d+)\)$/);if(n)return{achievement:n[1],studentsCount:parseInt(n[2])};if(/^[A-EFP]$/.test(t))return{achievement:t,studentsCount:null};let r=t.match(/^(\d+)$/);return r?{achievement:null,studentsCount:parseInt(r[1])}:{achievement:null,studentsCount:null}}function S(e){if(!e||""===e.trim())return null;let t=e.trim();if("P"===t||"F"===t)return t;let n=parseFloat(t);return isNaN(n)?null:n}function m(e,t){let n={};return e.forEach((e,t)=>{let r=String(e).replace(/\s/g,"");r.includes("번호")?n[c.NUM]=t:r.includes("성명")||r.includes("이름")?n[c.NAME]=t:"학년"===r?n[c.YEAR]=t:"학기"===r?n[c.SEM]=t:r.includes("교과")?n[c.CATE]=t:"과목"===r?n[c.SUBJ]=t:r.
1includes("학점")||r.includes("단위")||r.includes("이수단위")?n[c.UNIT]=t:r.includes("원점수")&&r.includes("과목평균")?n[c.SCORE_INFO]=t:r.includes("성취도별분포비율")||r.includes("분포비율")?n[c.DIST_RATIO]=t:r.includes("성취도")||r.includes("수강자수")||r.includes("수강자")?n[c.ACH_INFO]=t:(r.includes("석차등급")||r.includes("석차")&&!r.includes("성취도"))&&(n[c.RANK]=t)}),n}async function g(e){var t,n;let l=r.read(e,{type:"array"}),i=l.SheetNames[0],s=l.Sheets[i],a=r.utils.sheet_to_json(s,{header:1,defval:""});for(let e=0;e<Math.min(10,a.length);e++)if((a[e]||[]).join(" ").trim().includes("전과목 성적 일람표"))throw Error("중간고사 성적 일람표로 보입니다. '내신 성적' 대신 '중간고사 성적' 탭에서 업로드해주세요.");let g=null,N=null;for(let e=0;e<Math.min(20,a.length);e++){let t=(a[e]||[]).join(" ").trim(),n=t.match(/(\d+)\s*학년\s*(\d+)\s*반/)||t.match(/(\d+)\s*-\s*(\d+)/);if(n){g=parseInt(n[1]),N=parseInt(n[2]);break}}let A=-1,v={};for(let e=0;e<Math.min(50,a.length);e++){let t=a[e]||[];if(o(t)){A=e,v=m(t,!1);break}}if(-1===A)throw Error("엑셀 파일에서 적절한 헤더를 찾을 수 없습니다. ('번호', '성명', '과목' 등 포함 필요)");let h=[],E=null,I=null,p=null,C=null,O=null,R=!1;for(let e=A+1;e<a.length;e++){let t=a[e];if(!t||0===t.length)continue;if(function(e){let t=e.join("");return t.includes("진로 선택 과목")||t.includes("진로선택과목")}(t)){R=!0;continue}if(o(t)){v=m(t,R);continue}if(function(e){let t=String(e[0]||"");return t.includes("이수학점 합계")||t.includes("이수학점합계")}(t)||String(t[0]).includes("고등학교"))continue;let n=void 0!==v[c.SUBJ]?String(t[v[c.SUBJ]]||"").trim():"";if(!n&&"5"in t&&(n=String(t[5]).trim()),!n||/\d+\/\d+/.test(n))continue;let r=void 0!==v[c.NUM]?t[v[c.NUM]]:null,l=void 0!==v[c.NAME]?t[v[c.NAME]]:null,i=void 0!==v[c.YEAR]?t[v[c.YEAR]]:null,s=void 0!==v[c.SEM]?t[v[c.SEM]]:null;if(r&&String(r).trim()){let e=parseInt(String(r));isNaN(e)||(E=e)}if(l&&String(l).trim()&&(I=String(l).trim()),i&&String(i).trim()){let e=String(i).match(/(\d+)/);e&&(p=parseInt(e[1]))}if(s&&String(s).trim()){let e=String(s).match(/(\d+)/);e&&(C=parseInt(e[1]))}if(!E||!I)continue;let A=void 0!==v[c.CATE]?String(t[v[c.CATE]]||""):"";!A&&"4"in t&&(A=String(t[4])),A.trim()&&(O=A.trim());let _=A.trim()||O||"",F=v[c.UNIT],b=void 0!==F&&parseInt(String(t[F]||"0"))||0,T=function(e,t){if(!e||""===e.trim())return{rawScore:null,subjectAverage:null,standardDeviation:null};let n=e.replace(/\s/g,""),r=n.match(/^(\d+(?:\.\d+)?)\/(\d+(?:\.\d+)?)\((\d+(?:\.\d+)?)\)$/);if(r)return{rawScore:parseFloat(r[1]),subjectAverage:parseFloat(r[2]),standardDeviation:parseFloat(r[3])};let l=n.match(/^(\d+(?:\.\d+)?)\/(\d+(?:\.\d+)?)$/);if(l)return{rawScore:parseFloat(l[1]),subjectAverage:t?null:parseFloat(l[2]),standardDeviation:null};let i=n.match(/^(\d+(?:\.\d+)?)$/);return i?{rawScore:parseFloat(i[1]),subjectAverage:null,standardDeviation:null}:{rawScore:null,subjectAverage:null,standardDeviation:null}}(void 0!==v[c.SCORE_INFO]?String(t[v[c.SCORE_INFO]]||""):"",R),M=1===g||2===g,j=null,U=null;if(void 0!==v[c.ACH_INFO]){let e=f(String(t[v[c.ACH_INFO]]||""));j=e.achievement,U=e.studentsCount}if(null===U&&!M&&void 0!==v[c.RANK]){let e=String(t[v[c.RANK]]||"").match(/\/(\d+)/);e&&(U=parseInt(e[1]))}if(!j)for(let e=7;e<=9;e++){if(!(String(e) in t))continue;let n=String(t[e]||"");if(!/\d+\/\d+/.test(n)){let e=f(n);if(e.achievement){j=e.achievement,e.studentsCount&&(U=e.studentsCount);break}}}let w=null;if(void 0!==v[c.RANK]&&(w=S(String(t[v[c.RANK]]||""))),null===w&&!R&&"9"in t){let e=String(t[9]||"");if(e.length<5&&!e.includes("/")){let t=S(e);null!==t&&(w=t)}}h.push({currentGrade:g||0,currentClass:N||0,studentNumber:E,studentName:I,year:p||g||0,semester:C||1,subjectCategory:d(n,_),subjectName:u(n),credits:b,rawScore:T.rawScore,subjectAverage:T.subjectAverage,standardDeviation:T.standardDeviation,achievement:j,studentsCount:U,gradeRank:w,isCareerSubject:R,...function(e){let t;if(!e||""===e.trim())return{};let n={},r=/([A-E])\(([\d.]+)\)/g;for(;null!==(t=r.exec(e));){let e=t[1],r=parseFloat(t[2]);
1isNaN(r)||(n["dist".concat(e)]=r)}return n}(void 0!==v[c.DIST_RATIO]?String(t[v[c.DIST_RATIO]]||""):"")})}return{schoolName:null,gradeClass:g&&N?"".concat(g,"학년 ").concat(N,"반"):null,totalStudents:new Set(h.map(e=>e.studentNumber)).size,totalRecords:h.length,year:(null===(t=h[0])||void 0===t?void 0:t.year)||g||null,semester:(null===(n=h[0])||void 0===n?void 0:n.semester)||1,parsedData:h}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.