Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels

Problem: http://nabetani.sakura.ne.jp/hena/ordf03triom/ Implementierungslinks: http://qiita.com/Nabetani/items/becb4c4d309b4fe8ce0f

Es ist einfach, weil Sie nur die parallele Bewegung normalisieren müssen.

Zuallererst Rubin

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 -

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

Rubin wird sortiert und der Rest ist angemessen. In C ist die Sortierung ärgerlich, daher wird die Menge durch Bits dargestellt.

Benötige ich NOMINMAX für Visual Studio, da ich eine Funktion namens "min" erstellt habe?

Ist es nicht einfach

Das nächste Mal ist E13 (https://yhpg.doorkeeper.jp/events/58541). Ich werde dich noch einmal fragen. Mach es schwieriger als das.

Recommended Posts

Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
Beispiel für die Implementierung der F06-Implementierung in Echtzeit
Offline-Echtzeit zum Schreiben eines F04-Ruby- und C99-Implementierungsbeispiels
Offline in Echtzeit, wie man ein Java-Implementierungsbeispiel für ein F01-Problem schreibt
Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)
[Java] Wie man Dateien ausgibt und schreibt!
[Einfach] So aktualisieren Sie Ruby und Bundler
JDBC Versprechen und Schreibbeispiel
Wie schreibe ich offline 15. Referenzfrage Antwort
Wie man Code schreibt, der objektorientiertes Ruby denkt
Ruby So konvertieren Sie zwischen Groß- und Kleinschreibung
Javaer fasst zusammen, wie C # -Eigenschaften geschrieben werden
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
Wie schreibe ich Rails
[Java] Arten von Kommentaren und wie man sie schreibt
Wie schreibe ich Docker-Compose
Wie schreibe ich Mockito
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
So schreiben Sie eine Migrationsdatei
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)
Schreiben und Notizen bei der Migration von VB zu JAVA
Umgang mit verschiedenen Versionen von rbenv und Ruby
Wie man guten Code schreibt
Wie schreibe ich einen Java-Kommentar
[Refactoring] So schreiben Sie Routing
[Ruby] Wie man auskommentiert
Ruby C Erweiterung und flüchtig
Ruby: Wie man Cookies benutzt
Wie schreibe ich Junit 5 organisiert
Wie schreibe ich Rails Seed
Wie schreibe ich Rails Routing
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen (Variablen und Typen) ~
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss
Wie schreibe ich Ruby, wenn in einer Zeile Zusammenfassung vom Anfänger
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
Verwendung von StringBurrer und Arrays.toString.
Vuze Plug-In zum Schreiben und Genießen
Wie man in Ruby auf unbestimmte Zeit iteriert
Schreiben Sie Ruby-Methoden mit C (Teil 1)
Java # 6 studieren (Wie man Blöcke schreibt)
So installieren Sie Ruby über rbenv
Verwendung von Ruby on Rails
Aufrufen von Klassen und Methoden
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)
So installieren Sie Bootstrap in Ruby