Dartの練習問題〜基礎力up🔥〜
どうも!初心者プログラマーのちゃきです!
今回は、dartの練習問題をまとめました! 英語のサイトですが、とても良い練習問題が詰まっていました(^O^)
いろんなメソッドを使いこなせたら、もっとプログラミングが楽しくなりそうです🎶🎶
答えは公式のものと自分で考えたものを混ぜているので、この解き方の方がいいよ!などありましたら教えてください🙇
問題1
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
とし、それらの間に共通する要素だけを含む(重複のない)リストを返すプログラムを書こう。
List<int> a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89];
List<int> b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 89];
Set<int> c = {}; //
for (var i in a) {
for (var j in b) {
if (i == j) {
c.add(j);
}
}
}
print(c.toList());
aとbの共通する要素を見つけるには、aでmapを使い、mapの中でbでmapを使ってbの要素を一つずつ確かめればいいですね!
重複のないってどうすればいいんだ??と思いましたが、
set→重複を許さないmap型の配列
list→重複を許すlist型の配列
なので、setでまず配列を作って、それを最後にリスト型にすればいいですね☺︎
問題2
変数に保存されたリストが与えられたとする。
list = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100].
このリストを受け取り、このリストの偶数要素だけを含む新しいリストを作成するDartコードを書こう。
解答
final list = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100];
final evenNumList = [];
for (var i = 0; i <= aList.length - 1; i++) {
//for (初期値; 最大値; 増え方)
if (list[i] % 2 == 0) {
evenNumList.add(list[i]);
}
}
print(evenNumList);
問題3
複数の単語を含む長い文字列をユーザーに尋ねるプログラムを書こう。単語を逆順に並べる以外は、同じ文字列をユーザーにプリントしよう。
import 'dart:io';
void main() {
stdout.write("Please give a sentence: ");
String sentence = stdin.readLineSync();
reverseSentence(sentence);
}
void reverseSentence(String sentence) {
/* Split the sentence into a list of words
Reverse the list, then join the words back */
String a = sentence.split(" ").reversed.toList().join(" ");
print(a);
}
問題4
1から100の間の乱数を生成する。ユーザーに数字を推測してもらい、その数字が低すぎるか、高すぎるか、あるいは正確に正しいかを教えてあげよう。
import 'dart:io';
import 'dart:math';
void main() {
print("Type exit to quit the game");
guessingGame();
}
guessingGame() {
final random = Random();
int randNumber = random.nextInt(100);
int attempt = 0;
while (true) {
attempt += 1;
stdout.write("Please choose a number between 0 and 100: ");
String chosenNumber = stdin.readLineSync();
// Make sure user does not go out of limits
if (chosenNumber.toLowerCase() == "exit") {
print("\nBye");
break;
} else if (int.parse(chosenNumber) > 100) {
print("Please do not go over 100");
continue;
}
// Main logic
if (int.parse(chosenNumber) == randNumber) {
print("Bingo! You tried $attempt times\n");
continue;
} else if (int.parse(chosenNumber) > randNumber) {
print("You are higher");
continue;
} else {
print("You are lower");
continue;
}
}
}
for文→指定した回数だけ処理を繰り返す
do while文→条件が満たされている限り、処理を何度も繰り返す
なので、回数が定まっていないときはwhile文を使えばいいのですね!
問題5
ユーザーと一緒に「cows and bulls」ゲームをするプログラムを作成しよう。4桁の数字をランダムに生成する。ユーザーに4桁の数字を当ててもらう。(今回はこちらもランダムに生成)ユーザーが正解の数字を1桁当てるごとに「cow」。間違って正解した桁には "bull"。
ユーザーが当てるたびに、「cow」と「bull」の数を教える。ユーザーが正しい数字を当てたら、ゲーム終了。ゲーム中、ユーザーが推測した数を記録し、最後にユーザーに伝えましょう。
int cowCount = 0;
int bowCount = 0;
//ランダムな四桁の数字と、ユーザーの四桁の数字を作成する
String randomInt = (Random().nextInt(10000) + 1000).toString();
//四桁の数字をリストにする。
final List randomIntList = randomInt.split('');
while (cowCount != 4) {
//ユーザーの予想
String userInt = (Random().nextInt(10000) + 1000).toString();
print('userは$userIntと推測した!');
final List userIntList = userInt.split('');
for (var i = 0; i <= 3; i++) {
if (randomIntList[i] == userIntList[i]) {
cowCount++;
} else {
bowCount++;
}
print("あなたのcowCountは、$cowCountで、bowCountは、$bowCount");
if (i == 3) {
//最後はリセットする
bowCount = 0;
cowCount = 0;
}
}
}
print('正解おめでとうございます!');
おわりに
ここまで読んでくださってありがとうございます✨✨
5月は毎日投稿を頑張るので、気になる投稿があれば見てくださると嬉しいです☺️
Discussion