Giriş
İş arkadaşınızla oturuyorsunuz, öğle yemeği yiyorsunuz ve üzerinde çalıştığınız en son ve sözde en büyük proje hakkında övünüyorsunuz. Sürekli egoizm vitrininizden bıkmak ve yorulmak, sizi susturmak için size meydan okuma yapar. Egoist ve mutlu-şanslı bir kişi olarak, elbette kabul ediyorsunuz (çünkü her zorluğu kabul etmelisiniz ). Meydan , o / o açıkladığı gibi öyle, bir verilen giriş içinde 1 veya her karakterin daha içeren bir metin bloğunun !@#$^&*, çıkış anahtarı olan (ler) / koordinatları "on" makul bir biçimde.
İş arkadaşınıza göre, bir anahtar a'dır $ve yalnızca aşağıdaki ölçütlerden en az birini karşıladığında bir anahtar "açık" olarak sınıflandırılır:
Herkesle çevrilidir
^. Yani...^^^ ^$^ ^^^"on" anahtarıyla sonuçlanır.
Herkesle çevrilidir
&. Yani...&&& &$& &&&"on" anahtarıyla sonuçlanır.
Tamamen en az iki tarafı ile kaplıdır
*. Örneğin,*** &$& ***"açık" bir anahtarla sonuçlanır, ancak
&*& &$& &*&Anahtar olmadığı için, değil tamamen örtülü tarafından herhangi iki tarafta
*s.Etrafındaki köşelerden herhangi birinde en az 1
!ve / veya 1@vardır. Bu mu değil bunlardan birini eğer saymak değil bir köşede. Yani...!&& ^$@ @&!köşelerde en az 1
!ve / veya en az 1 olduğu için "açık" bir anahtar ile sonuçlanır@(yukarıdaki durumda 3 geçerli!s ve@3 köşede 1 geçerli ). Ve...&!& ^$@ ^!&yapar değildir 2 olmasına rağmen,
!s, 1@hiçbiri içinde olduğu için, herhangi bir köşelerin.1 veya daha fazla
#olan olmayan üzerinde herhangi bir en az 1 sürece, anahtar çevresinde iki&anahtar çevreler. Başka bir deyişle,#bir tarafta en az 1 mevcutsa, bir hediye yoksa, diğer tüm kuralları geçersiz kılar&. Bu nedenle:#&* *$* !**anahtarın etrafında bir anahtar
#bulunduğundan, bir "açık" anahtarla&sonuçlanır ve yukarıdaki kurallardan en az birini izler. Ancak, ünlem işareti şu şekilde mevcut değilse:#&* *$* ***Yukarıdaki kurallardan en az birine uymadığı için anahtar kapalı olacaktır. Bu nedenle, bir anahtar a
#ve a ile çevrelenmiş olsa bile&, bu kurallardan bir veya daha fazlasına uymadıkça hala kapalı olacaktır. Ayrıca, anahtarın geçerli olması için her zaman&s ve#s arasında> = 1: 1 oranı olmalıdır. Örneğin,#&! *$* **#bu kurallardan 1'ini izlese de geçersiz bir anahtar olur, çünkü 2
#s'dir, ancak yalnızca 1'dir&ve bu nedenle&s ve#s arasında> = 1: 1 oranı yoktur . Bunu geçerli kılmak için&,#s ve&s sayısını dengelemek için herhangi bir kenara 1 veya daha fazla ek s eklemelisiniz , muhtemelen şöyle:#&! *$& &*# 3:2 ratio between &s and #sEn sonunda...
#^^ ^$* @^!bir "kapalı" anahtarıyla sonuçlanır, ancak yukarıdaki kurallardan 1 veya daha fazlasını izler, ancak etrafında en az 1 içerdiğinden ve
#bu değeri&aşmak için hiçbir s içermez .Geçerli anahtarları olacak sadece olması içeride girdi ve bu nedenle, her geçerli
$içine alınmalıdır tamamen geçerli karakterlerden herhangi 8 ile. Örneğin, girdinin tamamı şöyle olsaydı:*$* !$! !!!üst
$kısım kesinlikle geçerli bir anahtar değildir , çünkü anahtar bir kenardadır ve bu nedenle anahtar tamamen 8 geçerli karakterle çevrili değildir. Bu durumda, anahtar bile dikkate alınmamalıdır. Bununla birlikte, ortadaki anahtar tamamen geçerlidir ve aslında yukarıdaki koşullardan en az birini karşıladığı için "açık" dır.
Göstermek için şu karakter bloğunu düşünün:
!@#^^$#!@
!@#$$*$&@
@$^!$!@&&
dikey ekseni yve yatay ekseni çağırarak böyle koordinatlar için etiketleyebiliriz x:
y
3 !@#^^$#!@
2 !@#$$*$&@
1 @$^!$!@&&
123456789 x
Koordinatlar her zaman(x,y) iki boyutlu bir koordinat ızgarasına benzer bir biçimde döndürülmelidir . Şimdi, hangi anahtarlar açık? Önce hepsini bulalım. En üst sırada 1, en altta başka bir tane olduğunu zaten görebiliriz. Ancak, bunlar 8 karakterle tamamen çevrili olmadığından otomatik olarak işlem yapılmaz.
Sonra sıra 2'de yer alır. Özellikle, bu:
#^^
#$$
^!$
Burada 3 $işaret olduğunu görebiliriz , ancak sadece ortadaki bir işarete odaklanmak istiyoruz ve muhtemelen görebileceğiniz gibi, zaten geçersiz, çünkü onları dengelemek için s #yok &dışarı. Ayrıca, bu kuralların hiçbirine uymaz, bu yüzden geçerli bir anahtar olsa bile, yine de "kapalı" olur.
Sonra sıra 2'de bir tane daha gelir:
^^$
$$*
!$!
Yine, sadece ortadaki düğmeye odaklanın. O sahip olduğundan bu anahtar, "açık" olduğu , en az 1 !içinde en az 1 köşesinde. Bunun koordinatları (5,2).
Devam edince, sonunda son anahtara geçiyoruz. Bu da ikinci sıradadır ve şöyle görünür:
$#!
*$&
!@&
ve görebileceğiniz gibi, bu da geçerli bir anahtardır, ancak #onu çevreleyen bir durum olsa da, &dengesini aşmak için 2 tane daha vardır #. Buna ek olarak !, köşelerin en az 1'inde en az 1 tane vardır ve bu nedenle sadece anahtar geçerli değildir, aynı zamanda "açıktır". Bu anahtarın koordinatları (7,2).
Sonunda sona ulaştık ve metin üzerindeki tüm blokta 2 "açık" anahtar bulduk. Onların koordinatları (5,2)ve (7,2)bu bizim son cevabımız ve çıktının ne olması gerektiğidir. Ancak, bu girdi çok basitti. Metin bloğunun ne kadar büyük olabileceğine dair bir sınırlama olmadığından girdiler çok daha büyük olabilir. Örneğin, girdi rastgele bir 200x200metin bloğu olabilir .
contraints
Standart Loopholes yasaktır.
Orada olamaz muhtemelen yerleşik bir bunun için, ama sadece orada (sizin Mathematica bakarak) durumunda, doğrudan bu çözmek yerleşik ins kullanılması yasaktır olun.
Test Durumları:
Biçiminde verilen string input -> [array output]:
@#$$&^!&!#
@*&!!^$&^@
$!#*$@#@$! -> [[7,3],[9,2]]
*@^#*$@&*#
#^&!$!&$@@#&^^&*&*&&
!^#*#@&^#^*$&!$!*^$$
#^#*#$@$@*&^*#^!^@&* -> [[19,3],[15,3],[8,2]]
#$@$!#@$$^!#!@^@^^*#
@!@!^&*@*@
*$*^$!*&#$
@$^*@!&&&#
**$#@$@@#! -> [[2,8],[5,8],[6,6],[9,3]]
##*&*#!^&^
$&^!#$&^&@
^^!#*#@#$*
$@@&#@^!!&
#@&#!$$^@$
!!@##!$^#!&!@$##$*$#
$^*^^&^!$&^!^^@^&!#!
@*#&@#&*$!&^&*!@*&** -> [[9,4],[9,3]]
^!!#&#&&&#*^#!^!^@!$
&$$^*$^$!#*&$&$#^^&$
Daha fazlası çok yakında
ek Notlar
- Girişin her zaman tam bir blok (yani bir dikdörtgen veya kare) şeklinde olacağını varsayabilirsiniz.
- Girdide asla karakterdekinden başka bir karakter olmayacaktır
!@#$^&*.
Unutmayın, bu bir kod golfü yani kısa kod kazanıyor!