Coding Challenges - Dlang or Generic

Salih Dincer salihdb at hotmail.com
Tue Jan 10 07:38:31 UTC 2023


On Tuesday, 10 January 2023 at 03:18:54 UTC, matheus wrote:
>
> The layout isn't like yours, I wrote this using a D Online 
> compiler and I'm very sleepy right now:
> ```d
> import std.stdio, std.string, std.conv, std.datetime;
> 
> bool validDate(int y,int m,int d){
>    try{
>        Date(y,m,d);
>        return true;
>    }catch(Exception e){}
>    return false;
> }
>
> void main(){
>     int[string] dow;
>     int i, y = 2023, m = 1, d = 1;
>
>     for(i=1;i<8;++i){
>         dow[to!string(Date(1899,1,i).dayOfWeek)]=i;
>     }
>
>     for(m=1;m<13;++m){
>         
> write("\n\n\t\t",capitalize(to!string(Date(y,m,1).month)),"\n");
>
>         for(i=1;i<8;++i){
>         	write(to!string(Date(1899,1,i).dayOfWeek)[0..2], " ");
>         }
>
>         writeln();
>         int c = dow[to!string(Date(y,m,1).dayOfWeek)];
>
>         for(i=1;i<c;++i){ write("   "); }
>
>     	for(d=0;d<32;++d){
>     	    if(c%8==0){c=1;writeln();}
>     	    ++c;
>             if(validDate(y,m,d+1)){
>                 writef("%2s ",d+1);
>             }
>         }
>     }
> }
> ```

You don't need validDate.  Because there is daysInMonth:

```d
       writeln();
       const date = Date(y, m, 1);
       int c = dow[to!string(date.dayOfWeek)];

       for(i = 1; i < c; ++i)
         write("   ");

       for(d = 0; d < 32; ++d)
       {
         if(++c % 9 == 0)
         {
           writeln();
           c = 2;
         }
         if(d < date.daysInMonth)
           writef("%2s ", d + 1);
       }
```

SDB at 79



More information about the Digitalmars-d-learn mailing list