백준을 아십니까?
네 맞습니다, 아무도 대답 안하셨지만 안다고 치고 넘어가보죠.
백준은 프로그래밍 문제를 온라인으로 풀고 채점받는 곳입니다.
각종 대회를 비롯한 다양한 알고리즘 문제가 모여있는 곳이죠
여기서 가장 기본적인 문제는 1000번이 아닐까 싶습니다.
정직하게 두 정수를 입력받아 그 합을 출력하는 프로그램이죠.
모든 언어가 다 짧은 코드로 기능을 만들 수 있습니다.
1
2
|
a, b = map(int, input().split())
print(a+b)
|
cs |
파이썬
1
2
3
4
5
6
7
8
|
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a+b << endl;
return 0;
}
|
cs |
c++17
그 유명한 골프스크립트는 ~+ 두 글자로 가능합니다.
숏코딩 상위권도 다 골프스크립트군요
좋습니다. 이제 코드를 길게 짜보죠.
코드를 길게 짜려면 저급언어를 쓰는 것이 좋습니다.
여기서 저급언어란 질이 낮은게 아니라 컴퓨터가 이해하기 쉬운 언어죠.
어셈블리어가 떠오르는군요! 바로 짜보죠
어셈블리 64bit는
section .data input: db "%d %d",0 output: db "%d",10,0
a: times 4 db 0 b: times 4 db 0
section .text global main extern scanf extern printf
main: push rbp
mov rdi, input lea rsi, [a] lea rdx, [b] mov rax, 0 call scanf
mov rax, [a] mov rbx, [b] add rax, rbx
mov rdi, output mov rsi, rax mov rax, 0 call printf
pop rbp mov rax,0 ret
이렇습니다. 좀 길지만 아직도 부족하군요.
그럼 어떻게 할까요? c에 어셈블리를 주입하는 겁니다!
__asm { mov eax, edx add eax, 2 }
이걸 써볼까요?
nop 중간에 끼워넣고... 거기에 스택 할당 죄다 힙으로 돌리면 용량도 커지겠군요
최후의 카드로 모든 라이브러리를 정적으로 불러오는 겁니다! 와우!
(이 과정에는 tmvkr****님의 도움을 받았습니다.)
이런...아직도 부족하군요
하지만 이럴 때 방법이 있죠.
아희를 쓰는겁니다!
핫하! 성공!
코드는 이모양입니다.
와우! 이걸로 1000줄 미션을 달성했습니다.
폭발적인 반응이군요.
감사합니다!
폴리매스 만세에에