Golfscript Çapraz Dizi


11

Golfscript'te bir dizinin tüm köşegenlerini tek bir diziye getirmenin bir yolu var mı?

Örneğin, dizi için

[[1 2 3][4 5 6][7 8 9]]

dönüş

[[7][4 8][1 5 9][2 6][3]]

(bu sırada olması gerekmez) ve

["ABCD""EFGH""IJKL"]

dönüş

["I""EJ""AFK""BGL""CH""D"]

(bu sırada olması gerekmez). Dizilerin uzunluklarının aynı olduğunu varsayalım.

Bunu anlamakta zorlanıyorum. Dizelerle karakter arasında bir şey yapmayı =ve yinelemeyi denedim (length+1), ama bu işe yaramadı. Birisi bana yardım edebilir mi?

Mümkünse bunu yapmanın en kısa yolunu istiyorum.


Bu sizin normal soru-cevap siteniz değil; kazanan bir kritere sahip olmanız gerekir. Yeni başlayanlar için popüler bir içerik öneriyorum.
— Timtech

@Timtech anlıyorum. Düzenli yığın değiş tokuşunu deneyeceğim.
— Josiah Winslow

7
Dile özgü golf danışma soruları resmi olarak konuyla ilgilidir: meta.codegolf.stackexchange.com/a/1725/20260
— xnor

5
@xnor Orada yanlış cevaba bağladınız. Bu, sahip olduğumuz ipucu listeleriyle ilgili. Ancak belirli bir tavsiye istemek de konuyla ilgili olduğundan, insanların oylamayı durdurabilmeleri ve oy vermeyi kapatmaları güzel olurdu.
— Martin Ender

7
@steveverrill Bunların CW yapılması gerektiğine katılmıyorum. Bu sadece (aslında, ben bile kabul etmiyoruz liste sorulara geçerlidir olanlar onlar temelde mikro optimizasyon golf yarışmalar ve insanlar yanıtlayan - CW olmalıdır), ancak CW olmaya belirli tavsiye soru için hiçbir neden orada gerçekten Temsilciyi bunun için hak ediyorlar (soru ilginçse asker de öyle).
— Martin Ender

Yanıtlar:


8

Düşünmek

[
    "ABCD"
    "EFGH"
    "IJKL"
]

Ana diyagonal ve üstündeki diyagonalleri elde etmek için ikinci sıranın ilk karakterini ve üçüncüsünün ilk ikisini değiştirebiliriz:

[
    "ABCD"
    "FGH"
    "KL"
]

Tüm sütunların bir diyagonale karşılık geldiğine dikkat edin, bu nedenle diziyi "sıkıştırmak" (yani, satırları ve sütunları transpoze etmek) yukarıda belirtilen dört diyagonal içeren bir dizi verecektir:

[
    "AFK"
    "BGL"
    "CH"
    "D"
]

Ana köşegen altındaki köşegenleri hala kaçırıyoruz.

A'nın kendisini sıkıştırır ve yukarıdaki işlemi tekrarlarsak, ana diyagonal ve altındaki tüm diyagonalleri içeren bir dizi elde ederiz . Her iki dizinin de birliğini hesaplamak için geriye kalan tek şey.

Hepsini bir araya koy:

[.zip]{:A,,{.A=>}%zip}/|


[.zip]{              }/  # For the original array and it's transpose, do the following:
       :A                # Store the array in A.
         ,,{    }%       # For each I in [ 0 1 ... len(A) ], do the following:
            .A=>         # Push A[I] and shift out its first I characters.
                  zip    # Transpose the resulting array.
                       | # Perform set union.

Çevrimiçi deneyin.

Son olarak, yalnızca diyagonallere ihtiyacımız varsa, çünkü onların içinde bir dize arıyoruz ( bu sorudan ilham aldığımı düşündüğüm Word Search Puzzle'da olduğu gibi), "daha az temiz" bir yaklaşım da uygun olabilir.

Kullanabilirsiniz

..,n**\.0=,\,+)/zip

Tüm köşegenleri ve ayrıca bazı gereksiz satır besleme karakterlerini elde etmek için.

Bu cevapta süreci ayrıntılı olarak açıkladım .

Çevrimiçi deneyin.

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.