Skip to content
18 changes: 13 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
## Git Training

##### Don't think about git, just do git !
##### (Based on a scenario; c programming with Git (Knapsack problem))
##### (Based on a scenario; c programming with Git (Report card, Knapsack problem))
### Training Environment

1. Download [tutorial](https://www.dropbox.com/s/0bplreunw6vf69p/Git-training.pdf?dl=1&pv=1) & [example code for this scenario](https://www.dropbox.com/sh/9q2emkhxmyckoj6/AAA_H55BVhfRvGHOs9j7l9N2a?dl=1&pv=1)
1. Download tutorial
- [tutorial v3](https://www.dropbox.com/s/jwpkfn5c8d1z74y/Git-training-v3.pdf?dl=1&pv=1)
- [tutorial v2](https://www.dropbox.com/s/6o5sfs1iyd9cxdq/Git-training-v2.pdf?dl=1&pv=1) & [example code v2](https://www.dropbox.com/sh/3ywkargf9xzcfoi/AAC63uvN4eQBQhT_1m4GmCMLa?dl=1&pv=1)
- [tutorial v1](https://www.dropbox.com/s/0bplreunw6vf69p/Git-training.pdf?dl=1&pv=1) & [example code v1](https://www.dropbox.com/sh/9q2emkhxmyckoj6/AAA_H55BVhfRvGHOs9j7l9N2a?dl=1&pv=1)
2. Install Git ([git](https://git-scm.com/downloads), [source tree](https://www.sourcetreeapp.com))
3. Editor ([atom](https://atom.io/), [sublime text](https://www.sublimetext.com/3))
4. Github account ([sign up](https://github.com/join))
5. Download [the courage](https://www.dropbox.com/s/36ifeasvhhshqj8/you_can_do_git?dl=1&pv=1)

### Stage
1. Basic : Stage 1 ~ 10
2. Advanced : Stage 11 ~ 14
1. New version (v2)
- Basic : Stage 1 ~ 7
- Advanced : Stage 8 ~ 11

### The results
2. Old version (v1)
- Basic : Stage 1 ~ 10
- Advanced : Stage 11 ~ 14

### The results (v1)
![screenshot](img/results_20160327.png)
[git-training.docs.google](https://docs.google.com/spreadsheets/d/1uPMCOKISMgj_svsoxG1LF1RbozA9RMKfx7h9vT80Atc/edit#gid=0)
22 changes: 22 additions & 0 deletions packing_knapsack/generator_test_script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/python
import random

test_script = open("test.sh","w")

test_script.write("#!/bin/bash\n")
test_script.write("echo -e \"")

nr = random.randrange(1,1000)
w = random.randrange(1,10000)

test_script.write(str(nr)+" "+str(w)+"\\n\\\n")


for i in range(1,nr-1):
j_p = random.randrange(1,w)
j_w = random.randrange(1,w)
test_script.write(str(j_p)+" "+str(j_w)+"\\n\\\n")

j_p = random.randrange(1,w)
j_w = random.randrange(1,w)
test_script.write(str(j_p)+" "+str(j_w)+"\\n\" | ./a.out")
Binary file added packing_knapsack/knapsack_problem.pdf
Binary file not shown.
115 changes: 115 additions & 0 deletions packing_knapsack/packing_knapsack.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* Packing knapsack question
*
* Copyright (C) 2016, Taeung Song <treeze.taeung@gmail.com>
*
*/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

#define MAX_INPUT 16

struct knapsack {
unsigned int maxprice;
} *knapsack_list;

struct jewelry {
unsigned int wgt;
unsigned int price;
};

unsigned int limited_wgt;

unsigned int get_cond_maxprice(int wgt, struct jewelry *jewelry)
{
/* Get maximum price based on a specific weight
* following a specific jewelry.
*/
int i;
int rest_wgt = wgt - jewelry->wgt;
int price = jewelry->price + knapsack_list[rest_wgt].maxprice;

return knapsack_list[wgt].maxprice < price ?
price : knapsack_list[wgt].maxprice;
}

void pack_knapsack(struct jewelry *jewelry)
{
/* Case by case pack knapsack following maximum
* price per limited weight.
*/
int wgt;

if (limited_wgt < jewelry->wgt)
return;

for (wgt = 0; wgt <= limited_wgt; wgt++) {
if (jewelry->wgt <= wgt) {
unsigned int maxprice = get_cond_maxprice(wgt, jewelry);

if (knapsack_list[wgt].maxprice < maxprice)
knapsack_list[wgt].maxprice = maxprice;
}
}
}

bool get_values_from(char *input, unsigned int *val1, unsigned int *val2)
{
char *arg;
char *ptr = strdup(input);

if (!ptr) {
printf("%s: strdup failed\n", __func__);
exit(1);
}

arg = strsep(&ptr, " ");
*val1 = atoi(arg);
if (ptr == NULL) {
printf("Error: Need a whitespace\n");
return false;
}

*val2 = atoi(ptr);

return true;
}

int main(int argc, const char **argv)
{
int i;
struct jewelry *jewels;
char input[MAX_INPUT];
unsigned int nr_jewels;

fgets(input, sizeof(input), stdin);
if (get_values_from(input, &nr_jewels, &limited_wgt) == false)
return -1;

jewels = malloc(sizeof(struct jewelry) * nr_jewels);
for (i = 0; i < nr_jewels; i++) {
bool ret;

fgets(input, sizeof(input), stdin);
ret = get_values_from(input, &jewels[i].wgt,
&jewels[i].price);
if (ret == false)
return -1;
}

/* from 0 to last limited weight */
knapsack_list = malloc(sizeof(struct knapsack) * (limited_wgt + 1));

for (i = 0; i <= limited_wgt; i++)
knapsack_list[i].maxprice = 0;

for (i = 0; i < nr_jewels; i++)
pack_knapsack(&jewels[i]);

printf("%d\n", knapsack_list[limited_wgt].maxprice);
free(jewels);
free(knapsack_list);
return 0;
}
7 changes: 7 additions & 0 deletions packing_knapsack/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

echo -e "4 14\n\
2 40\n\
5 110\n\
10 200\n\
3 50\n" | ./$1
22 changes: 22 additions & 0 deletions pull_reqeust_test/taeung/packing_knapsack/generator_test_script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/python
import random

test_script = open("test.sh","w")

test_script.write("#!/bin/bash\n")
test_script.write("echo -e \"")

nr = random.randrange(1,1000)
w = random.randrange(1,10000)

test_script.write(str(nr)+" "+str(w)+"\\n\\\n")


for i in range(1,nr-1):
j_p = random.randrange(1,w)
j_w = random.randrange(1,w)
test_script.write(str(j_p)+" "+str(j_w)+"\\n\\\n")

j_p = random.randrange(1,w)
j_w = random.randrange(1,w)
test_script.write(str(j_p)+" "+str(j_w)+"\\n\" | ./a.out")
Binary file not shown.
115 changes: 115 additions & 0 deletions pull_reqeust_test/taeung/packing_knapsack/packing_knapsack.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*
* Packing knapsack question
*
* Copyright (C) 2016, Taeung Song <treeze.taeung@gmail.com>
*
*/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

#define MAX_INPUT 16

struct knapsack {
unsigned int maxprice;
} *knapsack_list;

struct jewelry {
unsigned int wgt;
unsigned int price;
};

unsigned int limited_wgt;

unsigned int get_cond_maxprice(int wgt, struct jewelry *jewelry)
{
/* Get maximum price based on a specific weight
* following a specific jewelry.
*/
int i;
int rest_wgt = wgt - jewelry->wgt;
int price = jewelry->price + knapsack_list[rest_wgt].maxprice;

return knapsack_list[wgt].maxprice < price ?
price : knapsack_list[wgt].maxprice;
}

void pack_knapsack(struct jewelry *jewelry)
{
/* Case by case pack knapsack following maximum
* price per limited weight.
*/
int wgt;

if (limited_wgt < jewelry->wgt)
return;

for (wgt = 0; wgt <= limited_wgt; wgt++) {
if (jewelry->wgt <= wgt) {
unsigned int maxprice = get_cond_maxprice(wgt, jewelry);

if (knapsack_list[wgt].maxprice < maxprice)
knapsack_list[wgt].maxprice = maxprice;
}
}
}

bool get_values_from(char *input, unsigned int *val1, unsigned int *val2)
{
char *arg;
char *ptr = strdup(input);

if (!ptr) {
printf("%s: strdup failed\n", __func__);
exit(1);
}

arg = strsep(&ptr, " ");
*val1 = atoi(arg);
if (ptr == NULL) {
printf("Error: Need a whitespace\n");
return false;
}

*val2 = atoi(ptr);

return true;
}

int main(int argc, const char **argv)
{
int i;
struct jewelry *jewels;
char input[MAX_INPUT];
unsigned int nr_jewels;

fgets(input, sizeof(input), stdin);
if (get_values_from(input, &nr_jewels, &limited_wgt) == false)
return -1;

jewels = malloc(sizeof(struct jewelry) * nr_jewels);
for (i = 0; i < nr_jewels; i++) {
bool ret;

fgets(input, sizeof(input), stdin);
ret = get_values_from(input, &jewels[i].wgt,
&jewels[i].price);
if (ret == false)
return -1;
}

/* from 0 to last limited weight */
knapsack_list = malloc(sizeof(struct knapsack) * (limited_wgt + 1));

for (i = 0; i <= limited_wgt; i++)
knapsack_list[i].maxprice = 0;

for (i = 0; i < nr_jewels; i++)
pack_knapsack(&jewels[i]);

printf("%d\n", knapsack_list[limited_wgt].maxprice);
free(jewels);
free(knapsack_list);
return 0;
}
7 changes: 7 additions & 0 deletions pull_reqeust_test/taeung/packing_knapsack/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

echo -e "4 14\n\
2 40\n\
5 110\n\
10 200\n\
3 50\n" | ./$1
Binary file added pull_request_test/JangJieun/README.md
Binary file not shown.