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

Problème: http://nabetani.sakura.ne.jp/hena/ordf04octsp/ Liens d'implémentation: http://qiita.com/Nabetani/items/8ead5622e192d9655cf5

Comme toujours, de l'implémentation ruby, qui omet la plupart des données de test:

def solve(src0)
  src = src0.to_i
  Array.new(8){ |s|
    if src[s]==1
      w = (1..8).find{ |x| src[(s+x)%8]==1 }
      w + (w==4 ? 1 : 2)
    end
  }.compact.sort.join
end

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

__END__
0 165 3445
1 80  48
2 255 33333333

Une implémentation simple que vous pouvez faire tourner en utilisant le reste. Il est plus facile de manipuler des morceaux avec du rubis.

La partie où le nombre de sommets change lorsque le centre devient une ligne droite est ad hoc.

alors.

Ce qui suit est un port de ceci vers C99 tel quel:

//clang -std=c99 -Wall
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int compare( const void * a, const void * b ){
  const char * ac = (const char * )a;
  const char * bc = (const char * )b;
  return *ac-*bc;
}

char * solve_impl( int src )
{
  char buffer[9]={0};
  char * pos=buffer;
  for( int s=0 ; s<8 ; ++s ){
    if ( src & (1<<s ) ){
      int w=1;
      for( ; w<=8 ; ++w ){
        if ( src & (1<<((w+s)%8)) ){
          break;
        }
      }
      *pos=w+( w==4 ? '1' : '2' );
      ++pos;
    }
  }
  qsort( buffer, pos-buffer, 1, compare );
  return strdup( buffer );
}

char * solve( char const * src )
{
  return solve_impl( atoi( src ) );
}

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

int main()
{
  /*0*/ test( "165", "3445" );    
  /*1*/ test( "80", "48" );    
  /*2*/ test( "255", "33333333" );
  return 0;
}

Le tri est gênant. C'est vraiment agaçant. A part ça, je pense que c'est comme ça. Je pense que la zone où la chaîne de caractères est créée en ajoutant 1 '' et 2 '' est comme le langage C.

Recommended Posts

Comment écrire un exemple d'implémentation F04 ruby et C99 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 du problème dans E05 (ruby, C11) 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
Exemple d'implémentation de F06 d'écriture en temps réel hors ligne
Promesse JDBC et exemple d'écriture
[Java] Types de commentaires et comment les rédiger
Comparaison de l'écriture des fonctions de rappel (Java, JavaScript, Ruby)
Comment gérer différentes versions de rbenv et Ruby
Bases du développement Java ~ Comment écrire des programmes (variables et types) ~
Comment écrire Ruby en une seule ligne Résumé par débutant
[Java] Notez comment utiliser RecyclerView et comment implémenter le traitement par balayage animé.
Résumé de l'écriture des arguments d'annotation
Explication des objets Ruby Time et Date
[Java] Comment sortir et écrire des fichiers!
[Facile] Comment mettre à niveau Ruby et le bundler
[Android 9.0 Pie] Exemple d'appels de strings.xml autres que Activity et Fragment
Bases du développement Java ~ Comment écrire un programme (flux et branchement conditionnel) ~
Comment afficher la date et l'heure du jour par défaut: supprimer moins d'une seconde
Différence entre Java, C # et JavaScript (comment trouver le degré d'obésité)
Lecture et écriture ligne par ligne à partir du tampon avec communication TCP entre C et Ruby
Comment trouver la cause de l'erreur Ruby
Comment rédiger la réponse à la 15e question de référence hors ligne
[Ruby] Comment utiliser la méthode gsub et la sous-méthode
Comment écrire du code qui pense Ruby orienté objet
Ruby Comment convertir entre les majuscules et les minuscules
Comment demander en passant un tableau à une requête avec le client HTTP de Ruby
Explication de Ruby on rails pour les débutants ④ ~ À propos des règles de dénomination et comment utiliser form_Tag ~
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
Comment gérer les fichiers TSV et les fichiers CSV dans Ruby
Exemple d'implémentation d'un système de traitement LISP simple (version Ruby)
Comment démarrer par environnement avec Spring Boot de Maven
(Ruby on Rails6) Comment créer un modèle et une table
Traitement de la date et de l'heure en Ruby. Utilisez correctement la date et l'heure.
Méthode de mise en œuvre consistant à lier plusieurs images à un article et à publier en même temps