Mal wieder ein Programmierwettbewerb

Alles Rund um SAP®.
41 Beiträge • Seite 1 von 3 (current) Nächste
41 Beiträge Seite 1 von 3 (current) Nächste

Mal wieder ein Programmierwettbewerb

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Nach längerer Zeit ist mir mal wieder im Zusammenhang mit einem aktuellen Problem eine Aufgabe für einen Programmierwettbewerb gekommen.

Aufgabe diesmal: Ein möglichst KURZES Programm zu schreiben, wobei in 3 Kategorien gepunktet werden kann.

Aufabenstellung: Um möglichst allen Leuten dieselben Möglichkeiten zu geben habe ich mir die Tabelle VARIT vorgenommen - dort stehen die Variantentexte zu Programmvarianten drin.
Diese Tabelle kann jeder auch auf einem Minisap schnell mit diversen WErten füllen, indem man sich schnell ein paar Varianten für eigene Testreports erstellt.

Zu programmieren ist ein Programm, das alle Programme, die mit "Z" beginnen ( VARIT-REPORT ) und mindestens 3 verschiedenenamige Varianten haben ( dieselbe Variante mit z.B. engl. und deutschen Variantentext zählt nur 1x ) anlistet. ( Pro Zeile ein Programmname ).



Gesucht ist ein möglichst kurzes Programm, wobei es für "kurz" folgende 3 Auslegungsmöglichkeiten gibgt.

1.) Das Programm mit den wenigsten Buchstaben. ( Ich hasse schwer lesbare Programme )
2.) Das Programm mit den wenigsten Wörtern.
3.) Das Programm mit den wenigsten Anweisungen.

Beispiel:

DATA: x type c,y type i.

= 19 Buchstaben, 7 Wörter, 2 Anweisungen


Zur Kontrolle kann folgendes ( simple und nicht jede Möglichkeit berücksichtigende Programm ) verwendet werden um die Werte für das Programm zu finden.



Code: Alles auswählen.

REPORT ABAPSTAT LINE-SIZE 1000.

DATA: T_SOURCE      TYPE STANDARD TABLE OF ABAPSOURCE
                    WITH NON-UNIQUE DEFAULT KEY,
      WA_LINE       LIKE LINE OF T_SOURCE,
      LONGROW(8000) TYPE C,
      TMP           LIKE LONGROW,
      T_STATEMENTS LIKE STANDARD TABLE OF LONGROW
                    WITH NON-UNIQUE DEFAULT KEY,
      STATEMENT     LIKE LINE OF T_STATEMENTS,
      T_DOPPELPUNKT LIKE T_STATEMENTS.

DATA: BUCHSTABEN  TYPE I,
      WOERTER     TYPE I,
      ANWEISUNGEN TYPE I,
      ZEILEN      TYPE SYTABIX.

PARAMETERS P_PROG LIKE D010SINF-PROG OBLIGATORY DEFAULT SY-REPID.

END-OF-SELECTION.
  READ REPORT P_PROG INTO T_SOURCE.
  LOOP AT T_SOURCE INTO WA_LINE.
    CONCATENATE LONGROW WA_LINE INTO LONGROW SEPARATED BY SPACE.
  ENDLOOP.

* Erstze Komma durch Komma+ Leerzeichen
  DO.
    REPLACE ',' WITH '^ ' INTO LONGROW.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.
  ENDDO.
  DO.
    REPLACE '^' WITH ',' INTO LONGROW.
    IF SY-SUBRC <> 0.
      EXIT.
    ENDIF.
  ENDDO.
  CONDENSE LONGROW.
  TMP = LONGROW.
  CONDENSE TMP NO-GAPS.
  BUCHSTABEN = STRLEN( TMP ).
  WRITE:/ 'Buchstaben - ',AT 30 BUCHSTABEN.

  SPLIT LONGROW AT ' ' INTO TABLE T_STATEMENTS.
  DESCRIBE TABLE T_STATEMENTS LINES WOERTER.
  WRITE:/ 'Wörter -',WOERTER UNDER BUCHSTABEN.

  SPLIT LONGROW AT '.' INTO TABLE T_STATEMENTS.
  LOOP AT T_STATEMENTS INTO STATEMENT.
    IF STATEMENT NA ':'.
      ADD 1 TO ANWEISUNGEN.
      CONTINUE.
    ENDIF.
    SPLIT STATEMENT AT ',' INTO TABLE T_DOPPELPUNKT.
    DESCRIBE TABLE T_DOPPELPUNKT LINES ZEILEN.
    ANWEISUNGEN = ANWEISUNGEN + ZEILEN.
  ENDLOOP.
  WRITE:/ 'Anweisungen -',ANWEISUNGEN UNDER BUCHSTABEN.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Noch 2 Anmerkungen.

1.) Laufzeit ist diesmal nicht von Interesse.
2.) Um einen Anreiz zu schaffen:

Meine aktuelle Lösung ( wird am WE gepostet, damit alle noch genug Zeit zum Rätseln haben ):

Weniger als 5000 Buchstaben,
weniger als 500 Wörter,
weniger als 50 Anweisungen.

Und es geht in allen 3 Kategorien sicherlich viiiiiel besser! :wink:
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Grey_M (ForumUser / 21 / 0 / 0 ) »
Hoffe mal das sollte so aussehen.

Kann einfach nicht bis zum WE warten. :oops:

In den Report

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Modulpool         Z_ACHTELIK_TEST                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*


INCLUDE z_achtelik_test_top                     .                      "

SELECT DISTINCT report INTO CORRESPONDING FIELDS OF TABLE t_v FROM
 varit where report >= 'Z%' order by report.


LOOP AT t_v.
  SELECT langu FROM varit INTO t_v-l
    WHERE report = t_v-report.
  ENDSELECT.

  SELECT variant FROM varit INTO t_v-v1
    WHERE report = t_v-report AND
          langu = t_v-l.
  ENDSELECT.
  SELECT variant FROM varit INTO t_v-v2
    WHERE report = t_v-report AND
          langu = t_v-l AND
          variant <> t_v-v1.
  ENDSELECT.

  SELECT variant FROM varit INTO t_v-v3
    WHERE report = t_v-report AND
          langu = t_v-l AND
          variant <> t_v-v1 AND
          variant <> t_v-v2.
  ENDSELECT.

  MODIFY t_v.

ENDLOOP.

LOOP AT t_v.
  if t_v-v1 <> '' and t_v-v2 <> '' and t_v-v3 <> ''.
    WRITE: / t_v-report,
         '|',
         t_v-l,
         '|',
         t_v-v1,
         '|',
         t_v-v2,
         '|',
         t_v-v3.
  endif.
ENDLOOP.
Ins Top-Include

Code: Alles auswählen.

PROGRAM  z_achtelik_test.

TABLES: varit.

DATA:
BEGIN OF t_v OCCURS 0,
    report LIKE varit-report,
    l LIKE varit-langu,
    v1 LIKE varit-variant,
    v2 LIKE varit-variant,
    v3 LIKE varit-variant,
END OF t_v.
ALso bei mir hats funktioniert. Der Zähler ist übrigens spitze!

EDIT 1.01
Mit Topinclude

Buchstaben 1222
Wörter 173
Anweisungen 35

Kriege ich zumindest mit dem Zähler raus.
Zuletzt geändert von Grey_M am 25.01.2006 14:17, insgesamt 3-mal geändert.

Beitrag von Andreas G (Specialist / 175 / 0 / 0 ) »
@Grey_M
Grey_M hat geschrieben: ALso bei mir hats funktioniert. Der Zähler ist übrigens spitze!

Buchstaben 861
Wörter 133
Anweisungen 26
Ich hab deine Lösung ausprobiert.
Du selektierst ALLE Reports und nich nur Z* - Reports so wie von black_adept gefordert.

Ausserdem musst du glaube ich auch die Buchstaben und Wörter aus deinem Top - Include dazuzählen.

Dann kommst du auf:
Buchstaben 1.001
Wörter 158
Anweisungen 34

Trotzdem: cooles Programm :D

mfg Andi
Hauptsoch: HAUPTSOCH!

Beitrag von Grey_M (ForumUser / 21 / 0 / 0 ) »
OHH Danke. muss man halt noch beim 1. select

Code: Alles auswählen.

where report >= 'Z%'
reinquetschen. :oops:

Hab ich nachgeholt. Danke fürs Lob und zählen. :oops:

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Hier mein Beitrag:

Ich habe es doch richtig verstanden, es soll nur der Reportname ausgegeben werden, oder?

So, nachträglich eingefügt, wobei nicht die kürzeste Variante...

Code: Alles auswählen.

REPORT  ztest.

DATA: gv_report(40).

SELECT DISTINCT report
  FROM varit
  INTO gv_report
   WHERE report LIKE 'Z%'
   GROUP BY report
   HAVING COUNT( DISTINCT variant ) >= 3.

  WRITE: / gv_report.
ENDSELECT.
Meine Werte:
Buchstaben - 164
Wörter - 29
Anweisungen - 5

Viele Grüße,
Olli
Zuletzt geändert von olli-x am 26.01.2006 14:28, insgesamt 2-mal geändert.

Beitrag von Grey_M (ForumUser / 21 / 0 / 0 ) »
Klein aber fein.

RESPEKT

Beitrag von olli-x (Specialist / 166 / 0 / 1 ) »
Vielen Dank.
Bin mal gespannt ob/wie man das toppen kann.
Das heißt jetzt NICHT, das ich von mir eingenommen bin(!!!), sondern das ich eine Lösung mit meinem Wissen einfach nicht kürzer formulieren kann. :lol:
Obwohl :? wenn man den Quellcode in die TRMAC stellt, dann... :twisted:

Viele Grüße,
Olli

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Tach.

Code: Alles auswählen.

Buchstaben -                        146
Wörter -                             29
Anweisungen -                         5
:D :D

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Mir fiel da grad was ein...

Code: Alles auswählen.

Buchstaben -                        127
Wörter -                             24
Anweisungen -                         4
:D :D :D

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                         94
Wörter -                             12
Anweisungen -                         4
... 8) ...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Gast ( / / 0 / 3 ) »
Buchstaben - 137
Wörter - 21
Anweisungen - 4

Beitrag von Gast ( / / 0 / 3 ) »

Code: Alles auswählen.

Buchstaben -                        127
Wörter -                             21
Anweisungen -                         4

Beitrag von Gast ( / / 0 / 3 ) »

Code: Alles auswählen.

Buchstaben -                        124
Wörter -                             19
Anweisungen -                         4

Beitrag von Gast ( / / 0 / 3 ) »
Fragen:
Was ist mit Mandantenabhängigkeit, insbesondere Varianten SAP&* und CUS&*, die im Mandanten 000 liegen, aber in allen Mandanten verfügbar sind.
Es scheint Konsens zu sein, ohne CLIENT SPECIFIED zu selektieren, oder?
Was ist mit automatisch generierten Varianten &nnnnn..., zu denen es keinen Text gibt?
Die werden ignoriert, oder?
Im Release 6.x dumpt das Programm zum Zählen der Anzahl Zeichen..., wenn der Quelltext mehr als 72 Zeichen pro Zeile enthält.

Vergleichbare Themen

15
Antw.
4364
Views
Programmierwettbewerb die 2.
von black_adept » 01.02.2006 13:49 • Verfasst in SAP - Allgemeines

Aktuelle Forenbeiträge

Regex in where
vor 2 Stunden von edwin 7 / 162
Daten an Tabelle binden
vor 15 Stunden von Bright4.5 3 / 1485

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 2 Stunden von edwin 7 / 162
Daten an Tabelle binden
vor 15 Stunden von Bright4.5 3 / 1485

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821