スコア
このセクションは、提出物が入力されると記入されます。
正常
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
ボーナスラウンド
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
カレル・J・アルファボット
バックグラウンド
Javaの人気のある入門コースはKarel J. Robotです(私は自分で使用しています)。ロボットは、通りのグリッド(正の整数y座標)および通り(正の整数x座標)、およびグリッドに配置および保存できるビーパーと対話します(カレルとすべてのビーパーは格子上にのみ存在できることに注意してください)ポイント)。カレル(ロボット)は、5つのアクションのみを実行します。1歩進め、所定の位置で左に曲がり、ブザーを降ろし、ブザーを拾い、オフにします。
私のコンピューターサイエンスのクラスでは、最初の課題の1つとして、カレルをプログラムして、右に曲がり、向きを変え、1つずつ進めてブザーを鳴らす方法を組み合わせて実行する方法を学びました。数日後の課題は、これらのメソッドを使用して新しいメソッドを作成し、アルファベットの文字を作成することでした。
当然、この割り当てを終えたら、アルファベットのすべての文字と10桁の数字を作成するためのメソッドをさらに作成し、ロボットから一種のワードプロセッサを作成する方法を見つけ出す予定です。 STDINに入力され、ロボットは文字に似た方法でブザーをグリッドに配置します。
private void draw#各文字について書くたびに#、必要なコマンドのシーケンスの省略形を伝えるコメントを追加しました。
次のコマンド(擬似コードで記述)を自由に使用できます(説明-これらは唯一の有用なコマンドです)。
Turn Left
Rotate the robot 90˚ counterclockwise
Abbreviated as "l"
Turn Right
Rotate the robot 90˚ clockwise
Abbreviated as "r"
Move
Move one space forwards
Abbreviated as "m"
Put Beeper
Put a beeper on the spot that Karel is on
Abbreviated as "p"
Drop Beeper
Move, then Put Beeper
Abbreviated as "d"
Turn Around
Turn Left, then Turn Left
Abbreviated as "a"
条件
ロボットは次の順序で進む必要があります。
- ロボットは、文字が描画される最小領域の5xN長方形の左下隅から開始します。
- ロボットは手紙を描きます。
- ロボットが長方形の右下隅に移動します。
- ロボットは2つのスペースを右に移動し、北/上を向く必要があります
例を見てみましょう。描画したいとしAます。ロボットの位置は、その方向(北、南、東、西)を示す文字です。ロボットがビープ音のある場所にいる場合は文字が大文字になり、ロボットがビープ音のない場所にある場合は小文字になります。oは、ビープ音のあるスポットを表し、ビープ音の.ないスポットを表します。
後で見るように、Aこれです。
.ooo.
o...o
ooooo
o...o
o...o
解決策の1つを次に示します。
Grids ..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... N.... E.... oE... ooE.. oooE. oooW.
..... ..... N.... o.... o.... o.... o.... o.... o....
n.... N.... o.... o.... o.... o.... o.... o.... o....
Letters p d d r d d d a
..... ..... ..... ..... ..... n.... e.... .E... .oE..
..... ..... ..... ..... N.... o.... o.... o.... o....
ooWo. oWoo. Wooo. Nooo. oooo. oooo. oooo. oooo. oooo.
o.... o.... o.... o.... o.... o.... o.... o.... o....
o.... o.... o.... o.... o.... o.... o.... o.... o....
m m m r d m r d d
.ooE. .oooe .ooos .ooo. .ooo. .ooo. .ooo. .ooo.
o.... o.... o.... o...S o...o o...o o...o o...o
oooo. oooo. oooo. oooo. ooooS ooooo ooooo ooooo
o.... o.... o.... o.... o.... o...S o...o o...o
o.... o.... o.... o.... o.... o.... o...S o...E
d m r d d d d l
mml4番目の箇条書きを完了する最後は、すべての文字に表示され、上記の提案されたソリューションのすべてに戻って別の2列を追加したくないため、暗黙的です。
したがって、作成する1つのソリューションAはpddrdddammmrdmrdddmrddddlmmlです。
これがソリューションである必要はないことに注意してください。アルゴリズムはすべての列を通過し、適切な場所にビーパーを配置し、他のビーパーが配置された場所または配置される場所に依存しません。アルゴリズムが何であっても、ロボットはグリッド上のスペースごとに1つのビープ音しか配置できません。
プログラム
プログラムは、文字のグリッドが何であるかの5xNグリッドを入力として受け取ります。入力にロボットがないことに注意してください。ロボットは、左下(南西)の角にあり、北を向いていると想定されます。
出力は、シーケンスの省略形である文字のシーケンスになります。
サンプル入力
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
サンプル出力
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
これはコードゴルフです。標準のCGルールが適用されます。バイト単位の最短コードが優先されます。
ボーナスラウンド
ルール
ボーナスラウンドに参加したい場合は、コードの移動効率を高めてください!以下は、プログラムの実行時に作成される5x5のすべての文字のライブラリです。ボーナスラウンドの目的は、ABCDEFGHIJKLMNOPQRSTUVWXYZ可能な限り少ない動きを含むシーケンスを印刷するプログラムを書くことです。STDINへの入力はありません。コードは採点されますないコードの長さが、その上で「移動スコア。」移動スコアは、長方形内のすべてのポイントを訪れるスイーパーアルゴリズムを阻止するように設計されています。
d: 1
l: 1
m: 4
p: 1
r: 1
手紙
.ooo. oooo. ooooo oooo. ooooo ooooo .oooo o...o
o...o o...o o.... o...o o.... o.... o.... o...o
ooooo oooo. o.... o...o oooo oooo. o.ooo ooooo
o...o o...o o.... o...o o.... o.... o...o o...o
o...o oooo. ooooo oooo. ooooo o.... oooo. o...o
ooooo ....o o...o o.... ooooo o...o ooooo oooo.
..o.. ....o o..o. o.... o.o.o oo..o o...o o...o
..o.. ....o oo... o.... o.o.o o.o.o o...o oooo.
..o.. o...o o..o. o.... o...o o..oo o...o o....
ooooo .ooo. o...o ooooo o...o o...o ooooo o....
oooo. oooo. ooooo ooooo o...o o...o o...o o...o
o..o. o...o o.... ..o.. o...o o...o o...o .o.o.
o..o. oooo. ooooo ..o.. o...o .o.o. o.o.o ..o..
oooo. o..o. ....o ..o.. o...o .o.o. o.o.o .o.o.
....o o...o ooooo ..o.. ooooo ..o.. ooooo o...o
o...o ooooo
.o.o. ...o.
..o.. ..o..
.o... .o...
o.... ooooo
元のチャレンジと同じ手順に従う必要があります。文字は、各文字をスペースで区切って1つずつ描画する必要があります。
標準のCGルールが適用されます。最も低い移動スコアを持つエントリが勝ちます。
要約すると、両方のコードは基本的に同じことを行います。最初のコードはコード内の最小バイト数を使用し、2番目のコードは最小数の移動を使用する必要があります。