Hướng dẫn how do i get the last friday of the month in python? - làm thế nào để tôi có được ngày thứ sáu cuối cùng của tháng trong python?
Show
Thứ Sáu tuần trước mỗi tháng bạn được khuyến khích giải quyết nhiệm vụ này theo mô tả nhiệm vụ, sử dụng bất kỳ ngôn ngữ nào bạn có thể biết. Viết một chương trình hoặc một kịch bản trả về ngày thứ Sáu cuối cùng của mỗi tháng của một năm nhất định. Năm có thể được đưa ra thông qua bất kỳ phương thức đầu vào đơn giản nào trong ngôn ngữ của bạn (dòng lệnh, std in, v.v.).
Hội đồng 360 [Chỉnh sửa][edit]Chương trình sử dụng một macro hỗ trợ (XPRNT) để giữ mã càng ngắn càng tốt. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-30 Action![edit][edit];https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN Ảnh chụp màn hình từ máy tính Atari 8 bit Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-31 Ada[edit][edit]Sử dụng gnat. Áp dụng cho bất kỳ ngày nào trong tuần, xem [[1]]. with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month; >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-28 Algol 68 [Chỉnh sửa][edit]Về cơ bản giống như giải pháp nhiệm vụ "Tìm Chủ nhật cuối cùng của mỗi tháng". BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-31 Algol W [Chỉnh sửa][edit]Về cơ bản giống như giải pháp nhiệm vụ "Tìm Chủ nhật cuối cùng của mỗi tháng", sử dụng các thủ tục Day_of_week và Isleapyear từ các nhiệm vụ năm tháng và năm tháng (bao gồm ở đây để thuận tiện). begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI0 AppleScript[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI1 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI2 Một giải pháp đơn giản hơn: Hằng số trong tuần của Applescript có thể được ép buộc vào văn bản tiếng Anh hoặc cho các số nguyên 1 (cho Chủ nhật) đến 7 (Thứ Bảy). * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI3 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI4 Trên đây tất nhiên là mã hóa cứng cho thứ Sáu. Nó có thể được thực hiện linh hoạt hơn bằng cách sử dụng hằng số trong tuần của AppleScript làm tham số: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI5 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI6 Arturo[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI7 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI8 AutoHotkey[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI9 cho năm 2012 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI8 AutoIt[edit][edit]2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-301 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-302 -Bugfix (thảo luận) 13:27, ngày 15 tháng 11 năm 2013 (UTC) AWK[edit][edit]2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-303 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Befunge[edit][edit]Bản dịch của: C: C Thuật toán đã được đơn giản hóa một chút để tránh điều chỉnh ngày bổ sung bên trong vòng lặp và năm được lấy từ STDIN thay vì thông qua dòng lệnh. 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-305 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-306 C[edit][edit]Không làm việc với lịch Julian (sau đó một lần nữa, có lẽ bạn không cần phải lên kế hoạch cho những ngày cuối tuần của mình cho thời trung cổ). 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-307 C#[edit][edit]2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-308 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-309 C++[edit][edit]được gọi với 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3008 ;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN0 ;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN1 Clojure[edit][edit];https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN2 ;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN3 COBOL[edit][edit];https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN4 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-30 CoffeeScript[edit][edit];https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN6 ;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN7 Lisp thông thường [Chỉnh sửa][edit]Xử lý đối số dòng lệnh là mã cụ thể của Clisp. ;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN8 Mẫu chạy cho năm 2015: ;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods BYTE FUNC DayOfWeek(INT y BYTE m,d) ;1<=m<=12, y>1752 BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4] BYTE res IF m<3 THEN y==-1 FI res=(y+y/4-y/100+y/400+t(m-1)+d) MOD 7 RETURN (res) BYTE FUNC IsLeapYear(INT y) IF y MOD 100=0 THEN IF y MOD 400=0 THEN RETURN (1) ELSE RETURN (0) FI FI IF y MOD 4=0 THEN RETURN (1) FI RETURN (0) INT FUNC GetMaxDay(INT y BYTE m) BYTE ARRAY MaxDay=[31 28 31 30 31 30 31 31 30 31 30 31] IF m=2 AND IsLeapYear(y)=1 THEN RETURN (29) FI RETURN (MaxDay(m-1)) PROC PrintB2(BYTE x) IF x<10 THEN Put('0) FI PrintB(x) RETURN PROC Main() INT MinYear=[1753],MaxYear=[9999],y BYTE m,d,last,maxD DO PrintF("Input year in range %I...%I: ",MinYear,MaxYear) y=InputI() UNTIL y>=MinYear AND y<=MaxYear OD FOR m=1 TO 12 DO last=0 maxD=GetMaxDay(y,m) FOR d=1 TO maxD DO IF DayOfWeek(y,m,d)=5 THEN last=d FI OD PrintI(y) Put('-) PrintB2(m) Put('-) PrintB2(last) PutE() OD RETURN9 D[edit][edit]Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-310 Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-311 Delphi[edit][edit]Sử dụng thư viện Delphi tiêu chuẩn. Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-312 Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-313 Elixir[edit][edit]Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-314 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Elm[edit][edit]Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-316 Liên kết đến bản demo trực tiếp: http://dc25.github.io/lastfridayofmonthelm/ Mẫu chạy cho năm 2003; đã sao chép và dán từ trang web: Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-317 Emacs Lisp [Chỉnh sửa][edit]Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-318 Input year in range 1753...9999: 2021 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-319 Erlang[edit][edit]with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;0 with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;1 Factor[edit][edit]Hoạt động với: Yếu tố phiên bản 0.98: Factor version 0.98 Từ 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3009 trong từ vựng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3010 thực hiện hầu hết các công việc. Chương trình này mong đợi năm như một đối số dòng lệnh. with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;2 with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;3 Fortran[edit][edit]Thuật toán: Tính ngày trong tuần cho ngày cuối cùng của tháng, sau đó trừ đi vừa đủ để đến vào thứ Sáu trước đó. Làm điều này cho mỗi tháng. Để đơn giản hóa các tính toán hơn nữa, chúng ta chỉ cần tính toán ngày trong tuần của ngày 1 tháng 1 (những người khác được tìm thấy bằng cách thêm độ dài tháng). Vì ngày trong tuần chỉ cần được biết đến modulo 7, chúng tôi hoàn toàn không tính toán modulo ngoại trừ một lần khi trừ đi. with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;4 FreeBASIC[edit][edit]with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;5 with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;6 Frink[edit][edit]with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;7 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Fōrmulæ [chỉnh sửa][edit]Các chương trình Fōrmulæ không phải là văn bản, trực quan hóa/phiên bản các chương trình được thực hiện hiển thị/thao tác các cấu trúc nhưng không phải văn bản. Hơn nữa, có thể có nhiều biểu diễn trực quan của cùng một chương trình. Mặc dù có thể có biểu diễn văn bản. XML, JSON, chúng được dành cho mục đích lưu trữ và chuyển nhiều hơn trực quan hóa và phiên bản. Các chương trình trong Fōrmulæ được tạo/chỉnh sửa trực tuyến trong trang web của mình, tuy nhiên chúng chạy trên các máy chủ thực thi. Theo mặc định, các máy chủ từ xa được sử dụng, nhưng chúng bị giới hạn trong bộ nhớ và sức mạnh xử lý, vì chúng được dự định để trình diễn và sử dụng thông thường. Một máy chủ cục bộ có thể được tải xuống và cài đặt, nó không có giới hạn (nó chạy trong máy tính của riêng bạn). Do đó, các chương trình ví dụ có thể được hiển thị đầy đủ và chỉnh sửa, nhưng một số trong số chúng sẽ không chạy nếu chúng yêu cầu tài nguyên tính toán/bộ nhớ vừa hoặc nặng và không có máy chủ cục bộ nào được sử dụng. Trong trang này, bạn có thể thấy (các) chương trình liên quan đến nhiệm vụ này và kết quả của chúng.this page you can see the program(s) related to this task and their results. Gambas[edit][edit]with Ada.Text_IO, GNAT.Calendar.Time_IO, Ada.Command_Line, Ada.Calendar.Formatting, Ada.Calendar.Arithmetic; procedure Last_Weekday_In_Month is procedure Put_Line(T: Ada.Calendar.Time) is use GNAT.Calendar.Time_IO; begin Ada.Text_IO.Put_Line(Image(Date => T, Picture => ISO_Date)); end Put_Line; use Ada.Calendar, Ada.Calendar.Arithmetic; subtype Day_Name is Formatting.Day_Name; use type Formatting.Day_Name; T, Selected : Time; Weekday: Day_Name := Day_Name'Value(Ada.Command_Line.Argument (1)); Year : Year_Number := Integer'Value (Ada.Command_Line.Argument (2)); begin for Month in 1 .. 12 loop T := Time_Of (Year => Year, Month => Month, Day => 01); while Ada.Calendar.Month(T) = Month loop if Formatting.Day_Of_Week (T) = Weekday then Selected := T; end if; T := T + Day_Count(1); end loop; Put_Line(Selected); end loop; end Last_Weekday_In_Month;9 Đầu ra: >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-280 Go[edit][edit]>./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-281 >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-282 Groovy[edit][edit]Giải pháp: Tương tự như Find Chủ nhật tuần trước của mỗi tháng Bài kiểm tra: >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-283 Thực thi (Cygwin trên Windows 7): >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-284 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI8 Haskell[edit][edit]>./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-286 >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-287 Biểu tượng và Unicon [Chỉnh sửa][edit]Điều này sẽ viết vào thứ Sáu cuối cùng cho mỗi năm được đưa ra như một cuộc tranh luận. Không có kiểm tra lỗi trong năm. >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-288 printf.icn cung cấp định dạng datetime.icn cung cấp julian và isleapyear >./last_weekday_in_month friday 2012 2012-01-27 2012-02-24 2012-03-30 2012-04-27 2012-05-25 2012-06-29 2012-07-27 2012-08-31 2012-09-28 2012-10-26 2012-11-30 2012-12-289 J[edit][edit]BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END0 Nói cách khác, bắt đầu từ ngày 1 tháng 1 của năm nhất định và được tính trong 366 ngày, giữ thứ Sáu. Sau đó chọn ngày cuối cùng còn lại trong mỗi tháng được đại diện (sẽ là thứ Sáu vì chúng tôi chỉ giữ vào thứ Sáu). Sau đó chọn 12 đầu tiên (vì vào một năm không cao, kết thúc vào thứ năm, chúng tôi sẽ có thêm một ngày thứ Sáu). Ví dụ sử dụng: BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END1 Java[edit][edit]Hoạt động với: Java phiên bản 1.5+: Java version 1.5+ BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END2 (cho 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3011) BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END3 JavaScript[edit][edit]ES5[edit][edit]Iteration[edit][edit]BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END4 BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END5 Thành phần chức năng [Chỉnh sửa][edit]BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END6 BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END7 ES6[edit][edit]BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END8 BEGIN # find the last Friday in each month of a year # # returns true if year is a leap year, false otherwise # # assumes year is in the Gregorian Calendar # PROC is leap year = ( INT year )BOOL: year MOD 400 = 0 OR ( year MOD 4 = 0 AND year MOD 100 /= 0 ); # returns the day of the week of the specified date (d/m/y) # # Sunday = 1 # PROC day of week = ( INT d, m, y )INT: BEGIN INT mm := m; INT yy := y; IF mm <= 2 THEN mm := mm + 12; yy := yy - 1 FI; INT j = yy OVER 100; INT k = yy MOD 100; (d + ( ( mm + 1 ) * 26 ) OVER 10 + k + k OVER 4 + j OVER 4 + 5 * j ) MOD 7 END # day of week # ; # returns an array of the last Friday of each month in year # PROC last fridays = ( INT year )[]INT: BEGIN [ 1 : 12 ]INT last days := ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); IF is leap year( year ) THEN last days[ 2 ] := 29 FI; # for each month, determine the day number of the # # last Friday # [ 1 : 12 ]INT last; FOR m pos TO 12 DO INT dow := day of week( last days[ m pos ], m pos, year ); # dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat # # change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat # dow := ( dow + 1 ) MOD 7; # offset the last day to the last Friday # last[ m pos ] := last days[ m pos ] - dow OD; last END # last fridays # ; # test the last fridays procedure # INT year = 2021; []INT last = last fridays( year ); FOR m pos TO 12 DO print( ( whole( year, 0 ) , IF m pos < 10 THEN "-0" ELSE "-1" FI , whole( m pos MOD 10, 0 ) , "-" , whole( last[ m pos ], 0 ) , newline ) ) OD END9 jq[edit][edit]Hoạt động với: JQ phiên bản 1.4: jq version 1.4 Nền tảng 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-310 FindLastFridays 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-311 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-312 Julia[edit][edit]2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-313 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-314 K[edit][edit]2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-315 Đầu ra của phiên được đưa ra dưới đây: 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-316 Kotlin[edit][edit]2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-317 2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-318 Lasso[edit][edit]2021-01-29 2021-02-26 2021-03-26 2021-04-30 2021-05-28 2021-06-25 2021-07-30 2021-08-27 2021-09-24 2021-10-29 2021-11-26 2021-12-319 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI8 LiveCode[edit][edit]begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.1 Thí dụ Đầu ra begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.2 Logo[edit][edit]begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.3 begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.4 Lua[edit][edit]begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.5 Phiên dòng lệnh: begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.6 Maple[edit][edit]begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.7 begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.8 Ngôn ngữ Mathicala/Wolfram [Chỉnh sửa][edit]begin % find the last Friday in each month of a year % % returns true if year is a leap year, false otherwise % % assumes year is in the Gregorian Calendar % logical procedure isLeapYear ( integer value year ) ; year rem 400 = 0 or ( year rem 4 = 0 and year rem 100 not = 0 ); % returns the day of the week of the specified date (d/m/y) % % Sunday = 1, Friday = 6, Saturday = 0 % integer procedure Day_of_week ( integer value d, m, y ); begin integer j, k, mm, yy; mm := m; yy := y; if mm <= 2 then begin mm := mm + 12; yy := yy - 1; end if_m_le_2; j := yy div 100; k := yy rem 100; (d + ( ( mm + 1 ) * 26 ) div 10 + k + k div 4 + j div 4 + 5 * j ) rem 7 end Day_of_week; % sets the elements of last to the day of the last Friday % % of each month in year % procedure lastFridays ( integer value year ; integer array last ( * ) ) ; begin integer array lastDays ( 1 :: 12 ); integer m; % set ld to the day number od the last day of each % % month in year % m := 1; for ld := 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 do begin lastDays( m ) := ld; m := m + 1 end for_ld ; if isLeapYear( year ) then lastDays( 2 ) := 29; % for each month, determine the day number of the % % last Friday % for mPos := 1 until 12 do begin integer dow; dow := Day_of_week( lastDays( mPos ), mPos, year ); % dow = 1 Sun, 2 Mon, ... , 6 Fri, 0 Sat % % change to 2 Sun, 3 Mon, ... , 0 Fri, 1 Sat % dow := ( dow + 1 ) rem 7; % offset the last day to the last Friday % last( mPos ) := lastDays( mPos ) - dow end for_mPos end lastFridays ; begin % test the lastFridays procedure % integer array last ( 1 :: 12 ); integer year; year := 2020; lastFridays( year, last ); i_w := 1; s_w := 0; % output formatting % for mPos := 1 until 12 do write( year, if mPos < 10 then "-0" else "-1", mPos rem 10, "-", last( mPos ) ) end end.9 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI00 MATLAB / OCTAVE [Chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI01 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI02 Maxima[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI03 Nanoquery[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI04 NetRexx[edit][edit]Bản dịch của: Java: Java Bản dịch của: C: C Thực hiện các thuật toán từ cả hai triển khai Java và C. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI05 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI06 Nim[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI07 Sử dụng mẫu: ./lastfriday 2012 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI8 OCaml[edit][edit]Sử dụng mô -đun Unix từ thư viện OCAML tiêu chuẩn: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI09 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI10 Với một thư viện chuyên dụng [chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI11 Chạy tập lệnh này bằng lệnh: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI12 Oforth[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI13 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI14 PARI/GP[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI15 Đầu ra: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI16 Pascal[edit][edit]Sử dụng thư viện DateUtils của Pascal miễn phí sẽ đơn giản hóa đáng kể việc mã hóa (xem ví dụ Delphi) nhưng đối với việc triển khai Pascal cũ, các thói quen cần thiết là trách nhiệm của lập trình viên. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI17 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI18 Perl[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI19 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Phix[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI21 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 PHP[edit][edit]PHP thường được sử dụng cho các ứng dụng web, vì vậy tôi không triển khai thành phần dòng lệnh của tác vụ này. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI23 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Picat[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI25 Chạy chương trình [Chỉnh sửa][edit]Có một số cách để chạy chương trình này; Hãy gọi nó là "last_friday_of_each_month.pi": Từ vỏ của Picat [chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI26 Từ dòng lệnh, năm dưới dạng tham số [Chỉnh sửa][edit]Thông qua 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3012. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI27 Từ dòng lệnh, như một mục tiêu [chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI28 Chạy mục tiêu mặc định (GO/0)) [Chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI29 PicoLisp[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI30 Bài kiểm tra: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI31 Pike[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI32 PL/I[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI33 Lệnh: Thứ Sáu /2008 Sản xuất: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI34 cho năm 2013 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI35 PowerShell[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI36 Output: 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Phiên bản thay thế [Chỉnh sửa][edit]Kịch bản này tìm thấy phần đầu tiên và/hoặc cuối cùng hoặc tất cả các ngày của bất kỳ ngày nào trong tuần; chấp nhận các giá trị 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3013 và 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3014 cho các tham số tháng và năm; Đầu ra 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3014 Đối tượng theo mặc định nhưng có tùy chọn để xuất các chuỗi thời gian ở các định dạng khác nhau. Kịch bản này cũng cho phép đầu vào đường ống chủ yếu dựa trên tham số tháng. Kịch bản này có một cú pháp phức tạp như bất kỳ màn hình nào của PowerShell vì nó cố gắng làm mọi thứ. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI38 Mặc định là trả về các đối tượng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3014: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI39 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI40 Trả về các đối tượng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3014 làm chuỗi (sử dụng định dạng chuỗi mặc định): * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI41 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI42 Trả về các đối tượng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3014 dưới dạng chuỗi (chỉ định định dạng chuỗi): * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI43 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 PureBasic[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI45 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI46 Python[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI47 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI48 Giải pháp khác * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI49 Sử dụng giảm * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI50 Sử dụng itertools * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI51 Quackery[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI52 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI8 R[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI54 Racket[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI55 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI56 Raku[edit][edit](trước đây là Perl 6) * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI57 Thí dụ: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI58 Một giải pháp không có mảng kết quả để lưu trữ mọi thứ trong: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI59 Ở đây, 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3019 sắp xếp ngày thành một thùng mỗi tháng (nhưng bảo tồn thứ tự trong mỗi thùng). Sau đó, chúng tôi lấy danh sách bên trong mỗi thùng ( 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3020) và tìm ngày cuối cùng ( 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3021) là thứ Sáu. Một biến thể khác trong đó luồng dữ liệu có thể được đọc từ trái sang phải bằng các toán tử nguồn cấp dữ liệu: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI60 REBOL[edit][edit]Phiên bản dài hơn: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI61 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI62 Phiên bản ngắn hơn: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI63 NB. Xem giải pháp "Tìm Chủ nhật cuối cùng của mỗi tháng" Rosetta để biết giải pháp thay thế (thậm chí ngắn gọn hơn) REXX[edit][edit]Chương trình REXX này sẽ tìm thấy ngày cuối cùng (cho bất kỳ ngày nào) của tất cả các tháng cho bất kỳ năm nào. Nó không được tối ưu hóa chỉ để tìm một ngày cụ thể trong tuần. Tài liệu cho & nbsp; LastDow & nbsp; chức năng & nbsp; (Được sử dụng trong chương trình REXX bên dưới):lastDOW function (used in the REXX program below): * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI64 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI65 đầu ra & nbsp; Khi sử dụng đầu vào sau của: & nbsp; & nbsp; 2012 & NBSP; & nbsp; hoặc & nbsp; & nbsp; 12 when using the following input of: 2012 or 12 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI66 Ring[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI67 Đầu ra: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI68 Ruby[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI69 Thứ sáu là 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3022; Biểu thức 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3023 đếm ngày sau thứ Sáu. 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Hoặc nhận ngày cuối cùng của tháng và đi đến ngày hôm trước cho đến khi là thứ Sáu. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI71 Chạy cơ bản [Chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI72 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI73 Rust[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI74 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Scala[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI76 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI77 Seed7[edit][edit]Sử dụng các thư viện thời gian.s7i và thời lượng.s7i. Áp dụng cho bất kỳ ngày nào trong tuần, xem [[2]]. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI78 Khi được gọi với S7 Rosetta/Lastweekdayinmonth 5 2013* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI79 SenseTalk[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI80 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI81 Sidef[edit][edit]Bản dịch của: Perl: Perl * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI82 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI83 Smalltalk[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI84 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI85 SQL[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI86 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI87 Stata[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI88 Swift[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI89 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI90 Tcl[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI91 Thực thi mẫu: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI92 TUSCRIPT[edit][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI93 * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI94 Unix Shell [Chỉnh sửa][edit]Sử dụng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3024. Sẽ chuyển sang lịch Julian khi NCAL thấy phù hợp, và sẽ không tính toán năm 9999 (rất có thể bạn sẽ quá chết sau đó để lo lắng về những ngày cuối tuần). * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI95
* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI96
2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3025 từ ngày GNU ??? Mã này không phải là di động. * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI97 Thực thi mẫu: * Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI98 Unix Shell [Chỉnh sửa][edit]* Last Friday of each month 17/07/2016 LASTFRI CSECT USING LASTFRI,R13 base register B 72(R15) skip savearea DC 17F'0' savearea STM R14,R12,12(R13) prolog ST R13,4(R15) " <- ST R15,8(R13) " -> LR R13,R15 " addressability L R4,YEAR year SRDA R4,32 . D R4,=F'400' year/400 LTR R4,R4 if year//400=0 BZ LEAP L R4,YEAR year SRDA R4,32 . D R4,=F'4' year/4 LTR R4,R4 if year//4=0 BNZ NOTLEAP L R4,YEAR year SRDA R4,32 . D R4,=F'100' year/400 LTR R4,R4 if year//100=0 BZ NOTLEAP LEAP MVC DAYS+4(4),=F'29' days(2)=29 NOTLEAP L R8,YEAR year BCTR R8,0 y=year-1 LA R7,44 44 AR R7,R8 +y LR R3,R8 y SRA R3,2 y/4 AR R7,R3 +y/4 LR R4,R8 y SRDA R4,32 . D R4,=F'100' y/100 LA R4,0 . M R4,=F'6' *6 AR R7,R5 +6*(y/100) LR R4,R8 y SRDA R4,32 . D R4,=F'400' y/100 AR R7,R5 k=44+y+y/4+6*(y/100)+y/400 LA R6,1 m=1 LOOPM C R6,=F'12' do m=1 to 12 BH ELOOPM LR R1,R6 m SLA R1,2 . L R2,DAYS-4(R1) days(m) AR R7,R2 k=k+days(m) LR R4,R7 k SRDA R4,32 . D R4,=F'7' k/7 SR R2,R4 days(m)-k//7 LR R9,R2 d=days(m)-k//7 L R1,YEAR year CVD R1,DW year: binary to packed OI DW+7,X'0F' zap sign UNPK PG(4),DW unpack (ZL4) CVD R6,DW m : binary to packed OI DW+7,X'0F' zap sign UNPK PG+5(2),DW unpack (ZL2) CVD R9,DW d: binary to packed OI DW+7,X'0F' zap sign UNPK PG+8(2),DW unpack (ZL2) XPRNT PG,L'PG print buffer LA R6,1(R6) m=m+1 B LOOPM ELOOPM L R13,4(0,R13) epilog LM R14,R12,12(R13) " restore XR R15,R15 " rc=0 BR R14 exit YEAR DC F'2016' <== input year DAYS DC F'31',F'28',F'31',F'30',F'31',F'30' DC F'31',F'31',F'30',F'31',F'30',F'31' PG DC CL80'YYYY-MM-DD' buffer XDEC DS CL12 temp DW DS D packed (PL8) 15num YREGS END LASTFRI99 Sử dụng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-30 24. Sẽ chuyển sang lịch Julian khi NCAL thấy phù hợp, và sẽ không tính toán năm 9999 (rất có thể bạn sẽ quá chết sau đó để lo lắng về những ngày cuối tuần).[edit]2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3000 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3001 Wren[edit][edit]2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3002 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3003 XPL0[edit][edit]2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3004 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 zkl[edit][edit]Đối với các hệ thống không có NCAL: 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3006 Sử dụng 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-3025 từ ngày GNU ??? Mã này không phải là di động. 2016-01-29 2016-02-26 2016-03-25 2016-04-29 2016-05-27 2016-06-24 2016-07-29 2016-08-26 2016-09-30 2016-10-28 2016-11-25 2016-12-304 Làm thế nào để tôi có được ngày thứ sáu trước đó ở Python?Nhận ngày hệ thống trước, hiện tại và ngày tiếp theo trong Python.. Ngày hiện tại: Nhập DateTime current_date = datetime.dateTime.today () in (current_date). Ngày trước: Nhập DateTime trước_date = datetime.dateTime.Today () - datetime.timedelta (ngày = 1) in (trước_date). Làm thế nào để tôi có được thứ Năm cuối cùng của tháng ở Python?Danh sách hàng tuần_thursday sẽ có tất cả các ngày thứ Năm từ tháng.Weekly_thursday [-1] sẽ cung cấp cho bạn thứ Năm cuối cùng của tháng.weekly_thursday[-1] will give you the last Thursday of the month.
Làm thế nào để tôi có được thứ Hai tuần trước ở Python?Sử dụng hàm TODAY () (nhận ngày cục bộ hiện tại), để có được ngày địa phương hiện tại của ngày hôm nay và tạo một biến để lưu trữ nó. Thông qua ngày trong tuần như một đối số cho hàm tương đối ().Ở đây Mo (-1) cho biết nhận được vào tuần trước thứ Hai, MO có nghĩa là Thứ Hai.In ngày thứ hai cuối cùng. Pass the weekday as an argument to the relativedelta() function. Here MO(-1) says getting last week Monday, MO means Monday. Print the last Monday date.
Làm thế nào để tôi có được ngày cuối tuần ở Python?Trong mô -đun DateTime, bạn có thể làm một cái gì đó như thế này: a = date.today () - TimEdelTa (ngày = 1) và sau đó là A.WeekDay ().a = date. today() - timedelta(days=1) and then a. weekday() . |