Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)

Problem http://nabetani.sakura.ne.jp/hena/orde05dokitruck/ Implementierungslinks http://qiita.com/Nabetani/items/c516875b13a4d282affe ist.

damit.

Es gibt verschiedene Implementierungsrichtlinien.

Ich werde frei wählen.

Ich habe sofort von hinten gerechnet und die Daten sind ein bisschen.

Erstens die Implementierung durch C11 oder 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" );    
  //Abkürzung
  /*36*/ test( "697535114542", "ac" );
  return 0;
}

Wie üblich werden die meisten Testdaten weggelassen.

Da es drei Zustände gibt, Leben und Tod, kann es in 3 Bits ausgedrückt werden. Da das Leben auf 1 gesetzt ist, bringt "& =" den Tod und "| =" erhöht die Lebensmöglichkeit.

Das Innere von "lösen" ist durcheinander, aber es kann nicht geholfen werden, weil es die Unordnung der Blöcke ausdrückt, aus denen der Kurs besteht. Es wäre cool, es in Daten zu haben, aber diesmal wird es in Code ausgedrückt. Zur Erinnerung bedeutet "!!" eine Berechnung dahingehend, dass die logische Ablehnung zweimal durchgeführt wird und Nicht-Null auf 1 gesetzt wird.

Das Folgende ist eine in Ruby geschriebene Berechnung mit genau demselben Zweck. Oder besser gesagt, ich habe es früher in Rubin geschrieben.

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  

Sogar Bitoperationen sind mit Ruby einfacher zu schreiben.

Recommended Posts

Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)
Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
Offline in Echtzeit, wie man ein Java-Implementierungsbeispiel für ein F01-Problem schreibt
Offline-Echtzeit zum Schreiben eines F04-Ruby- und C99-Implementierungsbeispiels
Beispiel für die Implementierung der F06-Implementierung in Echtzeit
So machen Sie den Einzug zu zwei Einzelbyte-Leerzeichen in der JAXB-Implementierung des JDK
So finden Sie die Ursache des Ruby-Fehlers
So erstellen Sie die einfachste Blockchain in Ruby
[Hinweis] [Anfänger] Schreiben, wenn der Wert eines Array-Elements in einem sich wiederholenden Satz von Ruby geändert wird
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
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)
So rufen Sie den Hashwert in einem Array in Ruby ab
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
So leiten Sie den letzten Tag des Monats in Java ab
Ich habe versucht, das Problem mit der Ruby-Karaoke-Maschine zu lösen (es gibt ein Beispiel für die Antwort).
Ich habe versucht, das Problem mit dem Ruby-Bonusgetränk zu lösen (es gibt ein Beispiel für die Antwort).
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Wie man in Ruby auf unbestimmte Zeit iteriert
Ich habe versucht, das Problem bei der Erstellung von Ruby-Bingokarten zu lösen (es gibt ein Beispiel für die Antwort).
So installieren Sie Bootstrap in Ruby
Wie schreibe ich Ruby, wenn in einer Zeile Zusammenfassung vom Anfänger
Wie schreibe ich, wenn ich mit "C language string array" wie argv [] in Ruby-FFI umgehen möchte?
So erhalten Sie die ID des automatisch inkrementierten PRIMAY-Schlüssels in MyBatis
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
So ermitteln Sie die Länge einer Audiodatei mit Java
So erhöhen Sie den Wert von Map in einer Zeile in Java
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby mit Wiederholung zu lösen.
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
So beschränken Sie die Aktion des Übergangsziels, wenn Sie nicht angemeldet sind
So lösen Sie die lokale Umgebungskonstruktion von Ruby on Rails (MAC)!
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
So ermitteln Sie den absoluten Pfad eines in Java ausgeführten Verzeichnisses
So debuggen Sie die Verarbeitung im Ruby on Rails-Modell nur mit der Konsole
Android-Entwicklung, wie man den Wert des JSON-Objekts auf null überprüft
So fügen Sie die Verarbeitung mit einer beliebigen Anzahl von Elementen in die iterative Verarbeitung in Ruby ein
Zusammenfassung zum Schreiben von Anmerkungsargumenten
So bestimmen Sie die Anzahl der Parallelen
So sortieren Sie eine Liste von SelectItems
So erhalten Sie das Datum mit Java
Schreiben Sie die Bewegung von Rakefile in das Runbook
[Swift] So ermitteln Sie die Anzahl der Elemente in einem Array (Super Basic)
[Ruby on Rails] So machen Sie das Linkziel zu einem Teil der angegebenen ID
graphql-ruby: So erhalten Sie den Namen der Abfrage oder Mutation im Controller Hinweis
So erhalten Sie die ID eines Benutzers, der sich in Swift bei Firebase authentifiziert hat
Ich habe versucht, das Problem der Tribonacci-Sequenz in Ruby zu lösen (Zeitlimit 10 Minuten).
So überprüfen Sie die neueste Version von io.spring.platform für das Schreiben in pom.xml von Spring (STS)
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten