ぬぬん!

やってみたこと,思ったこと

講義だけじゃない!問題を解いて圧倒的成長(๑•̀ㅂ•́)و✧

大遅刻です><申し訳ない

この記事は

Perl入学式 Advent Calendar 2017 - Qiita

の記事です

今年度は仕事周りでバタバタしたこともあり
Perl入学式にはあまりサポーターとして参加できなかったですが
今年最後ぐらい参加してくださった方に
何か少しでもトクになる情報をお伝えしていきます!

講義を受けた後、あともう一歩踏み出すと圧倒的成長

f:id:gomayumax:20161203171124p:plain

復習問題を解いてみよう

Perl入学式の講義には、講義ごとに復習問題が必ずついてます

内容は、その日学んだ内容を盛り込んだ問題です

講義を受けた後、自宅に帰ってから
是非この問題を解いてもらうことをオススメしています

「自分だけでは問題を解けないかもしれない」と
不安に思う方もいるかもしれませんが
一度問題を読むだけでもしてみて頂きたいのです

分からなくてもいいんです
分からないことが分かるということ自体が大きな成長なので
考えるというステップまで
勇気を持って踏み出してみてください

復習問題が終わった、もっとやってみたい

さて、この記事の本題です

Perl入学式の講義資料中の問題を解き終わった時(できれば第3回まで)、
また、講義を完走して、特にやりたいことが見つからない方に
手だけでも動かして覚えたことを忘れないようにする
オススメ方法をご紹介します

Project Euler

プロジェクトオイラーという数学の問題集があります

projecteuler.net

英語のサイトでびっくりするかもしれませんが
日本語版もあります

翻訳されたサイト: Project Euler - PukiWiki

ここに載っている問題は
世界中のエンジニアが
任意のプログラミング言語を使い解答を導き出している問題たちです

しかも驚くことに
Perl入学式の講義で紹介したプログラムの書き方で
基本的に解くことが出来ます

実際に問題を解いてみた

例えば、

Problem 1 「3と5の倍数」 10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる. 同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

という問題

倍数とか自然数、単語が懐かしいですね
ここはちょっと昔を思い出してみてください

では実際にこの問題をperlで解くと、どうなるでしょう 私の回答はこちら!

#!/usr/bin/env perl

use strict;
use warnings;

my $sum = 0;

for my $num (0..999) { 
    if ($num % 3 == 0 || $num % 5 == 0) {
        $sum += $num;
    }
}

print 'result: ' . $sum . "\n"; 

※解き方はひとつじゃありません、様々なやり方があるので是非自分自身でも考えてみてください

ちょっと解説

関連する講義資料部分を添えて
ちょっと解説していきます

まず、合計を求める問題なので
合計値を入れる変数を用意します

Perl入学式 第2回: 変数

my $sum = 0;

次に
1000 未満 の自然数を対象に処理したいので
0から999まで配列を用意してfor文で順に数字を処理していきます

Perl入学式 第2回: 範囲演算子
Perl入学式 第2回: for文

for my $num (0..999) {

そして
$num という変数に0から999まで数字が順々に入ってくるので 順々にチェックをしていきます

チェックする内容は 3 か 5 の倍数になっている数字 かです

条件を満たすかどうか確認するには if文を使います
また、倍数は3 か 5 で割り切れる数字 と言い換えることが出来るので
剰余算%を使います

Perl入学式 第2回: if文
Perl入学式 第2回: 四則演算
Perl入学式 第2回: 関係演算子

    if ($num % 3 == 0 || $num % 5 == 0) {

無事条件をクリアした数字は
足し加えていきます

Perl入学式 第2回: インクリメント

        $sum += $num;

0から999まで数字までの数字のチェックが終わり
最後、答えを出してあげなきゃいけません

Perl入学式 第1回: Hello,World!

print 'result: ' . $sum . "\n";

これでおしまいです!

問題をやっていたら躓いてしまった

問題のわからないところや疑問に思ったところは
次の講義でサポーターに聞いてもらうか
slackというチャットツールがあるのでそちらで質問していただければ
分かる範囲で回答します( http://www.perl-entrance.org/ ←の上部に[チャット招待]という部分があるのでこちらから)

最後に

Perl入学式の講義でお伝えしていることは
プログラミングの基礎的な考え方、書き方などです

なので
世に転がる問題たちに対して Perl入学式で身につけた知識を持って
挑むことが出来たりします

ぜひ、講義を受けられた皆さんには
講義資料内の問題やネットに転がる問題にも
チャレンジして圧倒的成長を目指していただきたい!!

参加された方の成長がサポーターの喜びです(・∀・)