arduino knn

#include <Arduino.h>

#define k 3  // Number of neighbors to consider

struct DataPoint {
  int x;
  int y;
  int label;
};

DataPoint trainingData[] = {
  {1, 2, 0},
  {2, 3, 0},
  {3, 1, 0},
  {5, 4, 1},
  {6, 5, 1},
  {7, 3, 1}
};

int classify(int x, int y) {
  int distances[k];
  int labels[k];

  for (int i = 0; i < k; ++i) {
    distances[i] = 1000;  // Initialize with a large value
    labels[i] = -1;  // Initialize to an invalid label
  }

  for (int i = 0; i < sizeof(trainingData) / sizeof(trainingData[0]); ++i) {
    int dx = x - trainingData[i].x;
    int dy = y - trainingData[i].y;
    int dist = dx  dx + dy  dy;

    for (int j = 0; j < k; ++j) {
      if (dist < distances[j]) {
        for (int l = k - 1; l > j; --l) {
          distances[l] = distances[l - 1];
          labels[l] = labels[l - 1];
        }
        distances[j] = dist;
        labels[j] = trainingData[i].label;
        break;
      }
    }
  }

  int count0 = 0, count1 = 0;
  for (int i = 0; i < k; ++i) {
    if (labels[i] == 0) {
      ++count0;
    } else {
      ++count1;
    }
  }

  return (count0 > count1) ? 0 : 1;
}

void setup() {
  Serial.begin(9600);

  // Test the classifier with new data points
  int result1 = classify(4, 2);
  int result2 = classify(1, 4);

  Serial.print("Classifying (4, 2): ");
  Serial.println(result1);
  Serial.print("Classifying (1, 4): ");
  Serial.println(result2);
}

void loop() {
  // Nothing to do here
}