Day of Week - Natural language processing and date parsing You'll get a human-readable question matching one of the following syntaxes, and are expected to print/return the corresponding result. Finding similarities between the human-readable inputs and matching them with minimum size code is explicitly part of the task, so I won't give a formal definition.

&quot;Will October begin on a Thursday if this year is a leap year, this month is January and this month begins on a Wednesday?&quot; &gt; &quot;Yes.&quot;
&quot;If this month begins on a Friday, this month is October and this year is not a leap year, will December start on a Tuesday?&quot; &gt; &quot;No, it will be a Wednesday.&quot;
&quot;If this month is August, this month begins on a Wednesday and this year is not a leap year, will October start on a Sunday?&quot; &gt; &quot;No, it will be a Monday.&quot;
&quot;Will December start on a Monday if this month begins on a Friday, this year is a leap year and this month is November?&quot; &gt; &quot;No, it will be a Sunday.&quot;

&quot;Formal&quot; definition:
Input will always be generated by picking one of the above lines and swapping day names, month names, and the &quot;not &quot; in and out of &quot;is *a leap year&quot;
Further notes:

Each question will consider only one calendar year, i.e. you won't be asked for a date of the following or previous calendar year.
This is codegolf, shortest answer in bytes in each language wins.
In case you need it, remember leaps years are not strictly every 4 years.
No answer will be accepted.
Standard loopholes apply.
You can input and output in any reasonable way.

Just for reference:

'January', 'February','March','April', 'May','June','July','August', 'September','October','November','December'
'Monday','Tuesday', 'Wednesday','Thursday', 'Friday','Saturday', 'Sunday'

Inspired by Squarish's Kata on codewars.com
JavaScript (ES6), 254 bytes

s=&gt;(F=e=&gt;'0x'+'0A39135?2B?8602467'[parseInt(s.match(e+' ([A-Z]\\w+)')[1],33)%234%81%19],n=(F`s.{5}`-(g=m=&gt;new Date(~F`(no|le).*`,m).getDay())(F`s`)+g(F`l`)+7)%7)-F` .{9}a`?`No, it will be a ${'Sun,Mon,Tues,Wednes,Thurs,Fri,Satur'.split`,`[n]}day.`:`Yes.`

Try it online!
How?
Given the leading part e of a regular expression, the helper function F looks for the capitalized word that immediately follows and turns it into either a 0-indexed day (from 0 = Sunday to 6 = Saturday) or a 0-indexed month (from 0 = January to 11 = December).
F = e =&gt;                // e = regular expression part, as a string
  '0x' +                // parse as hexadecimal
  '0A39135?2B?8602467'[ // a digit between '0' and 'B'
    parseInt(           //   selected by 1) parsing
      s.match(          //     the sub-string in s that matches
        e +             //       the leading part of the regular expression
        ' ' +           //       followed by a space
        '([A-Z]\\w+)'   //       followed by a capturing group for
      )[1],             //       a capitalized word (which is what we keep)
      33                //     in base 33
    )                   //   end of parseInt()
    % 234 % 81 % 19     //   and 2) applying a modulo chain
  ]                     // end of digit lookup

Try the hash function online!
We invoke F with:

&quot;s.{5}&quot; to match &quot;begins on a [day]&quot;
&quot;s&quot; to match &quot;is [month]&quot;
&quot;l&quot; to match &quot;will [month]&quot; (the w may also be capitalized)
&quot; .{9}a&quot; to match either &quot; start on a [day]&quot; or &quot; begin on a [day]&quot;
&quot;(no|le).*&quot; to match either &quot;not&quot; or &quot;leap&quot;, whichever comes first (this is a special case where the capitalized word is put in a 2nd capturing group and ignored)

The helper function g takes a month and returns a week day in [0..6]:
g = m =&gt; new Date(~F`(no|le).*`, m).getDay()

The expression ~F`(no|le).*` in there evaluates to -1 if &quot;no&quot; is matched (not leap) or to -4 if &quot;le&quot; is matched (leap). This works as expected because the year -4 is leap1 and the year -1 is not.
Using g and the data collected above, we create two dates in the same reference year and look for the difference between the corresponding week days, modulo 7. This allows us to answer the question.

1: At least that's what JS thinks. But this is apparently not true.