No.8051 cracked
タグ : / 解いたユーザー数 7
作問者 : mai / テスター : mai
note
これは yukicoder April fool contest 2019 の問題として作問されました.
更新:2023/07/09
ジャッジコードが Ruby3.2 に非対応だったため、ジャッジコードを修正、リジャッジを行いました。
リジャッジ後、スペシャルジャッジが AC と判定しているのにも関わらず TLE 判定になっている提出が一部あるようです。
問題文
入力から提出したソースコードが与えられます.
ただし,文字コード32以上126以下のある 1byte については,異なる文字コード32以上126以下の 1byte に書き換えられています.
書き換えられた位置(0-index・byte単位で)と書き換わる前の文字,書き換わった後の文字を標準出力に出力してください.
ソースコードが3000byteを超える場合,
ソースコード中に書き換えられる文字が存在しない場合(例えば改行だけ等)は,
文字列WA
を入力として与えた後,WrongAnswerとなります.
文字コード33以上126以下の文字を次に列挙します.文字コード32は半角スペースです.
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
また,プログラムはCかC++14で作成してください.
それ以外の言語(Ruby,Pythonなど)は WrongAnswer となります.
提出するプログラムは,次のコンパイルを実行した時に,どちらかが終了コード0を返す必要があります.
どちらも終了コードを0を返す場合,C言語のコードと提出したと解釈されます.
gcc7 -x c -std=c11 _filename_ g++ -x c++ _filename_
23:58追記:C++のコンパイルオプションから -std=gnu++14 を除外しました
入力
文字コード32以上126以下のある 1byte について,異なる文字コード32以上126以下の 1byte に書き換えられた,提出したソースコードが与えられます.
出力
1行目に,書き換えられた位置を0-index・byte単位で出力してください.
2行目に,書き換わる前の文字を"
で囲んで出力してください.
3行目に,書き換わった後の文字を"
で囲んで出力してください.
最後の改行はあっても無くても構いません.
ヒント
リアクティブ問題として実装されているため,通常問題では起きないがリアクティブでは発生するようなWA,TLEが存在するかもしれません.
例えば,EOFが来ないらしく,C言語でwhile(getchar() != -1);
と書くとTLEします.
提出したプログラムの終了コードが0以外になってもREを返すとは限りません.
サンプル
サンプル1
main(){ printf("10\n\"p\"\n\"m\""); }ジャッジによって次のように書き換えられたとします.この書き換えられたコードが標準入力から与えられます.
main(){ mrintf("10\n\"p\"\n\"m\""); }pからmに書き換わりました.
また,
m,a,i,n,(,),{,改行,半角SP,半角SP,p,...
から,0-indexedで10byte目が書き換えられていると分かります.よって,次を出力しなければなりません.
10 "p" "m"
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。