今回は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)
■「もし次の常駐先が女子エンジニアばっかりだったら」とは?
プログラミング問題に正解するごとに、開発現場へ新たな女子エンジニアが投入されます。開発メンバーを増やしながら案件を成功させて女子エンジニアたちを育成していくと、遊び心のあるオフィスや女の子たちの可愛い衣装が解放されていきます。
プログラミング問題はやさしいものから高難易度なものまで多数用意。最高難易度の【霧島京子からの挑戦状】は、ゴール到達までの最小手数を競うランキング問題としてもお楽しみいただけます。
※イベントは終了しました。
■あらすじ
ITエンジニアとして働くあなたが新しい常駐先を訪ねると……そこは女子エンジニアだらけの開発現場だった!
助けを求める女子エンジニアたちへ救いの手を差し伸べていけば、あなたを慕った彼女たちはどんどんチームのメンバーとして仲間になって…!?
案件炎上、メンバー離脱……さまざまなトラブルを乗り越えながら案件を成功させ、可愛い女の子たちが成長していくと――。
最高の開発現場を作れるかどうかは、あなたのプログラミングスキルと采配次第!
■歴代paizaオンラインハッカソンリンク集
過去に開催された歴代paizaオンラインハッカソンのご紹介はこちら!もし女以外にもぜひチャレンジしてみてくださいね♪
paiza.hatenablog.com
paizaではスキルのあるエンジニアがきちんと評価されるようにし、技術を追い続ける事が仕事につながるようにする事で、日本のITエンジニアの地位向上を図っていければと考えています。特にpaizaではWebサービス提供企業などでもとめられる、システム開発力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題を出題しています。
テストの結果によりS・A・B・C・D・Eの6段階でランクが分かります。自分のプログラミングスキルを客観的に知りたいという方は是非チャレンジしてみてください。