String mit alphabetisch geordneten Substring



  • @EinNutzer0 sagte in String mit alphabetisch geordneten Substring:

    Ich hab mich bewusste gegen lange, sprechende, lokale Variablennamen entschieden, weil diese hierbei unnütz wären.

    Willst du uns vergesäßen?



  • @SeppJ sagte in String mit alphabetisch geordneten Substring:

    Mal angenommen, du könntest mich nicht fragen (Ja, schaut richtig aus): Wie würdest du prüfen, ob es wirklich korrekt ist?

    Etwas spät ^^ Habe das dennoch jetzt dazwischen geworfen.

    Prinzipiell sage ich jetzt einfach, es mit zufälligen Daten füttern, ausgeben lassen und diese vergleichen, ob die Ausgabe mit dem übereinstimmt, was ich erwarte.

    Beispiel in Python (nicht als gutes Python Beispiel zu verwenden):

    import subprocess as sp
    import random, string
    
    EX_NAME = "test.exe"
    DATA_SIZE = 70
    RESULTS = 32
    
    def create_randstring( ssize ):
        tmp = ''
        for i in range( 0, ssize ):
            tmp += chr( random.randint( 1, 255 ) )
        return tmp
    
    def create_randASCIIstring( ssize ):
        tmp = ''
        for i in range( 0, ssize ):
            tmp += random.choice( string.ascii_letters + string.digits )
        return tmp
    
    def main( ):
        global EX_NAME
        global DATA_SIZE
        global RESULTS
        with open( "log.txt", "wb" ) as dout:
            for i in range( 0, RESULTS ):
                tmp = create_randASCIIstring( DATA_SIZE )
                tmp_r = sp.run( [EX_NAME, tmp], stdout=sp.PIPE )
                dout.write( b"Raw Data: " + bytes( tmp, 'utf-8' ) + b"\r\nResult: " + tmp_r.stdout[:-2] + b"\r\n" )
                tmp = create_randstring( DATA_SIZE )
                tmp_r = sp.run( [EX_NAME, tmp], stdout=sp.PIPE )
                dout.write( b"Raw Data: " + bytes( tmp, 'utf-8' ) + b"\r\nResult: " + tmp_r.stdout[:-2] + b"\r\n" )
    
    if __name__ == '__main__':
        main()
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    size_t step_subsequence( const char *sequence )
    {
      if( !sequence || !*sequence ){ return 0; }
      unsigned char previous_char = 0x0;
      unsigned char current_char = (unsigned char)toupper( *sequence );
      size_t length = 0;
      while( current_char )
      {
        if( current_char >= previous_char ){ length += 1; }
        else { return length; }
        previous_char = current_char;
        ++sequence;
        current_char = (unsigned char)toupper( *sequence );
      }
      return 1;
    }
    
    void get_longest_alpha_sequence( const char *sequence, char *result )
    {
      if( !sequence || !result ){ return; }
      size_t longest_subsequence_length = 0;
      const char *start_longest_subsequence = sequence;
      while( *sequence )
      {
        size_t subsequence_length = step_subsequence( sequence );
        if( subsequence_length > longest_subsequence_length )
        {
          longest_subsequence_length = subsequence_length;
          start_longest_subsequence = sequence;
        }
        sequence += subsequence_length;
      }
      memcpy( result, start_longest_subsequence, longest_subsequence_length );
      result[longest_subsequence_length] = 0;
    }
    
    int main( int argc, char **argv )
    {
      if( argc == 2 )
      {
        char result[strlen(argv[1])];
        get_longest_alpha_sequence( argv[1], result );
        puts( result );
      }
      else
      {
        char data[] = "dehnijwdfbre4oto4tmpfe3Taacejkzöä|REHY$%edft3G|TE$HTSATSSERgdg";
        char result[sizeof(data)] = { 0 };
        get_longest_alpha_sequence( data, result );
        puts( result );
      }
      return 0;
    }
    

    Wenn ich die nicht-alphabetischen Zeichen gemäß ASCII Tabelle vergleiche und die alphatischen nach dem Alphabet (Duh), scheint die Ausgabe zu stimmen.

    Oder gibt es noch einen anderen Ansatz? Ich hatte über eine Vergleichsimplementation in einer anderen Sprache nachgedacht, aber das setzt voraus, dass ich diese in der anderen Sprache ja ebenfalls korrekt implementiert habe.


  • Mod

    @fairiestoy sagte in String mit alphabetisch geordneten Substring:

    Oder gibt es noch einen anderen Ansatz? Ich hatte über eine Vergleichsimplementation in einer anderen Sprache nachgedacht, aber das setzt voraus, dass ich diese in der anderen Sprache ja ebenfalls korrekt implementiert habe.

    Du solltest mindestens auch noch gezielt alle Extremfälle testen, die dir einfallen, damit du nicht so endest wie EinNutzer0. Leerer String, langer String, nur ein Zeichen, nur zwei Zeichen, alles eine einzige lange Sequenz, mehrere Sequenzen gleicher Länge, längste Sequenz am Anfang, längste Sequenz am Ende.

    Sofern man sauber und lesbar programmiert (siehe wieder EinNutzer0 für ein Gegenbeispiel) hilft es auch sehr, wenn man einfach mal gründlich nachdenkt, ob alles logisch richtig klingt und nachvollziehbar ist. Ein gutes Programm liest sich fast so wie ein normaler Text. Klingt der Text logisch, ist auch das Programm logisch (wieder Gegenbeispiel EinNutzer0 und sein Array der Unlesbarkeit). Wenn man sein eigenes Programm komplett versteht und nachvollziehen kann, ist auch die Chance recht hoch, dass es wirklich richtig ist. Wenn es dann auch noch die Testfälle besteht, kann man mehr eigentlich nicht mehr tun. Ok, eine Sache die man noch tun kann, ist so etwas wie valgrind für die Testfälle zu benutzen, um noch mal automatisiert nach dummen Fehlern suchen zu lassen.


  • Gesperrt

    @SeppJ sagte in String mit alphabetisch geordneten Substring:

    Leerer String, langer String, nur ein Zeichen,

    Ahhh, ich übersehe das Offensichtliche (wieder einmal).
    😲 💣
    Wie ist das Verhalten der Funktion für nur ein Zeichen definiert?



  • @EinNutzer0 sagte in String mit alphabetisch geordneten Substring:

    Wie ist das Verhalten der Funktion für nur ein Zeichen definiert?

    Ein einzelnes Element ist immer automatisch sortiert - sowohl aufsteigend als auch absteigend 🙂



  • @EinNutzer0 sagte in String mit alphabetisch geordneten Substring:

    Ich hab mich bewusste gegen lange, sprechende, lokale Variablennamen entschieden, weil diese hierbei unnütz wären.

    Bist du vollkommen bescheuert?


  • Gesperrt

    @hustbaer sagte in String mit alphabetisch geordneten Substring:

    Bist du vollkommen bescheuert?

    Also, so drastisch würd ich es jetzt nicht ausdrücken wollen... 💁♂

    @wob sagte in String mit alphabetisch geordneten Substring:

    Ein einzelnes Element ist immer automatisch sortiert - sowohl aufsteigend als auch absteigend

    Und das hieße für die Rückgabe...



  • @EinNutzer0 Mehrere erfahrene Entwickler sagen dir hier dass das ganz ganz GANZ schlecht ist. Und deine Antwort darauf ist dass du dich bewusst dagegen entschieden hast weil es wurscht ist. OK, ja, klar. Voll schlau.



  • @EinNutzer0 sagte in String mit alphabetisch geordneten Substring:

    Also, so drastisch würd ich es jetzt nicht ausdrücken wollen...

    Dann formuliere ich es freundlicher. Im Code-Review würde ich dir eine -2 geben (block) und wenn du dann dabei bleiben willst, würde ich anregen, dich noch in der Probezeit zu kündigen. Also: wenn du ernsthaft programmieren willst, machst du sowas nicht. Sieh dir ggf. auch an: https://www.youtube.com/watch?v=MBRoCdtZOYg - solche Dinge, wie du sie da veranstaltest, diskutiert sie überhaupt nicht, da diese viel zu abwegig sind. Ende der Diskussion meinerseits.


  • Gesperrt

    @wob sagte in String mit alphabetisch geordneten Substring:

    Dann formuliere ich es freundlicher. Im Code-Review würde ich dir eine -2 geben (block) und wenn du dann dabei bleiben willst, würde ich anregen, dich noch in der Probezeit zu kündigen. Also: wenn du ernsthaft programmieren willst, machst du sowas nicht. Sieh dir ggf. auch an: https://www.youtube.com/watch?v=MBRoCdtZOYg - solche Dinge, wie du sie da veranstaltest, diskutiert sie überhaupt nicht, da diese viel zu abwegig sind. Ende der Diskussion meinerseits.

    Darauf erst mal einen großen Scheißhaufen. 💩

    😃 Ne, ernsthaft, mich interessieren Eure beschränkten Meinungen nicht... Denn wer nicht mal so simplen Code verstehen kann, hat eh den falschen Beruf gewählt.

    Und wer dann noch mit imaginären Reviews prahlt, hat eh ernsthafte Probleme in seiner Kindheit gehabt...



  • @EinNutzer0
    Wer einen so einfachen Code zwei mal revidieren muss, der hat... ach, lassen wir das.


  • Mod

    Wenn dir sowieso alles egal ist, kann man sich in Zukunft jede Diskussion sparen und deine schädlichen Antworten gleich kommentarlos löschen. So zur Kenntnis genommen.


  • Gesperrt

    @SeppJ sagte in String mit alphabetisch geordneten Substring:

    Wenn dir sowieso alles egal ist, kann man sich in Zukunft jede Diskussion sparen und deine schädlichen Antworten gleich kommentarlos löschen. So zur Kenntnis genommen.

    Ich hab noch gar nicht mitbekommen, dass angeblich @hustbaer damit nicht angefangen haben soll...


  • Mod

    Deine Meinung dazu ist ziemlich egal, dies ist weder eine Diskussion noch eine Abstimmung, sondern eine Feststellung und Ankündigung.



  • @EinNutzer0 Ich hab keine Lust mit rotzigen kleinen Kindern zu streiten die meinen alles besser zu wissen. Antworten wirst du von mir auf jeden Fall keine mehr bekommen. Aber brauchst du ja auch nicht, du bist ja voll der Checker der voll alles checkt und so.


  • Gesperrt

    Dieser Beitrag wurde gelöscht!

  • Gesperrt

    Dieser Beitrag wurde gelöscht!