わくワーク

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

Aランクレベルアップメニュー「時刻に伴う移動」

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

 

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

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

paiza.jp

 

問題の指示を誤解しており、何度か0点が続きました。

サンプルデータと期待する結果が、指示と違うので、問題が間違っているのではないかと疑って、2日間保留していました。

あらためて問題を読み、タイマーの意味を理解しました。

提出したコードは、次のとおりです。
#include <stdio.h>
int main(void){
    char str[1000];
    char map[21][22];
    int h,w,y,x,n,t,i,j,dr,err,tm,nx;
    char rl;
    fgets(str, sizeof(str), stdin);
    sscanf(str,"%d %d %d %d %d",&h,&w,&y,&x,&n);
    for(i=0;i<h;i++){
        fgets(str, sizeof(str),stdin);
        sscanf(str,"%s",map[i]);
    }
    dr=0;
    err=0;
    tm=0;
    nx=0;
    for(i=0;i<100;i++){
        if(nx==0){
            fgets(str, sizeof(str),stdin);
            sscanf(str,"%d %c",&t,&rl);
        }
        nx=1;
        if(t==tm){
            if(rl=='R'){
                if(dr==0){
                    x++;
                    dr++;
                }
                else if(dr==1){
                    y++;
                    dr++;
                }
                else if(dr==2){
                    x--;
                    dr++;
                }
                else {
                    y--;
                    dr=0;
                }
            }
            else if(rl=='L'){
                if(dr==0){
                    x--;
                    dr=3;
                }
                else if(dr==1){
                    y--;
                    dr--;
                }
                else if(dr==2){
                    x++;
                    dr--;
                }
                else {
                    y++;
                    dr--;
                }
            }
            nx=0;
        }
        else {
            if( dr==0 ){
                y--;
            }
            else if( dr==1 ){
                x++;
            }
            else if( dr==2 ){
                y++;
            }
            else {
                x--;
            }
        }
        if(x<0||y<0||x==w||y==h||map[y][x]=='#'){
            err=1;
            break;
        }
        printf("%d %d\n",y,x);
        tm++;
    }
    if(err==1){
        printf("%s\n","Stop");
    }
    return 0;
}

 

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

チャオチャオ!