Skip to content

Instantly share code, notes, and snippets.

@yohhoy
Last active August 29, 2015 14:12
Show Gist options
  • Save yohhoy/b4f0da9df635ecdfed92 to your computer and use it in GitHub Desktop.
Save yohhoy/b4f0da9df635ecdfed92 to your computer and use it in GitHub Desktop.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
const struct {
int t[3];
char c;
} lut[] = {
{{ 1, 10, 11}, 'O'},
{{ 1, 2, 3}, 'I'},
{{10, 20, 30}, 'I'},
{{ 1, 2, 11}, 'T'},
{{ 9, 10, 11}, 'T'},
{{ 9, 10, 20}, 'T'},
{{10, 11, 20}, 'T'},
{{ 1, 9, 10}, 'S'},
{{ 1, 11, 12}, 'S'},
{{ 9, 10, 19}, 'S'},
{{10, 11, 21}, 'S'},
{{ 1, 2, 12}, 'L'},
{{ 1, 2, 10}, 'L'},
{{ 1, 10, 20}, 'L'},
{{ 1, 11, 21}, 'L'},
{{ 8, 9, 10}, 'L'},
{{10, 11, 12}, 'L'},
{{10, 19, 20}, 'L'},
{{10, 20, 21}, 'L'},
};
const int lut_size = sizeof(lut) / sizeof(lut[0]);
int cmp_int(const void *a, const void *b)
{
return *(const int*)a - *(const int*)b;
}
char solve(const char *s)
{
int b[4];
int i;
sscanf(s, "%d,%d,%d,%d", b, b+1, b+2, b+3);
qsort(b, 4, sizeof(int), cmp_int);
for (i = 3; 0 <= i; i--)
b[i] -= b[0];
for (i = 0; i < lut_size; i++) {
if (memcmp(b+1, lut[i].t, sizeof(int)*3) == 0)
return lut[i].c;
}
return '-';
}
void test(const char *s, char expect)
{
char result = solve(s);
if (result != expect)
printf("%s:%c!=%c\n", s, result, expect);
}
int main()
{
/*#1*/ test("55,55,55,55", '-');
/*#2*/ test("07,17,06,05", 'L');
/*#3*/ test("21,41,31,40", 'L');
/*#4*/ test("62,74,73,72", 'L');
/*#5*/ test("84,94,74,75", 'L');
/*#6*/ test("48,49,57,47", 'L');
/*#7*/ test("69,89,79,68", 'L');
/*#8*/ test("90,82,91,92", 'L');
/*#9*/ test("13,23,03,24", 'L');
/*#10*/ test("24,22,25,23", 'I');
/*#11*/ test("51,41,21,31", 'I');
/*#12*/ test("64,63,62,65", 'I');
/*#13*/ test("49,69,59,79", 'I');
/*#14*/ test("12,10,21,11", 'T');
/*#15*/ test("89,99,79,88", 'T');
/*#16*/ test("32,41,43,42", 'T');
/*#17*/ test("27,16,36,26", 'T');
/*#18*/ test("68,57,58,67", 'O');
/*#19*/ test("72,62,61,71", 'O');
/*#20*/ test("25,24,15,14", 'O');
/*#21*/ test("43,54,53,42", 'S');
/*#22*/ test("95,86,76,85", 'S');
/*#23*/ test("72,73,84,83", 'S');
/*#24*/ test("42,33,32,23", 'S');
/*#25*/ test("66,57,67,58", 'S');
/*#26*/ test("63,73,52,62", 'S');
/*#27*/ test("76,68,77,67", 'S');
/*#28*/ test("12,11,22,01", 'S');
/*#29*/ test("05,26,06,25", '-');
/*#30*/ test("03,11,13,01", '-');
/*#31*/ test("11,20,00,21", '-');
/*#32*/ test("84,95,94,86", '-');
/*#33*/ test("36,56,45,35", '-');
/*#34*/ test("41,33,32,43", '-');
/*#35*/ test("75,94,84,95", '-');
/*#36*/ test("27,39,28,37", '-');
/*#37*/ test("45,34,54,35", '-');
/*#38*/ test("24,36,35,26", '-');
/*#39*/ test("27,27,27,27", '-');
/*#40*/ test("55,44,44,45", '-');
/*#41*/ test("70,73,71,71", '-');
/*#42*/ test("67,37,47,47", '-');
/*#43*/ test("43,45,41,42", '-');
/*#44*/ test("87,57,97,67", '-');
/*#45*/ test("49,45,46,48", '-');
/*#46*/ test("63,63,52,72", '-');
/*#47*/ test("84,86,84,95", '-');
/*#48*/ test("61,60,62,73", '-');
/*#49*/ test("59,79,69,48", '-');
/*#50*/ test("55,57,77,75", '-');
}
const struct {
int d[6];
char c;
} lut[] = {
{{1,1,1,2,4,5}, 'L'},
{{1,1,1,4,4,9}, 'I'},
{{1,1,1,2,2,4}, 'T'},
{{1,1,1,1,2,2}, 'O'},
{{1,1,1,2,2,5}, 'S'},
};
const int lut_size = sizeof(lut) / sizeof(lut[0]);
int cmp_int(const void *a, const void *b)
{
return *(const int*)a - *(const int*)b;
}
int dist(int a, int b)
{
return (a/10-b/10)*(a/10-b/10) + (a%10-b%10)*(a%10-b%10);
}
char solve(const char *s)
{
int b[4], d[6];
int i;
sscanf(s, "%d,%d,%d,%d", b, b+1, b+2, b+3);
d[0] = dist(b[0], b[1]);
d[1] = dist(b[0], b[2]);
d[2] = dist(b[0], b[3]);
d[3] = dist(b[1], b[2]);
d[4] = dist(b[1], b[3]);
d[5] = dist(b[2], b[3]);
qsort(d, 6, sizeof(int), cmp_int);
for (i = 0; i < lut_size; i++) {
if (memcmp(d, lut[i].d, sizeof(int)*6) == 0)
return lut[i].c;
}
return '-';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment