わくワーク

2022年3月に早期退職し起業しました。仕事、趣味について発信する雑記ブログです。当ブログはGoogleアドセンス及びアフィリエイト広告を利用しています。

Aランクレベルアップメニュー「幅のある移動」

お元気さまです。わくワークの義(ヨシ)です。

 

プログラミングスキルアップのため、paixaラーニングで練習問題を解いています。

 

練習問題は、次のリンクで確認できます。

paiza.jp

 

今回の問題は、簡単にできました。

提出したコードは、次のとおりです。

#include <stdio.h>
int main(void){
    char str[1000];
    char map[21][22];
    int h,w,sy,sx,n,i,j,s,dr,err;
    char lr;
    fgets(str, sizeof(str), stdin);
    sscanf(str,"%d %d %d %d %d",&h,&w,&sy,&sx,&n);
    for(i=0;i<h;i++){
        fgets(str,sizeof(str),stdin);
        sscanf(str,"%s",map[i]);
    }
    dr=0;
    err=0;
    map[sy][sx]='*';
    for(i=0;i<n;i++){
        fgets(str,sizeof(str),stdin);
        sscanf(str,"%c %d",&lr,&s);
        for(j=s;j>0;j--){
            if*1{
                sx++;
            }
            else if*2{
                sy++;
            }
            else if*3{
                sx--;
            }
            else if*4{
                sy--;
            }
            if( sx<0||sy<0||sx==w||sy==h||map[sy][sx]=='#'){
                err=1;
                break;
            }
            else {
                map[sy][sx]='*';
            }
        }
        if(err==1)  break;
        if(lr=='R') {
            dr++;
            if(dr==4) dr=0;
        }
        else {
            dr--;
            if(dr<0) dr=3;
        }
    }
    for(i=0;i<h;i++){
        printf("%s\n",map[i]);
    }
    return 0;
}

 

前回よりは、コンパクトなコードが書けました。

引き続きレベルアップを目指して、練習問題を続けたいと思います。

 

それでは、今日もワクワクな一日を!

チャオチャオ!

 

*1:lr=='R'&&dr==0)||(lr=='L'&&dr==2

*2:lr=='R'&&dr==1)||(lr=='L'&&dr==3

*3:lr=='R'&&dr==2)||(lr=='L'&&dr==0

*4:lr=='R'&&dr==3)||(lr=='L'&&dr==1