東大理三生のプログラミング奮闘記

初心者プログラマーが半年間でどれだけ成長するか!についてのブログです。勉強方法とか使った本とかについて書いていくと思います!プログラミングをもっと身近に感じてもらえたら嬉しいです!毎日更新を目指します!

Record of Study 〜開始から10日〜

勉強開始から10日後ぐらいについてです。


この辺りの時期に、インターン先のエンジニアの方に「インフラ勉強会」をしてもらいました。


その会社のネットワーク周りの環境を解説してもらって、ネットワークの全体的な基礎を勉強しました〜

f:id:gragragrao:20170224173242g:plain

こんな感じのやつですね!

インフラ周りのこともすごく興味を持ったので、勉強したいな〜って思いました。


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章:組み込み型を使いこなす

でつまづきます。

f:id:gragragrao:20170222180116j:plain



関数の種類も多くなってくるし、一覧になっていても初心者には何が重要かわからないし、どうやって使えばいいのかもわからないしで、苦労しました。


最初に戦法は、「わからないところは無視して素通りする」です。笑


「後ろの方に書いてあることがなんとなく理解できたらここもわかるようになるんだろうな〜」と思ったので、完全に理解するのを諦め、とにかく読み進めることを重視しました。(1周目は半分も理解していないと思います笑)



さらに次の章に続きます。

第5章:python関数型プログラミング
第6章:クラスとオブジェクト指向開発


意味わからん


そもそも関数型とかオブジェクト指向とか言われてもよくわからないですよね〜


ってなって、ここで、そこまでの不明点を社長に説明して、教えてもらいました!


オフィスで9時ぐらいから、2時間近く教えてもらいました!
なんて優しい社長だ...!!

f:id:gragragrao:20170222180946j:plain


ってことで、なんとなくイメージで理解したので、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って日本人の方が作ったプログラミング言語で、日本語の記事も豊富だし、てかそもそもプログラミング言語として簡単!って聞いていたのに...みたいな感じで絶望的に(笑)


f:id:gragragrao:20170220095630j:plain


でもプログラミングやりたいなあ〜とかなんとなく思ったまま、何をやればいいかわからない状態がしばらく続きます。




そうこうしてるうちに、AI(人工知能)を使ったビジネスを展開しているベンチャー企業の社長に出会ってそこで働かせてもらえることになりました。


そこの社長とリードエンジニアの方に教えてもらいながらプログラミングの勉強が始まりました!


プログラミングの勉強の壁で一番大きいのは何と言っても「環境設定」!!


わけわからない黒い画面を開いて呪文みたいなコマンドを打っても帰ってくるのは意味不明な文字列...

f:id:gragragrao:20170220094236p:plain


ネットのページとか本とかに書いてある通りにやってもエラーが出たら、やる気が失せますよね〜


やはり、最初の設定だけはちゃんとできる人に任せた方がいいと思います!


pythonの勉強だけなら環境設定はそんなに難しくないと思いますが...)




こんな感じで python3 の勉強が始まりました!


次は、「プログラミングの勉強を始めて3日間ぐらい」についてを書いていきたいと思います。


それではまた明日〜

プログラミングをやろうと思った理由

今日は初日なので記事を連投します〜笑


この記事では、そもそも僕がどうして「プログラミングをやろう」と思ったのかについて書きたいと思います。
というのも、プログラミングを始めて3週間経って、プログラミングそのものが楽しくなってきており、当初の目的みたいなものを忘れてきているな〜と実感しているからです。笑


主に3つ理由があると思っています。

①パソコンに強い人にそもそも憧れていた

これは、始めた目的には全く関係ないですが、テレビの「仰天ニュース」?の番組でハッカー(クラッカー)の特集をしているのを見たりして、パソコンに強い人に憧れていました。
ただし、当然ですが、クラッカーになりたいという意思は全くなく(笑)、ホワイトハッカーを目指したいと思っています。


②将来に備えて

将来、IoTがますます進んでいくと言われていますし、実際、最近のニュースで「全自動運転の自動車」が賑わっているなど、自分でもIoTが進んでいきそうだなあと実感しています。

そんな中、プログラミングを勉強することは必須だと思っています。

自分を取り囲む環境の根本を理解しないままでは不安ですし、何かと不利な立場になってしまうと思います。


③将来の夢

大学に入る前から、僕はずっと医者になりたいと思っていました。

でも、最近、「医療×IT」という新分野ができつつあることを知って、そちらの道にすごく惹かれています。

最終形がどのような形になるかわかりませんが、ひとまず医学とIT技術を身につけながらじっくり考えていきたいと思います!


「ITに関して広く、深めに知識と技術を身につけていく」為に始めたって感じですかね〜

まあしばらくは「楽しいからやってる」でいいと思いました笑

それでは!

ARC #02 を python で解いてみた!

AtCoder のRegular Contest 02 のA〜C問題を python3 で解いてみました。

D 問題はまだ実力的に無理でした...笑

問題は以下です↓↓
arc002.contest.atcoder.jp


汚いコードですが一応動きました。。笑

もし、優しい方がいらっしゃったら、「こうすればもっとうまく書けるよ」とかをコメントで教えていただけると嬉しいです。

A 問題:うるう年を調べる

Y = int(input())
if Y % 400 == 0:
    print("yes")
elif Y % 100 == 0:
    print("no")
elif Y % 4 == 0:
    print("yes")
else:
    print("no")

B 問題:(年)が(月×日)で割り切れる一番近い日付を見つける

import datetime
Y, M, D = [int(n) for n in input().split("/")]
date_search = datetime.date(Y, M, D)
for n in range(1, 365):
    td = datetime.timedelta(days = n)
    date_search_next = date_search + td
    y = date_search_next.year
    m = date_search_next.month
    d = date_search_next.day
    if y % (m * d) == 0:
        print(date_search_next)
        break

C 問題:A,B,X,Yのうち2文字の組を2つ作って文字列を短くする

import re

N = input()
command = input()
button = ["A", "B", "X", "Y"]
short_command = []
for x in command:
    for y in button:
        short_command.append(x + y)

 

num = []
for i in range(15):
    L = short_command[i]
    command_1 = re.sub(L, "L", command)
    for l in range(i+1, 16):
        R = short_command[l]
        command_2 = re.sub(R, "R", command_1)
        num.append(len(command_2))

print(min(num))

Hello, World !!

以前、Ameba Blogで「一浪生の東大理三攻略日記」を書いていた gragragraoです。

ameblo.jp

 

新しい目標ができ、そのジャンルが受験勉強とは全く関係なかったので今回新しくブログを作りました!

 

hatena blogにした理由は特になくて、Amebaだとアプリでのアカウント切り替えが面倒だろうな〜って思ったからです。笑

 

 

タイトル通り、このブログでは主にプログラミング関連の記事を書いていきたいと思っています。

 

2017年2月にpythonの勉強を始め(つい最近!!)、3週間弱経ってようやくなんとか書けるようにはなってきたのでまずは最初の方を振り返りながら書いていきたいと思います。

 

 これまではパソコンとかに全く興味がなくて、プログラミングなどとは無縁の生活を送ってきたので、始まりは正真正銘の初心者でした!

 

なので、「これからプログラミングを始めよう!」っていう人には割と参考になるかと思います。笑

 

pythonを選んだ理由は、今一番イケている(らしい)言語であることと、インターン先の使用言語がpythonなのでガチ勢の人に教えてもらえることです。

 

東大では9月から医学部になるんですが(それまでは暇)、あと半年強あるのでその間に....

 

python:ちゃんと完璧にする。フレームワークDjangoを使う。

ruby:コード見て理解できるぐらいに知っておく

JavaScript:割と書けるようになりたい

AWS:使えるようになりたい。ソリューションアーキテクトという資格に合格したい

 

これぐらいは達成できたらいいなと思います!

 

では!!

 

励みになるので、よかったら「いいね」お願いします!