Offline-Echtzeit zum Schreiben eines F04-Ruby- und C99-Implementierungsbeispiels

Problem: http://nabetani.sakura.ne.jp/hena/ordf04octsp/ Implementierungslinks: http://qiita.com/Nabetani/items/8ead5622e192d9655cf5

Wie immer aus der Ruby-Implementierung, bei der die meisten Testdaten weggelassen werden:

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

Eine unkomplizierte Implementierung, die Sie mit dem Rest drehen können. Es ist einfacher, mit Rubinen umzugehen.

Der Teil, in dem sich die Anzahl der Eckpunkte ändert, wenn die Mitte zu einer geraden Linie wird, ist ad hoc.

damit.

Das Folgende ist ein Port davon zu C99 wie es ist:

//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;
}

Das Sortieren ist mühsam. Es ist wirklich nervig. Davon abgesehen denke ich, dass es so ist. Ich denke, dass der Bereich, in dem die Zeichenkette durch Hinzufügen von "1" und "2" erstellt wird, der Sprache C entspricht.

Recommended Posts

Offline-Echtzeit zum Schreiben eines F04-Ruby- und C99-Implementierungsbeispiels
Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)
Offline in Echtzeit, wie man ein Java-Implementierungsbeispiel für ein F01-Problem schreibt
Beispiel für die Implementierung der F06-Implementierung in Echtzeit
JDBC Versprechen und Schreibbeispiel
[Java] Arten von Kommentaren und wie man sie schreibt
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)
Umgang mit verschiedenen Versionen von rbenv und Ruby
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen (Variablen und Typen) ~
Wie schreibe ich Ruby, wenn in einer Zeile Zusammenfassung vom Anfänger
[Java] Beachten Sie, wie Sie RecyclerView verwenden und die animierte Swipe-Verarbeitung implementieren.
Zusammenfassung zum Schreiben von Anmerkungsargumenten
Erläuterung der Ruby Time- und Date-Objekte
[Java] Wie man Dateien ausgibt und schreibt!
[Einfach] So aktualisieren Sie Ruby und Bundler
[Android 9.0 Pie] Beispiel für den Aufruf einer anderen Zeichenfolge.xml als Aktivität und Fragment
Grundlagen der Java-Entwicklung ~ So schreiben Sie ein Programm (Ablauf und bedingte Verzweigung) ~
So zeigen Sie das heutige Datum und die Uhrzeit standardmäßig an: Entfernen Sie weniger als eine Sekunde
Unterschied zwischen Java, C # und JavaScript (wie man den Grad der Fettleibigkeit findet)
Lesen und Schreiben Sie zeilenweise aus dem Puffer mit TCP-Kommunikation zwischen C und Ruby
So finden Sie die Ursache des Ruby-Fehlers
Wie schreibe ich offline 15. Referenzfrage Antwort
[Ruby] Verwendung der gsub-Methode und der sub-Methode
Wie man Code schreibt, der objektorientiertes Ruby denkt
Ruby So konvertieren Sie zwischen Groß- und Kleinschreibung
Anfordern durch Übergeben eines Arrays an eine Abfrage mit dem HTTP-Client von Ruby
Erklärung von Ruby on Rails für Anfänger ④ ~ Informationen zu Benennungsregeln und zur Verwendung von form_Tag ~
Javaer fasst zusammen, wie C # -Eigenschaften geschrieben werden
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
Wie schreibe ich Scala aus der Perspektive von Java
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Implementierungsbeispiel eines einfachen LISP-Verarbeitungssystems (Ruby-Version)
Booten nach Umgebung mit Spring Boot of Maven
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
Umgang mit Datum und Uhrzeit in Ruby. Verwenden Sie Datum und Uhrzeit richtig.
Implementierungsmethode zum Verknüpfen mehrerer Bilder mit einem Beitrag und zum gleichzeitigen Posten