-r
Попробуйте онлайн!
(Особое примечание: это зависит от региональных и культурных настроек. Поскольку TIO работает как for([,$y,$m]=$argv;$d++<date(t,($t=strtotime)($y.-$m));)date(w,$t($s="
$d.$m.$y"))?:$r.=$s.!++$c;echo$c,$r;
, там оно работает корректно как есть. Этот код может потребоваться изменить для разных языков.)
Принимает входные данные как два целых числа DECLARE @m INT = 1,@y INT = 2017
DECLARE @ DATE=DATEADD(ww,-52*(2017-@y),'20170101')
IF DATEPART(d,@)>7
SET @=DATEADD(ww,-1,@)
;WITH c(d)
AS
(SELECT d
FROM (SELECT DATEADD(ww,ROW_NUMBER()OVER(ORDER BY name)-1,@)d
FROM sys.stats) a
WHERE @y = DATEPART(yy,d)
AND @m = DATEPART(m,d)
)
SELECT CAST(COUNT(*) AS CHAR(1))
FROM c
UNION
SELECT CAST(d AS CHAR(10))
FROM c
and DECLARE @ DATE=DATEADD(ww,-52*(2017-@y),'20170101')IF DATEPART(d,@)>7SET @=DATEADD(ww,-1,@);WITH c(d)AS(SELECT d FROM(SELECT DATEADD(ww,ROW_NUMBER()OVER(ORDER BY name)-1,@)d FROM sys.stats)a WHERE @y=DATEPART(yy,d)AND @m=DATEPART(m,d))SELECT CAST(COUNT(*)AS CHAR(1))FROM c UNION SELECT CAST(d AS CHAR(10))FROM c
. Петли из %macro s(y,m);%let c=%eval(%sysfunc(intck(week,%sysfunc(nwkdom(1,1,&m,&y)),%sysfunc(nwkdom(5,1,&m,&y))))+1);%put&c;%do i=1%to&c;%put%sysfunc(nwkdom(&i,1,&m,&y),ddmmyy10.);%end;%mend;
к fmt -1
, получаю новый ./file 2017 9
object for each possible date (via the chmod +x file
командлет). Будет отправлять ошибки в STDERR (по умолчанию игнорируется при выполнении задач по кодированию) для месяцев с продолжительностью менее 31 дня, но это не влияет на выходные данные. Мы берем каждый из них file
objects and use a cal
( a=(`for i in $(cal $2 $1|cut -b1-2);{ echo $i-$2-$1;}`);echo $[${#a[@]}-1];fmt -1 <<<${a[@]:1}
) on them, with the clause of arg y m
signal on syntax
do d=1 to 31
m=right(m,2,0);d=right(d,2,0)
if date(w,y||m||d,s)='Sunday' then queue d'-'m'-'y
end
syntax:n=queued()
say n
do n
pull a
say a
end
. Недвижимость using System;
class P
{
static void Main()
{
Func<int, Func<int, string[]>> f =
y=>m=>
{
var s=new string[6];
int i=1,n=0;
for(DateTime d;i<=DateTime.DaysInMonth(y,m);)
if((int)(d=new DateTime(y,m,i++)).DayOfWeek<1)
s[++n]=d.ToString("dd-MM-yyyy");
s[0]=n+"";
return s;
};
// test cases:
var result = f(2017)(1);
foreach (var x in result)
Console.WriteLine(x);
result = f(2018)(2);
foreach (var x in result)
Console.WriteLine(x);
result = f(2016)(11);
foreach (var x in result)
Console.WriteLine(x);
}
}
is a number from y=>m=>{var s=new string[6];int i=1,n=0;for(DateTime d;i<=DateTime.DaysInMonth(y,m);)if((int)(d=new DateTime(y,m,i++)).DayOfWeek<1)s[++n]=d.ToString("dd-MM-yyyy");s[0]=n+"";return s;};
to DateObject
, with d=DateObject;{Length[x=DayRange[d@{#,#2,1},d@{#,#2+1,0},Sunday]],x}&
удобно соответствует A B C D
1 [year] [month] =DATE(A1,B1,1) =COUNTIF(D2:D7,">0")
2 =C1+7-WEEKDAY(C1,2)
3 =D2+7
4 =D3+7
5 =D4+7
6 =IF(MONTH(D5+7)=MONTH(C1),D5+7,"")
, so the D2:D6
это правда, что экономит пару байт по сравнению с проверкой равенства, например D2:D6
.
Воскресенья затем собираются в скобки и сохраняются в D1
. We then take the A2
это, и это помещено в конвейер. Далее мы проходим цикл A1
and use the require'date'
d=Date.parse gets.split*?-+'-1'
s=(d...d>>1).select &:sunday?
puts s.size,s.map{|d|d.strftime'%d-%m-%Y'}
оператор ormat для создания правильного выходного формата. Обратите внимание, что это не выводит ведущие нули для дней или месяцев. Эти строки дат также остаются в конвейере, и неявный 8B % Push [1 0 0 0] (8 in binary)
h % Implicit input. Concatenate. Gives something like [2017 1 1 0 0 0],
% corresponding to the first day of input year and month
tYO % Duplicate. Convert to serial date number
w % Swap
47B~ % Push [0 1 0 0 0 0] (47 in binary, then negated)
+ % Add. Gives something like [2017 2 1 0 0 0]: first day of next month
YO % Convert to serial number
q % Subtract 1. This corresponds to last day of input month
&: % Binary range. Gives an array with 28, 29, 30 or 31 days
t8XO % Duplicate. Convert each number to three letters telling day of the week
!s % Transpose, Sum of each column
310= % True for values that equal 310, which is the sum of 'Sun' in ASCII
) % Apply as a logical index
tnw % Duplicate, number of elements, swap. This is the first part of output
24XO % Convert to date format 'dd/mm/yyyy'. Gives 2D char array. Implicit display
at program completion prints them with newline separators.
NB: если бы формат вывода был более гибким, мы могли бы просто оставить 29/01/2017
on the pipeline and not need to loop through it. That will stringify the [2017 1]
объекты в формате длинной даты, включая информацию о времени, но сводят нас к 69 байт, который (на данный момент) может превзойти только Mathematica и MATL.