Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 7 additions & 26 deletions exercises/practice/book-store/.meta/zcl_book_store.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,12 @@ CLASS zcl_book_store IMPLEMENTATION.
book_id TYPE book_id,
quantity TYPE i,
END OF basket_aggr_line.
DATA b TYPE REF TO basket_aggr_line.
DATA basket_aggr TYPE TABLE OF basket_aggr_line
WITH NON-UNIQUE SORTED KEY quantity COMPONENTS quantity.

DATA basket_line TYPE REF TO book_id.

DATA filtered_basket_aggr LIKE basket_aggr.
WITH NON-UNIQUE SORTED KEY quantity COMPONENTS quantity.

TYPES: BEGIN OF discount_grp,
unique_books TYPE i,
discount TYPE total,
discount TYPE total,
END OF discount_grp.
DATA grp TYPE REF TO discount_grp.
DATA discount_grps TYPE TABLE OF discount_grp.
Expand All @@ -60,32 +55,18 @@ CLASS zcl_book_store IMPLEMENTATION.
DO 5 TIMES.

new_total = 0.
basket_aggr = VALUE #( ( book_id = 1 )
( book_id = 2 )
( book_id = 3 )
( book_id = 4 )
( book_id = 5 ) ).

LOOP AT basket REFERENCE INTO basket_line.
basket_aggr[ book_id = basket_line->* ]-quantity += 1.
ENDLOOP.
basket_aggr = VALUE #( FOR i = 1 UNTIL i > 5
( book_id = i
quantity = lines( FILTER #( basket WHERE table_line = i ) ) ) ).

LOOP AT discount_grps REFERENCE INTO grp WHERE unique_books <= max_grp.

DO.
CLEAR filtered_basket_aggr.
LOOP AT basket_aggr REFERENCE INTO b WHERE quantity > 0.
APPEND b->* TO filtered_basket_aggr.
ENDLOOP.
IF lines( filtered_basket_aggr ) < grp->unique_books.
EXIT.
ENDIF.
WHILE lines( FILTER #( basket_aggr USING KEY quantity WHERE quantity > 0 ) ) >= grp->unique_books.
SORT basket_aggr BY quantity DESCENDING.
DO grp->unique_books TIMES.
basket_aggr[ sy-index ]-quantity -= 1.
ENDDO.
new_total += grp->unique_books * 8 * ( 1 - grp->discount ).
ENDDO.
ENDWHILE.
ENDLOOP.

total = nmin( val1 = total val2 = new_total ).
Expand Down