183 lines
7.2 KiB
HTML
183 lines
7.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ko">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>BOJ 2733 - Offline</title>
|
|
<style>
|
|
:root {
|
|
--bg: #fafaf8;
|
|
--paper: #ffffff;
|
|
--ink: #1e1f24;
|
|
--muted: #6a6d75;
|
|
--line: #d8dce3;
|
|
--accent: #0d6e6e;
|
|
--code-bg: #f4f6fb;
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin: 0;
|
|
background:
|
|
radial-gradient(circle at 15% 0%, #f0efe9 0%, transparent 42%),
|
|
radial-gradient(circle at 85% 20%, #e7f1f2 0%, transparent 38%),
|
|
var(--bg);
|
|
color: var(--ink);
|
|
font-family: "Noto Sans KR", "Pretendard", "Apple SD Gothic Neo", sans-serif;
|
|
line-height: 1.65;
|
|
}
|
|
main {
|
|
max-width: 980px;
|
|
margin: 0 auto;
|
|
padding: 24px 16px 56px;
|
|
}
|
|
.header {
|
|
background: var(--paper);
|
|
border: 1px solid var(--line);
|
|
border-radius: 14px;
|
|
padding: 18px 20px;
|
|
margin-bottom: 18px;
|
|
}
|
|
.header h1 { margin: 0 0 6px; font-size: 1.5rem; }
|
|
.header p { margin: 0; color: var(--muted); font-size: 0.95rem; }
|
|
.header a { color: var(--accent); text-decoration: none; }
|
|
.section {
|
|
background: var(--paper);
|
|
border: 1px solid var(--line);
|
|
border-radius: 14px;
|
|
padding: 16px 18px;
|
|
margin-bottom: 14px;
|
|
overflow-x: auto;
|
|
}
|
|
h2 {
|
|
margin: 0 0 10px;
|
|
font-size: 1.05rem;
|
|
color: var(--accent);
|
|
border-bottom: 1px solid var(--line);
|
|
padding-bottom: 8px;
|
|
}
|
|
pre, code {
|
|
font-family: "JetBrains Mono", "Fira Code", monospace;
|
|
background: var(--code-bg);
|
|
}
|
|
pre {
|
|
padding: 12px;
|
|
border-radius: 10px;
|
|
border: 1px solid #e7ebf2;
|
|
overflow: auto;
|
|
}
|
|
blockquote {
|
|
margin: 14px 0;
|
|
padding: 16px 16px 14px 22px;
|
|
border-left: 4px solid var(--accent);
|
|
border-radius: 10px;
|
|
background: linear-gradient(90deg, #eef8f8 0%, #f9fdfd 100%);
|
|
color: #24313a;
|
|
font-weight: 600;
|
|
position: relative;
|
|
}
|
|
blockquote::before {
|
|
content: "“";
|
|
position: absolute;
|
|
left: 8px;
|
|
top: 2px;
|
|
font-size: 1.35rem;
|
|
line-height: 1;
|
|
color: #0b5f5f;
|
|
opacity: 0.7;
|
|
}
|
|
blockquote > :first-child { margin-top: 0; }
|
|
blockquote > :last-child { margin-bottom: 0; }
|
|
q {
|
|
color: #114f50;
|
|
font-weight: 700;
|
|
background: #edf8f8;
|
|
border-radius: 6px;
|
|
padding: 0 4px;
|
|
}
|
|
.math-inline math {
|
|
font-size: 1em;
|
|
vertical-align: middle;
|
|
}
|
|
.math-block {
|
|
margin: 10px 0;
|
|
padding: 8px 10px;
|
|
overflow-x: auto;
|
|
background: #f8fbff;
|
|
border: 1px solid #e2ecf8;
|
|
border-radius: 8px;
|
|
}
|
|
.math-block math {
|
|
font-size: 1.04em;
|
|
display: block;
|
|
}
|
|
table { border-collapse: collapse; width: 100%; }
|
|
th, td { border: 1px solid var(--line); padding: 6px 8px; }
|
|
img { max-width: 100%; height: auto; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<header class="header">
|
|
<h1>Brainf*ck</h1>
|
|
</header>
|
|
<article class="section">
|
|
<h2>문제</h2>
|
|
<p>Brainf*ck은 Urban Müller가 1993년에 만든 프로그래밍 언어이다. 그의 목적은 역사상 가장 작은 튜링 완전 언어(Turing -complete language)의 컴파일러를 만드는 것이었다.<a href="https://en.wikipedia.org/wiki/Brainfuck">위키백과</a>에는 다음과 같은 설명이 적혀져 있다. (designed to challenge and amuse programmers, and was not made to be suitable for practical use)</p>
|
|
|
|
<p>이 언어는 0으로 초기화 된 크기가 32768바이트인 바이트 배열, 배열의 맨 첫 바이트를 가리키는 포인터를 가지고 있다.</p>
|
|
|
|
<p>다음과 같이 7가지 명령어를 가지고 있으며, 각 명령어는 문자 1글자이다. (원래 8가지 명령어를 가지고 있지만, 문제를 위해 하나를 지웠다)</p>
|
|
|
|
<ul>
|
|
<li><code>></code>: 포인터를 증가시킨다. 만약, 포인터 값이 32767이면 0이된다.</li>
|
|
<li><code><</code>: 포인터를 감소시킨다. 만약, 포인터 값이 0이면 32767이 된다.</li>
|
|
<li><code>+</code>: 포인터가 가리키는 값을 증가시킨다. 255를 증가시키면 0이 된다.</li>
|
|
<li><code>-</code>: 포인터가 가리키는 값을 감소시킨다. 0을 감소시키면 255가 된다.</li>
|
|
<li><code>.</code>: 포인터가 가리키는 값을 ASCII문자로 출력한다.</li>
|
|
<li><code>[</code>: 포인터가 가리키는 값이 0이면, 짝이 되는 뒤쪽의 ]로 이동한다.</li>
|
|
<li><code>]</code>: 포인터가 가리키는 값이 0이 아니면, 짝이되는 앞쪽의 [로 이동한다.</li>
|
|
</ul>
|
|
|
|
<p>Brainf*ck 프로그램이 주어졌을 때, 이 프로그램의 출력을 출력하는 프로그램을 작성하시오.</p>
|
|
</article>
|
|
<article class="section">
|
|
<h2>입력</h2>
|
|
<p>첫째 줄에 프로그램의 개수 T(1 ≤ T ≤ 100)가 주어진다. 각 프로그램은 한줄 또는 그 이상으로 구성되어 있으며, <code>end</code>만 적혀있는 줄로 끝난다. 프로그램에 올바르지 않은 문자 (<code><>+-.[]</code>)가 있다면, 이는 무시하고 넘어가야 한다. <code>%</code>는 주석을 의미하며, <code>%</code>가 나온 뒤에 나오는 해당 줄의 문자는 모두 무시한다. 프로그램의 최대 명령어 개수는 128,000이다.</p>
|
|
</article>
|
|
<article class="section">
|
|
<h2>출력</h2>
|
|
<p>각 프로그램의 결과를 다음과 같이 출력한다. 첫째 줄에 <code>PROGRAM #n</code>을 출력한다. <code>n</code>은 프로그램 번호이다. (첫 번째 프로그램부터 차례대로 1이고, 1 ≤ <code>n</code> ≤ N이다). 둘째 줄에는 프로그램의 결과를 출력한다. 만약 <code>[</code>나 <code>]</code>가 짝이 맞지 않을 대는 <code>COMPILE ERROR</code>를 출력하면 된다. 출력에서 여러 줄을 출력할 수도 있다.</p>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 입력 1 복사</h2>
|
|
<pre class="sampledata" id="sample-input-1">3
|
|
++++++++[>+++++++++ % hello-world.
|
|
<-]>.<+++++[>++++++<-]>-.+++++++..
|
|
+++.<++++++++[>>++++<<-]>>.<<++++[>
|
|
------<-]>.<++++[>++++++<-]>.+++.
|
|
------.--------.>+.
|
|
end
|
|
+++[>+++++++[.
|
|
end
|
|
%% Print alphabet, A-Z.
|
|
+ + + + + +++++++++++++++++++++>
|
|
++++++++++++++++++++++++++++++++
|
|
++++++++++++++++++++++++++++++++
|
|
+< [ >.+<- ]
|
|
end
|
|
</pre>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 출력 1 복사</h2>
|
|
<pre class="sampledata" id="sample-output-1">PROGRAM #1:
|
|
Hello World!
|
|
PROGRAM #2:
|
|
COMPILE ERROR
|
|
PROGRAM #3:
|
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
|
</pre>
|
|
</article>
|
|
</main>
|
|
</body>
|
|
</html>
|