idiotbaka

エンジニアが死滅シタ世界 体验(一)
最近一款网页游戏在各个码农群刷屏,源自 paiza.jp 平台推出的一款面向程序员的编程游戏。名字叫《エンジニアが...
扫描右侧二维码阅读全文
23
2019/01

エンジニアが死滅シタ世界 体验(一)

屏幕快照 2019-01-23 下午10.14.35.png
最近一款网页游戏在各个码农群刷屏,源自 paiza.jp 平台推出的一款面向程序员的编程游戏。名字叫《エンジニアが死滅シタ世界》(工程师灭绝了的世界)。游戏讲的是全世界所有的 IT 工程师因为感染病毒死亡,IT 技术的消失导致了国家混乱,玩家则需要负责解决各种编程问题,来拯救世界(给妹子换装)。

玩法

游戏网址;https://paiza.jp/botchi/
游戏玩法很简单,游戏提供了一个地图供玩家选择,地图上分别有A、B、C、D四种难度的区域,玩家需要解决各个区域的编程问题。
屏幕快照 2019-01-23 下午10.44.15.png

问题解决后,可以获得对应的装扮,在据点换装。
屏幕快照 2019-01-23 下午10.44.22.png

装扮除了解决地图上的问题可以获得之外,还有一些装扮可以通过体验网站其他功能来获得。

(肥宅版 leetCode)
QQ图片20190124193210.jpg

上手

从难度 D 的问题开始解决吧。

问题1:荒れ果てた警察署 [MISSION LEVEL: D]

あなたは 0 から 9 の数字を 3 つ入力すると開く扉を開こうとしています。

鍵の番号は左から 2 つまで判明しています。 3 つ目に関しては以下の法則で決まることがわかりました。

・2 つ目までをすべて足す
・足したものを 10 で割ったときの余り

2 つ目までの数字が与えられるので 3 つ目を計算し出力してください。

解释:
想打开门需要输入3个0~9之间的数字。前两个数字已经知道了,第三个数字有以下两个法则决定:
1.两数相加
2.相加结果对10进行取余,用给出的前两个数字,来计算第3个数字。

解答:
很简单,两数相加求余即可。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    $input_lines = fgets(STDIN);
    $input_lines = explode(' ', $input_lines);
    $sum = $input_lines[0] + $input_lines[1];
    echo $sum%10;
    ?>

问题2:荒れ果てたオフィス [MISSION LEVEL: D]

あなたは書類の整理をしています。 書類には 1 から 3 までの重要度 e が設定されています。数字が大きいほど重要な書類とされています。

書類のタイトル文字列 S_i と重要度 e_i が n 件与えられます。 重要度が 3
の書類のタイトルのみを入力された順に出力してください。

解释:
你在整理书。书有1~3三种重要度(e)。数字越大越重要。
n本书会分别给出书名(S_i)和重要度(e_i)。
请按照顺序把重要度为3的书的书名输出出来。

解答:
也很简单,预先创建一个数组,把重要度满足3的存放起来,最后遍历输出即可。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    $line = fgets(STDIN);
    $title = [];
    for($i=0; $i<$line; $i++) {
        $str = fgets(STDIN);
        $str = explode(' ', $str);
        if($str[1] == 3) {
            $title[] = $str[0];
        }
        unset($str);
    }
    foreach ($title as $v) {
        echo $v.PHP_EOL;
    }
?>

问题3:錆びついた電波塔 [MISSION LEVEL: D]

電波でデータ通信するプログラムが壊れてしまっており、あなたはそれを直そうとしています。

n回の通信をしたとき、受信した各データ各電波強度 d_i が与えられます。各電波強度 d_i は 1 から 9 の整数で表され、 5 以下では通信に失敗します。

n 回の通信のうち通信に成功した回数を出力してください。

解释:
无线电通信设备损坏了,你需要解决这个问题。
在进行n次通信时,会有每次通信接收的无线电强度d_i。无线电强度d_i为1到9的整数,如果小于等于5则表示通信失败。
请写出 n 次通信里,通信成功的次数。

解答:
也是一个遍历处理的问题,大于5的情况下计入通信成功。其实n不输入也可以解决。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    $input_lines1 = fgets(STDIN);
    $input_lines2 = fgets(STDIN);
    $input_lines2 = explode(' ', $input_lines2);
    $result = 0;
    for ($i=0; $i<$input_lines1; $i++) {
        if($input_lines2[$i] > 5) {
            $result++;
        }
    }
    echo $result;
?>

问题4:アンドロイドの生産工場 [MISSION LEVEL: D]

ある暗号化された文字列 S が与えられます。
文字列 S のうち奇数文字目を取り出せば解読できることがわかりました。

文字列 S が与えられるので奇数文字目の文字を取り出して解読した文字列を出力してください。

解释:
给你一个暗号化的字符串S来解码。
字符串S可以通过提取奇数字符来解码,输出解码后的字符串。

解答:
一开始想的是循环对2取余,判断余数,然后输出,但随后想到其实直接修改循环步长就行,效率更高也更简单。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    $input_lines = fgets(STDIN);
    for($i=1; $i <= strlen($input_lines); $i=$i+2) {
            echo substr($input_lines, $i-1, 1);
    }
?>

问题5:

あなたは残高からお金を引き出すプログラムを作成しています。

残高 n と引き出したい額 w が与えられます。

この時、引き出し額が残高を上回ってマイナスになる場合は "error"と出力し、引き出せる場合は残高を出力するプログラムを作成してください。

解释:
你正在写一个从余额中取钱的程序。
给你余额 n 和要取出的金额 w 。
此时,如果取钱金额超过余额,则输出“错误”,否则输出取钱后的余额。

解答:
加减法计算题。

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!

    $input_lines1 = fgets(STDIN);
    $input_lines2 = fgets(STDIN);
    if((int)$input_lines1 - (int)$input_lines2 >= 0) {
        echo (int)$input_lines1 - (int)$input_lines2;
    }
    else {
        echo 'error';
    }
?>

结尾

下一节开始解决难度C的题目。

Last modification:March 20th, 2019 at 11:14 pm
本文采用 知识共享署名 4.0 国际许可协议进行许可
可自由转载、引用,但需署名作者且注明文章出处
If you think my article is useful to you, please feel free to appreciate

Leave a Comment