Yalnızca satırları ve sütunları çevirerek (orta nokta etrafında ters çevirerek) bir basamağın hanesini çıkarmak için bir program veya işlev oluşturun.
Giriş
Giriş, aşağıdaki gibi 9 satırlık bir dize biçimindeki 9x9 basamaklı bir ızgara olacaktır:
986553229
264564891
759176443
643982153
567891234
526917874
685328912
891732537
117644378
Bu giriş formatı pazarlık konusu değildir - giriş formatıyla "yaratıcı" olan herhangi bir çözüm geçersiz sayılır.
Çıktı
Çıktı, verilen sıraya girildiğinde uygulandığında hedef ızgarayı yeniden yaratması gereken bir flip hareket listesi olmalıdır.
Bir örnek çıktı (önceki giriş örneğine çözüm değil):
28IF5D3EAB9G3
Bu çıktı formatı da pazarlık konusu değil. Çıktıda yeni satırlar veya boşluklar olmamalıdır, yalnızca 1
- 9
ve A
- I
karakterleri (eğer tercih ederseniz büyük harfler yerine kabul edilebilir).
Hedef kılavuz (yeniden oluşturmanız gereken durum) aşağıdaki gibidir:
123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
Rakamlar 1
- 9
satırları çevirmek için talimatlar olarak kullanılmalı ve harfler A
- I
sütunlar için kullanılmalıdır. Bu, ızgara restore edilmiş durumdayken aşağıda gösterilmiştir.
ABCDEFGHI
|||||||||
vvvvvvvvv
1 -> 123456789
2 -> 234567891
3 -> 345678912
4 -> 456789123
5 -> 567891234
6 -> 678912345
7 -> 789123456
8 -> 891234567
9 -> 912345678
Böylece bir 8
araç ikinci sırayı alttan F
çevirir ve bir araç altıncı sütunu çevirir.
Hiçbir çözümün mümkün olmadığı durumlarda, program hiçbir şey vermeden sona ermelidir.
Örnekler
Giriş:
987654321
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
Çıktı:
1
Bu durumda sadece en üstteki sıranın hedef durumuna geri dönmesi gerekir.
Giriş:
123456788
234567897
345678916
456789125
567891234
678912343
789123452
891234561
912345679
Çıktı:
I
Bu durumda, yalnızca son sütunun (sütun I
) hedef durumunu yeniden oluşturmak için saygısız olması gerekir.
Giriş:
123456788
798765432
345678916
456789125
567891234
678912343
789123452
891234561
912345679
Çıktı:
2I
Bu durumda, satır durumuna çevirip hedef durumuna geri dönmek için 2
sütunu çevirmemiz gerekir I
.
Notlar:
- Lütfen cevabınıza bir örnek kullanım ekleyin.
- Verilen çıkışın hedef durumuna geri dönecek en kısa dizi olması gerekmez - hedef durumu döndüren herhangi bir dizi çalıştığı sürece (yani test edebildiğim sürece)
- Her cevabı test etmeye çalışıyorum ve çalışanların hepsine kızgınım ve açık bir şekilde golf oynama girişiminde bulundum.
- Bu açık uçlu bir yarışma - Gelecek hafta en kısa cevabı kabul edeceğim, ancak gelecekte herhangi bir noktada daha kısa olan daha yeni geçerli bir cevap gelirse kabul etmek için cevabı değiştireceğim .
Kelle tarafından alınan en kısa cevap için 200 ün olarak belirlenmiştir 26/01/2014 tarihinde 23:59:59 (GMT)ödül verildi Howard onun için 268 karakter GolfScript çözümü .
Test yapmak
Lütfen programınızın çıktısını, cevabınızla birlikte aşağıdaki üç test kılavuzu için sağlayın:
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
Test amacıyla geçerli ızgaralar oluşturmak için küçük bir Python programı oluşturdum:
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)
, veya (-2, -4)
.
A1
) işaretini alın ve konumuna getirin B1
. Bir 1
pozisyona bir alabilirsiniz B1
, ancak o kiremit B9
değil, kiremit olacak A1
. Yalnızca tam satır / sütun çevirmelerine izin verildiğinden, en üstteki 1, yalnızca en dıştaki dört köşeden birinde olacaktır. Kuralları yanlış yaparsam, lütfen bana bildirin.