paizaオンラインハッカソン7に参加してみた – つり目(C++, Swift)

『paizaオンラインハッカソン7』が開始されたの通り、現在、『paizaオンラインハッカソンVol.7 プログラミングで彼女をつくる』が開催されているので、当方も参加しており、順次コードを公開している。今回は最も簡単であろう「つり目」のお題についてサンプルコードの公開と簡単な解説を行いたい。ソースコードはGitHub内でも公開しているので、興味があればぜひ参考にしてもらいたい。

このお題の目的について

さて、今回の「つり目」の問題だが、これは、入力された数値の回数分「Ann」と改行せずに連続して出力するというのが目的である。

したがって、ここでは文字列の数値かとforループがちゃんとできているかどうかが問題となる。

サンプルコード

C++

参考URL: https://github.com/saitomarch/POH7/blob/master/cpp/tsurime.cpp

[code lang=”cpp”]#include <string>
#include <cstdlib>
using namespace std;

string readline() {
string str;
getline(cin, str);
return str;
}

int main(void){
auto times = stoi(readline());
const string ann = "Ann";
string str = "";
for (auto cnt = 0; cnt < times; cnt++) {
str += ann;
}
cout << str << endl;
return EXIT_SUCCESS;
}
[/code]

Swift

参考URL: https://github.com/saitomarch/POH7/blob/master/swift/tsurime.swift

[code lang=”swift”]let times = Int(readLine()!)
let ann = "Ann"
var str = "";
for (var cnt = 0; cnt < times; cnt++) {
str += ann;
}
print(str)
[/code]

解説

C++、Swiftともに入力から得られた文字列を数値化した後、その回数分”Ann”という文字列をつなげた後、一気に出力するという方式を取っている。

C++ではgetline()という関数があるが、それをより使いやすくするために、独自にreadline()という関数を作っているが、やっていること自体はそこまで複雑ではない。

Swiftでは、readLine()はString型のOptional型1 を返り値とする関数であるため、型を確定するには関数の後に!を追加しなければならない2

C言語のstd::string、SwiftのStringはいずれも+演算子で文字列を結合できる特徴がある。今回はそれを利用した。

その後は、結合した文字を出力した。

最後に

今回解説コードを上げた問題はプログラミングを始めた人であれば(言語にもよるが)簡単に解けるので、もしミスっていたら、どこが間違っていたのかちゃんと見直すようにしよう。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しております。仕事依頼や相談などについては、Contact Formよりお願いいたします。
  1. nilの可能性がある型 []
  2. 本来であればnilチェックをしなければならないが、今回は省略している []