Skip to content

Instantly share code, notes, and snippets.

@Gumball12
Created October 4, 2018 00:56
Show Gist options
  • Save Gumball12/b7c104cc97f84aa30eee18881cf7c8f9 to your computer and use it in GitHub Desktop.
Save Gumball12/b7c104cc97f84aa30eee18881cf7c8f9 to your computer and use it in GitHub Desktop.
//gcc 5.4.0
/** 로또
*
* # Rules
* > 숫자는 1 ~ 45
* > 총 7 개의 숫자를 뽑는다
*
* # Process
* 1. 7 개의 숫자를 입력한다
* 2. 1 ~ 45 중 하나씩 랜덤으로 총 7 개를 뽑는다
* 3. 사용자가 입력한 숫자와 랜덤으로 뽑힌 숫자를 비교해 맞은 갯수를 출력한다
*
* # Functions
* > getData: 1부터 45까지의 숫자가 오름차순으로 들어있는 배열 데이터를 가리키는 포인터를 반환. (Model 이라고 생각하면 되겠다)
* > controller: 입력받는 숫자와 로또 데이터를 이용해 처리. (Controller 라고 생각하면 되겠다)
* >> shuffle: 배열 데이터를 랜덤하게 섞음
* >> checkCount: (섞인)배열 데이터와 사용자의 입력을 비교해 서로 일치하는 갯수를 반환
* >> getMsg: (일치하는)갯수를 이용해 출력할 메시지를 반환
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
/**
*
* Model
*
*/
char *getData () {
static char data[45];
for (unsigned char i = 0; i < 45; i++) {
data[i] = i + 1;
}
return data;
}
/**
*
* Controller
*
*/
char *shuffle (char *data) {
srand(time(NULL)); // for random value
for (unsigned char i = 0; i < 45; i++) {
unsigned char targetIndex = (rand() % 44) + 1;
unsigned char tmp = data[i];
// swap data
data[i] = data[targetIndex];
data[targetIndex] = tmp;
}
return data;
}
unsigned checkCount (char *data, int *inputs) {
// 정말로 멍청한 방법이지만, check if exists value in array를 간단히 구현할 수 있기 때문에 일일이 비교 [O(n^2)]
unsigned cnt = 0;
for (unsigned char i = 0; i < 7; i++) {
for (unsigned char j = 0; j < 7; j++) {
if (data[j] == inputs[i]) {
cnt++;
break;
}
}
}
return cnt;
}
char *getMsg(unsigned cnt) {
static char bf[100] = "";
sprintf(bf, "총 %d 개 맞추었습니다.\n\n------\n", cnt);
return bf;
}
void controller (int *inputs) {
char *data = getData();
printf(getMsg(checkCount(shuffle(data), inputs)));
for (unsigned char i = 0; i < 7; i++) {
printf("data: %d, inputs: %d\n", data[i], inputs[i]);
}
}
/**
*
* main
*
*/
int main(void)
{
int inputs[7];
for (char i = 0; i < 7; i++) {
scanf("%d", &inputs[i]);
}
controller(inputs);
return 0;
}
@Gumball12
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment