Comment écrire un exemple d'implémentation F03 ruby et C en temps réel hors ligne

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.

Recommended Posts

Comment écrire un exemple d'implémentation F03 ruby et C en temps réel hors ligne
Exemple d'implémentation de F06 d'écriture en temps réel hors ligne
Comment écrire un exemple d'implémentation F04 ruby et C99 en temps réel hors ligne
Comment écrire un exemple d'implémentation Java d'un problème F01 en temps réel hors ligne
Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
[Java] Comment sortir et écrire des fichiers!
[Facile] Comment mettre à niveau Ruby et le bundler
Promesse JDBC et exemple d'écriture
Comment rédiger la réponse à la 15e question de référence hors ligne
Comment écrire du code qui pense Ruby orienté objet
Ruby Comment convertir entre les majuscules et les minuscules
Javaer résume comment écrire des propriétés C #
[Ruby on Rails] Comment écrire enum en japonais
Comment écrire des rails
[Java] Types de commentaires et comment les rédiger
Comment écrire docker-compose
Comment écrire Mockito
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Comment écrire un fichier de migration
(Ruby on Rails6) Comment créer un modèle et une table
Comparaison de l'écriture des fonctions de rappel (Java, JavaScript, Ruby)
Comment écrire et noter lors de la migration de VB vers JAVA
Comment gérer différentes versions de rbenv et Ruby
Comment écrire du bon code
Comment rédiger un commentaire java
[Refactoring] Comment écrire le routage
[Ruby] Comment commenter
Extension Ruby C et volatile
Ruby: Comment utiliser les cookies
Comment écrire Junit 5 organisé
Comment écrire des graines de Rails
Comment écrire le routage Rails
Bases du développement Java ~ Comment écrire des programmes (variables et types) ~
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java
Comment écrire Ruby en une seule ligne Résumé par débutant
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
Comment utiliser StringBurrer et Arrays.toString.
Plug-in Vuze pour écrire et profiter
Comment itérer indéfiniment en Ruby
Écrire des méthodes Ruby en utilisant C (Partie 1)
Étudier Java # 6 (Comment écrire des blocs)
Comment installer Ruby via rbenv
Comment utiliser Ruby on Rails
Comment appeler des classes et des méthodes
Comment utiliser l'égalité et l'égalité (comment utiliser l'égalité)
Comment installer Bootstrap dans Ruby