Problème: http://nabetani.sakura.ne.jp/hena/ordf03triom/ Liens d'implémentation: http://qiita.com/Nabetani/items/becb4c4d309b4fe8ce0f
C'est facile car il suffit de normaliser le mouvement parallèle.
Tout d'abord, rubis
class Array
  def x; self[0]; end
  def y; self[1]; end
end
def solve( src )
  poss0 = src.chars.uniq.map{ |x| (x.ord - ?a.ord).divmod(5) }.sort
  return "-" unless poss0.size==3
  poss = poss0.map{ |p| [p.x-poss0[0].x, p.y-poss0[0].y] }.join(",")
  case poss
  when "0,0,0,1,0,2"; "B"
  when "0,0,0,1,1,1"; "T"
  when "0,0,1,0,1,1"; "L"
  when "0,0,0,1,1,0"; "R"
  when "0,0,1,0,2,0"; "I"
  when "0,0,1,-1,1,0"; "J"
  else "-"
  end
end
if $0==__FILE__
  DATA.each do |line|
    num, src, expected = line.split(/\s+/)
    actual = solve( src )
    ok = actual==expected
    p [ ok ? "ok" : "**NG**", num, src, expected, actual ]
  end
end
__END__
0 cba B
1 yam -
2 aaa -
Et C
C99
//clang -std=c99 -Wall
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int xval( char c ){  return (c-'a') % 5;}
int yval( char c ){  return (c-'a') / 5;}
int min( int a, int b ){  return a<b ? a : b; }
char solve( char const * src )
{
  int xmin=9;
  int ymin=9;
  for( int i=0 ; i<3 ; ++i ){
    xmin = min(xmin, xval(src[i]));
    ymin = min(ymin, yval(src[i]));
  }
  int bits=0;
  for( int i=0 ; i<3 ; ++i ){
    bits |= 1<<(xval(src[i])-xmin + (yval(src[i])-ymin)*5 );
  }
  switch(bits){
    default:
      return '-';
    case 0x7:   return 'B';
    case 0x23:  return 'R';
    case 0x43 : return 'T';
    case 0x61:  return 'L';
    case 0x62:  return 'J';
    case 0x421: return 'I';
  }
}
void test( char const * src, char const * expected )
{
  char actual = solve( src );
  _Bool ok = actual == *expected;
  printf( "%s : %s / %s / %c\n", (ok  ? "ok" : "**NG**"), src, expected, actual );
}
int main()
{
  /*0*/ test( "cba", "B" );    
  /*1*/ test( "yam", "-" );    
  /*2*/ test( "aaa", "-" );    
  /*3*/ test( "def", "-" );    
  return 0;
}
ruby est trié et le reste est approprié. En C, le tri est ennuyeux, donc l'ensemble est représenté par des bits.
Depuis que j'ai créé une fonction appelée min, ai-je besoin de NOMINMAX pour Visual Studio?
N'est-ce pas facile?
La prochaine fois, c'est E13 (https://yhpg.doorkeeper.jp/events/58541). Je vais vous demander à nouveau. Rendez-le plus difficile que cela.