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