Ellenőrizze, hogy a számjegyek számos növekvő sorrendben

szavazat
2

Van egy karakterlánc, amely számot jelent, mint olyan:

445123966682

E szám van 3 számjegy, amelyek emelkedő sorrendben: 123 szeretnék írni egy szabályt, amely ellenőrzi bármelyik numerikus karakterlánc adom, hogy ha van 3 vagy több számot növekvő vagy csökkenő sorrendben.

Igaz: 445123 vagy 445987 hamis: 192837 vagy 97531

Feltételezem, hogy a legjobb módja az, hogy a RegEx ellenőrzést, de nem én vagyok a legjobb a RegEx. Az egyetlen másik lehetőség tudok gondolni, hogy vagy léptetjük a karakterek, és ellenőrizze, vagy öntött a megadott számot, és használja modulo + osztály, hogy megragad minden számjegy ki a számot, és hasonlítsuk össze a következő szám a sorozatban.

Szerkesztés Bocs, azt jelentette, egybefüggő érdekében. 123 érvényes, 135 nem.

A kérdést 12/06/2011 13:58
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
7

A regexp, ez a fajta triviális:

/012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210/

Ez buta, de a probléma elég egyszerű, hogy a buta megoldás a legjobb.

Válaszolt 12/06/2011 14:01
a forrás felhasználó

szavazat
0

Nem vagyok túl biztos tudod használni a reguláris kifejezéssel itt, mint a probléma sokkal összetettebb, mint amilyennek tűnik. Be kell 3 szám közvetlen vagy fordított sorrendben. Úgy tűnik, mintha már van egy csomó kombinációk, hogy ültessék át a regexp.

Azt javaslom, hogy tervezzen egy egyszerű puffert és egy kilátó ablakot. Puffer mérete egyenlő lehet, hogy a figyelés ablakok méretét. Azt, hogy egy szimbólum egy puffer, és ellenőrizze a kilátó ablakot a következő néhány szimbólumok. Lépésről-lépésre felveheti komplexitása olyan algoritmust, hogy emlékezzen a helyre, hossz stb

Válaszolt 12/06/2011 14:46
a forrás felhasználó

szavazat
0

Azt hiszem, ez hogyan lenne megközelíteni a problémát:

public bool TestForAscending()
    {
        var regex = new Regex(@"(\d)(?=(\d{2}))");

        var target = "120847212340876";

        var matches = regex.Matches(target);

        List<string> groups = new List<string>();

        foreach( Match m in matches )
        {
            groups.Add(m.Groups[1].Value + m.Groups[2].Value);
        }

        return groups.Any(x => IsAscending(x));
    }

    public static bool IsAscending(string x)
    {
        if (x.Length == 1)
        {
            return true;
        }

        int last = int.Parse(x.Last().ToString());
        int prev = int.Parse(x[x.Length - 2].ToString());

        return last == prev + 1 && IsAscending(x.Substring(0, x.Length - 1));
    }

Itt van egy regex hogy vissza fog térni minden 3. számjegy csoportot a cél string (meg lehet változtatni, hogy hány egymást követő számjegy a tesztelni kívánt beállításával kvantor a regex). A fogás ezzel regex, hogy szakít a pár között 2 csoport, így, hogy a teljes számot, akkor CONCAT csoport 1. és 2. csoport De ez könnyű. Ezek után már csak írni egy kicsit módszer tesztelésére, ha a szám növekvő (Azért választottam rekurzív).

Válaszolt 12/06/2011 16:00
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more