Friday, March 11, 2016

Frequency of חזק's and סיומי דפ יומי

This coming שבת, the סיום דף יומי מסכת גיטין coincides with the חזק of finishing ספר שמות. See this fascinating article by R' Dovid Heber of the Star-K. In it, he shows that since the beginning of דף יומי there have in fact been the same number of סיומים as חזק's and goes through the numbers to show exactly why that is. עיין שם,

I decided to take this matter a little further and investigate how many times this has actually happened or will happen, assuming the exact structure of דף יומי remains the same. This is what I found, going back to the beginning in 1923 all the way to the year 2050:

Beitzah 40 1/16/2044 16 Teves 5804 Vayechi
Avodah Zarah 76 7/7/2040 26 Tammuz 5800 Matos Masei
Moed Katan 29 7/14/2029 2 Av 5789 Matos Masei
Gitin 90 3/12/2016 2 Adar II 5776 Pekudei
Shabbos 157 3/9/2013 27 Adar 5773 Vayakhel Pekudei
Kesubos 112 12/22/2007 13 Teves 5768 Vayechi
Yevamos 122 12/24/1977 14 Teves 5738 Vayechi
Temurah 34 7/7/1945 26 Tammuz 5705 Matos Masei

It is interesting to note that it does not occur on בחוקתי at all in this time, nor does it ever land on שמחת תורה. In fact, looking even further ahead, the only time it will ever land on שמחת תורה between now and the year 2200 will be the following on שמחת תורה in ארץ ישראל:

Horiyos 14 Thu Oct 26, 2062 22 Tishrei, 5823
For anyone curious as to how I was able to figure all this out, I wrote a very short and simple Java application and made use of the brilliant Zmanim API by KosherJava.

And if you're even more curious, here's my code:


import java.util.Calendar;
import java.util.Date;

import net.sourceforge.zmanim.hebrewcalendar.HebrewDateFormatter;
import net.sourceforge.zmanim.hebrewcalendar.JewishCalendar;


public class Daf {

      public static void main(String[] args) {
            int daf;
            HebrewDateFormatter hdf = new HebrewDateFormatter();
            Calendar day = Calendar.getInstance();
            day.set(Calendar.YEAR,2050);
            //System.out.println(day);
            boolean siyum=false;
            // While loop to expose all siyumim that happen on Shabbos. I have to go in manually afterwards to identify the chazaks.
            // I could have possibly used getParshaIndex() and played with that to expose just the chazaks but that would have been clunkier
            while (day.get(Calendar.YEAR) > 1922){
                  JewishCalendar jewCal = new JewishCalendar(day);           
                  try{
                      daf = jewCal.getDafYomiBavli().getDaf();
                  } catch (IllegalArgumentException iae){
                      break;
                  }
                  if (siyum){
                        if (day.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
                       
                        System.out.println(jewCal.getDafYomiBavli().getMasechtaTransliterated() + " " +
                                    daf + ", " + day.getTime() + "," +  jewCal + "," + jewCal.getParshaIndex());
                        }
                        siyum=false;
                  }
                  if (daf == 2) siyum = true; //If today is the beginning of the masechta, yesterday was the siyum of the previous
                  day.add(Calendar.DAY_OF_YEAR, -1);
            }
            day.set(Calendar.YEAR,2200);
            //Separate loop to identify Simchas Torah since it isn't usually on Shabbos
            while (day.get(Calendar.YEAR) > 1922){
                  JewishCalendar jewCal = new JewishCalendar(day);           
                  try{
                      daf = jewCal.getDafYomiBavli().getDaf();
                  } catch (IllegalArgumentException iae){
                      break;
                  }
                  if (siyum){
                        // If the 22nd or 23rd day of Tishrei
                        if (jewCal.getJewishMonth() == 7 && (jewCal.getJewishDayOfMonth() == 22 || jewCal.getJewishDayOfMonth() == 23)){
                        System.out.println(jewCal.getDafYomiBavli().getMasechtaTransliterated() + " " +
                                    daf + ", " + day.getTime() + "," +  jewCal + "," + hdf.formatParsha(jewCal));
                        }
                        siyum=false;
                  }
                  if (daf == 2) siyum = true;
                  day.add(Calendar.DAY_OF_YEAR, -1);
            }           
      }
}