Коли останній раз дата не ділилася на n?


24

Дата може бути представлена ​​цілим числом без підпису: YYYYMMDD. Що вам потрібно зробити, це написати найкоротшу програму або функцію, яка визначає останню дату, число якої було поділено на задане число n(включаючи сьогоднішню дату), а потім повертає цю дату у форматі, показаному вище. Якщо ніколи не було дати (між 00000101 і сьогодні включно), розділеної заданим цілим числом, слід повернути -1.

Приклади

Current Date     Input     Output

30 July, 2014      4       20140728
30 July, 2014      7       20140729
28 July, 2014      4       20140728
28 July, 2014      7       20140722
28 July,    5    90000     -1

Вхідні дані

Ви можете читати з STDIN або приймати аргумент функції або навіть очікувати, що вхід буде збережений у змінній. Вхід буде цілим числом без підпису.

Вихідні дані

Запишіть у STDOUT або поверніть (або збережіть у змінній) ціле число, що представляє дату у форматі YYYYMMDD.

Обмеження

Ви можете використовувати будь-яку стандартну бібліотеку, яку пропонує ваша мова. Застосовуються стандартні лазівки .

Умови виграшу

Це , тому найменша програма (у байтах) виграє. У випадку зрівноваженості виграє відповідь з найбільшою кількістю голосів.


4
Дата 00000101 не існує. Кількість років починається з 1. en.wikipedia.org/wiki/0_%28year%29
edc65

1
@ edc65 чи можемо ми зробити вигляд, що він існує?
спецодяг

3
А як щодо 29 лютого? Чи потрібно застосовувати правила повного високосного року, щоб перевірити чинність дат? en.wikipedia.org/wiki/Leap_year
Digital Trauma

6
А як щодо днів, втрачених через перемикання Юліан-Григоріанського календаря? Або ми йдемо по Григоріану всю дорогу? en.wikipedia.org/wiki/Gregorian_calendar
Digital Trauma

1
Ваші характеристики введення / виведення досить вільні. Наприклад, чи слід «очікувати, що вхід буде збережений у змінній», вважати декларацію змінної такою мовою, як C? Ви кажете "написати програму", але ви скажете "прийняти аргумент функції" - це означає, що ми можемо написати лише функцію, а не повну програму?
Боб

Відповіді:


16

Математика, 93 60 байт

For[i=0,(r=DatePlus@i--~FromDigits~100)>0&&!n∣r,];r~Max~-1

Очікує, що вхід буде збережено n.

Зауважте, що вертикальна лінія є символом унікоду для "ділиться", який я порахував як 3 байти (UTF-8).

Редагувати: Знайдено акуратний трюк, щоб уникнути роздуття DateStringта специфікації формату :).

Редагувати: Повністю забув про -1вимогу. Виправлено зараз.

Ось пояснення

For[i=0,            i--                        ,];         (* i is the number of days AFTER
                                                              today. Hence, we decrement 
                                                              it. *)
For[i=0,   DatePlus@i--                        ,];         (* If no reference date is
                                                              provided, DatePlus will add
                                                              the given number of days to
                                                              today's date. The result is a 
                                                              list of 3 integers, luckily 
                                                              in order {year,month,day} *)
For[i=0,   DatePlus@i--~FromDigits~100         ,];         (* Interpret these as the digits
                                                              of a base 100 number. The 
                                                              beauty is that FromDigits
                                                              doesn't care about digits 
                                                              greater than the base and 
                                                              just carries them over. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)        ,];         (* Store the number in r. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)>0      ,];         (* Make sure it's positive. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)>0&&!n|r,];         (* And keep going while n does 
                                                              not divide r. *)
For[i=0,(r=DatePlus@i--~FromDigits~100)>0&&!n|r,];r~Max~-1 (* Clamp result to -1. *)

Зауважте, що я використовував |замість цього пояснення, тому що Unicode один змішується з односкладним.


+ 1. Чи є у вас посилання, що вказує на те, що ви повинні рахувати символи unicode як 3 байти?
Доктор Белісарій

2
@belisarius ОП заявило, що цей код гольфу рахується байтами, а не символами (це також за замовчуванням, як зазначено у wiki тегів).
Мартін Ендер

Мені ніколи не доводилося читати через кінець вікі :) Дякую!
Доктор Белісарій

6

Пітон 2 - 150

import datetime as d,re
def f(n):
 t=d.date.today()
 while t:
    c=int(re.sub("-","",str(t)))
    if c%n<1:return c
    try:t-=d.timedelta(1)
    except:return-1

Дякуємо @ chill0r за пропозицію видалити дні =, а Джейсон S за пораду, що блок спробу можна зменшити до одного рядка.


Так. Це стандартна операційна процедура;). Після вставки вкладки перетворюються на пробіли.
Векторизований

Ви можете видалити days=ін t-=d.timedelta(days=1). Це теж добре працює (принаймні, у python3)
chill0r

@bitpwner ах, я бачу, майте на увазі тоді.
Мартін Ендер

1
Ви можете заощадити більше: (1) використання int(t.strftime("%Y%m%d"))та скидання re, (2) використання однорядного, tryоскільки t-=d.timedelta(1)в ньому потрібно бути тільки.
Jason S

1
@bitpwner strftimeна старих датах працює в python3, перевірив, і я отримую помилку в python2
Jason S

5

C # 136

З переглянутими специфікаціями функція, яка приймає непідписаний int і повертає int.

int F(uint n){var d=System.DateTime.Now;int i;try{while((i=int.Parse(d.ToString("yyyMMdd")))%n>0)d=d.AddDays(-1);}catch{i=-1;}return i;}

152 символи зі змінним входом / виходом

Скориставшись невимушеними вимогами до вводу / виводу, вхід повинен зберігатися у змінній n(наразі рахується всі символи, крім цілого літералу), а висновок забезпечується змінною s.

class P{static void Main(){var n=4;var d=System.DateTime.Now;string s;try{while(int.Parse(s=d.ToString("yyyMMdd"))%n>0)d=d.AddDays(-1);}catch{s="-1";}}}

204 символи з STDIN / STDOUT:

using System;class P{static void Main(){int n=int.Parse(Console.ReadLine());var d=DateTime.Now;string s;try{while(int.Parse(s=d.ToString("yyyMMdd"))%n>0)d=d.AddDays(-1);}catch{s="-1";}Console.Write(s);}}

1
Дійсно, голос? Це правильно не вирішує проблему? Будь ласка, поясніть. Якщо хтось думає, що я скопіював іншу відповідь на C #, я фактично написав це приблизно за годину до іншого, і навіть розглядав використання C # 6.0 для виразів декларації. Отримав трохи відсторонене, що призвело до публікації відповіді пізно. Вже тоді це досить неяскрава причина для попутного руху.
Боб

4

T-SQL (2012) - 148

Припускаємо, що існує вільна змінна @n зі значенням n.

declare @ date=getdate()while convert(char,@,112)%@n>0 and'00010101'<@ set @=dateadd(d,-1,@)print iif(convert(char,@,112)%@n=0,convert(char,@),'-1')

4

Гольфлуа 90 86

n=I.r()d="%Y%m%d"i=O.d(d)+0j=0@i>0?i%n==0w(i)O.q()$j=j+1i=O.d(d,O.t()-j*86400)+0$w(-1)

Нелюбова версія Lua була б,

n = io.read()
d = "%Y%m%d"
i = os.date(d)+0   -- implicitly casts os.date(d) to int
j = 0
while i>0 do
   if i % n == 0 then
      print(i)
      os.exit()
   end
   j = j+1
   i = os.date(d,os.time()-j*86400)+0
end
print(-1)

2
Випробуваний тут n = 20140699 вихід 20140699
Вільям Барбоса

@WilliamBarbosa: виправлено; 20140699 повертає -1.
Кайл Канос

4

МАТЛАБ: 61

-1,s=str2num(datestr(1:now,'YYYYmmDD')),d=s(~mod(s,n)),d(end)

Припускає, що дільник зберігається в n. Результат буде збережений у змінній, що називається ans.


Коментована версія:

-1                                     % Store -1 in ans in case we don't find anything
s=str2num(datestr(1:now,'YYYYmmDD'))   % Make a list of date numbers
d=s(~mod(s,n)),                        % Select only those who are dividable and prepend -1
d(end)                                 % Store last found value in ans, if anything is found

Виникне помилка, якщо результату не буде знайдено, але відповідь все ж доступна у змінній, незважаючи на це.


Помилки можна уникнути ціною 2 додаткових символів:

s=str2num(datestr(1:now,'YYYYmmDD')),d=[-1;s(~mod(s,n))],d(end)

@ MartinBüttner Хм, вирішив цю проблему, але тепер рішення стосується лише мінімальних знаків. Ви можете побачити якісь поліпшення?
Денніс Джахеруддін

1
Ні, не з голови. Але моя мотивація допомогти вам перемогти мене трохи обмежена. ;)
Мартін Ендер

4

PHP (92 = 85 + 7)

Очікує, що вхід буде збережено в $n.

for($d=date("Ymd");!($d%$n==0&checkdate($d/100%100,$d%100,substr($d,0,4))|$d<0);$d--);echo$d

Я просто згадав, чому мені вже не подобається PHP =)

EDIT: Зараз також реалізовано -1 технічних характеристик.


Ні, щойно перевірив це, $ d буде занадто низьким, коли лунає. Що ви маєте на увазі під «ви кували»? (Вибачте, немає англійської мови =)
недолік

О, я не бачив цієї специфікації, звичайно, це потрібно додати, дякую!
flawr

3

JavaScript (ES6) 115

Очікує число у змінній n, результат зберігається у змінній r. Кожен день перевіряється, починаючи з поточної дати та декрементування - повинен бути кращий спосіб.
Більше того, використовуючи стандартні функції дати JavaScript, усі дати є григоріанськими до 1 року (при цьому високосні роки, відповідно, неправильні до григоріанської реформи).

for(z=new Date,t=n+1;t>n&&t%n;)
  d=z.getDate(),
  t=z.getFullYear()*1e4+(z.getMonth()+1)*100+d,
  z.setDate(d-1);
r=t>n?t:-1

3

C # - 144 (Або 124 в LINQPad) + 1 для кожної цифри в n

Це очікує, що вхід буде в змінній n. До кінця виконання потрібне значення буде в змінній r. Це вважається 00010101першою датою, оскільки дата 00000101не існує. Пропозиції щодо вдосконалення завжди вітаються.

class P{static void Main(){int n=7,r;var d=System.DateTime.Now;try{for(;(r=int.Parse(d.ToString("yyyMMdd")))%n>0;d=d.AddDays(-1));}catch{r=-1;}}}

Версія LINQPad:

int n=7,r;var d=System.DateTime.Now;try{for(;(r=int.Parse(d.ToString("yyyMMdd")))%n>0;d=d.AddDays(-1));}catch{r=-1;}r.Dump();

3

Groovy - 301 300 символів

Дуже просто (і повільно), без хитрощів приховати той факт, що він використовує Joda Time.

Гольф:

@Grab(group='joda-time', module='joda-time', version='2.3')
import org.joda.time.*
import org.joda.time.format.*
f={DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(it)) as int}
n=args[0] as int;b=0;x=-1;c=0
while(!b){if(f(c++)%n==0){x=f(--c);b=1};if(f(0)-c<=101){b=1}}
println x

Приклад виконання (30.07.2014):

$ groovy D.groovy  7
20140729
$ groovy D.groovy  16
20140720
$ groovy D.groovy  90000
-1

Безголівки:

@Grab(group='joda-time', module='joda-time', version='2.3')

import org.joda.time.*
import org.joda.time.format.*

f = { DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(it)) as int }

n = args[0] as int
b = 0 
x = -1
c = 0

while (!b) {
    if(f(c++)%n==0) { x=f(--c); b=1}
    if(f(0)-c<=101){b=1}
}

println x

3

R, 146 139

D=function(n){
z=as.double(gsub("-","",y<-Sys.Date()))
d=F
while(z>100&!d){
y=y-1 
z=as.double(gsub("-","",y))
d=!z%%n}
ifelse(z>100,z,-1)}

Удачі з побаченням, яке не працює. microbenchmarkПовідомлення потрібно тривати близько півсекунди, щоб повернутися назад 15 днів. Станом на 31 липня 2014 року на це буде потрібно приблизно 20 мільйонів секунд (~ 23 дні) -1, щонайменше відповідно до зворотного боку конверта.

редагувати : кілька ярликів у коментарях


!dкоротше d==Fі !z%%nніж z%%n==0. Крім того, перетворення as.numeric(gsub("-","",...)у функції повинно також зменшити кількість символів. Все-таки приємна робота!
планнапус

О, і as.realце часто є хорошою, коротшою альтернативою as.numeric.
планнапус

На жаль as.real, з R 3.0.0 не існує. Але ми все ще маємо, as.doubleякий на один символ коротший.
shadowtalker

О, я не знав, що як і раніше використовую R 2.14
plannapus

1
Я не працюю за комп’ютером, на який я маю права адміністрування, тому це не дуже залежить від мене. Але я вже маю paste0в своєму .Rprofileприродному :)
plannapus

3

Матлаб 104

function d=f(v);for d=fix(now):-1:1 d=str2num(datestr(d,'YYYYmmDD'));if~mod(d,v)return;end;end;d=-1;end

Безголовки:

function d = f(v)
   for d=fix(now):-1:1
       d = str2num(datestr(d,'YYYYmmDD'));
       if ~mod(d,v)
          return; 
       end
   end
   d = -1;
end

EDIT: Мені вдалося трохи оптимізувати це, але @DennisJaheruddin має справжнє рішення тут


Це ще можна трохи пограти в гольф, я його оновлю.
Денніс Джахеруддін

@DennisJaheruddin Я відхилив вашу редакцію на основі цього мета-повідомлення . Просимо запропонувати свої коментарі в коментарі, щоб ОП може їх переглянути, перш ніж змінити свою відповідь.
Мартін Ендер

Зауважте, що ви можете зберігати символи різними способами: скористайтеся сценарієм, а не функцією, дозвольте всім присвоїтись ансам, зробіть цикл від низького до високого і нехай кожен результат перезаписує попередній, щоб вам не потрібно розбивати цикл . - Звичайно, векторизація також може допомогти, дивіться мою відповідь .
Денніс Джахеруддін

Ось більш коротка версія циклу на 67 знаків:-1,for s=str2num(datestr(1:now,'YYYYmmDD'))',if~mod(s,n),+s,end,end
Денніс Яхеруддін,

@ MartinBüttner Дякую за коментар. Як ви сказали, сталася помилка. Тепер має бути гаразд.
Скотт

3

Python 3 - 151 148 байт, генератори

from datetime import*
t=date.today()
f=lambda n:next((y for y in(int((t-timedelta(o)).strftime("%Y%m%d"))for o in range(t.toordinal()))if y%n<1),-1)

Дякую @ nyuszika7h за import*пропозицію


2

Рубін 103

require'date'
f=->{d=Date.today 
(s=d.strftime('%Y%m%d').to_i
return s if s%n<1
d-=1)while d.year>0
-1}

Вхідні дані

Очікує, що значення дільника буде присутнє в змінній n.

Вихідні дані

Повернене значення fфункції

Приклад в Інтернеті: http://ideone.com/LoYxG4


2

Ява: 373 символів

Це порт відповіді Groovy і використовує Joda Time.

Гольф:

import org.joda.time.*;
import org.joda.time.format.*;
public class D {
static int f(int i){return Integer.parseInt(DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(i)));}
public static void main(String[] args){
int n=Integer.parseInt(args[0]);int b=0,c=0,x=-1;
while(b!=1){if(f(c++)%n==0){x=f(--c);b=1;};if(f(0)-c<=101){b=1;}}
System.out.println(x);}}

Запуск зразка (з joda-time-2.4.jar на classpath:

$ java D 7
20140729
$ java D 4
20140728
$ java D 16
20140720
$ java D 90000
-1

Безголівки:

import org.joda.time.*;
import org.joda.time.format.*;

public class D {
    static int f(int i) {
        return Integer.parseInt(DateTimeFormat.forPattern("yyyyMMdd").print(new LocalDate().minusDays(i)));
    }

    public static void main(String[] args) {
        int n = Integer.parseInt(args[0]);
        int b = 0,c = 0,x = -1;

        while(b!=1) {
            if(f(c++)%n==0) { x=f(--c);b=1; }
            if(f(0)-c<=101) { b=1; }
        }

        System.out.println(x);
    }
}

3
Є також java.time.*в останній версії Java.
ntoskrnl

2

Bash + coreutils (8,21), 67 байт

seq -f-%gday $[9**9]|date -f- +[pq]sp[_1pq]sq%Y%m%ddA1=qd$1%%0=p|dc
  • seqгенерує цілі числа від 1 до 9 9 , по одному на рядок, і форматує його як-<x>day
  • передати це, date -fщо інтерпретує кожен рядок і виводить дату, відформатовану у такий dcвираз, як [pq] sp [_1pq] sq 20140728 d A1 =q d 7% 0=p(пробіли, додані для читання)
    • [pq] визначте макрос, щоб надрукувати верхню частину стека, а потім вийдіть
    • sp збереження макросу в регістрі p
    • [pq] визначте макрос для натискання -1, надрукуйте верхню частину стека та закрийте
    • sq зберегти макрос в регістрі q
    • 20140728 ціле число вбудованої дати
    • d дублікат верхньої частини стека
    • A1 push 101 (00000101)
    • =qpop top 2 значень стека: порівняйте дату та 101 та виберіть макрос, qякщо вони рівні
    • 7 натискаючий дільник
    • % поп дільник і ділиться, ділимо і натискаємо решту
    • 0 натиснути 0
    • =ppop top 2 значень стека: порівняйте залишки та 0 та виберіть макрос, pякщо вони рівні
    • d дублікат верхньої частини стека
    • макрос pназивається: друкує цілу дату і dcповністю закриває
  • dcвирази перекладаються dcна оцінку. Після того, як dcнадрукується потрібне значення і закривається, решта трубопроводу зірвана

Вихід:

$ ./lastdivdate.sh 4
20140728
$ ./lastdivdate.sh 7
20140729
$ ./lastdivdate.sh 123456
17901120
$ ./lastdivdate.sh 77777
19910912
$ ./lastdivdate.sh 7777777
-1
$ 

Оскільки ця програма генерує цілі числа від 1 до 9 9 , вона буде дійсною до трохи більше 1 мільйона років у майбутньому. Я сподіваюся, що це обмеження прийнятне ;-)


Дякуємо @ WumpusQ.Wumbley за скорочення повернення -1.


@ MartinBüttner Прокляття! Тепер це так, з 19-байтним покаранням :)
Digital Trauma

Коротші способи перетворення порожнього виводу в -1: додайте |grep .||echo -1до кінця конвеєра або використовуйте zsh, де ви можете вкладати розширення на кшталт echo ${$(cmd):-1}(це коштуватиме вам зворотну косу риску в іншому місці ...)

@ WumpusQ.Wumbley Чому я не придумав цього? Спасибі!
Цифрова травма

1
До речі, це, здається, чутливе до версії coreutils. Шахта (8.15) відмовляється повернутися до 1901 року із специфікацією "днів тому".

1
Насправді це здається sizeof time_tпроблемою, оскільки межа, де вона проривається, становить 2 ** 31 секунду до 1.01.1970. Моя старша інсталяція також патетично 32-розрядна

2

PYTHON: 134 байти

Не вдасться перемогти нинішнього лідера, і це не так вже й краще, ніж найкраща відповідь Python, але я вирішив опублікувати своє найкраще рішення Python.

from datetime import*
def y(a,n):
 s=a.strftime("%Y%m%d")
 if int(s)%n==0:yield s
 try:x=y(a-timedelta(1),n)
 except:yield -1
 yield x

Безголівки:

from datetime import *
def y(a, n):
    s=int(a.strftime("%Y%m%d"))
    if s%n==0:
        yield s
    try:
        x=y(a-timedelta(1), n)
    except:
        yield -1
    yield x

Це насправді 138 байт. Ви можете зберегти 4 байта, використовуючи from datetime import*замість import datetime as d, timedelta(1)замість того , щоб d.timedelta(1)і yieldзамість return.
nyuszika7h

Я використовую випадковий онлайн-лічильник байтів, чи є кращий варіант?
RageCage


Чим він відрізняється від цього? bytecount.bluebus112.com
RageCage

Цей не рахує нові рядки, плюс він рахує символи , а не байти. Для тексту ASCII два є однаковими, тому останній тут не має значення. У коді-гольф зазвичай ви рахуєте символи, якщо в ОП не сказано інше. (Крім того, один, з яким я пов’язаний, був першим результатом в Google для "кількість байтів" тут.)
nyuszika7h

2

JavaScript (ES5) - 94

Він очікує введення змінної xта розміщує вихід у o.

for(i=Date.now();i>-7e13&&(o=(new Date(i)).toISOString().replace(/-|T.*/g,''))%x;i-=864e5)o=-1

2

k4 (84) (73)

f:{f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;.z.D];x]}

Це лише початковий розріз з першого алгоритму, який прийшов на думку; Я впевнений, що краще можливо як за продуктивністю, так і за довжиною.

Ця версія твердо кодує частину "сьогодні" (ось це .z.D); змінити його на літеральну дату ( yyyy.mm.dd) або ціле число в системі дат q (дні з 1 січня 2000 р.) для запуску тестових випадків. (q не буде аналізувати літеральні дати раніше, ніж на початку вісімнадцятого століття, тому для дат перед цим вам потрібно буде опрацювати значення та використати відповідне ціле число безпосередньо. 1 січня "AD 0" із специфікації перетворюється виявляється -730457, що використовується у коді функції. 28 липня AD 5, з останнього тестового випадку, виявляється -728450.)

Наведені тестові приклади:

  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.30];x]}4
20140728
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.30];x]}7
20140729
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.28];x]}4
20140728
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;2014.07.28];x]}7
20140722
  "d"$-728450
0005.07.28
  {f d@*|&~.q.mod[(f:{$[^x;-1;.($x)@&~"."=$x]})'d:{"d"$x+!1+"i"$y-x}[-730457;-728450];x]}90000
-1

редагувати:

g:.,/$`\:`$$:;f:{$[Z=r:{(z>x)&.q.mod[g z]y}[Z:-730458;y]{x-1}/x;-1;g"d"$r]}

Це інший підхід, який використовує один з операторів конвергенції для зменшення дати, поки він не знайде діленого або не перетне межу 1/1/0000. Це також робить перетворення з дати в ціле число дещо інакше.

Тестові випадки, на цей раз все відразу:

  g:.,/$`\:`$$:;{$[Z=r:{(z>x)&.q.mod[g z]y}[Z:-730458;y]{x-1}/x;-1;g"d"$r]}'[2014.07.30 2014.07.30 2014.07.28 2014.07.28,"d"$-728450;4 7 4 7 90000]
20140728 20140729 20140728 20140722 -1

1

VBA 343 байт (модуль)

Sub divD(i As Long)
a = Now()
b = Format(a, "yyyymmdd")
    Do While b / i <> Int(b / i)
    a = DateAdd("d", -1, a)
    b = Format(a, "yyyymmdd")
        If b = "01000101" Then
            MsgBox -1
            Exit Sub
        End If
    Loop
MsgBox b
End Sub

Це може бути сильно зменшено до Sub d(i):a=Now:b=a:Do Until b/i=Int(b/i):a=DateAdd("d",-1,a):b=Format(a,"yyyymmdd"):If b="01000101"Then:b=-1:Exit Sub:Loop:Debug.?b:End Sub139 байт
Тейлор Скотт

1

PowerShell - 76

Це залежить від кількості, що зберігається у змінній $n.

try{@(0..$n|%{'{0:yyyyMMdd}'-f(date).AddDays(-$_)}|?{!($_%$n)})[0]}catch{-1}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.