読者です 読者をやめる 読者になる 読者になる

paiza開発日誌

paiza(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

【解答コード公開】常駐先を女子だらけにしたエンジニア続出!その方法とは?

f:id:paiza:20161205181100j:plain
今回はpaizaが提供する美少女エンジニア育成プログラミングゲーム「もし次の常駐先が女子エンジニアばっかりだったらの問題の一部の模範回答をご紹介いたします!

「どうしても解けない問題があって先に進めない!」という方もいらっしゃいましたが、もし女は回答コードや解法の公開・共有を歓迎しておりますので、模範解答や参加者の方がブログなどで公開されている回答を参考にしてみてください!

プレゼントの応募期間は締め切りましたが、プログラミング問題には引き続きチャレンジできます。もし次の常駐先が女子エンジニアばっかりだったらをまだプレイしてなかったという方はぜひチャレンジしてみてくださいね♪

■「もし次の常駐先が女子エンジニアばっかりだったら」一部問題の模範解答

※模範解答コードは全てPython3となっております

◆緑川つばめを窮地から救え

【Python3】

if __name__ == '__main__':
    #pythion3では四捨五入する時に5の場合は偶数に丸めるので
    #0.1足して多い数字の方に丸めてもらうように加算
    num = int(input())+0.1
    tmp = [num-0.1] #初期値が最大の場合もあるので加えておく
    while True:
        #各桁で四捨五入
        for i in range(1, len(str(num))-1):
            tmp.append(round(num, -1*i))

        #最大値を取得
        tmp_max = max(tmp)+0.1

        #最大値が前回と一緒ならば抜ける
        if tmp_max-0.1 == num:
            break

        #四捨五入の対象の値を更新
        num = tmp_max
        tmp = [num]

    #四捨五入の丸め対策を除去して出力
    print(int(num-0.1))

◆六村リオの緊急事態

【Python3】

if __name__ == '__main__':
    current, path = input().split()

    # '/' で分割と左側に空文字が現れる可能性があるのでその除去
    current = current.split('/')
    current = current[1::] if current[0] == '' else current
    path = path.split('/')
    path = path[1::] if path[0] == '' else path

    # 相対パスを順番にチェック
    for directory in path:
        # '..' であればcurrentを一つ遡る、もし現在地が最も根本のディレクトリならば移動しない
        if directory == '..':
            if current != []:
                current.pop()
        # '..' でなく '.' でない場合はcurrentの末尾にディレクトリを追加
        elif directory != '.':
            current.append(directory)

    #出力処理
    print('/' + '/'.join(current))

◆霧島京子からの挑戦状

※こちらの問題はもし女で最も難易度の高い問題かつランキング問題となっておりますため、下記のコードは正解にはなりますが、ベストな模範解答というわけではありません。工夫次第ではこのコードよりもよいスコアが取れますので、ぜひ挑戦してみてください。
【Python3】

import sys

move_dir  = ['D', 'R', 'U', 'L']
dir_param = {'D' : (0, 1), 'R' : (1, 0), 'U' : (0, -1), 'L' : (-1, 0)}

def in_range(x, y, W, H): return (0 <= x and x < W and 0 <= y and y < H)

#深さ優先探索
def dfs(board, visited, x, y, W, H, tx, ty):
    visited[y][x] = True

    if x == tx and y == ty:
        return True

    for index in range(len(move_dir)):
        dir = move_dir[index]
        nx = x + dir_param[dir][0]
        ny = y + dir_param[dir][1]

        if not in_range(nx, ny, W, H): continue
        if board[ny][nx] == '#': continue
        if visited[ny][nx]: continue

        print(dir)
        if dfs(board, visited, nx, ny, W, H, tx, ty):
            return True
        print(move_dir[(index + 2) % len(move_dir)])

    return False

if __name__ == "__main__":
    #入力処理
    H, W, N = map(int, input().split())
    board = [input() for _ in range(H)]
    sx, sy = map(int, input().split())
    tx, ty = map(int, input().split())
    sx, sy, tx, ty = (sx - 1, sy - 1, tx - 1, ty - 1)

    sys.setrecursionlimit(H * W) #再帰で解いちゃうので再帰の深さ広げておく

    visited = [[False for _ in range(W)] for __ in range(H)] 
    dfs(board, visited, sx, sy, W, H, tx, ty)

■「もし次の常駐先が女子エンジニアばっかりだったら」とは?

f:id:paiza:20161205181822j:plain
プログラミング問題に正解するごとに、開発現場へ新たな女子エンジニアが投入されます。開発メンバーを増やしながら案件を成功させて女子エンジニアたちを育成していくと、遊び心のあるオフィスや女の子たちの可愛い衣装が解放されていきます。

f:id:paiza:20161205181828j:plain
プログラミング問題はやさしいものから高難易度なものまで多数用意。最高難易度の【霧島京子からの挑戦状】は、ゴール到達までの最小手数を競うランキング問題としてもお楽しみいただけます。

paiza.jp

■あらすじ

f:id:paiza:20161205182641j:plain
ITエンジニアとして働くあなたが新しい常駐先を訪ねると……そこは女子エンジニアだらけの開発現場だった!

助けを求める女子エンジニアたちへ救いの手を差し伸べていけば、あなたを慕った彼女たちはどんどんチームのメンバーとして仲間になって…!?

案件炎上、メンバー離脱……さまざまなトラブルを乗り越えながら案件を成功させ、可愛い女の子たちが成長していくと――。

最高の開発現場を作れるかどうかは、あなたのプログラミングスキルと采配次第!

■歴代paizaオンラインハッカソンリンク集

過去に開催された歴代paizaオンラインハッカソンのご紹介はこちら!もし女以外にもぜひチャレンジしてみてくださいね♪
paiza.hatenablog.com




paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。

テストの結果によりS・A・B・C・D・Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp

プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編