🦧

Dartの練習問題〜基礎力up🔥〜

2024/04/30に公開

どうも!初心者プログラマーのちゃきです!

今回は、dartの練習問題をまとめました! 英語のサイトですが、とても良い練習問題が詰まっていました(^O^)
https://hackmd.io/@kuzmapetrovich/S1x90jWGP

いろんなメソッドを使いこなせたら、もっとプログラミングが楽しくなりそうです🎶🎶
答えは公式のものと自分で考えたものを混ぜているので、この解き方の方がいいよ!などありましたら教えてください🙇

問題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