Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne

Problème http://nabetani.sakura.ne.jp/hena/orde05dokitruck/ Liens d'implémentation http://qiita.com/Nabetani/items/c516875b13a4d282affe est.

alors.

Il existe plusieurs politiques de mise en œuvre.

Je vais choisir librement.

J'ai calculé par derrière à la fois, et les données sont un peu.

Premièrement, implémentation par C11 ou C99:

// clang -std=c11 -Wall
// clang x86_64-apple-darwin15.5.0
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <memory.h>

char * build_ans( int s )
{
  char * r = calloc(4, 1);
  for( int i=0 ; i<3 ; ++i ){
    if ( s&(1<<i) ){
      strcat( r, (char[2]){'a'+i});
    }
  }
  if ( !*r ){
    r[0]='-';
  }
  return r;
}

char * solve( char const * src )
{
  int s=7;
  for( char const * it = src + strlen( src ) -1 ; src<=it ; --it ){
    switch(*it-'0'){
    case 1: s|=s/2; break;
    case 2: s|=(s&2)*2+!!(s&4); break;
    case 3: s|=!!(s&4)+(s&1)*2; break;
    case 4: s|=s*2; break;
    case 5: s|=(s&1)*4+(s&4)/2; break;
    case 6: s|=(s&1)*4+!!(s&2); break;
    case 7: s&=5; break;
    case 8: s&=6; break;
    case 9: s&=3; break;
    }
  }
  return build_ans(s);
}

void test( char const * src, char const * expected )
{
  char const * actual = solve( src );
  bool okay = 0==strcmp( actual, expected );
  printf( "%s %s->%s ( e:%s )\n", ( okay ? "ok" : "**NG**" ), src, actual , expected );
  free( actual );
}

int main()
{
  /*0*/ test( "1728398", "bc" );    
  //Abréviation
  /*36*/ test( "697535114542", "ac" );
  return 0;
}

Comme d'habitude, la plupart des données de test sont omises.

Puisqu'il y a trois états, la vie et la mort, elle peut être exprimée en 3 bits. Puisque la vie est fixée à 1, "& =" apporte la mort et "| =" augmente la possibilité de vivre.

L'intérieur de résoudre est foiré, mais il ne peut pas être aidé car il exprime le désordre des blocs qui composent le cours. Ce serait cool de l'avoir dans les données, mais cette fois, c'est exprimé en code. Pour rappel, "!!" signifie un calcul à l'effet que le refus logique est effectué deux fois et non nul est mis à 1.

Ce qui suit est un calcul écrit en rubis avec exactement le même but. Ou plutôt, je l'ai écrit en rubis plus tôt.

def apply( s, c )
  case c
  when "0";    s
  when "1";    s | s[1] | s[2]*2
  when "2";    s | s[1]*4 | s[2]
  when "3";    s | s[0]*2 | s[2]
  when "4";    s | s[0]*2 | s[1]*4
  when "5";    s | s[0]*4 | s[2]*2
  when "6";    s | s[0]*4 | s[1]
  when "7";    s & 5
  when "8";    s & 6
  when "9";    s & 3
  end
end

def solve( src )
  r=src.chars.reverse.inject(7) do |s,c|
    apply( s, c )
  end
  %w( a b c ).each.with_index(0).map{ |c,ix|
    r[ix]==0 ? "" : c
  }.join.tap{ |x| return x.empty? ? "-" : x }
end

$stdout.sync=true

DATA.map do |line|
  num, src, expected = line.split(/\s+/)
  actual = solve( src )
  okay = actual==expected
  puts( "%s %2d %s->%s ( e:%s )" % [ ( okay ? "ok" : "**NG**" ), num, src, actual, expected ] )
  okay
end.all?.tap{|x| puts( x ? "everything is ok" : "something wrong" ) }

__END__
0 1728398 bc  
1 789 - 
2 274 ac  
3 185 abc 

36  697535114542  ac  

Même les opérations sur les bits sont plus faciles à écrire avec ruby.

Recommended Posts

Comment écrire un exemple d'implémentation du problème dans E05 (ruby, C11) en temps réel hors ligne
Comment écrire un exemple d'implémentation F03 ruby et C 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 F04 ruby et C99 en temps réel hors ligne
Exemple d'implémentation de F06 d'écriture en temps réel hors ligne
Comment créer un retrait de deux espaces d'un octet dans l'implémentation JAXB du JDK
Comment trouver la cause de l'erreur Ruby
Comment créer la blockchain la plus simple de Ruby
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Javaer résume comment écrire des propriétés C #
[Ruby on Rails] Comment écrire enum en japonais
Comment écrire Scala du point de vue de Java
Comparaison de l'écriture des fonctions de rappel (Java, JavaScript, Ruby)
Comment récupérer la valeur de hachage dans un tableau dans Ruby
[Ruby] Comment récupérer le contenu du double hachage
Comment dériver le dernier jour du mois en Java
J'ai essayé de résoudre le problème de la machine à karaoké Ruby (il y a un exemple de réponse)
J'ai essayé de résoudre le problème de la boisson bonus Ruby (il y a un exemple de réponse)
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
Comment itérer indéfiniment en Ruby
J'ai essayé de résoudre le problème de création de carte de bingo Ruby (il y a un exemple de réponse)
Comment installer Bootstrap dans Ruby
Comment écrire Ruby en une seule ligne Résumé par débutant
Comment écrire lorsque vous voulez gérer un "tableau de chaînes en langage C" comme argv [] dans Ruby-FFI
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Comment obtenir la longueur d'un fichier audio avec Java
Comment incrémenter la valeur de Map sur une ligne en Java
Comment modifier le nombre maximum et maximum de données POST dans Spark
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
Comment trouver le nombre total de pages lors de la pagination en Java
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Comment insérer un traitement avec n'importe quel nombre d'éléments dans le traitement itératif dans Ruby
Résumé de l'écriture des arguments d'annotation
Comment déterminer le nombre de parallèles
Comment trier une liste de SelectItems
Comment obtenir la date avec Java
Ecrire le mouvement de Rakefile dans le runbook
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié
graphql-ruby: Comment obtenir le nom de la requête ou de la mutation dans le contrôleur Remarque
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby (temps limite 10 minutes)
Comment vérifier la dernière version de io.spring.platform pour l'écriture dans pom.xml de Spring (STS)
Comment résoudre les erreurs qui se produisent lors du test d'intégration "Ruby on Rails"