Record of study 〜2、3週間経過〜
2、3週間経った頃の話です。
3週間目は業務が結構忙しくて、あまりプログラミングの勉強ができない週でした。
なので、AtCoderの問題をチラッと解いたり、その過程でわからないことが出て来たら本でチェックしたり、人に聞いたりっていう感じでした。
一旦まとめに入った週って感じですね〜
ここまでで大体pythonの(超)基礎は習得したと思います。
とはいえ自分で何ができるかと言われても、「ん〜」という感じです。笑
とりあえず次は、Webアプリケーションが作れるように、Djangoの勉強に移っていこう!ということで、3週間たった頃からDjango Documentを読み始めました。
まだ日本語訳がそんなに進んでいないので、一部は英語でやっています。
英語はそんなにできるわけではないので大変ですが、AI関連で留学してみたいなあ〜という思いもなくはないので、その練習として英語で頑張ってみたいと思います。
目安としては3月中旬までには一通り理解して、そこから自分で何かアプリを作りたいと思っています。
twitterとか何かのSNSのAPIを使ったりできたら面白いなあと思うんですが...まあ考え中です。笑
それではこの辺で〜
2017年東大理系数学をpythonで解いてみた!
昨日、今日で東大入試がありましたね!
受験生の方、受験お疲れ様でした。
せっかくなので、数学の問題をpythonで解いてみよう!ということで解いてみました!
pythonの機能(ライブラリ)がまだ全然使いこなせないので、今回は第2問(確率)だけを解いてみました。
(問題)
(解答)
# 2017年 東大数学 理系 # 第2問 import itertools from fractions import Fraction move_pattern = ["a", "b", "c", "d"] move_command = list(itertools.product(move_pattern, repeat=6)) whole_event = 4 ** 6 counter_1 = 0 counter_2 = 0 for command in move_command: coordinate = [0, 0] for s in command: if s == "a": coordinate[0] += 1 if s == "b": coordinate[0] -= 1 if s == "c": coordinate[1] += 1 if s == "d": coordinate[1] -= 1 if coordinate[0] == coordinate[1]: counter_1 += 1 prob_1 = Fraction(counter_1, whole_event) print("the answer of (1) is {}".format(prob_1)) for command in move_command: coordinate = [0, 0] for s in command: if s == "a": coordinate[0] += 1 if s == "b": coordinate[0] -= 1 if s == "c": coordinate[1] += 1 if s == "d": coordinate[1] -= 1 if coordinate[0] == 0 and coordinate[1] == 0: counter_2 += 1 prob_2 = Fraction(counter_2, whole_event) print("the answer of (2) is {}".format(prob_2))
見やすいように、同じ処理を設問ごとに書いているので少し冗長になっていますが、ちゃんと動きます。
4048個のループが2回、全部で10000回ぐらいの処理なので工夫なしでやっても計算の時間は全然早いです。
(最初のitertoolsでcommand_listを作った時の処理も入れたら15000回ぐらい??)
計算結果はこれです
解答速報と照らし合わせてもあっていますね!
こうやって実際にpythonが使えるのを見ると面白いですよね〜
気が向いたら他の問題もやって見ます。
それでは〜〜
Record of study 〜2週間後前後〜
2週間ぐらいで、前にも紹介した教科書(下のやつ↓)を読み終えました。
本で書いてるサンプルコードを理解しながら、自分の手で書いていけば結構実力がつくんじゃないかと思います!
最後の方にはNumpy使ったり、簡単な機械学習のコードもサンプルコードとして乗っているので面白かったです。
初心者の人でも読めるようになっていると思いますが、やはり近くに誰かプログラミングガチ勢の人を見つけて、わからなくなったら聞いた方がいいかもしれないですね!
この本が終わったあとは、「各データ型ごとにどんなメソッドがあったか」を中心に第4章までをしっかり読み返して、破壊的メソッドとそうでないメソッドを区別して覚えました。
それからはAtCoderのBeginner問題をちょくちょくやり始めた感じです!
pythonはしっかりやれば完全な初心者でも2週間ぐらいでなんとなく書けるようになります!(書きやすいらしいです)
みんなpythonを始めよう!笑
それでは〜
Record of Study 〜開始から10日〜
勉強開始から10日後ぐらいについてです。
この辺りの時期に、インターン先のエンジニアの方に「インフラ勉強会」をしてもらいました。
その会社のネットワーク周りの環境を解説してもらって、ネットワークの全体的な基礎を勉強しました〜
こんな感じのやつですね!
インフラ周りのこともすごく興味を持ったので、勉強したいな〜って思いました。
AWSの資格なんかが取れたらいいな〜
やりたいことがどんどん出てきます。
まあ、一歩一歩ですね。
この頃Pythonの方は、
第7章:クラスの継承と高度なオブジェクト指向機能
第8章:モジュール
第9章:スコープとオブジェクト
あたりをさらっと読んでる感じです!
時系列が無茶苦茶ですが、初めから3週間強経った今はDjangoの勉強をしています。
日本語のドキュメントが充実していないので英語でやらざるを得ない部分はありますが、英語の勉強が同時にできると思って精進したいと思います。
この人の解説を聞きながらドキュメントを読んでいます。
「動画でざっと」→「文章を読みながら手を動かす」の流れです。
気張らずぼちぼちやります。笑
それでは〜
ABC #35 を python で解いてみた!
今日は勉強記録はお休みです!
そろそろD問題にもチャレンジしたいなあということで頑張って見ましたが、AtCoderのBegginnerコースでもかなり手こずりますね〜
数学は得意だったので、アルゴリズムを考えるのは楽しいのですが、パソコン初心者ということで、「どこまで自分で考えて」、「どこからパソコンに任せるのか」の見極めがなかなかに大変です。
問題 A:決められた比かどうか。
W, H = [int(n) for n in input().split()] if W/H == 4/3: print("4:3") elif W/H == 16/9: print("16:9")
問題 B:ドローン問題(要約が思いつきませんでした...)
import math S = input() T = int(input()) N = len(S) p = [0, 0] ?_conter = 0 for n in range(N): if S[n] = "?": ?_counter += 1 if S[n] = "L": p[0] -= 1 if S[n] = "R": p[0] += 1 if S[n] = "U": p[1] += 1 if S[n] = "D": p[1] -= 1 if T == 1: print(math.fabs(p[0]) + math.fabs(p[1]) + ?_counter) elif T ==2: judge1 = math.fabs(p[0]) + math.fabs(p[1]) - ?_counter judge2 = math.fabs(p[0]) + math.fabs(p[1]) + ?_counter if judge1 >= 0: print(judge1) elif judge1 < 0 and judge2 % 2 == 0: print(0) elif judge1 < 0 and judge2 % 2 == 1: print(1)
A, Bは確かめをしていないので、あってるか分かりません笑
あっているかは別として、BegginerのA~Cは簡単に解けるようになりました。
普通のエンジニアさんたちには当たり前だと思いますが、成長を感じて嬉しいです〜笑
問題 C:一列オセロ、区間指定してひっくり返すのを繰り返すした後の配列を求める
# "0"は黒、"1"は白 N, Q = [int(n) for n in input().split()] range_list = [] for i in range(Q): l, r = [int(n) for n in input().split()] range_list.append(list(range(l-1, r))) final_seq = "" for i in range(N): counter = 0 for each_range in range_list: if i in each_range: counter += 1 if counter % 2 == 1: final_seq += "1" elif counter % 2 == 0: final_seq += "0" print(final_seq)
問題 D
高橋君が住む国には N 箇所の町と町同士をつなぐ一方通行の道が M 本あり、それぞれの町には 1 から N の番号が割りふられています。 i 番目の道は ai 番の町から bi 番の町へ移動することが可能であり、移動に ci 分だけかかります。
所持金が 0 円の高橋君は T 分間のトレジャーハントに出かけることにしました。高橋君は開始 0 分の時点で 1 番の町にいます。また、開始から T 分の時点にも 1 番の町にいなくてはなりません。高橋君が i 番の町に 1 分間滞在すると、 Ai 円が高橋君の所持金に加算されます。
T 分間のトレジャーハントによって高橋君の所持金は最大いくらになるか求めてください。
今回はこれが難関です!
まず、そもそもMをNの関数にしなくていいのかな〜なんて思ったりします。1番の町から出ても帰ってこれないかもしれないですもんね〜
まあ、そこには触れないように考えます。
と思ってしばらく考えた末、ヒントも読みましたが、なにやら難しいぞ.....
今日はひとまず諦めます。。泣
Record of study 〜開始から5日後時点〜
今日は開始から5日後前後のお話です。
まず、前の記事で紹介した本の
第4章:組み込み型を使いこなす
でつまづきます。
関数の種類も多くなってくるし、一覧になっていても初心者には何が重要かわからないし、どうやって使えばいいのかもわからないしで、苦労しました。
最初に戦法は、「わからないところは無視して素通りする」です。笑
「後ろの方に書いてあることがなんとなく理解できたらここもわかるようになるんだろうな〜」と思ったので、完全に理解するのを諦め、とにかく読み進めることを重視しました。(1周目は半分も理解していないと思います笑)
さらに次の章に続きます。
第5章:pythonと関数型プログラミング
第6章:クラスとオブジェクト指向開発
意味わからん
そもそも関数型とかオブジェクト指向とか言われてもよくわからないですよね〜
ってなって、ここで、そこまでの不明点を社長に説明して、教えてもらいました!
オフィスで9時ぐらいから、2時間近く教えてもらいました!
なんて優しい社長だ...!!
ってことで、なんとなくイメージで理解したので、4章から読み返しました。
未だになんとなくなので5、6章はそろそろ読み返しておきたいなあ〜って感じですね。
それでは!
次は「1週間後前後」について書いていこうかな〜
Record of study 〜開始から3日間〜
開始から3日間の話です!
まず、基本を知らないとダメ!ということで、簡単な文法書に取り掛かりました。
使ったのはこの本です!
ネットで色々調べていたところ、評判が良かったので即決して買いました。
450ページぐらいの割と分厚い本ですが、受験時代も「化学の新研究」という760ページぐらいの化学の参考書を4〜5周ぐらい読んで勉強していたので、それほど腰は重くなかったかなと思います〜
初めの3日間で読んだのは大体以下の範囲です。
第1章:プログラミング言語 Python
第2章: Pythonでプログラミングを始めよう
第3章: Pythonの基礎をマスターする
エディターはAtomを使っています。無料ですし、色々拡張機能もあるので使いやすいですよ!
でも最初の方は普通にターミナルに直接打ってもいいかもしれません。いちいち呼び出すのが面倒なので...
手順としては、サンプルコードを書きながら、なんとなく「こんな感じで書くんだ〜」って思いながら見ていました。
「データ型とかいっぱいあるけど用途がわからん」とか、「なんか数学チックでなじみやすい」とか考えながらやってました。
最初の3日間は結構適当にさっとやっていました。
こういう分厚い本での勉強法ですが、
1周目:ざっとでいいから理解していく
2周目:それぞれの役割をきちんと理解する
3周目:細部まで暗記する
という感じで進めればいいのかなと思っています。
受験勉強で培った勉強法が使えますね!笑
では、次は「その後の2日間」ぐらいについて書こうと思います!
ARC #03 を python で解いてみた!
ARC #03 を解いて見ました。
今回はC問題も難しくて解けなかったので A, B 問題のみになります。
「もっといい書き方があるよ」とかがあればコメントにて教えていただけると嬉しいです!!
問題 A:GPAを求める
N = int(input()) grade = input() gpa_convert_dict = {"A": 4, "B": 3, "C": 2, "D": 1, "F": 0} grade_gpa = [] for i in range(N): grade_gpa.append(gpa_convert_dict[grade[i]]) average = sum(grade_gpa) / N print(average)
問題 B:逆文字辞書を作る
N = int(input()) word_list = [] for i in range(N): word = input() word_list.append(word) word_list_rev = [word[::-1] for word in word_list] word_dict = {word_list_rev[i]: word_list[i] for i in range(N)} word_list_rev.sort() for key in word_list_rev: print(word_dict[key])
Record of Study 〜始めるまで〜
全くの初心者と書きましたが、実は2016年の12月頃に一回 Rubyの勉強をしようと試みていました。
その時は周りにプログラミングを教えてくれる人も全然いなくて、「Tech::Camp」に通おうと思ったりしてたんですが.....
体験に行ったり、Tech::Camp主催のイベントとかにもいったけど、授業料高いしなあ...ということで渋っていました。。
そこで、独学で分厚い本を2冊ぐらい買って(10000円ぐらいつぎ込みました!)、RubyとかRailsとかの勉強をしていましたが、
全くできない!!
てかなんのための文法かとかもさっぱり!!
ってことで、早々に諦めました。笑
Rubyって日本人の方が作ったプログラミング言語で、日本語の記事も豊富だし、てかそもそもプログラミング言語として簡単!って聞いていたのに...みたいな感じで絶望的に(笑)
でもプログラミングやりたいなあ〜とかなんとなく思ったまま、何をやればいいかわからない状態がしばらく続きます。
そうこうしてるうちに、AI(人工知能)を使ったビジネスを展開しているベンチャー企業の社長に出会ってそこで働かせてもらえることになりました。
そこの社長とリードエンジニアの方に教えてもらいながらプログラミングの勉強が始まりました!
プログラミングの勉強の壁で一番大きいのは何と言っても「環境設定」!!
わけわからない黒い画面を開いて呪文みたいなコマンドを打っても帰ってくるのは意味不明な文字列...
ネットのページとか本とかに書いてある通りにやってもエラーが出たら、やる気が失せますよね〜
やはり、最初の設定だけはちゃんとできる人に任せた方がいいと思います!
(pythonの勉強だけなら環境設定はそんなに難しくないと思いますが...)
こんな感じで python3 の勉強が始まりました!
次は、「プログラミングの勉強を始めて3日間ぐらい」についてを書いていきたいと思います。
それではまた明日〜
プログラミングをやろうと思った理由
今日は初日なので記事を連投します〜笑
この記事では、そもそも僕がどうして「プログラミングをやろう」と思ったのかについて書きたいと思います。
というのも、プログラミングを始めて3週間経って、プログラミングそのものが楽しくなってきており、当初の目的みたいなものを忘れてきているな〜と実感しているからです。笑
主に3つ理由があると思っています。
①パソコンに強い人にそもそも憧れていた
これは、始めた目的には全く関係ないですが、テレビの「仰天ニュース」?の番組でハッカー(クラッカー)の特集をしているのを見たりして、パソコンに強い人に憧れていました。
ただし、当然ですが、クラッカーになりたいという意思は全くなく(笑)、ホワイトハッカーを目指したいと思っています。
②将来に備えて
将来、IoTがますます進んでいくと言われていますし、実際、最近のニュースで「全自動運転の自動車」が賑わっているなど、自分でもIoTが進んでいきそうだなあと実感しています。
そんな中、プログラミングを勉強することは必須だと思っています。
自分を取り囲む環境の根本を理解しないままでは不安ですし、何かと不利な立場になってしまうと思います。
③将来の夢
大学に入る前から、僕はずっと医者になりたいと思っていました。
でも、最近、「医療×IT」という新分野ができつつあることを知って、そちらの道にすごく惹かれています。
最終形がどのような形になるかわかりませんが、ひとまず医学とIT技術を身につけながらじっくり考えていきたいと思います!
「ITに関して広く、深めに知識と技術を身につけていく」為に始めたって感じですかね〜
まあしばらくは「楽しいからやってる」でいいと思いました笑
それでは!