cs50Codespaceを使わずにcs50の課題を提出する逆張り人間の雑記

# はじめに
ピンバッジが欲しくて初めて記事を書くことにした
タイトルにもある通り逆張り人間のすることなので、変なやつもいたもんだなと思って読んでいただければ幸いである

## cs50とは?
cs50はハーバード大学が提供するコンピュータサイエンスの講義のことである
edXというサービスを通して履修登録して無料で受講することが可能
ふと思い立ってちまちまと受講(というか課題)を進めているのですが、普通の人間ならまずしないだろうことをしているため、今回記事にしてみようと思う

https://cs50.harvard.edu/x/2024/
https://www.edx.org/cs50

## cs50の Problem Set
cs50の講義で毎回与えられる課題がProblem Setというもの
これは本来CS50のGitHubコードスペース経由で提出し、評価を受けるようになっている

### 自分の場合
しかし、GitHubが利用されているということもあって、コードスペースを使わずとも特定のリポジトリにプログラムをプッシュすることで、提出および採点を受けることが可能になる
実際、提出状況の確認ページには、GitHubに直接pushすることで提出できるよーといった内容のことが書かれていた(スクショしとけばよかった…)
ということで、コードスペースを使わないで(=自分のPCのVSCode、ターミナル上で)、コーディングから提出までを行っている

## 提出の流れ
自分が課題に取り組んで提出するまでの流れを紹介してみる
完全に自己流なので悪しからず
また、現在受講中であるため、C言語とPythonに通用する方法であることは確認できているが、Scratch、SQL、web系言語でも可能であるかはわからない

Problem Set1の"Hello, It's Me"という設問を例として進めていく

### ブランチの作成
課題を提出するためには各設問ごとに設定されているブランチ名でpushする必要がある
ブランチ名は設問の説明の下の方にある "How to Submit" という項目のところから読み取れる

![スクリーンショット 2024-12-22 002353.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/5a3b768e-b1e8-e6c6-86b0-88a167d250b2.png)

これが実際の画面のスクショである

```
submit50 cs50/problems/2024/x/me
```

画像にもある、これが一般的な提出方法で使用するコマンドになっており、 "submit50" 以後の部分(この画像でいうところの"cs50/problems/2024/x/me")をブランチ名にする

### プログラムの作成
ブランチを作成したら、設問の本質部分であるコーディングを行う
このとき、ファイル名も指定通りにする
上で示したスクショの "Style" という項目に提示されているコマンドで指定されている
今回の設問においては "hello.c" が作成するファイルの名称になる

採点基準には

### プログラムの提出
プログラムが完成したらコードを提出する
提出する際は、cs50受講者ごとに指定されている(と自分は解釈している、たぶんもっと適切な表現があるんじゃなかろうか)リポジトリ、ブランチにpushすることで行う

```
git push origin cs50/problems/2024/x/me
```

これで提出ができる

## 提出結果の確認
### 成績確認
提出できているか、採点結果はどうかを確認する
edXの受講ページにあるProgressのタブから成績確認のリンクへ
![スクリーンショット 2024-12-22 004600.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/c4f57187-b526-ae74-d5ef-05adc3e1d8e5.png)
こんな感じのページのProgressというタブを開くと

![スクリーンショット 2024-12-22 004626.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/c7cacdf2-d4e4-166e-e91c-fc1cbd9b471f.png)
こんな説明が表示される

一段落目にあるリンクから
![スクリーンショット 2024-12-22 005115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/cf0d5257-79e9-77a9-3e19-22d06ea0244a.png)
成績表示の画面に映ることができる
"Starting from Scratch"や"Hello, Me"などが設問のタイトルである
設問タイトルの横に緑のチェックマーク✅がついていたら、その設問は正しく提出され、採点結果が合格点以上であったということ
提出されていても、点数が合格点未満であった場合は赤いバツマークがつく
つまり、提出したはずなのに何のマークもついていない、という場合どこかしらで問題が起こっている

### 提出されたリポジトリをみる
成績表示のページにあるリンクのうち2つ目の方を開くと、
![スクリーンショット 2024-12-22 005957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/6a3ab69e-2240-a736-5ee9-bd611e6d6289.png)
このようにpushしたブランチが一覧で確認できる

![スクリーンショット 2024-12-22 010102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/a4f0a4a8-84c6-f278-fdf4-243139e1ee95.png)
各設問ごとに詳細な提出、採点状況も確認できる

![スクリーンショット 2024-12-22 010248.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/3454755d-e581-05ad-9ae5-96895f3614d5.png)
画像2行目の "check50"、 "style50" の2つが採点基準で、どちらも合格点に達する必要がある

### style50
まずはstyle50で __0.75__ 以上という評価を受けなくてはならない
これは要するに読みやすいコードを心掛けましょう、といったもので、最大値は __1.00__ である
![スクリーンショット 2024-12-22 010909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/bfced1e3-5fb2-3d0b-fa4e-537cfe55adfd.png)
cs50が推奨する記述法でない場合に減点をくらう
画像でいう赤くハイライトされている部分が減点されている部分(これは別の設問のコードであるが)
https://cs50.readthedocs.io/style/c/
このページに記載されている基準で採点が行われているようだ

### check50
style50で合格点をとると、提出したプログラムが自動で採点される
この結果が7割以上であれば合格である
例えば今回例に挙げている設問は満点が5点であるため、4点をとれば課題を提出したことが認められる
![スクリーンショット 2024-12-22 163114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908711/abc5da72-29e3-afd4-39b2-5de89153605f.png)
詳細情報をみると、採点基準は
1. あるべきプログラムが存在すること
1. 作成したプログラムがコンパイルできること
1. 入力に対して期待される出力がされていること
の3点である

もちろん、機械による採点のため、改行などにも注意である
基準を満たしている場合は緑で :) こんな顔文字が、満たされていない場合は赤で :( こんな顔文字が表示される
"Expected Output" が期待される出力で、"Actual Output"は自分のコードの出力結果である

# まとめ
説明を大分雑に行ってしまったが、自分が課題を行い提出する際に踏んでいる手順は以上の通りである
特に、自分の場合は特殊な提出の仕方を踏んでいるため、成績、採点結果の確認はしっかり行うようにしている