Satranç tahtasını dört renkli triomino ile döşeyin


12

Görev:

Sorunu düşünün: "bir kare eksik bir satranç tahtası verildiğinde, 21 L-triomino'ya kesin". Bunun, ikisinin gücü olan herhangi bir kare satranç tahtası boyutu için yapılabileceğinin iyi bilinen bir yapıcı kanıtı vardır. Satranç tahtasını, içindeki delik ve bir büyük triomino ile daha küçük bir satranç tahtasına bölerek ve daha sonra triomino'nun özyineli olarak dört triominoya kesilebileceğini gözlemleyerek çalışır.

Bu görevde, 8x8 satranç tahtasını L-şekilli triominolara kesmeniz ve daha sonra onları iki renkle boyamanız gerekir, böylece iki bitişik triomino aynı renkte olmaz.

Şartname:

Girişiniz, bir tamsayı çifti olarak verilen deliğin konumudur. Hangisinin sütun dizini ve hangisinin satır dizini olacağını seçebilirsiniz. Her birinin 0'da mı yoksa 1'de mi başlayacağını ve hangi köşeden artacağını seçebilirsiniz. 0..7 veya 1..8 yerine ilk koordinat olarak A..H'ye gereksinim duyabilirsiniz. Ayrıca her iki koordinatı da tek sözlük olarak 0..63 veya 1..64 tamsayısına (satır-büyük veya sütun-büyük, soldan sağa veya sağdan sola, yukarıdan aşağıya veya aşağıdan yukarıya) kabul edebilirsiniz. Tam bir program veya bir işlev yazabilirsiniz.

Döşemeyi ASCII olarak, renkli ASCII olarak veya grafiksel ilkel olarak alabilirsiniz. ASCII çıktısını seçerseniz, dört rengi temsil etmek için yazdırılabilir dört ASCII karakterini seçebilirsiniz. Renkli ASCII'yi seçerseniz, yazdırılabilir dört ASCII karakterini veya boşluk dışında yalnızca bir karakteri seçebilirsiniz. Delik, boşluk karakteri ile temsil edilmelidir. Karakterlerinizden biri boşluk karakteri ise, deliğe veya satranç tahtası kenarına bitişik hiçbir triomino bu renkte olmayabilir.

Renkli ASCII veya grafik çıktıyı seçerseniz, # 000, # 00F, # 0F0, # 0FF, # F00, # F0F, # FF0, #FFF veya ortamınızdaki en yakın eşdeğerlerinden herhangi dört rengi seçebilirsiniz. Grafik çıktı seçerseniz, grafik temel öğeleriniz en az 32x32 piksel boyutunda karelerle doldurulmalı ve diğer renklerden en fazla iki pikselle ayrılmalıdır. Yukarıdakiler ortamınızın ekran çözünürlüğünü aşarsa, minimum boyut gereksinimi hala ekrana uyan en büyük kare boyutuna kadar rahatlar.

Verilen satranç tahtasının herhangi bir geçerli döşemesini seçebilirsiniz. Seçtiğiniz döşemenin herhangi bir dört rengini seçebilirsiniz. Dört renk seçiminiz tüm çıktılarda aynı olmalıdır, ancak her çıktıda her rengi kullanmanız gerekmez.

Örnekler:

Giriş için olası çıkış = [0, 0] (sol üst köşe)

 #??##??
##.?#..?
?..#??.#
??##.?##
##?..#??
#.??##.?
?..#?..#
??##??##

Aynı programın başka bir olası çıktısı (input = [0, 7]):

??#??#?
?##?##??
..xx..xx
.?x#.?x#
??##??##
..xx..xx
.?x#.?x#
??##??##

"D1" girişi için farklı bir program da üretilebilir (standart dışı ancak izin verilen satranç tahtası yönüne dikkat edin),

AABBCCAA
ACBACBAC
CCAABBCC
 ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA

4
Girdi varsa, bu gerçekten Kolmogorov karmaşıklığı değil
Jonathan Allan

@JonathanAllan etiket açıklaması , girdi alan bir kolmogorov karmaşıklık sorusuna örnek olarak o pokemonun kim olduğunu kullanır . Bir dizi 64 sabit çözümü sıkıştırmak veya satranç tahtasını döşemek ve daha sonra renklendirmek için bir prosedür uygulamak istiyorsanız size kalmış.
John Dvorak


1
Üç renk yeterli değil mi?
Arnauld

1
@ İzin verebilir miyim. Ben düzenleyeceğim.
John Dvorak

Yanıtlar:


22

JavaScript (ES6),  184 ...  171163 bayt

(x)(y)0x70y7012

h=>v=>(a=[...'3232132031021010'],a[5+(v&4|h>3)]^=3,a[v/2<<2|h/2]=v%2*2+h%2,g=x=>y&8?'':(x<8?x-h|y-v?a[y/2<<2|x/2]^y%2*2+x%2?(x^y)&2:1:' ':`
`)+g(-~x%9||!++y))(y=0)

Çevrimiçi deneyin!

Yöntem

4x4

(t0t1t2t3t4t5t6t7t8t9t10t11t12t13t14t15)

Her triomino şunlardan biridir:

Triominos

Matrisin ilk yapılandırması aşağıdaki gibidir:

(3232132031021010)

İlk 2 rengi, herhangi bir satranç tahtasında yaptığımız gibi değiştiririz, bu da şunları sağlar:

matrix0

Sonraki adımlar:

  1. t5t6t9t10
  2. Deliğin bulunduğu triominoyu döndürüyoruz (adım # 1'deki ile aynı triomino olabilir), böylece deliği kapatmaz.
  3. Delikleri 3. renkle dolduruyoruz ('gerçek' delik hariç).

(3,0)

matris1

Ve bu durumda, son matris:

(3132102031021010)

Yorumlananlar

h => v => (                       // (h, v) = hole coordinates
  a = [...'3232132031021010'],    // a[] = flat representation of the 4x4 matrix
  a[5 + (v & 4 | h > 3)] ^= 3,    // first rotation, achieved by XOR'ing with 3
  a[v / 2 << 2 | h / 2] =         // second rotation according to the
    v % 2 * 2 + h % 2,            // position of the hole within the triomino's square
  g = x =>                        // g is a recursive function that converts the 4x4
                                  // matrix into a 8x8 ASCII art
    y & 8 ?                       // if y = 8:
      ''                          //   stop recursion and return an empty string
    :                             // else:
      ( x < 8 ?                   //   if this is not the end of the row:
          x - h | y - v ?         //     if this is not the position of the hole:
            a[y / 2 << 2 | x / 2] //       if this part of the triomino located at this
            ^ y % 2 * 2 + x % 2 ? //       position is 'solid':
              (x ^ y) & 2         //         use either color #0 or color #2
            :                     //       else:
              1                   //         use color #1
          :                       //     else:
            ' '                   //       the hole is represented with a space
        :                         //   else:
          `\n`                    //     append a linefeed
      ) + g(-~x % 9 || !++y)      //   append the result of a recursive call
)(y = 0)                          // initial call to g with x = y = 0

Grafik çıktı

Deliğin konumunu ayarlamak için resmin üzerine tıklayın.


Üç rengin her zaman yeterli, çok güzel olduğuna dair yapıcı kanıt!
John Dvorak

6
Tıklanabilir grafik çıktı seviyorum!
Kevin Cruijssen

3

Kömür , 78 bayt

NθNη”{⊞⊟¦≦⁶q×fΣ\⊙t×_⊟✳-Y⁴℅=⁶υ”≔›θ³ζ≔›η³εFζ≦⁻⁷θFε≦⁻⁷ηJ⊕÷θ²⊕÷粧#$⁺ⅈⅉJθη Fζ‖Fε‖↓

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. #$%Karakterleri kullanarak çıktılar . Açıklama:

NθNη

Boş karenin koordinatlarını girin.

”{⊞⊟¦≦⁶q×fΣ\⊙t×_⊟✳-Y⁴℅=⁶υ”

Sıkıştırılmış bir dize çıktısı alın. Yeni satırlar içerir, bu nedenle bu açıklamanın akışını kesmemek için cevabın sonunda dizeyi bulacaksınız.

≔›θ³ζ≔›η³εFζ≦⁻⁷θFε≦⁻⁷η

Her iki koordinattan daha büyükse, 3o gerçeği hatırlayın ve koordinatı 7'den çıkarın.

J⊕÷θ²⊕÷粧#$⁺ⅈⅉ

%Sol üst köşedeki karelere en yakın olana atlayın %ve üzerine bir #ya $da gerektiği gibi yazın. (Ama zaten bu meydanda ise boşluk tarafından üzerine yazılacaktır.)

Jθη Fζ‖Fε‖↓

Küçültülmüş koordinatlarda kareyi boşaltın ve daha sonra işlenmemiş malzemeyi orijinal konumuna getirmek için gerektiği şekilde çıktıyı yansıtın.

##$$##$$
#%%$#%%$
$%%#$$%#
$$##%$##
##$%%#$$
#%$$##%$
$%%#$%%#
$$##$$##

%Merkezdeki karelerden başlayıp istenen koordinatlara doğru ilerlemeye çalıştım ama 90 bayt sürdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.