Essensbestellung aus dem Untergrund

Essensbestellung aus dem Untergrund

Diese Knobelaufgabe ist eine Kopie von Stefans Beitrag aus dem Abapforum, der die Initialzündung zu der Seite Pastafahndung gab.

Da die äußere Wärme gerade keine größeren Denkaufgaben gestatten, heute mal eine kleine Aufgabe zum Wochenbeginn, welche allen von euch, die für NSA, CIA, MI5, Mossad, Interpol, KGB etc. arbeiten, bekannt sein dürfte.

Es geht darum, dass die Mafia/ Triaden/ Falschparker/ Systemkritiker in Form von Bestellungen bei Lieferdiensten illegale Aktivitäten steuern. Es ist gelungen, einen Großteil der dabei verwendeten Schlüsselwörter den zugehörigen Verbrechen zuzuordnen, aber aktuell werden die damit gewonnenen Informationen lediglich gesammelt um an die Hintermänner zu kommen. Leider kann ich die Zuordnung Schlüsselwort zu Straftat nicht posten, denn wenn ihr an diese Information gelangt müsste ich leider… – ihr wisst schon.

Eure Aufgabe ist es nun Essensbestellungen nach diesen Schlüsselwörtern zu durchforschen und aus der Bestellung die Liste der vorhandenen Schlüsselwörter zu extrahieren. Die Schlüsselwörter werden von den Tunichguten in ihren Bestellungen allerdings abgekürzt, so dass lediglich die ersten 3 Buchstaben des Schlüsselworts in der Bestellung auftauchen müssen.

Gegeben sei folgendes Programm – eure Aufgabe ist es eine bessere Lösung in der Methode your_analysis als meine zu erstellen, die die Ausgabetabelle korrekt füllt. Sollte nicht allzu schwer sein, da die Demolösung ausschließlich für die Defaultbestellung funktioniert.
In der Tabelle mt_tiere stehen euch die Schlüsselworte zur Verfügung.

REPORT zss_knobel_2021_06 LINE-SIZE 1000.

CLASS lcl DEFINITION FINAL.
  PUBLIC SECTION.
    TYPES: BEGIN OF ts_result,
             offset TYPE i,
             tier   TYPE string,
           END OF ts_result.
    TYPES: tt_results TYPE STANDARD TABLE OF ts_result WITH EMPTY KEY.
    METHODS:
      constructor,
      main,
      your_analysis IMPORTING iv_order          TYPE string
                    RETURNING VALUE(rt_results) TYPE tt_results.

    DATA: mt_tiere TYPE STANDARD TABLE OF string WITH EMPTY KEY.

ENDCLASS.

PARAMETERS: p_order TYPE string LOWER CASE DEFAULT '32 Pfannkuchen mit Apfelmus und 3x Schlemmerplatte rot/weiß'.

END-OF-SELECTION.

  NEW lcl( )->main( ).

CLASS lcl IMPLEMENTATION.
  METHOD your_analysis.
    APPEND VALUE #( offset =  3 tier = 'Pfau'             ) TO rt_results.
    APPEND VALUE #( offset = 20 tier = 'Pferd'            ) TO rt_results.
    APPEND VALUE #( offset = 24 tier = 'Muschel'          ) TO rt_results.
    APPEND VALUE #( offset = 35 tier = 'Schwein'          ) TO rt_results.
    APPEND VALUE #( offset = 38 tier = 'Lemming'          ) TO rt_results.
    APPEND VALUE #( offset = 51 tier = 'Rotkehlchen'      ) TO rt_results.
    APPEND VALUE #( offset = 55 tier = 'Weinbergschnecke' ) TO rt_results.
  ENDMETHOD.

  METHOD main.
    DATA(lt_suspects) = me->your_analysis( p_order ).
    LOOP AT lt_suspects ASSIGNING FIELD-SYMBOL(<ls_suspect>).
      AT FIRST.
        WRITE:/ 'Verdächtige Bestellung :', p_order.
      ENDAT.
      NEW-LINE.
      POSITION 20.
      IF <ls_suspect>-offset > 0.
        WRITE p_order(<ls_suspect>-offset) NO-GAP.
      ENDIF.
      WRITE p_order+<ls_suspect>-offset(3) COLOR 6 NO-GAP.
      DATA(lv_offset_plus_3) = <ls_suspect>-offset + 3.
      IF lv_offset_plus_3 < strlen( p_order ).
        WRITE p_order+lv_offset_plus_3 NO-GAP.
      ENDIF.

      WRITE AT 120 <ls_suspect>-tier COLOR 7.
    ENDLOOP.
  ENDMETHOD.

  METHOD constructor.
    DATA: lv_tiere TYPE string.
    lv_tiere =  'Aal;Bandwurm;Coyote;Eber;Fasan;Gans;Hahn;Igel;Kabeljau;Lama;Made;Nacktmull;Panda;Rabe;Sardelle;Tarantel;Wal;Yak'
             && ';Adler;Bär;Dachs;Echse;Faultier;Geier;Hai;Iltis;Käfer;Nashorn;Ratte;Säbelzahntiger;Waran;Zander'
             && ';Affe;Barsch;Delfin;Eichhörnchen;Flamingo;Gemse;Hamster;Impala;Kamel;Nilpferd;Papagei;Raupe;Salamander;Tausendfüßler;Zebra'
             && ';Aguti;Beluga;Dodo;Eisbär;Floh;Gepard;Heilbutt;Ibis;Känguruh;Laus;Makrele;Ochse;Pelikan;Reh;Thunfisch;Wasserbüffel;Ziege'
             && ';Alligator;Biber;Dogge;Elch;Flunder;Giraffe;Hering;Jaguar;Karpfen;Leguan;Manta;Okapi;Pfau;Rentier;Tiger;Weinbergschnecke;Zitronenfalter'
             && ';Ameisenbär;Biene;Dompfaff;Emu;Forelle;Goldfisch;Hirsch;Katze;Lemming;Marabu;Orang-Utan;Pferd;Riesenkrake;Seeadler;Tintenfisch;Wespe'
             && ';Amöbe;Bison;Dorsch;Ente;Frosch;Gorilla;Holzwurm;Klapperschlange;Leopard;Maulwurf;Otter;Pinguin;Robbe;Silberfisch;Trampeltier;Wiesel'
             && ';Amsel;Blattlaus;Drossel;Esel;Fuchs;Grizzlybär;Hornisse;Koala;Libelle;Pottwal;Rochen;Spatz;Truthahn;Windhund'
             && ';Assel;Grauwal;Eule;Guppy;Huhn;Kranich;Löwe;Meerschwein;Puma;Rotkehlchen;Specht;Tsetsefliege;Wolf'
             && ';Auster;Bonobo;Hummer;Kröte;Luchs;Mistkäfer;Pute;Spinn;Uhu;Wombat'
             && ';Büffel;Hund;Kuh;Lurch;Milbe;Qualle;Stachelschwein;Vielfraß;Wurm;Bussard;Hyäne;Mondfisch;Stör;Vogelspinne;Motte;Schwein;Möwe;Mungo;Mücke;Murmeltier;Muschel'.
    SPLIT lv_tiere AT ';' INTO TABLE me->mt_tiere.

  ENDMETHOD.

ENDCLASS.

Weiterführende Links

SAP Community Coding challenge – Randomize Unit-Tests [SAP Community]

ennoadm

Verwandte Beiträge

Read also x