Skip to content

Commit 867c4f1

Browse files
authored
Merge pull request reina314#6 from reina314/dev
Dev
2 parents 87d737e + 204ce0e commit 867c4f1

10 files changed

Lines changed: 302 additions & 88 deletions

File tree

app/lecture/src/components/Code.vue

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,57 @@
1+
<script setup>
2+
const props = defineProps({
3+
unique_id: {
4+
type: String,
5+
default: '',
6+
},
7+
language: {
8+
type: String,
9+
default: '',
10+
},
11+
content: {
12+
type: String,
13+
default: '',
14+
},
15+
})
16+
17+
$(document).ready(function() {
18+
$('#success-icon-' + props.unique_id).hide();
19+
20+
$("#btn-" + props.unique_id).click(() => {
21+
if (navigator.clipboard) {
22+
return navigator.clipboard.writeText(props.content).then(() => {
23+
$("#default-icon-" + props.unique_id).hide();
24+
$("#success-icon-" + props.unique_id).show();
25+
26+
$("#success-icon-" + props.unique_id).fadeOut(2000, function() {
27+
$("#default-icon-" + props.unique_id).show();
28+
});
29+
})
30+
} else {
31+
alert("Your browser does not support clipboard-copy!");
32+
}
33+
})
34+
})
35+
</script>
36+
137
<template>
238
<div class="py-3">
339
<div class="container bg-black-800 border border-green-600 rounded my-3 px-3 py-3">
4-
<p class="-mt-2 text-sm">bash</p>
5-
<div id="text" class="relative px-3 rounded bg-white text-black">
6-
user@Ri-one ~ $ <slot></slot>
7-
<button data-copy-to-clipboard-target="npm-install-copy-button" data-tooltip-target="tooltip-copy-npm-install-copy-button" class="absolute end-2 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg p-2 inline-flex items-center justify-center">
8-
<span id="default-icon">
40+
<p class="-mt-2 text-sm">{{ language }}</p>
41+
<div id="text" class="break-all relative px-3 py-2 rounded bg-white text-black">
42+
<slot></slot>
43+
<button :id="'btn-' + unique_id" class="absolute end-2 top-1/2 -translate-y-1/2 text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-lg p-2 inline-flex items-center justify-center">
44+
<span :id="'default-icon-' + unique_id">
945
<svg class="w-3.5 h-3.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 18 20">
1046
<path d="M16 1h-3.278A1.992 1.992 0 0 0 11 0H7a1.993 1.993 0 0 0-1.722 1H2a2 2 0 0 0-2 2v15a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2Zm-3 14H5a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2Zm0-4H5a1 1 0 0 1 0-2h8a1 1 0 1 1 0 2Zm0-5H5a1 1 0 0 1 0-2h2V2h4v2h2a1 1 0 1 1 0 2Z"/>
1147
</svg>
1248
</span>
13-
<span id="success-icon" class="hidden inline-flex items-center">
49+
<span :id="'success-icon-' + unique_id" class="inline-flex items-center">
1450
<svg class="w-3.5 h-3.5 text-blue-700 dark:text-blue-500" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 12">
1551
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M1 5.917 5.724 10.5 15 1.5"/>
1652
</svg>
1753
</span>
1854
</button>
19-
<div id="tooltip-copy-npm-install-copy-button" role="tooltip" class="absolute z-10 invisible inline-block px-3 py-2 text-sm font-medium text-white transition-opacity duration-300 bg-gray-900 rounded-lg shadow-sm opacity-0 tooltip dark:bg-gray-700">
20-
<span id="default-tooltip-message">Copy to clipboard</span>
21-
<span id="success-tooltip-message" class="hidden">Copied!</span>
22-
<div class="tooltip-arrow" data-popper-arrow></div>
23-
</div>
2455
</div>
2556
</div>
2657
</div>

app/lecture/src/components/Hint.vue

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
<script setup>
22
const props = defineProps({
3-
level: String
3+
unique_id: {
4+
type: String,
5+
default: '',
6+
},
47
})
58
69
$(document).ready(function() {
710
$('div.hint').hide();
811
912
// When a hint button clicked
10-
$('#hint-' + props.level + '-btn').click(function() {
13+
$('#hint-' + props.unique_id + '-btn').click(function() {
1114
var button = $(this)
1215
var targetValue = button.attr('target');
1316
@@ -23,8 +26,8 @@
2326

2427
<template>
2528
<div class="mx-5">
26-
<button :id="'hint-' + level + '-btn'" class="rounded p-1 bg-green-700 hover:bg-green-600" :target="'#hint-' + level">ヒントを見る</button>
27-
<div :id="'hint-' + level" class="hint">
29+
<button :id="'hint-' + unique_id + '-btn'" class="rounded p-1 bg-green-700 hover:bg-green-600" :target="'#hint-' + unique_id">ヒントを見る</button>
30+
<div :id="'hint-' + unique_id" class="hint">
2831
<p>Hint: <slot></slot></p>
2932
</div>
3033
</div>

app/lecture/src/components/ProgressFooter.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<script setup>
22
defineProps({
3-
progress: Number
3+
progress: {
4+
type: Number,
5+
default: 0,
6+
},
47
})
58
</script>
69

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<template>
22
<div class="container mx-auto my-16">
3-
<div class="mx-16 text-start">
3+
<div class="mx-auto sm:mx-5 md:mx-16 text-start">
44
<RouterLink class="p-2 rounded-md bg-green-700 hover:bg-green-600" :to="{ path: '/lecture/top' }">←トップへ戻る</RouterLink>
55
</div>
6-
<h1 class="text-4xl"><slot></slot></h1>
6+
<h1 class="text-4xl mt-3"><slot></slot></h1>
77
</div>
88
</template>

app/lecture/src/views/Answer.vue

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<template>
4646
<Title>演習問題 解答・解説</Title>
4747

48-
<div class="container w-3/6 mx-auto mb-10 text-start">
48+
<div class="container w-full sm:w-5/6 md:w-4/6 mx-auto mb-10 text-start">
4949
<div class="flex-col mx-auto mb-12 border rounded-lg border-green-600 p-3.5">
5050
<span class="text-2xl ml-2">目次</span><br>
5151
<ul class="ml-5 mt-3">
@@ -61,7 +61,7 @@
6161
</Paragraph>
6262
<Paragraph>
6363
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 入力される名前を、"Your name is XXX."のように出力するプログラムを書け。</SubHeader>
64-
<Hint level="1_easy"><span class="text-yellow-400">input()</span>関数を使うと、入力された文字列を取得できる。</Hint>
64+
<Hint unique_id="1_easy"><span class="text-yellow-400">input()</span>関数を使うと、入力された文字列を取得できる。</Hint>
6565

6666
<PyScript>
6767
name = input()
@@ -74,7 +74,7 @@
7474

7575
<Paragraph>
7676
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 入力される2数(num1, num2)の平均を求めるプログラムを書け。</SubHeader>
77-
<Hint level="1_med1">input()関数から返されるデータは、<span class="text-yellow-400">str</span>型であることに注意しよう。</Hint>
77+
<Hint unique_id="1_med1">input()関数から返されるデータは、<span class="text-yellow-400">str</span>型であることに注意しよう。</Hint>
7878

7979
<PyScript>
8080
num1 = input()
@@ -88,7 +88,7 @@
8888

8989
<Paragraph>
9090
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 次のプログラムの誤りを指摘し、修正せよ。</SubHeader>
91-
<Hint level="1_med2">プログラムは、括弧の内側から順に評価される。</Hint>
91+
<Hint unique_id="1_med2">プログラムは、括弧の内側から順に評価される。</Hint>
9292

9393
<PyScript>
9494
a = input() # aに任意の数を代入
@@ -104,7 +104,7 @@
104104

105105
<Paragraph>
106106
<SubHeader class="mb-3">[<span class="text-red-500 font-bold">Hard</span>] 1番目の整数(num1)から2番目の整数(num2)を引いた結果を出力するプログラムを書け。ただし、算術演算子のうち使えるのは + のみとする。</SubHeader>
107-
<Hint level="1_hard"><span class="text-yellow-400">ビット演算</span>について調べてみよう。</Hint>
107+
<Hint unique_id="1_hard"><span class="text-yellow-400">ビット演算</span>について調べてみよう。</Hint>
108108

109109
<PyScript>
110110
num1: int = 10
@@ -124,7 +124,7 @@
124124
</Paragraph>
125125
<Paragraph>
126126
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 1以上x未満の範囲に含まれる奇数の総和を求めるプログラムを書け。</SubHeader>
127-
<Hint level="2_easy1"><span class="text-yellow-400">range()</span>関数を使うと、list型(厳密にはrange型)の数列を取得できる。</Hint>
127+
<Hint unique_id="2_easy1"><span class="text-yellow-400">range()</span>関数を使うと、list型(厳密にはrange型)の数列を取得できる。</Hint>
128128

129129
<PyScript>
130130
x: int = 100
@@ -144,7 +144,7 @@
144144

145145
<Paragraph>
146146
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 次のプログラムのエラーの原因を特定し、修正せよ。</SubHeader>
147-
<Hint level="2_easy2">宣言されていない変数は呼び出せない。</Hint>
147+
<Hint unique_id="2_easy2">宣言されていない変数は呼び出せない。</Hint>
148148

149149
<PyScript>
150150
sum = 0
@@ -166,7 +166,7 @@
166166

167167
<Paragraph>
168168
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 入力された自然数に対して、適切な序数を出力するプログラムを書け。例えば、1が入力された時に"1st"を返すこと。</SubHeader>
169-
<Hint level="2_med">1の位の数に応じて条件分岐させること。ただし、例外がいくつか存在するので注意せよ。</Hint>
169+
<Hint unique_id="2_med">1の位の数に応じて条件分岐させること。ただし、例外がいくつか存在するので注意せよ。</Hint>
170170

171171
<PyScript>
172172
num = int(input())
@@ -189,7 +189,7 @@
189189

190190
<Paragraph>
191191
<SubHeader class="mb-3">[<span class="text-red-500 font-bold">Hard</span>] 任意の実数x(rad)に対して、sin(x)の値を出力するプログラムを書け。ただし、必要な計算精度は10桁程度とし、以下のpiの値を利用しても良いものとする。</SubHeader>
192-
<Hint level="2_hard">関数の周期性を利用することで効率的なコードが書ける。</Hint>
192+
<Hint unique_id="2_hard">関数の周期性を利用することで効率的なコードが書ける。</Hint>
193193

194194
<PyScript>
195195
pi: float = 3.14159265359
@@ -225,7 +225,7 @@
225225
</Paragraph>
226226
<Paragraph>
227227
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 次のデータを正規化せよ。</SubHeader>
228-
<Hint level="3_easy">グレイスケール(8bit)ですね。</Hint>
228+
<Hint unique_id="3_easy">グレイスケール(8bit)ですね。</Hint>
229229

230230
<PyScript>
231231
data = [
@@ -267,7 +267,7 @@
267267

268268
<Paragraph>
269269
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 次のデータを昇順(ascending order)に並べ替えよ。ただし、バブルソートを使うこと。</SubHeader>
270-
<Hint level="3_med1">各データが泡のように浮かび上がってきます。</Hint>
270+
<Hint unique_id="3_med1">各データが泡のように浮かび上がってきます。</Hint>
271271

272272
<PyScript>
273273
data = [5, 9, 3, 6, 2, 1, 4, 7, 8, 0]
@@ -291,7 +291,7 @@
291291

292292
<Paragraph>
293293
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 行列Aと行列Bの積を求めよ。</SubHeader>
294-
<Hint level="3_med2">定義通りに計算しよう。(※手計算しないでね)</Hint>
294+
<Hint unique_id="3_med2">定義通りに計算しよう。(※手計算しないでね)</Hint>
295295

296296
<PyScript>
297297
A = [
@@ -329,7 +329,7 @@
329329

330330
<Paragraph>
331331
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] データAとデータBの相関係数を求めよ。</SubHeader>
332-
<Hint level="3_med3">平方根は、<span class="text-yellow-400">math.sqrt()</span>関数で計算できる。</Hint>
332+
<Hint unique_id="3_med3">平方根は、<span class="text-yellow-400">math.sqrt()</span>関数で計算できる。</Hint>
333333

334334
<PyScript>
335335
import math

app/lecture/src/views/Lecture1.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<template>
3434
<Title>第1講 Python: データ型、変数、演算子</Title>
3535

36-
<div class="container w-3/6 mx-auto mb-10 text-start">
36+
<div class="container w-full sm:w-5/6 md:w-4/6 mx-auto mb-10 text-start">
3737
<Header>1.データ型</Header>
3838
<Paragraph>
3939
Pythonに限らず、プログラミング言語が扱うデータには"型(<span class="text-yellow-400">type</span>)"が存在する。
@@ -226,7 +226,7 @@
226226
<Header>4.練習問題</header>
227227
<Paragraph>
228228
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 入力される名前を、"Your name is XXX."のように出力するプログラムを書け。</SubHeader>
229-
<Hint level="easy"><span class="text-yellow-400">input()</span>関数を使うと、入力された文字列を取得できる。</Hint>
229+
<Hint unique_id="easy"><span class="text-yellow-400">input()</span>関数を使うと、入力された文字列を取得できる。</Hint>
230230

231231
<PyScript>
232232
name = input()
@@ -236,7 +236,7 @@
236236

237237
<Paragraph>
238238
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 入力される2数(num1, num2)の平均を求めるプログラムを書け。</SubHeader>
239-
<Hint level="med1">input()関数から返されるデータは、<span class="text-yellow-400">str</span>型であることに注意しよう。</Hint>
239+
<Hint unique_id="med1">input()関数から返されるデータは、<span class="text-yellow-400">str</span>型であることに注意しよう。</Hint>
240240

241241
<PyScript>
242242
num1 = input()
@@ -247,7 +247,7 @@
247247

248248
<Paragraph>
249249
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 次のプログラムの誤りを指摘し、修正せよ。</SubHeader>
250-
<Hint level="med2">プログラムは、括弧の内側から順に評価される。</Hint>
250+
<Hint unique_id="med2">プログラムは、括弧の内側から順に評価される。</Hint>
251251

252252
<PyScript>
253253
a = input() # aに任意の数を代入
@@ -258,7 +258,7 @@
258258

259259
<Paragraph>
260260
<SubHeader class="mb-3">[<span class="text-red-500 font-bold">Hard</span>] 1番目の整数(num1)から2番目の整数(num2)を引いた結果を出力するプログラムを書け。ただし、算術演算子のうち使えるのは + のみとする。</SubHeader>
261-
<Hint level="hard"><span class="text-yellow-400">ビット演算</span>について調べてみよう。</Hint>
261+
<Hint unique_id="hard"><span class="text-yellow-400">ビット演算</span>について調べてみよう。</Hint>
262262

263263
<PyScript>
264264
num1: int = 10

app/lecture/src/views/Lecture2.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
<template>
3434
<Title>第2講 Python: if文、for文、while文</Title>
3535

36-
<div class="container w-3/6 mx-auto mb-10 text-start">
36+
<div class="container w-full sm:w-5/6 md:w-4/6 mx-auto mb-10 text-start">
3737
<Header>1.if文</Header>
3838
<Paragraph>
3939
<span class="text-yellow-400">if</span>文とは、与えられた条件に応じて処理の方法や順番を変えるための構文であり、Pythonのみならず、多くのプログラミング言語で実装されている。
@@ -231,7 +231,7 @@
231231
<Header>4.練習問題</header>
232232
<Paragraph>
233233
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 1以上x未満の範囲に含まれる奇数の総和を求めるプログラムを書け。</SubHeader>
234-
<Hint level="easy1"><span class="text-yellow-400">range()</span>関数を使うと、list型(厳密にはrange型)の数列を取得できる。</Hint>
234+
<Hint unique_id="easy1"><span class="text-yellow-400">range()</span>関数を使うと、list型(厳密にはrange型)の数列を取得できる。</Hint>
235235

236236
<PyScript>
237237
x: int = 100
@@ -241,7 +241,7 @@
241241

242242
<Paragraph>
243243
<SubHeader class="mb-3">[<span class="text-green-600 font-bold">Easy</span>] 次のプログラムのエラーの原因を特定し、修正せよ。</SubHeader>
244-
<Hint level="easy2">宣言されていない変数は呼び出せない。</Hint>
244+
<Hint unique_id="easy2">宣言されていない変数は呼び出せない。</Hint>
245245

246246
<PyScript>
247247
sum = 0
@@ -255,7 +255,7 @@
255255

256256
<Paragraph>
257257
<SubHeader class="mb-3">[<span class="text-yellow-400 font-bold">Medium</span>] 入力された自然数に対して、適切な序数を出力するプログラムを書け。例えば、1が入力された時に"1st"を返すこと。</SubHeader>
258-
<Hint level="med">1の位の数に応じて条件分岐させること。ただし、例外がいくつか存在するので注意せよ。</Hint>
258+
<Hint unique_id="med">1の位の数に応じて条件分岐させること。ただし、例外がいくつか存在するので注意せよ。</Hint>
259259

260260
<PyScript>
261261
num = input()
@@ -265,7 +265,7 @@
265265

266266
<Paragraph>
267267
<SubHeader class="mb-3">[<span class="text-red-500 font-bold">Hard</span>] 任意の実数x(rad)に対して、sin(x)の値を出力するプログラムを書け。ただし、必要な計算精度は10桁程度とし、以下のpiの値を利用しても良いものとする。</SubHeader>
268-
<Hint level="hard">関数の周期性を利用することで効率的なコードが書ける。</Hint>
268+
<Hint unique_id="hard">関数の周期性を利用することで効率的なコードが書ける。</Hint>
269269

270270
<PyScript>
271271
pi: float = 3.14159265359

0 commit comments

Comments
 (0)