Offline in Echtzeit, wie man ein Java-Implementierungsbeispiel für ein F01-Problem schreibt

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

Ich weiß nicht viel über Java, daher schreibe ich vielleicht etwas Seltsames, aber ich habe es gepostet, ohne mir darüber Sorgen zu machen.

import org.junit.Assert;
import org.junit.jupiter.api.Test;

public class TwinCell {
    private static class Solver {
        private class Searcher
        {
            int c=0;
            int col;
            Searcher( int x, int y)
            {
                col = color(x,y);
                search( x, y );
            }
            void search( int x, int y )
            {
                if ( col != color(x,y) || ( attended[y] & (1<<x)) != 0 ){
                    return;
                }
                c+=1;
                attended[y] |= 1<<x;
                search( x+1, y );
                search( x-1, y );
                search( x, y+1 );
                search( x, y-1 );
            }
            int size()
            {
                return c;
            }
        }
        int[] bits;
        int[] attended = new int[8];
        static final int WX = 8;
        static final int WY = 8;
        public Solver(int[] _bits)
        {
            bits = _bits;
        }
        boolean onField( int x, int y)
        {
            return !( x<0 || WX<=x || y<0 || WY<=y );
        }
        private int color( int x, int y ){
            if ( !onField( x, y )){
                return -1;
            }
            return (bits[y] & (1<<x) )==0 ? 0 : 1;
        }
        public int[] solve() {
            int[] r = new int[2];
            for( int y=0 ; y<WY ; ++y ){
                for( int x=0 ; x<WX ; ++x ){
                    if ( new Searcher( x, y ).size()==2 ){
                        ++r[color(x,y)];
                    }
                }
            }
            return r;
        }
    }
    public String solve( String src )
    {
        String[] lines = src.split("\\/");
        int[] bits = new int[lines.length];
        for( int i =0 ; i<lines.length ; ++i ){
            bits[i]=Integer.parseInt(lines[i], 16);
        }
        int[] wb = new Solver( bits ).solve();
        return String.format( "%d,%d", wb[0], wb[1] );
    }

    void test( String src, String expected )
    {
        Assert.assertEquals( expected, solve( src ));
    }
    @Test
    void runAllTests()
    {
        /*0*/ test( "dc/bc/a7/59/03/d5/d4/ea", "2,3" );
        /*1*/ test( "ff/ff/ff/ff/ff/ff/ff/ff", "0,0" );
        /*2*/ test( "00/00/00/00/00/00/00/00", "0,0" );
    }
}

Im Gegensatz zu Ruby und C99 (http://qiita.com/Nabetani/items/7814edd97911a80946f1) habe ich mich entschlossen, die Anzahl der Quadrate bei der Suche nach Tiefenprioritäten zu zählen.

Ich habe zum ersten Mal in meinem Leben versucht, die Klasse in der Klasse zu benutzen. Ich habe auch versucht, eine seltene innere Klasse zu verwenden, die nicht statisch ist.

Recommended Posts

Offline in Echtzeit, wie man ein Java-Implementierungsbeispiel für ein F01-Problem schreibt
Beispiel für die Implementierung der F06-Implementierung in Echtzeit
Offline-Echtzeit zum Schreiben eines F03-Ruby- und C-Implementierungsbeispiels
Offline-Echtzeit-Schreibweise Implementierungsbeispiel für das Problem in E05 (Ruby, C11)
Offline-Echtzeit zum Schreiben eines F04-Ruby- und C99-Implementierungsbeispiels
Wie schreibe ich Scala aus der Perspektive von Java
[Java] Arten von Kommentaren und wie man sie schreibt
Wie schreibe ich einen Java-Kommentar
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)
Java # 6 studieren (Wie man Blöcke schreibt)
So schreiben Sie eine Java-Variablendeklaration
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen (Variablen und Typen) ~
Zusammenfassung zum Schreiben von Anmerkungsargumenten
[Einführung in Java] So schreiben Sie ein Java-Programm
[Java] Wie man Dateien ausgibt und schreibt!
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[Java] Beachten Sie, wie Sie RecyclerView verwenden und die animierte Swipe-Verarbeitung implementieren.
JDBC Versprechen und Schreibbeispiel
[java] Zusammenfassung des Umgangs mit Zeichenketten
Wie schreibe ich offline 15. Referenzfrage Antwort
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen * Übung 1 ~
[Java] Zusammenfassung, wie Lambda-Ausdrücke weggelassen werden
So lösen Sie Ausdrucksprobleme in Java
[Java] Memo zum Schreiben der Quelle
Wie schreibe ich Java String # getBytes in Kotlin?
Grundlagen der Java-Entwicklung ~ So schreiben Sie ein Programm (Ablauf und bedingte Verzweigung) ~
Wie schreibe ich Rails
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
java: Wie schreibe ich eine generische Typliste? [Hinweis]
[Java] So erhalten Sie den Maximalwert von HashMap
Stand April 2018 So installieren Sie Java 8 auf einem Mac
Wie schreibe ich Mockito
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
Zusammenfassung der Java-Kommunikations-API (3) Verwendung von SocketChannel
Zusammenfassung der Java-Kommunikations-API (2) Verwendung von HttpUrlConnection
Zusammenfassung der Implementierung von Standardargumenten in Java
So schreiben Sie eine Migrationsdatei
Wie man modernes Java schreibt. Unveränderliches Java, Null Betrachten Sie die Sicherheit.
Ausführen des WebCamCapture-Beispiels von NyARToolkit für Java
Eine nicht unterstützte Java-Version So beseitigen Sie Fehler
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
So leiten Sie den letzten Tag des Monats in Java ab
So senken Sie die Java-Version
[Java] Verwendung von Map
So deinstallieren Sie Java 8 (Mac)
Wie man guten Code schreibt
Java - So erstellen Sie JTable
[Refactoring] So schreiben Sie Routing
Verwendung der Java-Klasse
[Java] Verwendung von removeAll ()
[Java] So zeigen Sie Wingdings an
Verwendung von Java Map
So legen Sie Java-Konstanten fest
Wie schreibe ich Junit 5 organisiert