일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Crawling
- BFS
- Node.js
- typescript
- 그래프
- dfs
- 타입 챌린지
- 수학
- HTTP
- 프로그래머스 레벨 2
- 가천대
- 쉬운 문제
- HTTP 완벽 가이드
- javascript
- 타입스크립트
- 문자열
- socket
- 알고리즘
- 크롤링
- type challenge
- 프로그래머스
- TCP
- 자바스크립트
- 백준
- 레벨 1
- Nestjs
- 소켓
- Algorithm
- dp
- ip
- Today
- Total
목록프로그래밍 (478)
kakasoo
Basic Data Types Booleans : true 또는 false를 의미하며 Rust에서는 1byte 크기를 가진다. Character : Rust에선 4바이트의 크기이며, Rust에서는 ASCII를 Char로 저장하면 공간을 낭비하게 된다. Integers : 부호가 없는 경우 u, 부호가 있는 경우 i이며 비트에 따라 뒤의 숫자가 달라진다. u8,i8 u16, i16 u32, i32 u64, i64 u128, i128 Floats f32 f64 : f32 대비 2배의 정밀도를 갖는 타입 화성에서 무게를 재는 프로그램 $ cargo new mars_calc # mars_calc라는 프로젝트 폴더를 생성하낟. $ cd marcs_clac $ cargo run # Hello, world! 가 나오..
// main.rs fn main() { println!("Hello, world!"); } 함수의 호출은 위와 같이 작성해서, 다른 프로그래밍 언어와 다르지 않다. 앞서 ‘println!’을 따로 설명하지 않고 넘어갔는데 이는 함수가 아니라 러스트에서는 매크로라고 부르는 대상이다. 매크로는 메타 프로그래밍의 줄임말로 더 많은 코드를 작성하는 코드 작성의 한 가지 방법이라고 한다. 함수 시그니처는 이 함수가 받는 매개변수와 타입 ( = 데이터 유형 )을 반드시 명시해야 하는데, 매크로는 매번 다른 개수의 매개변수와 타입을 받을 수 있도록 작성하는 것이다. 단점은 매크로를 정의하는 게 함수보다 더 복잡하다는 점이 있지만 범용적으로 사용가능한 좋은 기능이다. fn main () { println!("Numb..
바이너리에 대한 메모리 레이아웃 fn main() { let a = 2; let result = stack_only(a); dbg!(result); } fn stack_only(b: i32) -> i32 { let c = 3; return b + c + stack_and_heap(); } fn stack_and_heap() -> i32 { let d = 5; let e = Box::new(7); return d + *e; } main : 함수의 진입점으로, 여기서부터 프로그램이 시작된다. i32 : 32비트 정수를 의미한다. Bow::new(7) : 러스트의 스마트 포인터 타입 이 코드를 해석하기 위해 일단 gdb를 설치하자. gdb는 GUI 환경에서 debugging을 도와주는 도구로, homebrew..
모던 언어 Modern languages 변수들은 기본적으로 불변입니다. 타입 추론을 합니다. 타입 세이프티를 강조합니다. 반환 유형을 가진 함수를 사용합니다. 여러 프로세스, 스레드에서 동시에 실행될 수 있는 쉬운 방법을 제공합니다. 프로세스간 통신을 위한 쉬운 방법을 제공합니다. 함수형 프로그래밍을 강조합니다. 세미콜론을 끝에 필요로 하지 않습니다. REPL을 제공합니다 (컴파일 없이 즉석에서 코드를 실행해서 바로 결과를 알 수 있는 방식) 대부분을 정적 타입으로 선언합니다. 복잡하고 장황하지 않은 깨끗하고 우아한 구문을 가지고 있습니다. 일반적으로 모던 언어라고 하면 말하는 장점들은 위와 같다. 모던 시스템 프로그래밍 언어 Rust는 런타임이나 가비지 컬렉터 없이도 엄청나게 빠르고 효율적인 메모리를..
type Split = T extends `${infer FirstLetter}${infer Rest}` ? [FirstLetter, ...Split] : []; type StringLength = Split['length']; type Push = [...T, P]; type NTuple = P['length'] extends N ? P : NTuple; type Add = [...NTuple, ...NTuple]['length']; type ToNumber = T extends number ? T : never; type RemoveFirstLetter = T extends `${infer F}${infer Rest}` ? Rest : ''; type FindAll = P extends '' ? []..
최초의 풀이와 오답 type Int = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0'; type February = '02' type MonthsHasDays30 = '04' | '06' | '09' | '11'; type MonthsHasDays31 = '01' | '03' | '05' | '07' | '08' | '10' | '12'; type Months = February | MonthsHasDays30 | MonthsHasDays31; type Days = Exclude type DaysByMonth = T extends February ? Exclude : T extends MonthsHasDays30 ? Exclude : Days ty..
SELECT createdAt, LEAD(createdAt) OVER (ORDER BY createdAt) AS next_value FROM tableName; LEAD () OVER () 구문을 사용하면 서로 값이 교차하게끔 다음 번 값을 구할 수 있다. 1) 2023-06-13 23:48:34 2023-06-15 17:49:45 2) 2023-06-15 17:49:45 2023-06-15 17:50:49 3) 2023-06-15 17:50:49 2023-06-16 13:48:39 4) 2023-06-16 13:48:39 2023-06-16 13:51:47 5) 2023-06-16 13:51:47 2023-06-19 14:13:36 위 쿼리를 실행시켜 얻은 값인데, 이렇게 특정 테이블로부터 create..
type GetMiddleElement = T extends [] ? [] : T extends [infer Last] ? T : T extends [infer First, infer Last] ? T : T extends [infer First, ...infer Middles extends any[], infer Last] ? GetMiddleElement : never;
이 정도는 가뿐했다. // your answers type Shift = T extends [infer F, ...infer Rest] ? Rest : never; declare function Currying(fn: T): T extends (...params: infer Params) => infer R ? Params['length'] extends 0 ? () => ReturnType : Params['length'] extends 1 ? (p: Params[0]) => ReturnType : (p: Params[0]) => ReturnType> : never;
type SingletonizeMethod, ExcludeKeys extends keyof T> = { [key in keyof T as key extends ExcludeKeys ? never : key]: T[key] } type OmittedExcute = SingletonizeMethod; class A { execute () : OmittedExcute { return new A(); } additional () : T extends true ? OmittedExcute : A { return new A(); } }
왜 큰 부자들은 대부분 하나같이 가난하였던 과거를 갖고 있을까? 어째서 중산층 이상의 가정에서 태어나 부자가 된 사람들보다는 하류층에서 태어나 큰 부자가 된 사람들의 수가 압도적으로 더 많은 것일까? 여러 가지 이유가 있겠지만 중요한 사실은, 가난을 일찍 경험한 사람들은 가난하였던 생활 수준이 출발점이였기에 그곳으로 언제라도 '되돌아가는 것'을 부끄럽지 않게 생각한다는 것이다. 그들은 일이 잘못되어 갖고 있던 것을 모두 다 날리는 실패를 당하게 되어도 제로 점으로 '되돌아가' 재출발을 할 줄 안다. 머리가 띵해지는 문장이다.
type SnakeToCamelCaseObject = { [K in keyof T as SnakeToCamel]: T[K] extends object ? SnakeToCamelCaseObject : T[K]; }; const c: SnakeToCamelCaseObject = { aB: { cD: { eF: { gH: true, }, }, }, iJ: false, }; 카멜케이스 타입을 재귀적으로 돌게 하면 위와 같이 스네이크 케이스로 만들어진 타입을 재귀적으로 카멜 케이스가 되게 수정할 수 있다. 컨벤션을 일괄적으로 변경하기에 용이하다. 문자열을 카멜케이스로 변경하는 타입은 아래에서 확인할 수 있다. SnakeCase에서 CamelCase로 리터럴 타입 추론하기 type SnakeToCamel< Targ..