snippets
シンタックスハイライトたちの見た目確認用のサンプルコード。動作は保証しない。
ChatGPTより (Ruby, Python, JS)
シンタックスハイライトの付き方を確認するのにちょうどいいスニペットを書きたいなあと思ったけど、どういうのを書いたらいいかで悩んでしまった。
ChatGPTにどんなのがいいか訊いたところ、結構がっつり書いてくれた。簡易ToDoアプリだそうで、長さ的にも内容的にもかなりいいところをついているように感じる。すごい…
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
29
30
31
32
33
34
35
36
require 'json'
class ToDoApp
def initialize
@tasks = []
end
def add_task(description)
@tasks << { description: description, done: false }
end
def list_tasks
@tasks.each_with_index do |task, index|
status = task[:done] ? "x" : " "
puts "#{index + 1}. [#{status}] #{task[:description]}"
end
end
def remove_task(index)
@tasks.delete_at(index - 1)
end
def save_to_file(filename)
File.write(filename, JSON.pretty_generate(@tasks))
end
def load_from_file(filename)
@tasks = JSON.parse(File.read(filename), symbolize_names: true)
end
end
app = ToDoApp.new
app.add_task("Learn Ruby")
app.add_task("Build a project")
app.list_tasks
app.save_to_file('tasks.json')
まだattr_accsessor
だのRange
だのの表記が気になる。
こちらは人力、即興、最低限の3拍子揃っているので、つたない例だなと言われればごめんなさいとしか言えない。
1
2
3
4
5
6
7
8
9
10
11
class Foo
attr_acsessor :a, :b
@@c = 0
def initialize
@a = 10; @b = 50
end
end
1
2
3
4
dice = Proc.new { rand 1..6 }
# サイコロを振る
10.times { p dice.call }
あと何気に定数呼び出しとかも気になる。
1
Roo::Spreadsheet.new
続いてGPT作、Python版。
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
29
30
import json
class ToDoApp:
def __init__(self):
self.tasks = []
def add_task(self, description):
self.tasks.append({"description": description, "done": False})
def list_tasks(self):
for i, task in enumerate(self.tasks, 1):
status = "x" if task["done"] else " "
print(f"{i}. [{status}] {task['description']}")
def remove_task(self, index):
self.tasks.pop(index - 1)
def save_to_file(self, filename):
with open(filename, 'w') as file:
json.dump(self.tasks, file, indent=2)
def load_from_file(self, filename):
with open(filename, 'r') as file:
self.tasks = json.load(file)
app = ToDoApp()
app.add_task("Learn Python")
app.add_task("Build a project")
app.list_tasks()
app.save_to_file('tasks.json')
Pythonってあんまり書かないけど、import
にfrom
があるときとか、docかなんかの3連クオートとかあるんじゃないっけ。
ということで一応、
1
from myModule import Hoge
1
2
3
4
def hello:
"""display Hello World"""
print("Hello World")
とかも置いておく。 ちなみにPythonを知っていてRubyを見たことがない人には、RubyがPythonに似ているように見えるらしいが、それはあくまで見た目の話であって、中身はどちらかというとJavaScriptに近い。
GPT作ラスト、JavaScript。
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
29
30
31
32
33
34
35
36
const fs = require('fs');
class ToDoApp {
constructor() {
this.tasks = [];
}
addTask(description) {
this.tasks.push({ description, done: false });
}
listTasks() {
this.tasks.forEach((task, index) => {
console.log(`${index + 1}. [${task.done ? 'x' : ' '}] ${task.description}`);
});
}
removeTask(index) {
this.tasks.splice(index, 1);
}
saveToFile(filename) {
fs.writeFileSync(filename, JSON.stringify(this.tasks, null, 2));
}
loadFromFile(filename) {
const data = fs.readFileSync(filename, 'utf8');
this.tasks = JSON.parse(data);
}
}
const app = new ToDoApp();
app.addTask("Learn JavaScript");
app.addTask("Build a project");
app.listTasks();
app.saveToFile('tasks.json');
私の場合、JavaScriptだとrequire
よりimport
のお世話になることのほうが多い。ということで
1
import { MyModule } from './myModule.mjs';
も置いておく。
筆者過去作 (C, CSS)
ちょうどよさそうなものを引っ張り出して来たり。
こんなのはあった (深夜テンションコーディング)。 エラトステネスのふるいを書いてみたかったときの。使い方がよくわからなくてとりあえず素数判定につかってみた記憶がある。
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// >>>全Cコンパイラbool実装すべき<<<
typedef enum {
false, true
} bool;
void sieveOfEratothenes(bool* is_prime, long long max) {
for (int i = 0; i <= sqrt((double)max); i++) { // 平方根まででいいらしいので
if (!is_prime[i]) continue; // すでに合成数とわかっている
/* iの倍数を振るい落とす(除外する) */
for (int j = i*2; j <= max; j += i) {
if (is_prime[j]) is_prime[j] = false;
}
}
}
bool isPrime(long long k) {
bool* is_prime = 0;
// k+1個の要素の入る配列を確保
// is_prime: 添え字の数が素数かを記録
is_prime = malloc(k * sizeof(bool) + 1);
// 2以上の要素を1詰め
is_prime[0] = is_prime[1] = false;
for (long long i = 2; i <= k; i++) {
is_prime[i] = false;
}
sieveOfEratothenes(is_prime, k);
// malloc()したもんはreturn前にfree()しなきゃなのでメモ
bool is_prime_k = is_prime[k];
free(is_prime);
return is_prime_k;
}
int main(void) {
long long k;
printf("整数: ");
scanf("%lld", &k);
printf("%s\n", isPrime(k)? "素数です" : "合成数です");
return 0;
}
あとはこのブログの見た目を若干カスタマイズしたときのCSSとか。そういえば、SCSSやってみようかな。
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
29
/* アイコン非表示 */
#sidebar #avatar {
display: none;
}
/* 基本のフォント変更 */
body {
font-family: "BIZ UDPゴシック", "Source Sans Pro", sans-serif;
}
/* headerなどのフォント変更 */
header .post-desc, .site-title, #search-results a, h5, h4, h3, h2, h1 {
font-family: "Noto Sans Mono", "Source Sans Pro", sans-serif;
font-weight: bold;
}
/* ブログサブタイトルのイタリック解除 */
.site-subtitle.fst-italic {
font-style: normal !important;
}
/* シンタックスハイライト修正 */
@media (prefers-color-scheme: dark) {
/* cssではidだった */
html:not([data-mode]) .highlight .nf, html[data-mode=dark] .highlight .nf {
color: #e9b2e3;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#topbar-wrapper {
background: linear-gradient(to bottom, var(--topbar-bg) 65%, transparent);
position: sticky;
top: 0;
z-index: 3;
}
#topbar #breadcrumb span:not(:last-child)::after {
font-family: "FontAwesome";
content: "\f105";
padding: 0 .3rem;
}
This post is licensed under
CC BY 4.0
by the author.