アルゴリズムとデータ構造に興味がある人へ
はじめに
「アルゴリズムに興味がある。」「アルゴリズムの考え方を勉強したい。」「就活でコーディングテストがあるから勉強したい。」という人!
今回は著者が、アルゴリズムの勉強で良い教材だなと思ったものを紹介したいと思います。
「興味があるけど、何からやればいいかわからない。」
私も最初、このような悩みがありました。 周りの競技プログラミングをやっている人や自身で調べて買ってみたもの、やってみたものの中からご紹介したいと思います。
今回紹介するものは、Webサイトと参考書です。
紹介
Webサイト
Atcoder Problems
日本で競技プログラミングといえば、やっぱりAtCoderですね!
いつもお世話になっているひとつです。
しかし、過去問を解きたかったり、コンテストの時間予定があって出ることができないことがあったりすると思います。
そこで有志の方が過去問をまとめてくれているサイト! それが、AtCoder Problems!!
このサイトのすごいところは、自分が解いた問題を色分けすることができることです!
例えば、解くこと(AC)ができたらボタンが緑色になり、間違え(WA,TLE etc..)ると黄色に変わり、一目でわかります!
緑に染めていくことがすごく気持ち良く感じます!
AtCoder Problems : https://kenkoooo.com/atcoder/#/table/
AOJ(AIZU ONLINE JUDGE)
次に紹介するサイトはAOJ!
会津大学が運営を行っているコンテストサイトです。
このサイトは公式が過去に出題した問題を掲載しているページがあることが特徴です!
さらに問題は勉強したいコースや順序良くスキルアップしていくページなどがあり、コンテンツがとても充実している。
アルゴ式
さて次は、アルゴ式!
このサイトの製作者である@sak_algoさんのブログでは、
「プログラミングを道具としてコツコツ積み立てることで、様々な知識に触れ、論理的思考力やコーディング力を身につけられるアプリケーション」*1
だそうです!
公開が2021年8月1日ということで、まだリリースして4ヶ月近くですが、コンテンツ量がものすごく多いと感じます! 探索やソート、グラフ、DPなどのアルゴリズムから論理的思考力を鍛えるためのコンテンツなど他のサイトにないコンテンツまでを網羅できるサイトです。
これぞ、本当のアルゴリズム教材であると思いました。感動(; ;)
Qiita
これはQiitaで書かれたブログで重宝しているサイトを紹介します。
今回は1サイトだけを紹介します。
そのタイトルは、
「レッドコーダーが教える、競プロ・AtCoder上達のガイドライン」*2
著者は、@e869120さんです。
こちらは初級者と中級者、上級者の3種類のシリーズがあります。 主にAtCoderを軸に記事が書かれており、競プロについて詳しく・わかりやすく書かれています!
この記事で練習できるところは、中級編の「分野別 初中級者が解くべき過去問精選100問」です。
この記事のいいところは競プロについて詳しく知れるに加えて、全コンテンツ合わせて100問が激選されています。この100問は先ほど紹介したAtCoderとAOJから主に選定されています。
いいとこ取り!そしてありがたい!
これをやっていき苦手だと感じたコンテンツをAOJやアルゴ式を使い、より深く勉強してみるということを私はしています。
参考書 - 本 -
続いてに本についてです。
これは誰もが知っているかもしれませんね。
この本は蟻本と呼ばれている参考書です。プログラミングコンテストの問題を通してアルゴリズムのしくみや考え方を楽しく習得できる参考書となっています。
蟻本はC++で書かれています。
C++で書かれているので、Pythonで書き直してみるなどしてみてもいいかもしれないですね。
この本は、アルゴリズムの紹介だけではなく、アルゴリズムを使いこなせるようになるために書かれています。
すごく図や表を用いてすごく読みやすく、またわかりやすく書かれていました。
一応、本書もC++で書かれています。
まだ読んだことがないという方は書店などで試し読みをしてみてはいかがでしょうか。
まとめ
いかがでしたでしょうか?
今回はアルゴリズムについて始めてみたい人、スキルアップしたい人向けに書いていきました。
今回はWebサイトから「AtCoder Problems」、「AIZU ONLINE JUDGE」、「アルゴ式」、「Qiita(レッドコーダーが教える、競プロ・AtCoder上達のガイドライン)」を紹介しました。参考書は「プログラミングコンテストチャレンジブック [第2版] ~問題解決のアルゴリズム活用力とコーディングテクニックを鍛える~]」と「問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)」の2点をご紹介しました。
自分なりにより良いものをご紹介できたのではないかと思います。
何かを始めるとき、何から始めればいいかわからない事が多いと思います。そんなときにこの記事と出会っていただけたら本望です。
著者:@RysaHib
DeepLearningの力でアニメの世界に行きたい!
皆さん、こんにちは!
すずきです🐢
今日はDeepLearning🧠を使って
アニメの世界⭐️に行ってみようと思います👊
AnimeGANv2とは?
まずは、今回使う技術🤖のお話です!
皆さんは、DeepLearning🧠をご存知ですか?
そうです!AI(広義)技術です!
その中でも、今回はAnimeGANv2を使って
自分の写真🤳や風景の写真🌸をまるでアニメの世界⭐️で撮った写真のかのように加工できます!
ちなみに以下の画像はGithub🐱🐙にあった出力の例です!
このような研究分野を深層生成モデルといい画像加工分野📸をはじめとした様々の分野で使われています!
Colabで試そう!
ここからColaboratoryという無料でPython🐍を簡単に実行できる環境に行ってみましょう!(PC推奨)
ノートブックを新規作成
左上の「ファイル」📁から「ノートブックを新規作成」📔を選択します。この画面が表示されれば環境構築終わりです。
いざコーディング💻
1. まずは変換したい画像をColaboratoryにアップロード⬆️してみましょう。
左のフォルダのマーク📁を選択し、その中の左上にあるアップロードボタンから写真をアップロード⬆️しましょう。
2. まずは三角▷の横にあるテキストボックスに以下のコードを書きます。
from PIL import Image import torch
実際書くとこんな感じになります。
ここでは、Pillow(PIL)という写真を扱うためのライブラリと
PyTorch(torch)というDeepLearning🧠ライブラリをインポートします。
3. 左の「+コード」からコードブロックを追加して以下を書きます。
def crop_center(pil_img, crop_width, crop_height): img_width, img_height = pil_img.size return pil_img.crop(((img_width - crop_width) // 2, (img_height - crop_height) // 2, (img_width + crop_width) // 2, (img_height + crop_height) // 2))
ここでは、画像を切り抜く関数を定義しています。
4. 先ほどアップロードした画像を表示しましょう
img = Image.open('/content/画像の名前.jpeg').convert('RGB') min_wh = min(img.size[0], img.size[1]) img = crop_center(img, min_wh, min_wh).resize((512, 512)) img
注意: img = crop_center(img, min_wh, min_wh).resize((512, 512))
の部分で画像を正四角形にして512x512に変形しています。
注意: 「画像の名前」は自分のアップロードした画像の名前に変更してください
5. DeepLearningモデル🧠🔥をロードします。
model = torch.hub.load('bryandlee/animegan2-pytorch:main', 'generator', pretrained='face_paint_512_v1') face2paint = torch.hub.load( 'bryandlee/animegan2-pytorch:main', 'face2paint', size=512, device="cpu" )
!!!: face_paint_512_v1
の部分はceleba_distill
, face_paint_512_v2
, paprika
に変更できます。お好みのモデルをお使いください
6. アニメ化⭐️します!
out = face2paint(model, img) out
では、実際に変換してみます。
...ちょっと時間かかります。
アニメ化完成です!
最後に
ここまでご覧いただきありがとうございます🙇♂️
ぜひAnimeGANv2遊んでみてください!!
大学生はモニターを買え!
最初に
今日はモニターの良さ、大学生の人ほどモニターを買うべきだという私の主張を皆さんに伝えていきたいと思います。
モニターを買うことのメリット
講義時のメリット
まず、大学生の皆さんは今、リモートで講義を受けていらっしゃると思います。私もそうです。
その時、大学で買ったノートパソコンにフルスクリーンでZoomなどを写していませんか?先生から送られた資料などを参照する時、いちいち画面を切り替えていて話を聞き逃したことはありませんか?このような悩みはモニターを買えばすべて解決されます!
モニターに講義資料を置いておく事により、画面を切り替えずに資料を見ることが出来、何か発表をする際にも、資料を見ながらの発表をする事ができてとても便利なリモート講義生活を送ることが出来ます。まあ、モニターに動画などを置いて、講義をサボることが出来るのが最大のメリットなんですけどね。
レポート作成時のメリット
レポート作成の際にも情報を調べて、それを確認しながらレポートを書くことが出来ます。これにより、作業効率も大幅にアップすること待ったなしです。
実際に研究結果として、シングルモニターから、マルチモニターにすることで約42%の生産性アップが期待できるという物も出ています。
モニターを買おう!
大学生にモニターという高級品を勧めるな、そんな金なんて無い、という人もいるでしょう。しかし、モニターはテレビなどに比べると格安で買えることが出来るのです。
24インチのモニターは約18000円で買うことが出来ます。スタバのコーヒー35杯我慢すると買えるぞ!なんなら中古だったらもっと安く買える事が出来ます。
丁寧に使うと大学4年間は買い換えずに済むし、一年あたり4500円、一日あたり192円でこんな便利な物を買えるのはなかなか無いんじゃない?もうノートパソコンだけの作業環境は捨てよう!
最後に
もうここまでご覧の貴方はモニターを買いたくて仕方がないのでは無いでしょうか。少なくとも私はもう一台モニターを買いたくなりました。
まあ、なんかよくわからない事にお金を使うぐらいだったら、自分に投資をする意味でモニターを買うのはありなのではないかと思います。
プロジェクト紹介
今、当プロジェクトTourismプロジェクトは1年生が1人しかいません!
私と同級生の1年生の人にプロジェクトに参加してもらいたいです!
別にプログラミングが出来なくてもOK! 私も出来ないし
1年生以外の人も熱烈歓迎!
twitterやってます。見てね。 twitter.com
新メンバー募集中
おはこんばんちは。無能広報Tです。 現在、Tourism Projectでは1年生、2年生のメンバーを募集しています!! と言ってもね、うちらがどんなプロジェクトなのか、得体が知れてない人がほとんどだと思うんですよ(๑╹ω╹๑ )。 そして、仕事を選ぶ時、研究室を選ぶとき、プロジェクトや部活を選ぶとき、重要な要素はその活動内容、そしてメンバーがどんな人たちなのかってところだと私は思うんですよね。 ってなわけで今日はざっくりとしたプロジェクトの紹介とメンバー紹介をやっていきます!!
プロジェクト紹介
Tourism Projectでは、「花咲くいろは」の舞台でもある湯涌の街の魅力を発信するために、聖地巡礼・フォトスタンプラリーのアプリ開発、私たちの活動を紹介するWebページの開発をおこなっています。 また、湯涌の観光協会の方と定期的に打ち合わせに行くとき、湯涌の散策も行うので、湯涌の魅力を生で体感しながら開発に携わることができます!! 興味がある人はぜひ入ってきてね!!
メンバー紹介
藤田くん
プロジェクトリーダーの藤田くん。 プロジェクトの活動方針の取り決めであったり、アプリ開発であったり、なんでもこなすよ!彼は現在3年生で山本研に所属しているよ!筋トレが趣味で、温泉に行くと彼の肉体美が見れるぞ(๑╹ω╹๑ )
坂内くん
彼は現在3年生でBusstop Projectのリーダーでもあるよ!アプリ開発からWeb開発まで基本的になんでもこなせる有能マン。とりあえずつよい。わからないことがあったら坂内くんに聞いてみよう٩( 'ω' )و
関谷くん
彼は現在3年生で山本研に所属しているよ!さらに彼はCirKitプロジェクトのリーダーでもある!!つよい(確信) 専門学校と社会人経験を経てこの大学に入学という異色の経歴があり、経験豊富な彼はこのプロジェクトの要である!!もともと湯涌の聖地巡礼アプリを作ろうというの彼の提案でもある。
細川くん
彼は現在3年生で山本研に所属しているよ(多い) 成績優秀な彼だが、何かしら自分にとって形になるものを作りたいという意思を持って3年生になってこのプロジェクトに入ってきたよ! このプロジェクトではWeb開発を担当しています! 個人的に自分とよく境遇が似ていると思っている笑笑
鈴木くん
現在4年生で鷹合研と中沢研を兼任しているズッキーこと鈴木くん。もうね、研究室兼任ってとこからわかる通り彼はつよい。時間にややルーズという点を除けば仕事も素早くこなすスーパーエリートメンバーである。 国際高専出身なので、開発力、実装力はピカイチ。
西村くん
30代のベテラン社員のような貫禄がある彼だが、現在4年生(22歳)である。うせやろ? 彼はこのプロジェクトのアプリ開発担当であり、実装力もある主力メンバー。大学生にして社畜でもある彼にどんどん頼っていこう!!彼は心はギャルらしい(知らんけど)
田坂くん
無能広報T(田坂)(4年生)(無職)(山本研)。教職課程と研究活動の板挟みであまりプロジェクトに顔を出せないが、かろうじてポスター作ったり、勧誘資料を作ったりする。成績だけはよくて山本研に入ったが、あまりの無能さに絶望している4年生。くっ!!殺せ!!全部コロナが悪い!!
北川くん
現在1年生の彼だが、3、4年生に負けないくらい活躍している。2年生がこのプロジェクトにいないので、来年からは彼がこのプロジェクトの要である。彼もまた有能である。
最後に
1、2年生も学科問わず募集していますのでぜひお願いします!! なんでもしますから!! 私たちと一緒に湯涌の魅力を発信していこう!!
湯涌町に行ってきました
はじめに
こんにちは、Torurismプロジェクトのせきやんです。
Tourismプロジェクトは湯涌町と協力してプロジェクトを進めています。
それに伴って、10月15日(金) にメンバー7名で湯涌町にお邪魔して打ち合わせや施設の視察を行ってきました。
少し遅くなりましたが、今回はその時の様子を書こうかなと思います。
少しでもTourismプロジェクトの活動を知ってもらえれば嬉しいです!!
午前の活動
集合 ~ 移動
金沢工業大学に集合し湯涌町へ移動します。
少し集合に遅れてきたメンバーもいましたが…無事全員集合!
湯涌町へはメンバーの私用車とレンタカーの2台で移動。
車を運転してくれるメンバーには感謝です!
金沢工業大学から湯涌町へは約30分ほどで到着します。
湯涌町の担当の方と打ち合わせ
湯涌町に到着したら、早速担当の方と打ち合わせが始まりました。
今まで制作したアプリやWebサイトの進捗報告を行い、担当の方からフィードバックをいただきました。
打ち合わせの様子はこんな感じで、事前に作成したスライドを使って説明を行います。
ちなみに、打ち合わせを行わせていただいている場所が旅館のような内装で、さすが温泉街…!という感じですね。
頑張って僕がプレゼンしてます!笑
施設を視察
打ち合わせを行った後は、湯涌町内の様々な施設を視察しました。 今回開発中のアプリでは湯涌町の様々なスポットが関係してくるので、そのための細かい内容を現地の方と話していきました。
この時は金沢湯涌みどりの里と金沢湯涌夢路館を訪問しました!
お昼休憩
お昼休憩では湯涌町にある食事処でランチをいただきました。
ボリューム満点で大満足でした!!
午後の活動
実機テスト
午後には二手に分かれて活動をしました。
アプリ班のメンバーはPCとスマートフォンを手にアプリのテストを行います。 自分たちが作っているアプリが実際に現地で動くかどうかを確認する大切な作業です!
江戸村見学
残りのメンバーは江戸村の見学へ行きました。(僕もこっち!)
中は江戸の頃の建物などが再現されており、湯涌の歴史を感じることができました。
温泉 & ぼんぼり見学
予定してことも終わり、最後は温泉に入ってリフレッシュしました! 毎回湯涌さんを訪れた時は必ずこの温泉に入ってから帰っています。 こっちが本命…っていうわけではないですよ笑
白鷺の湯の隣の階段にはぼんぼりが飾られており、一つ一つにメッセージが書かれています。
これはぼんぼり祭りというお祭りのために飾られるものなのですが、今年は残念ながら開催ができなかったので、来年の開催に向けたアツいメッセージがたくさん書かれていました!!
夜にはライトアップされとっても綺麗なので、来年はぜひ皆さんも見に行って欲しいです!(今年はもう残念ながら終了)
まとめ
今回も楽しみながらも、しっかりとプロジェクトの業務も進めました。
こういった機会があると湯涌町の方もしっかりと向き合ってくださっていることがわかり、改めて良いものを作っていきたいと気合が入ります。
Tourismプロジェクトに参加すれば、開発だけではなくこのように定期的に現地に出向いての活動もあるため、観光地での企画などに興味がある人にもぜひおすすめです!
興味があったらぜひTwitterなどから連絡をもらえたら嬉しいです!!
P.S. しっかりお土産も買ってきました笑
執筆者: せきやん(@sekiyan372)
自作キーボードはイイゾ!イイゾ!
これは何?
答えはキーボード!
道具
- パソコン(ファームウェアを書き込む環境)
- はんだ
- はんだこて
部品
- マイコン
- 抵抗
- 基盤
- スイッチ
- キーキャップ
道具
と部品
を集め、キーボードを自作しました。
いわゆる自作キーボードというものです。
どうしてキーボードを自作するの?
パソコン作業を快適にするため!
既製品は打撃感(キーの押し心地)や配列(キーの配置)、キーマップ(キーを押すと入力される文字)が限定され、不満を抱きながらキーボードを利用します。
しかし自作キーボードは100%満足し、パソコン作業ができます。なぜなら、スイッチや配列、キーマップを0から100
まで自身で決めることができ、妥協がないからです。
筆者の愛用キーボード
私は、Crkbd3x5+3レイアウトを愛用しています。
このキーボードは@foostanさんが開発した左右分割式のキーボードです。
スイッチ(打撃感)
- スイッチ: OUTEMU サイレントフォレストキースイッチ
- タクタイル
- 押下圧: 68g
- 潤滑剤
- Tribosys 3204
- Krytox GPL 105
- フィルム
- DUROCK キースイッチ用フィルム
配列
ColumnStaggered配列(列方向にずらした配列)
他の配列に関しては、
salicylic-acid3.hatenablog.com こちらの記事を参考にしてください。
キーマップ
Layer0
- タップで` / 長押しでoption
- タップでBackspace / 長押しでLayer1に切り替える
- command
- タップでSpace / 長押しでShift
- タップでreturn / 長押しでLayer2に切り替える
- タップでTab / 長押しでcontrol
2と5を同時押しすることでLayer3に切り替わります
Layer1
- スクリーンショットのショートカット
- 1単語左にカーソルを移動する
- 1単語右にカーソルを移動する
- 半角全角変換
Layer2
- 左のタブに移動する
- MissionControlを開く
- 右のタブに移動する
- 左の仮想デスクトップに移動する
- アプリケーションウィンドウを開く
- 左のタブに移動する
- 半角全角変換
Layer3
どうやって作るの?
公式のビルドガイドやブログなどインターネットで調べると組み立て方が載っています。
どこで入手するの?
shop.yushakobo.jp 遊舎工房と呼ばれるECサイトは、日本人が運営しておりサービスが充実です。そのため、初心者の方はこちらのサイトで物色することをお勧めします。
執筆情報
- 執筆者: RyoNish
- キーボード: Crkbd 3x5 + 3 Layout
三角比、三角関数を学ぼう
そもそも三角比、三角関数って何だっけ?
恐らく多くの人が高校で学ぶであろうの三角比や、三角関数。これらをよく分からないまま高校を卒業しまい、習った内容が記憶の彼方に行ってしまった方や、「今から三角関数とか習うけど一体こいつらは何もの?」と思う中高生もいるでしょう。
今回は上記のような方々を対象にしています。「私はもうsin、cos、tanなんか完璧だ」と言う方々は、是非とも暖かい目でこの記事を読んでいただけると幸いです。
三角比や三角関数は我々の生活する場面の至る所に存在しています。GPSやゲーム、ノイズフィルター、CGなどなど。まだまだ三角比、三角関数を利用している場面はたくさんありますが、ここで一度割愛させていただきます。
今回の記事で少しでも三角比や三角関数に対する知識や、考え方が良い方向に向くことを願っています。
それでは三角比で最初に見る、サイン、コサイン、タンジェントについて学んでいきましょう。
サイン(sin)とは
三角比を学ぶ上で私も例に漏れず直角三角形1)を利用していきます。
上記の図でギリシャ文字の「θ」というものを利用しています。これは辺acのなす角度を一般化したものであり、角はギリシャ文字で表現することが多く、絶対にギリシャ文字を使わなくてはならないという決まりはありません。
さて、上記の直角三角形で角θと2辺bとcを見ていきます。
ここから角θと2辺の長さの関係を調べていきます。
角θの大きさを変えずに辺b、cの長さを変えていきます。その長さをb'とc'とおきます。
そうした場合の図形は以下のようになります。
このb'とc'の比率を2倍3倍にしていっても、θの値は変わりません。そしてb'とc'は比例関係にあり、bとcの比も一定関係なので、これを言い換えると角θの大きさが一定であるならばb / c の値は一定と言うことになります。
つまりこの事実を言い換えると、角θの大きさが決まれば、b / cの値も決まります。
そして、直角三角形の2辺の比でsinθを定義してみると(0 < θ < 90°)
sinθ = b / c
よって上記の式より、sinはθを用いてb / cを求める関数と言うことになります。
サイン(sin)の覚え方
コサイン(cos)とは
コサインも先程のサインと同じように角θの値を一定に2辺a、cの値を2倍してみましょう。
今度も角θの値が一定であれば辺a、cの比も一定になりますね。
これもsinと同様に分数a / cの値がcosθの値になります。(0 < θ < 90°)
先程見たサインと非常に形が似てますね。
cosθ = a / c
コサイン(cos)の覚え方
タンジェント(tan)とは
もうsinとcosの導出には慣れてきましたか?最後に紹介するのはタンジェント(tan)です。
結論から申し上げますとこのtanは直角三角形の鋭角とそれに対する底辺と対辺の比のことを言います。
tanθ = b / a
タンジェント(tan)の覚え方
円を用いた三角関数の表現
次に三角関数を円で表現していきます。「円で三角形を表現?」と疑問に持つ人もいるでしょう。しかしこの円で表現することにより三角関数の可能性がグッと広がります。
今までsinθとcosθを表現する時に(0 < θ < 90°)と書いていたと思います。これは直角三角形でsinやcosを定義していたからです。しかし、これでは角度θが0°〜90°までで制限されてしまい少し窮屈ですね。これを解決するために単位円2)を利用します。半径が1であるためcの値も1になります。これによりおのずとbの値も見えてきますね。
つまりsinθは点Pのy座標と言うことに定めることができます。また円内部で三角形を定義しているのでsinθ < 0を表現することができます。この部分は是非自分で試してみてください。(x軸の下に点Pがきます)
同様に単位円上の点Pのx座標もcosθを定義することにより表現できます。
最後に
いかがでしたか?本記事で三角関数などで用いるsin、cos、tanの意味などが少しわかりましたか?。今回学んだことを利用すれば、学校の勉強は言わずもがな、色々なところで利用することが出来ます。皆様も是非楽しい三角関数ライフを!!
おすすめ書籍
- 浜村渚の計算ノート
- 数学ガールの秘密のノート
補足
1)三角形の中にある角のうち1つの角が直角である三角形
2)半径が1の円