Comment écrire un exemple d'implémentation Java d'un problème F01 en temps réel hors ligne

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

Je ne connais pas grand chose à Java, donc j'écris peut-être quelque chose d'étrange, mais je l'ai posté sans m'en soucier.

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" );
    }
}

Contrairement au cas de ruby et C99 (http://qiita.com/Nabetani/items/7814edd97911a80946f1), j'ai décidé de compter le nombre de carrés dans la recherche de priorité en profondeur.

Pour la première fois de ma vie, j'ai essayé d'utiliser le cours en classe. J'ai également essayé d'utiliser une classe interne rare qui n'est pas statique.

Recommended Posts

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
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 F04 ruby et C99 en temps réel hors ligne
Comment écrire Scala du point de vue de Java
[Java] Types de commentaires et comment les rédiger
Comment rédiger un commentaire java
Comparaison de l'écriture des fonctions de rappel (Java, JavaScript, Ruby)
Étudier Java # 6 (Comment écrire des blocs)
Comment écrire une déclaration de variable Java
Bases du développement Java ~ Comment écrire des programmes (variables et types) ~
Résumé de l'écriture des arguments d'annotation
[Introduction à Java] Comment écrire un programme Java
[Java] Comment sortir et écrire des fichiers!
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Java] Notez comment utiliser RecyclerView et comment implémenter le traitement par balayage animé.
Promesse JDBC et exemple d'écriture
[java] Résumé de la gestion des chaînes de caractères
Comment rédiger la réponse à la 15e question de référence hors ligne
Bases du développement Java ~ Comment écrire des programmes * Exercice 1 ~
[Java] Résumé de la façon d'omettre les expressions lambda
Comment résoudre les problèmes d'expression en Java
[Java] Mémo sur la façon d'écrire la source
Comment écrire Java String # getBytes dans Kotlin?
Bases du développement Java ~ Comment écrire un programme (flux et branchement conditionnel) ~
Comment écrire des rails
Initialisation de for Essayez de changer le problème Java en TypeScript 5-4
java: Comment écrire une liste de types génériques [Note]
[Java] Comment obtenir la valeur maximale de HashMap
À partir d'avril 2018 Comment installer Java 8 sur Mac
Comment écrire Mockito
Résumé de l'API de communication Java (1) Comment utiliser Socket
Résumé de l'API de communication Java (3) Comment utiliser SocketChannel
Résumé de l'API de communication Java (2) Comment utiliser HttpUrlConnection
Résumé de la mise en œuvre des arguments par défaut en Java
Comment écrire un fichier de migration
Comment écrire du Java moderne. Immuable Java, Null Considérez la sécurité.
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java
Une version Java non prise en charge Comment se débarrasser des erreurs
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
Comment dériver le dernier jour du mois en Java
Comment abaisser la version java
[Java] Comment utiliser Map
Comment désinstaller Java 8 (Mac)
Comment écrire du bon code
Java - Comment créer JTable
[Refactoring] Comment écrire le routage
Comment utiliser la classe Java
[Java] Comment utiliser removeAll ()
[Java] Comment afficher les Wingdings
Comment utiliser Java Map
Comment définir des constantes Java
Comment écrire Junit 5 organisé