paizaのスキルチェック(Python3, C#)で値を取得する

今さらながら、プログラミングのスキルチェックが出来るpaizaの存在を知りました。

今まで、独学でPythonの勉強をしていましたが、どのぐらい出来るようになったのか、自分では判断できないので、スキルチェックをやってみました。

いざスキルチェックをやってみると、入力値の取得方法が分かりません。入力値の取得方法を理解するまで時間がかかりましたが、問題を解くのは結構面白いです。

B問題ぐらいまでなら、アルゴリズムを知らなくても、ゴリ押しやパズル感覚で解ける問題が多く、そんなに時間もかからないので、仕事の合間の気分転換にちょうど良い感じでした。

ただ、ちょっと問題文を読んだだけでは何が言いたいのか、すぐには分からないことがあります。これはプログラミングの問題というよりは、日本語の問題ですが。

この人、ちょっと何が言いたいのかわからない・・・

私のような実務未経験者からすると、実務の大変さを垣間見ることもできます。

ステータス

現在のレーティングとステータスはこんな感じです。

PythonでとりあえずBランクになるまでサクッとやってから、C問題を全部Pythonでやりました。

そこで、ちょっとPython以外の言語もやってみようと思い、個人が趣味で使うアプリなら何でも作れるという噂のC#に挑戦することに。

一通りC#の本を読みながら、D問題をすべてC#で解きました。今は簡単なB問題ならC#で解けるようになった感じです。Pythonだとあまり型を意識することが無かったので、型を少し意識しないといけないC#は新鮮でした。

入力値の取得

入力値はそのままだと文字列で受け取ることになるので、数値に変換することが多いです。

方法は色々ありますが、私がやっていたコードはこんな感じです。

入力値を数値に

6

こんな感じの値を数値に変換します。

Python3

input_line = int(input())

C#

var line = int.Parse(Console.ReadLine());

入力値を配列に(文字列)

hoge foo

こんな感じの値を文字列の配列に変換します。

Python3

input_line = list(input().split(' '))

C#

var line = Console.ReadLine().Split(' ');

入力値を配列に(数値)

120 40 50

こんな感じの値を数値の配列に変換します。

Python3

input_line = list(map(int, input().split(' ')))

C#

var line = Console.ReadLine().Split(' ');
int[] nums = Array.ConvertAll(line, int.Parse);

↑↓このどちらか

var line = Console.ReadLine().Split(' ');
int[] nums = Array.ConvertAll(line, x => int.Parse(x));

どちらも、using System;だけで使えました。

int[] numsじゃなくて、var numsでもいけます。

C#は基本varで書く感じなのかな? まだ、よく分かってません。

ちなみに、1行で書くとこんな感じです。

var line = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);

数値と文字列混在の場合

C#

90 50 xxx

こんな場合は、TryParseで文字列を任意の数値に変換してました。

以下のコードでは、90,50,-1に変換しています。

var line = Console.ReadLine().Split(' ');
var data = new int[3];
for (var i = 0; i < 3; i++) {
    int num;
    if (int.TryParse(line[i], out num)) {
        // 数値に変換できる場合はその数値を代入
        data[i] = num;
    } else {
        // 数値に変換出来ない場合は、numの値は0
        // 今回は、0を代入したくないので、-1を代入
        data[i] = -1;
    }
}

どうやら、↓こんな書き方もできるらしい。TryParseの中で、outパラメータを付けたまま変数を宣言。

for (var i = 0; i < 3; i++) {
    if (int.TryParse(line[i], out int num)) {
        data[i] = num;
    } else {
        data[i] = -1;
    }
}

スカウト

ちなみに、スカウトは一通も来てません。

実務経験なしのおじさんで、プロフィールやPRも書いてないので、当然ですが。

求人も実務経験ありが前提なので、未経験から転職を目指しているおじさんは、あまり期待しない方がいいかもしれません。