Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3주차 과제 #36

Open
wants to merge 8 commits into
base: so0choi
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 21 additions & 17 deletions 1week/assignment/01.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,42 @@
/**
* 아래의 객체들을 동일하게 선언할 수 있는 타입을 작성해주세요.
*/

type sexEn = "male" | "femail";

type sexKo = "남자" | "여자";

type Person = {
name: string | Name;
age: number | string;
sex: 'male' | 'female' | '남자' | '여자';
birth: string| Date | null;
sex: sexEn | sexKo;
birth: string | Date | null;
death?: Date;
};

type Name = {
first: string | number;
last: string | number;
}
[key: string]: string | number;
};

const personA: Person = {
name: 'Alan Turing',
name: "Alan Turing",
age: 32,
sex: 'male',
birth: new Date('1912/06/23'),
death: new Date('1954/06/07'),
sex: "male",
birth: new Date("1912/06/23"),
death: new Date("1954/06/07"),
};

const personB: Person = {
name: '홍길동',
age: '23',
sex: '남자',
birth: '옛날 옛적에',
name: "홍길동",
age: "23",
sex: "남자",
birth: "옛날 옛적에",
};

const personC: Person = {
name: { first: 22, last: 'minx' },
age: 'sixteen',
sex: 'female',
name: { first: 22, last: "minx" },
age: "sixteen",
sex: "female",
birth: null,
death: new Date('1954/06/07'),
death: new Date("1954/06/07"),
};
6 changes: 3 additions & 3 deletions 1week/assignment/03.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

// best: generic
// or: generic 받아서 userRole 타입으로?
type UserInformation = {
type UserInformation<T> = {
userId: string;
userName: string;
userRole: UserRole;
userRole: UserRole | T;
password: string;
};

type UserRole = 'normal' | 'vip' | 'admin';
type UserRole = "normal" | "vip" | "admin";
139 changes: 61 additions & 78 deletions 1week/assignment/08.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,92 +2,75 @@
* 아래의 함수가 동작하도록 리팩토링 해주세요.
* - 문자열 배열을 입력하면 2차원 배열로 각 아이템이 p 태그로 묶여서 나옵니다.
* [
[
'<p> 모두 잠드는 밤에 </p>',
'<p> 혼자 우두커니 앉아 </p>',
'<p> 다 지나버린 오늘을 </p>',
'<p> 보내지 못하고서 깨어있어 </p>',
'<p> 누굴 기다리나 </p>',
'<p> 아직 할 일이 남아 있었던가 </p>',
'<p> 그것도 아니면 돌아가고 싶은 </p>',
'<p> 그리운 자리를 떠올리나 </p>',
'<p> 무릎을 베고 누우면 나 아주 어릴 적 </p>',
'<p> 그랬던 것처럼 머리칼을 넘겨줘요 </p>',
'<p> 그 좋은 손길에 까무룩 잠이 들어도 </p>',
'<p> 잠시만 그대로 두어요 </p>',
'<p> 깨우지 말아요 아주 깊은 잠을 잘 거예요 </p>',
'<p> 조용하던 두 눈을 </p>',
'<p> 다시 나에게 내리면 </p>',
'<p> 나 그때처럼 말갛게 </p>',
'<p> 웃어 보일 수 있을까 </p>',
'<p> 나 지친 것 같아 </p>',
'<p> 이 정도면 오래 버틴 것 같아 </p>',
'<p> 그대 있는 곳에 돌아갈 수 있는 </p>',
'<p> 지름길이 있다면 좋겠어 </p>',
'<p> 무릎을 베고 누우면 나 아주 어릴 적 </p>',
'<p> 그랬던 것처럼 머리칼을 넘겨줘요 </p>',
'<p> 그 좋은 손길에 까무룩 잠이 들어도 </p>',
'<p> 잠시만 그대로 두어요 </p>',
'<p> 깨우지 말아요 아주 깊은 잠을 잘 거예요 </p>',
'<p> 스르르르륵 스르르 깊은 잠을 잘 거예요 </p>',
'<p> 스르르르륵 스르르 깊은 잠을 </p>'
]
]
[
'<p> 모두 잠드는 밤에 </p>',
'<p> 혼자 우두커니 앉아 </p>',
'<p> 다 지나버린 오늘을 </p>',
'<p> 보내지 못하고서 깨어있어 </p>',
'<p> 누굴 기다리나 </p>',
'<p> 아직 할 일이 남아 있었던가 </p>',
'<p> 그것도 아니면 돌아가고 싶은 </p>',
'<p> 그리운 자리를 떠올리나 </p>',
'<p> 무릎을 베고 누우면 나 아주 어릴 적 </p>',
'<p> 그랬던 것처럼 머리칼을 넘겨줘요 </p>',
'<p> 그 좋은 손길에 까무룩 잠이 들어도 </p>',
'<p> 잠시만 그대로 두어요 </p>',
'<p> 깨우지 말아요 아주 깊은 잠을 잘 거예요 </p>',
'<p> 조용하던 두 눈을 </p>',
'<p> 다시 나에게 내리면 </p>',
'<p> 나 그때처럼 말갛게 </p>',
'<p> 웃어 보일 수 있을까 </p>',
'<p> 나 지친 것 같아 </p>',
'<p> 이 정도면 오래 버틴 것 같아 </p>',
'<p> 그대 있는 곳에 돌아갈 수 있는 </p>',
'<p> 지름길이 있다면 좋겠어 </p>',
'<p> 무릎을 베고 누우면 나 아주 어릴 적 </p>',
'<p> 그랬던 것처럼 머리칼을 넘겨줘요 </p>',
'<p> 그 좋은 손길에 까무룩 잠이 들어도 </p>',
'<p> 잠시만 그대로 두어요 </p>',
'<p> 깨우지 말아요 아주 깊은 잠을 잘 거예요 </p>',
'<p> 스르르르륵 스르르 깊은 잠을 잘 거예요 </p>',
'<p> 스르르르륵 스르르 깊은 잠을 </p>'
]
]
* - 함수를 리팩토링해주세요.
*/

function parseTaggedText(lines: string[]): (readonly string[])[] {
const paragraphs: (readonly string[])[] = [];
let currPara: readonly string[] = [];
const currPara = lines.map((line) => `<p> ${line} </p>`);

const addParagraph = () => {
if (currPara.length) {
paragraphs.push(currPara);
currPara = [];
}
};

for (const line of lines) {
if (!line) {
addParagraph();
} else {
currPara = currPara.concat(`<p> ${line} </p>`);
}
}

addParagraph();
return paragraphs;
return [currPara];
}

const parameter = [
'모두 잠드는 밤에',
'혼자 우두커니 앉아',
'다 지나버린 오늘을',
'보내지 못하고서 깨어있어',
'누굴 기다리나',
'아직 할 일이 남아 있었던가',
'그것도 아니면 돌아가고 싶은',
'그리운 자리를 떠올리나',
'무릎을 베고 누우면 나 아주 어릴 적',
'그랬던 것처럼 머리칼을 넘겨줘요',
'그 좋은 손길에 까무룩 잠이 들어도',
'잠시만 그대로 두어요',
'깨우지 말아요 아주 깊은 잠을 잘 거예요',
'조용하던 두 눈을',
'다시 나에게 내리면',
'나 그때처럼 말갛게',
'웃어 보일 수 있을까',
'나 지친 것 같아',
'이 정도면 오래 버틴 것 같아',
'그대 있는 곳에 돌아갈 수 있는',
'지름길이 있다면 좋겠어',
'무릎을 베고 누우면 나 아주 어릴 적',
'그랬던 것처럼 머리칼을 넘겨줘요',
'그 좋은 손길에 까무룩 잠이 들어도',
'잠시만 그대로 두어요',
'깨우지 말아요 아주 깊은 잠을 잘 거예요',
'스르르르륵 스르르 깊은 잠을 잘 거예요',
'스르르르륵 스르르 깊은 잠을',
"모두 잠드는 밤에",
"혼자 우두커니 앉아",
"다 지나버린 오늘을",
"보내지 못하고서 깨어있어",
"누굴 기다리나",
"아직 할 일이 남아 있었던가",
"그것도 아니면 돌아가고 싶은",
"그리운 자리를 떠올리나",
"무릎을 베고 누우면 나 아주 어릴 적",
"그랬던 것처럼 머리칼을 넘겨줘요",
"그 좋은 손길에 까무룩 잠이 들어도",
"잠시만 그대로 두어요",
"깨우지 말아요 아주 깊은 잠을 잘 거예요",
"조용하던 두 눈을",
"다시 나에게 내리면",
"나 그때처럼 말갛게",
"웃어 보일 수 있을까",
"나 지친 것 같아",
"이 정도면 오래 버틴 것 같아",
"그대 있는 곳에 돌아갈 수 있는",
"지름길이 있다면 좋겠어",
"무릎을 베고 누우면 나 아주 어릴 적",
"그랬던 것처럼 머리칼을 넘겨줘요",
"그 좋은 손길에 까무룩 잠이 들어도",
"잠시만 그대로 두어요",
"깨우지 말아요 아주 깊은 잠을 잘 거예요",
"스르르르륵 스르르 깊은 잠을 잘 거예요",
"스르르르륵 스르르 깊은 잠을",
];

console.log(parseTaggedText(parameter));
3 changes: 1 addition & 2 deletions 2week/assignment/07.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
// 7. 다음에서 falsy 값만 분리해보세요.
const arr = [0, 1, "", undefined, false, 2, undefined, null, -1, 3, NaN];

// 하.. 모르겠다.. . . . .
function isFalsy<T>(x: T) {
function isFalsy(x: unknown) {
if (x) return false;
return true;
}
Expand Down
22 changes: 22 additions & 0 deletions 3week/assignment/01.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* 문제1
* 다음의 파파고 번역 api 명세를 확인하고
* 파라미터에 필요한 source 와 target 을 좁혀주세요.
* @description: 링크: https://developers.naver.com/docs/papago/papago-nmt-api-reference.md
* */
type PapagoParamsSource = PapagoLangCode;
type PapagoParamsTarget = PapagoLangCode;
type PapagoLangCode =
| "ko"
| "en"
| "ja"
| "zh-CN"
| "zh-TW"
| "vi"
| "id"
| "th"
| "de"
| "ru"
| "es"
| "it"
| "fr";
48 changes: 48 additions & 0 deletions 3week/assignment/02.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* 문제2
* 위의 PapagoParamsSource와 PapagoParamsTarget 를 조합하여 명세에서 언급하는
* "번역할 수 있는 원본 언어와 목적 언어는 다음과 같습니다." 의 제약조건을 참고하여 PapagoParams 인터페이스를 개선해 주세요.
* */

interface PapagoParamSourceKo {
source: "ko";
target: PapagoParamsTarget;
}

interface PapagoParamSourceEn {
source: "en";
target: "ja" | "fr" | "zh-CN" | "zh-TW";
}

interface PapagoParamSourceJa {
source: "ja";
target: "zh-CN" | "zh-TW" | "en";
}

interface PapagoParamSourceZhCn {
source: "zh-CN";
target: "zh-TW" | "ja" | "en";
}

interface PapagoParamSourceZhTw {
source: "zh-TW";
target: "en" | "ja" | "zh-CN";
}

interface PapagoParamSourceFr {
source: "fr";
target: "en";
}

type PapagoParams = (
| PapagoParamSourceKo
| PapagoParamSourceEn
| PapagoParamSourceFr
| PapagoParamSourceJa
| PapagoParamSourceZhTw
| PapagoParamSourceZhCn
| {
source: PapagoParamsSource;
target: "ko";
}
) & { text: string };
35 changes: 35 additions & 0 deletions 3week/assignment/03.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* 문제3
* 스탑워치 구현을 보고 ui 상태 interface 설계를 개선해주세요.
* https://online-stopwatch.ko.downloadastro.com/tools/
* */

// 스탑워치 링크가 막혀서 확인이 안되네요 😢 나중에 다시 살펴보겠습니다~~

// 예시 인터페이스이고, 본인이 생각하는 더 나은 인터페이스로 바꾸셔도 됩니다.
interface ButtonStyle {
color: string;
}

interface StopWatchState {
state: "ready" | "running" | "stopped";
startButton?: {
icon: "startButton";
style: ButtonStyle;
};
pauseButton?: {
icon: "pauseButton";
style: ButtonStyle;
};
resetButton?: {
icon: "resetButton";
style: ButtonStyle;
};
addLapButton?: {
icon: "addLapButton";
style: ButtonStyle;
};
lappedTimeList?: string[];
timeFormStart: string;
timeFormLastLap: string;
}
Loading