【Outward】序盤の金策

 エンメルカルの森に行き荷物を町に置いた後神殿の中に潜入。
イルミネートホラーやシェルホラーにボコられながら、ギミックを駆使しシェルホラーを倒す。
製作で牙の剣とホラーのキチン、オカルトの残骸とパラジウムの欠片でホラーの剣を作成。
オカルトの残骸は人型のハチの巣であるハイブから、
パラジウムの欠片はエンメルカルの森内の青白い鉱床から採れる。

 これが高値で売れる。1個600シルバーで売れる。
神殿内に4体シェルホラーがいるため全て売ると2400シルバーになる。
ただ、私は剣主体で戦うため強力な武器であるホラーの剣を一つストックしておく。
攻撃時に猛毒状態にするため、毒が効く敵にはめっぽう強い。
ついでにコーラルホーンの弓を作成。これはミッションで使ったり使わなかったり。 
威力はともかく効果はリカーブボウの方が強い。

【C++】文字列マッチング(アナグラム、回文)

 書籍「競技プログラミングのためのC++」から抜粋。
これは毎回言っているが買うことはお勧めしない。
コードまで機械翻訳に巻き込まれていて読みづらいったらない。
なんで同じ構文で違う翻訳になってるんだ。。。

アナグラム

 ソート部分で「並び替え」になっている文と「ソート」になっている文がありややこしかった。
何で違う翻訳になるねんと。。。
仕様を考えれば同じ処理なのは自明なのだがややこしいったらない。

 アナグラムなので同じ文字数でなければ偽(false)である。
ソートして同じ文字列になったら正(true)というシンプルな関数だ。
比較文字列をトムリドル(Tom Marvolo Riddle)と、
ヴォルデモート(I AM LORD VOLDEMORT)に置き換えると面白いかもしれない。
その際、アルファベットの大文字を小文字に置き換える(あるいはその逆の)処理を追加したり、
スペースを除去する処理が必要になるだろう。

#include <iostream>
#include <algorithm>

using namespace std;

bool areAnagrams(std::string str1, std::string str2)
{
    if (str1.length() != str2.length()) return false;

    std::sort(str1.begin(), str1.end());
    std::sort(str2.begin(), str2.end());

    return str1 == str2;
}

int main()
{
    string str1 = "listen";
    string str2 = "silent";

    cout << (areAnagrams(str1, str2) ? "Yes" : "No") << endl;   // 出力: Yes
    
    return 0;
}

回文

 逆順に並び替えた文字列とオリジナルの文字列が同じ文字列なら回文というシンプルな関数だ。
回文とはしんぶんしやトマトのような頭から読んでも後ろから読んでも同じ文字になる文のことだ。
書籍では日本語でマダムと翻訳されていたが、
それだと回文にならないため英語の「madam」が正だろう。
何で一々邪推しなければいけないのか。。。
出版する前にちゃんとチェックしろよと。。。

 関数内でstd::を付けているのは、
他のコードに移植するとき手間を増やさないようにするためだ。
必要になるかどうかは知らない。

#include <iostream>
#include <algorithm>

using namespace std;

bool isPalindrome(std::string str)
{
    std::string original = str;

    std::reverse(str.begin(), str.end());
    
    return original == str;
}

int main()
{
    string str = "madam";

    cout << (isPalindrome(str) ? "回文" : "回文ではない") << endl;  // 出力: 回文

    return 0;
}

By ta-boss

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です