Mal wieder ein Programmierwettbewerb

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

Beitrag von Gast ( / / 0 / 3 ) »
Die Zählung der Token ist kaputt.
Das hier gepostete Testprogramm zählt je nach Version

Code: Alles auswählen.

Buchstaben -                        125 
Wörter -                             18 
Anweisungen -                         4
oder

Code: Alles auswählen.

Buchstaben -                        123 
Wörter -                             20 
Anweisungen -                         4
Ich zähle aber in beiden Fällen 24 Token.

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


Beitrag von Gast ( / / 0 / 3 ) »
Unter Ausnutzung der kaputten Zählweise mal ein Beispiel mit weniger Tokens aqls Anweisungen:

Code: Alles auswählen.

Buchstaben -                        140
Wörter -                              3
Anweisungen -                         4
Ich zähle da aber immer noch 24 Token.

Beitrag von Olaf P. (ForumUser / 61 / 0 / 0 ) »
Moin zusammen,
ich komme nicht über die folgenden Ergebnisse hinweg.

Buchstaben - 143
Wörter - 27
Anweisungen - 4

Vielleicht ist auch das Ergebnis zulässig:

Buchstaben - 129
Wörter - 26
Anweisungen - 4

Ich bin schon auf Eure Lösungen gespannt. Ich schicke Stefan mal mein Coding.

Viele Grüße

Olaf

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
so, ich habe auch noch ein wenig optimieren können:

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                         90
Wörter -                             12
Anweisungen -                         4
Ich kann zwar noch zwei Buchstaben einsparen, aber dann gehen bei der Ausgabe ein paar Stellen des Reportnamens flöten...

Nachtrag:
wie ich gerade in der Aufgabestellung gesehen haben, habe ich eine Bedingung überlesen. Daher ist mein bisheriges Ergebnis Makulatur... :oops:


Aktuell bin ich jetzt bei:

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                        125
Wörter -                             22
Anweisungen -                         4
Dies gilt aber nur unter der Vorgabe, dass keine mandantenübergreifenden Selektionen notwendig sind. Sonst sind es:

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                        140
Wörter -                             24
Anweisungen -                         4
Zuletzt geändert von ereglam am 26.01.2006 09:57, insgesamt 1-mal geändert.
Gruß
Ereglam


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

Beitrag von popeiko (ForumUser / 47 / 0 / 1 ) »
Bisheriges Ergebnis:

Code: Alles auswählen.

Buchstaben -                        128
Wörter -                             31
Anweisungen -                         5
Aber wenn ich die anderen Postings sehe, scheint da ja noch einiges zu gehen. :?

Beitrag von popeiko (ForumUser / 47 / 0 / 1 ) »
Meine beste Lösung:

Code: Alles auswählen.

Buchstaben -                        126
Wörter -                             25
Anweisungen -                         4
Zuletzt geändert von popeiko am 26.01.2006 10:15, insgesamt 2-mal geändert.

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Nachtrag:
wie ich gerade in der Aufgabestellung gesehen haben, habe ich eine Bedingung überlesen. Daher ist mein bisheriges Ergebnis Makulatur... :oops:


Aktuell bin ich jetzt bei:

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                        125
Wörter -                             22
Anweisungen -                         4
Dies gilt aber nur unter der Vorgabe, dass keine mandantenübergreifenden Selektionen notwendig sind. Sonst sind es:

Code: Alles auswählen.

Report Transporter                     
                                       
Buchstaben -                        140
Wörter -                             24
Anweisungen -                         4
Gruß
Ereglam


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

Beitrag von Gast ( / / 0 / 3 ) »
Ein Testfall, der in jedem System das gleiche Ergebnis liefert, wäre besser.
dann könnte man das zu erwartende Ergebnis gleich in der Aufgabenstellung posten.
So muss man hinterher erst noch sehen, welche der Lösungen die gestellte Aufgabe wirklich erfüllen.

Ergebnis

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
Nachdem ja nun schon einige Zahlen hier genannt werde ich meine Lösungen hier posten.

M.E. sollten die kürzesten Lösungen mit den Aggregatfunktionen gearbeitet haben - aber ich werde trotzdem noch eine Lösung posten, die auch ohne Aggregatfunktionen mit nur 4 Anweisungen auskommt.

1. Lösung (

Code: Alles auswählen.

REPORT.
SELECT REPORT COUNT( DISTINCT VARIANT )
  INTO (SY-UCOMM,SY-TABIX)
    FROM VARIT
    WHERE REPORT >= 'Z'
    GROUP BY REPORT
    ORDER BY REPORT.
    CHECK SY-TABIX >= 3.
    WRITE / SY-UCOMM.
ENDSELECT.
Buchstaben - 158
Wörter - 30
Anweisungen - 5

2. Lösung (ohne Aggregate )

Code: Alles auswählen.

REPORT.
SELECT DISTINCT A~REPORT
    INTO SY-UCOMM
    FROM VARIT AS A JOIN VARIT AS B ON A~REPORT = B~REPORT
                    JOIN VARIT AS C ON A~REPORT = C~REPORT
    WHERE A~REPORT LIKE 'Z%'
      AND A~VARIANT <> B~VARIANT
      AND A~VARIANT <> C~VARIANT
      AND B~VARIANT <> C~VARIANT
    GROUP BY A~REPORT
    ORDER BY A~REPORT.
  WRITE: / SY-UCOMM.
ENDSELECT.
Buchstaben - 262
Wörter - 52
Anweisungen - 4
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
P.S.
Nachtrag:

Das von mir gepostete Zählprogramm rechnet definitiv nicht immer korrekt. D.h. dass man durch geschicktes Anordnen der Befehle und das Einstreuen von Doppelpunkten die Zählung beeinflussen kann. Aber der Sinn dieses _Wettbewerbs war auch primär das Lösen der Aufgabenstellung - das Zählprogramm sollte nur eine Hilfestellung sein um das Zählen zu erleichtern und nur kurz innerhalb von 10 Minuten hingeklatscht worden.
Wenn mir jemand eine korrekter arbeitende Version schickt, die evtl. auch noch die Token etc. zählt und gegenüber Doppelpunkten etwas resistenter ist wäre ich glücklich damit und würde diese bei einem weiteren _Wettbewerb als bessere Alternative zum Zählen anbieten.


P.P.S. Warum werden denn hier Worte zensiert, die mit _Wet ( ohne den anführenden Unterstrich ) beginnen. Dies ist doch ein deutsches Forum...
Zuletzt geändert von black_adept am 26.01.2006 10:12, insgesamt 2-mal geändert.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Ergebnis

Beitrag von Gast ( / / 0 / 3 ) »
black_adept hat geschrieben: WHERE REPORT >= 'Z'
Das ist falsch.
Ich kann mit INSERT REPORT auch einen REPORT '~~~' anlegen.
'~' ist > 'Z', soll aber laut Aufgabenstellung nicht mitgezählt werden.

Beitrag von Gast ( / / 0 / 3 ) »
Mit aktivierten Unicode-Prüfungen erreiche ich nur

Code: Alles auswählen.

Buchstaben -                        130
Wörter -                             22
Anweisungen -                         4
Ohne Unicode-Prüfungen

Code: Alles auswählen.

Buchstaben -                        121
Wörter -                             21
Anweisungen -                         4
In beiden Fällen ohne Beschwerden der erweiterten Syntaxprüfung.
Und in beiden Fällen kann ich die Anzahl der Wörter reduzieren und dafür jeweils einen "Buchstaben" mehr verwenden.

Das Ergebnis mit ~90 Zeichen würde ich gern mal sehen oder zumindest mal von black_adept eine Klarstellung, welches die besten ihm zugeschickten Beiträge sind, die ein korrektes Ergebnis liefern.

Beitrag von Gast ( / / 0 / 3 ) »
black_adept hat geschrieben:PP.P.S. Warum werden denn hier Worte zensiert, die mit _Wet ( ohne den anführenden Unterstrich ) beginnen. Dies ist doch ein deutsches Forum...
Da fragst Du die falschen. Wohl besser per PM an einen admin zu klären.
Vermutlich soll verhindert werden, dass jemand einen
Miss-"_Wet T-shirt"-_Wettbewerb vorschlägt.
Hm. Miss-"**** T-shirt"-**** vorschlägt.
Nicht mal vom _Wetter_ darf man hier reden.

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
So - da ich die nächsten Tage wahrscheinlich keine Zugang zum Netz habe kommt hier eine Lösung, die mir so (oder sehr ähnlich) von mehreren Personen zugeschickt wurde. Man kann sicher die Statistik noch ein wenig schönen indem man die Schwächen des Zählprogramms ausnutzt - aber hier die "Minimallösung".

Code: Alles auswählen.

REPORT.
SELECT report FROM varit
              INTO sy-msgv1
              WHERE report LIKE 'Z%'
              GROUP BY report
              HAVING COUNT( DISTINCT variant ) > 2.
  WRITE / sy-msgv1.
ENDSELECT. 
Ein paar Anmerkungen.

1.) Es ist evtl. noch nicht allen bekannt - aber der Programmname hinter dem "REPORT"-Statement ist optional. Somit konnten hier ein paar Buchstaben / Wörter gespart werden.

2.) Ein weiterer Trick ist Systemvariablen zu verwenden, um sich die Deklaration einer eigenen Variablen zum Aufnehmen des Ergebnisses spart. ( Wenn ich mal wieder eine Programmieraufgabe hier stelle werde ich sowas bestimmt ausschließen ).

3.) Das wohl wichtigste hier ist, dass man ALLE Möglichkeiten der ABAP-Syntax verwendet. Und hier ist definitiv das Benutzen von Aggregatfunktionen angesagt. Wer es also länger nicht mehr getan hat ( so wie ich - hab doch glatt vergessen, dass es eine "HAVING"-Clause gibt. Aber die habe ich (und andere ) wohl noch nie benutzt oder benötigt ) sollte sich nochmal die Zusätze des SELECT zu Gemüte führen.


4.) Ich wurde von mehreren Personen darauf angesprochen, dass man auch die Systemvarianten berücksichtigen sollte. Dies ist in der Aufgabenstellung nicht direkt enthalten - aber diese Interpretationsmöglichkeit ex. auch. In diesem Fall müsste noch ein

Code: Alles auswählen.

... CLIENT SPECIFIED 
...  WHERE ( MANDT = sy-mandt OR MANDT = '000' ) ...
eingefügt werden.

5.) Es wäre nett, wenn alle die hier etwas gepostet haben ihre Lösung hier hinterhängen oder in den jeweiligen Postings nochmal hinterlegen.

[/code]
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von Gast ( / / 0 / 3 ) »
black_adept hat geschrieben:

Code: Alles auswählen.

...  WHERE ( MANDT = sy-mandt OR MANDT = '000' ) ...
eingefügt werden.
Wenn überhaupt mit WHERE-Klausel, dann so

Code: Alles auswählen.

WHERE MANDT IN (sy-mandt,'000')

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 5 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

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 5 Stunden von edwin 7 / 163
Daten an Tabelle binden
vor 19 Stunden von Bright4.5 3 / 1487

Unbeantwortete Forenbeiträge

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