Skip to content

Instantly share code, notes, and snippets.

@kashi
Created November 14, 2013 15:18
Show Gist options
  • Save kashi/7468594 to your computer and use it in GitHub Desktop.
Save kashi/7468594 to your computer and use it in GitHub Desktop.
/*
http://nabetani.sakura.ne.jp/hena/ord15elebubo/
*/
#include <stdio.h>
#include <string.h>
void parse(char *s, char *got)
{
char t[0x100];
int v;
unsigned long u, l;
sscanf(s, "%08lx/%08lx", &u, &l);
for (v=0; v<0x100; v++) t[v] = 0;
t[0xe] = 'L'; t[0xd] = 'R'; t[0xb] = 'J'; t[0x1d] = 'T';
t[0x3b] = 'U'; t[0x37] = 'N'; t[0x2d] = 'S'; t[0x1e] = 'Z';
v = 0;
while (u != 0 || l != 0 || v > 0) {
v = (v << 2) | ((u & 0x80000000UL) >> 31) | ((l & 0x80000000UL) >> 30);
if (v > 0x7 && t[v] == 0) {
*got++ = t[v >> 2];
v &= 0x3;
}
u = (u << 1) & 0xffffffffUL;
l = (l << 1) & 0xffffffffUL;
}
*got = '\0';
}
void test(char *s, char *expected)
{
char got[20];
parse(s, got);
if (strcmp(got, expected) == 0) {
printf("%s : OK\n", s);
} else {
printf("%s : NG : got=%s, expected=%s\n", s, got, expected);
}
}
int main()
{
/*0*/ test( "2ed8aeed/34b0ea5b", "LTRSUNTSJ" );
/*1*/ test( "00000200/00000300", "L" );
/*2*/ test( "00018000/00010000", "R" );
/*3*/ test( "00002000/00006000", "J" );
/*4*/ test( "00000700/00000200", "T" );
/*5*/ test( "01400000/01c00000", "U" );
/*6*/ test( "00003800/00002800", "N" );
/*7*/ test( "000c0000/00180000", "S" );
/*8*/ test( "00003000/00001800", "Z" );
/*9*/ test( "132eae6c/1a64eac6", "LRJTUNSZ" );
/*10*/ test( "637572d0/36572698", "ZSNUTJRL" );
/*11*/ test( "baddb607/d66b6c05", "LTJZTSSSN" );
/*12*/ test( "db74cd75/6dac6b57", "ZZZTJZRJNU" );
/*13*/ test( "3606c2e8/1b0d8358", "ZZSSLTJ" );
/*14*/ test( "ad98c306/e6cc6183", "UZZZZZZ" );
/*15*/ test( "4a4aaee3/db6eeaa6", "JJLLUUNNS" );
/*16*/ test( "ecd9bbb6/598cd124", "TSSZZTTRR" );
/*17*/ test( "e0000002/40000003", "TL" );
/*18*/ test( "a0000007/e0000005", "UN" );
/*19*/ test( "c0000003/80000006", "RS" );
/*20*/ test( "40000006/c0000003", "JZ" );
/*21*/ test( "01da94db/00b3b6b2", "TSUJLRSR" );
/*22*/ test( "76eeaaea/24aaeeae", "TRNNUUNU" );
/*23*/ test( "1dacaeee/1566e444", "NRJZUTTT" );
/*24*/ test( "26c9ac60/6c6d66c0", "JSZLRJZS" );
/*25*/ test( "6c977620/36da5360", "ZZLLTNZJ" );
/*26*/ test( "069aeae6/0db34eac", "SJSLTUNS" );
/*27*/ test( "06d53724/049da56c", "RRULRNJJ" );
/*28*/ test( "069b58b0/04d66da0", "RLRSLZJR" );
/*29*/ test( "1b6eced4/11b46a9c", "RZZTZNRU" );
/*30*/ test( "522e8b80/db6ad900", "JLLJNLJT" );
/*31*/ test( "6546cdd0/376c6898", "ZULSZRTL" );
/*32*/ test( "4e6d5b70/6ad9d620", "LNSSURST" );
/*33*/ test( "37367772/65635256", "SNSZNTNJ" );
/*34*/ test( "25535d58/377669cc", "LUUSLTUZ" );
/*35*/ test( "0ae6a55d/0eacedcb", "UNSUJUTJ" );
/*36*/ test( "76762edc/23536a88", "TZNZJNRT" );
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment