каубойците определено са измислили по-добър начин за търсене на хора. твоя метод със двоичното търсене не може да отличи зубър от човек който разбира, накито от дира сигурно ще ти отговори вярно, но не вярвам да мине задачата с непълно условие.
Още ми е в мейлите ... това е заданието:
Please find attached the test case in cpp. It's not very well defined on purpose, the target is to trigger discussion with the development team during F2F (or Camera 2 Camera) interview
Expectation:your solution within 48h, with your assumptions in comment and suggestion, idea.
We do not expect something which can compile directly.
И прикачения файл:
#include <iostream>
/** GPSTest
*
* The goal is to get a valid time and position from a GPS.
*
* Then, send the position to the web-API endpoint https://bike-api.cowboy.bike/position
* Format of the data is defined in the Web API struct gps_info.
*
* If the position has not been received after 10 minutes, but there is a valid time you should send the time to the web-API.
*
*
*
*
* GPS documentation :
*
* The platform has a GPS receiver attached to the MCU via I2C on bus 1 and an interrupt signal on GPIO 12 that the GPS can pull low when it has data.
*
* The GPS has an 8-bit configuration register at address 0 you can write with the following options:
* BIT0: enable interrupt line
* BIT1: Interrupt on time
* BIT2: Interrupt on position
*
* The time is received by doing a standard I2C read from address 1
* This is the payload:
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | Byte Offset | Format | Name | Unit | Description |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 0 | U4 | iTOW | ms | GPS time of week of the navigation epoch. |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 4 | U2 | year | y | Year (UTC) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 6 | U1 | month | month | Month, range 1..12 (UTC) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 7 | U1 | day | d | Day of month, range 1..31 (UTC) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 8 | U1 | hour | h | Hour of day, range 0..23 (UTC) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 9 | U1 | min | min | Minute of hour, range 0..59 (UTC) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 10 | U1 | sec | s | Seconds of minute, range 0..60 (UTC) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
* | 11 | X1 | valid | - | Validity flags (bit 0: validDate, bit 1: validTime) |
* +-------------+--------+-------+-------+-----------------------------------------------------+
*
* The position is received by doing a standard I2C read from address 2
* This is the payload:
* +-------------+--------+-------------+----------------------------------------------------------+
* | Byte Offset | Format | Name | Description |
* +-------------+--------+-------------+----------------------------------------------------------+
* | 0 | U1 | latitude | degrees part of the latitude |
* +-------------+--------+-------------+----------------------------------------------------------+
* | 1 | U2 | latitude | minutes part of the latitude, scaled by *1000 |
* +-------------+--------+-------------+----------------------------------------------------------+
* | 3 | CHAR | north/south | 'N' for North, 'S' for South |
* +-------------+--------+-------------+----------------------------------------------------------+
* | 4 | U1 | longitude | degrees part of the longitude |
* +-------------+--------+-------------+----------------------------------------------------------+
* | 5 | U2 | longitude | minutes part of the longitude, scaled by *1000 |
* +-------------+--------+-------------+----------------------------------------------------------+
* | 7 | CHAR | east/west | 'E' for East, 'W' for West |
* +-------------+--------+-------------+----------------------------------------------------------+
*
*
* Additionnal info :
*
* Standard Timer/clock lib can be used, no need to reimplement it.
*
* Included classes : (should be used as is, no need to complete it or rework it)
*
* - I2CDevice : Define the interface of an I2C communication
* - WebAPI : Define the interface of the web API communication
*/
using namespace std;
typedef void CallbackFunction(void);
class I2CDevice {
public:
/**
* @brief I2CDevice
* @param bus
* @param device_address
*/
I2CDevice(uint8_t bus, uint8_t device_address);
/** Enable interrupt
* @param pin
* @param level
* @param cbfunction function that will be called when interrupt is triggered.
*/
void registerInterrupt(uint32_t pin, uint8_t level, CallbackFunction cbfunction);
/** write data to device
* @param len
* @param data
* @return number of bytes written
*/
int write(size_t len, uint8_t *data);
/** Read data from the device
* @param len the maximum size of the buffer
* @param buffer to write data into
* @return the number of bytes read
*/
int read(size_t len, uint8_t *buffer);
/** write data to device/register
* @param regAddr
* @param len
* @param data
* @return number of bytes written
*/
int writeReg(uint8_t regAddr, size_t len, uint8_t *data);
/** Read data from the device/register
* @param regAddr
* @param len the maximum size of the buffer
* @param buffer to write data into
* @return the number of bytes read
*/
int readReg(uint8_t regAddr, size_t len, uint8_t *buffer);
};
class WebAPI {
public:
typedef struct {
uint16_t tm_year;
uint8_t tm_month;
uint8_t tm_day;
uint8_t tm_hour;
uint8_t tm_minute;
uint8_t tm_second;
} tm;
typedef struct {
tm time;
} gps_info;
/**
* @brief WebAPI
* @param endpoint : endpoint of the backend to transfer the data
* @param dataBuffer :
*/
WebAPI(std::string endpoint, APIDataBuffer dataBuffer);
/**
* Send dataBuffer to the backend
* @return true on success
*/
bool sendData();
protected:
class APIDataBuffer {
public:
APIDataBuffer();
/** read gps info
* @param gps info struct
* @return actual bytes that were written to the buffer
*/
virtual int readData(gps_info *info) = 0;
};
};
int main()
{
cout << "Hello Cowboy!" << endl;
return 0;
}
АКо на някой му е интересно мога да кача и моя отговор ...