行または列のみを反転(中心点を中心に反転)することにより、数字の正方形を混乱させるプログラムまたは関数を作成します。
入力
入力は、次のような9行の文字列の形式の9x9の数字グリッドです。
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
この入力形式は交渉不可能です。入力形式で「創造的」なソリューションは無効と見なされます。
出力
出力は、指定された順序で入力に適用されたときにターゲットグリッドを再作成する必要があるフリップ移動のリストである必要があります。
出力例(前の入力例の解決策ではありません):
28IF5D3EAB9G3
この出力形式も交渉不可です。出力には改行やスペースがなく、文字1
- 9
とA
- のみがI
必要です(必要に応じて、大文字の代わりに小文字を使用できます)。
ターゲットグリッド(再作成する必要がある状態)は次のとおりです。
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
数字1
- 9
行を反転するための指示として使用する必要があり、文字A
- I
は列に使用する必要があります。これは、グリッドが復元された状態で以下に示されています。
ABCDEFGHI
|||||||||
vvvvvvvvv
1 -> 123456789
2 -> 234567891
3 -> 345678912
4 -> 456789123
5 -> 567891234
6 -> 678912345
7 -> 789123456
8 -> 891234567
9 -> 912345678
したがって、8
手段は下から2行目をF
反転し、手段は6列目を反転します。
解決策がない場合、プログラムは何も出力せずに終了する必要があります。
例
入力:
987654321
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
出力:
1
この場合、目標の状態に戻るには、一番上の行のみを反転する必要があります。
入力:
123456788
234567897
345678916
456789125
567891234
678912343
789123452
891234561
912345679
出力:
I
この場合、最終状態の列(column I
)のみを反転して、目標状態を再作成する必要があります。
入力:
123456788
798765432
345678916
456789125
567891234
678912343
789123452
891234561
912345679
出力:
2I
この場合、行2
を反転してから列I
を反転して目標状態に戻す必要があります。
ノート:
- 回答に使用例を記入してください。
- 指定された出力は、目標状態を返す最短のシーケンスである必要はありません-目標状態を返すシーケンスは、機能する限り(つまり、テストできる限り)実行されます
- 私は、それぞれの答えをテストし、機能し、明らかにゴルフに挑戦したことがあるすべての回答に賛成するよう努めます。
- これは自由競争です。来週中に最短の回答を受け入れますが、将来のいずれかの時点でより短い新しい有効な回答が来た場合は、それを反映するために受け入れられた回答を変更します。
報奨金は、2014年1月26日23時59分59秒(GMT)までに受け取った最短回答で200評判に設定されています。報奨金は、268文字のGolfScriptソリューションでハワードに授与されました。
テスト中
次の3つのテストグリッドのプログラムの出力と回答を提供してください。
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
927354389
194762537
319673942
351982676
567891234
523719844
755128486
268534198
812546671
813654789
738762162
344871987
341989324
567891234
576217856
619623552
194435598
926543271
テスト用の有効なグリッドを生成する小さなPythonプログラムを作成しました。
import random
def output(array):
print '\n'.join([''.join(row) for row in array])
def fliprow(rownum, array):
return [row[::1-2*(rownum==idx)] for idx,row in enumerate(array)]
def flipcol(colnum, array):
return zip(*fliprow(colnum, zip(*array)))
def randomflip(array):
op=random.randint(0,1)
row=random.randint(0,9)
if(op==1):
return fliprow(row, array)
else:
return flipcol(row, array)
def jumble(array):
arraycopy=array
for i in range(10, 1000):
arraycopy=randomflip(arraycopy)
return arraycopy
startarray=[
['1','2','3','4','5','6','7','8','9'],
['2','3','4','5','6','7','8','9','1'],
['3','4','5','6','7','8','9','1','2'],
['4','5','6','7','8','9','1','2','3'],
['5','6','7','8','9','1','2','3','4'],
['6','7','8','9','1','2','3','4','5'],
['7','8','9','1','2','3','4','5','6'],
['8','9','1','2','3','4','5','6','7'],
['9','1','2','3','4','5','6','7','8']]
print output(jumble(startarray))
(-2, 4)
、(2, 4)
、(2, -4)
、または(-2, -4)
。
A1
)を取得してに移動してみてくださいB1
。1
位置に到達できB1
ますが、それはからのタイルでありB9
、からのタイルではありませんA1
。行/列全体のフリップのみが許可されているため、左上の1は、最も外側の4つのコーナーのいずれかにのみ存在します。ルールを間違えた場合はお知らせください。