上司のために英語を編集する


16

あなたの上司は最近、英語と呼ばれるこの興味深いプログラミング言語を知っています。彼はこの「革命的な」アイデアを持っていて、あなたと一緒にコーディングして、コードの生産率を倍にしたいと考えています!彼は技術に精通していないため、彼もあなたがコーディングできるようにコンパイラを書いて欲しいと思っています!

さて、あなたは邪悪な怠programmerなプログラマーであり、明らかにこのばかげて複雑な言語をコンパイルするプログラムを書くことはないでしょう。代わりに、上司のコードに常にエラーがあることを確認します。そうすれば、上司は実際のコンパイルに到達せず、コーディングの代わりに文法エラーを修正することができなくなります。

課題は、ターミナルから実行できるプログラムを作成し、ファイルパスを引数として受け入れることです。プログラムは以下を行う必要があります。

  1. タイプミスを導入してファイル入力を変更します。
  2. 導入したタイプミスに遭遇したため、コンパイルに失敗するふりをする。
  3. 同じファイルのコピーでプログラムを実行しても、同じタイプミスが連続して2回発生することはありません。

課題を説明するために、このファイルでプログラムを実行します。

Take an array as input.
Sort the array.
Output the array.

の行に沿って何かを出力する必要があります

Error on line 1:
'Take an arqay as input.'
         ^
arqay is not a valid identifier.

そして、プログラムにコンパイルするように指示したファイルは次のようになります。

Take an arqay as input.
Sort the array.
Output the array.

プログラムの仕様に関する詳細を次に示します。

プログラムでは、上司が入力したプログラム内の任意の文字を別のランダムな文字に交換すると、文法エラーが発生すると想定できます。あなたのプログラムは、ボスコードにエラーを作成するためにアルファベット以外の文字を使用しないでください。あなたの上司は決して数字や記号を使用せず、彼は何かが進行中であることを知ります。あなたのプログラムは、上司のプログラムの言葉にエラーを導入するだけです。文のスペースや句読点を変更しないでください。あなたのプログラムは、上司がコンパイルしようとするプログラムの大文字と小文字を変えてはなりませんarQay。つまり、エラーは無効です。これによりtakeTake、またはのArray代わりにarrayます。プログラムは、まずエラーの行を示すことによりエラーを出力する必要があります。

Error on line <insert line number here>:

次に、内部エラーを含む行を印刷する必要があります 'シンボル。次の行では、エラーの^ある単語の下にシンボルを配置する必要があり、最後にエラーを説明するテキストが必要です(この部分はユーザー次第です。エラーを説明している限り、何でも好きなことを言うことができます)。

入力ファイルが存在し、空ではないと想定できます。入力ファイルを追加する前に、入力ファイルに文法的なエラーがないと仮定することもできます。

ボーナス:

コードで発生するエラーが完全にランダムではなく、このように誤字ベースの場合は-60バイト質問の。

ランダムに交互に、少なくとも5つの異なるエラーメッセージに対して-60バイト。

プログラムに100分の1以下の確率で上司にやる気を起こさせるメッセージを出力する場合は-60バイト。

編集:メッセージのバイト数はスコアにカウントされません。 (この素晴らしいアイデアを提供してくれたMartinBüttnerに感謝します)

これはコードゴルフであり、最短バイト数が勝ちます。エラーメッセージの内容をゴルファーにしないでください。上司がエラーメッセージを理解できない場合、上司は満足しないでしょう。


文字を含まない行を処理する必要がありますか?
Οurous

タイプミスはアルファベット文字でのみ作成でき、入力ファイルは存在する有効な空でないファイルであると想定できます。
ロドルフィト14年

7
私はエラーメッセージを私たちに任せるのが好きではありません。「エラーメッセージを表示しない」場合でも、2番目のボーナスを取得する場合は、数十バイト、おそらくは2ダースほどの差が生じる可能性があります。それは非常に多くのことができます。公正なゴルフコンテストのためには、5つのエラーメッセージと動機付けのメッセージを指定する、バイトカウントから文字列の長さを減算する必要があります。
マーティンエンダー14年

ヒントをありがとう、事前に定義されたメッセージを持つことを考えていましたが、それでもう少し自由を与えたかったのです。スコアからメッセージのバイト数を引くことは素晴らしいアイデアです。
ロドルフィト14年

回答:


3

TI-BASIC、77-34(エラーテキスト)= 43

彼がTI-83 / 84電卓でやりたい場合;)

関数の標準としてAns、出力を返して表示できるように、ファイル文字列を含める必要があります。

Ans->Str1:If 1=inString(Ans,"A
Then:"B
Else:"A
End:Disp "ERROR ON LINE 1","'"+Ans+sub(Str1,2,-1+length(Str1))+"'"," ^ INVALID

多くのトークンは1バイトであることに注意してください。


このコードはどこで実行できますか?
ロドルフィト14年

TI-83 / 84計算機またはエミュレーター。
ティムテック14年

inStringAnssubElseThenEndDisp Str1...これらは、電卓のためのすべての1つのバイトではありませんか?
イスマエルミゲル14年

4
何?????????????????これは、8ビットは1バイトではないということです!!!!!!!!! バイナリ形式を使用してアセンブリでコードを提示すると、バイトも5+バイトの1つのマクロとしてカウントされますか?それは明らかに愚かです!(強い言葉は申し訳ありませんが、本当に愚かです!)これはあなたのコードを表していません。私は意味Ansによって表されるバイトと同じではありませんAns。1つはA*n*s計算機が望む結果を生成し、もう1つは最後の算術式の値を返します。これを考慮すると、REALカウントを受け入れないと、これがコードの誤った表現になると思います。
イスマエルミゲル14年

5
ファイルをランダムに変更するようには見えず、1行目に常に変更を表示するように見え、最初の文字をAの場合はBに、そうでない場合はAに変更します。
ロドルフィト14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.