x86-16 machine code, IBM PC DOS, 54 48 49 bytes
Binary:
00000000: b106 be25 01ad cd29 84e4 740e b020 cd29 ...%...)..t.. .)
00000010: d2ec 7302 b02d cd29 ebeb b00d cd29 b00a ..s..-.).....)..
00000020: cd29 e2de c34c 1541 0350 1641 0c43 194b .)...L.A.P.A.C.K
00000030: 00 .
Build and test using xxd -r
on your favorite DOS VM.
Listing:
B1 06 MOV CL, 6 ; loop 6 rows
ROWLOOP:
BE 0121 MOV SI, OFFSET LS ; letter string into SI
COLLOOP:
AD LODSW ; letter into AL, dash pattern into AH
CD 29 INT 29H ; write to screen
84 E4 TEST AH, AH ; is AH = 0?
74 0E JZ END_NL ; if so break loop, write NL
B0 20 MOV AL, ' ' ; space char into AL
CD 29 INT 29H ; write to screen
D2 EC SHR AH, CL ; shift dash bit into CF
73 02 JNC NO_DASH ; is a dash?
B0 2D MOV AL, '-' ; dash char in AL
NO_DASH:
CD 29 INT 29H ; write to screen
EB EB JMP COLLOOP ; loop until end of string
END_NL:
B0 0D MOV AL, 0DH ; CR char
CD 29 INT 29H ; write to screen
B0 0A MOV AL, 0AH ; LF char
CD 29 INT 29H ; write to screen
E2 DE LOOP ROWLOOP ; loop until end of rows
C3 RET ; return to DOS
LS DB 'L',15H,'A',3H,'P',16H,'A',0CH,'C',19H,'K',0
How?
The "letter string" data contains two bytes for each letter - the high byte is the letter and the low byte is a bitmap describing if that letter should be followed by a dash for each row. The rows are indexed 6 to 1 starting from the top, where the bit in the corresponding order represents whether or not there's a dash.
Examples:
Row 5, Col 0: Data 'L'
, 0x15
(010101)
The fifth bit is a 1
indicating that for the fifth row after the L
there is a dash after.
Row 2, Col 3: Data 'A'
, 0xC
(001100)
The second bit is a 0
indicating that for the fifth row after the A
there is not a dash after.
Or looking at it a different way, the odd bytes [ 0x15, 0x3, 0x16, 0xC, 0x19, 0x0 ]
form the bitmap of the dashes (only rotated and flipped):
0x15 010101
0x3 000011
0x16 010110
0xC 001100
0x19 011001
0x0 000000
Runtime:
A standalone IBM PC DOS COM executable. Output to console.
(i,j)
entry is negated is as(i|j)/6^i*j%2
: TIO \$\endgroup\$