Optimal Kare Matrisi Hesaplama


13

Uygun matris (bu sorun oldukça dar kapsamda için) elde edilir "sıkıştırma" bir kare matris ve her çiftin en fazla alma gelen sıralar ve sütunlar gelen elemanları.

Örneğin, aşağıdaki matris göz önüne alındığında:

4 5 6
1 7 2
7 3 0

Sen almak için onun devrik ile birleştirebilirsiniz: [[[4,5,6],[4,1,7]],[[1,7,2],[5,7,3]],[[7,3,0],[6,2,0]]]. Eğer listelerin her çifti zip varsa, aşağıdakileri edinin: [[(4,4),(5,1),(6,7)],[(1,5),(7,7),(2,3)],[(7,6),(3,2),(0,0)]]. Son adım, optimum matrisi elde etmek için her bir çiftten maksimum değeri elde etmektir:

4 5 7
5 7 3
7 3 0

Göreviniz girdi olarak verilen bir kare matrisin optimal matrisini çıkarmaktır. Matris yalnızca tamsayıları içerecektir. G / Ç herhangi bir makul formatta yapılabilir. Bayt cinsinden en kısa kod (UTF-8 veya dilin özel kodlamasında) kazanır!

Testler

[[172,29], [29,0]] -> [[172,29], [29,0]]
[[4,5,6], [1,7,2], [7,3,0]] -> [[4,5,7], [5,7,3], [7,3,0 ]]
[[1,2,3], [1,2,3], [1,2,3]] -> [[1,2,3], [2,2,3], [3,3,3 ]]
[[4,5, -6], [0,8, -12], [- 2,2,4]] -> [[4,5, -2], [5,8,2], [- 2,2,4]]

Matrisin düz bir versiyonunu çıkarabilir miyiz? örneğin [1,2,3,4]yerine [[1,2],[3,4]]? ~ 33%
Wastl

Yanıtlar:


7

Jöle , 2 bayt

»Z

Çevrimiçi deneyin!

Nasıl çalışır

»Z  Main link. Argument: M (integer matrix)

 Z  Zip the rows of M, transposing rows and columns.
»   Take the maxima of all corresponding integers.

Oh my ... Neden dünyada böyle »davranıyor ?!

5
Dizi düzenleme dili için oldukça standart. Octave's maxda aynısını yapıyor.
Dennis

5

Haskell , 40 bayt

z(z max)<*>foldr(z(:))e
e=[]:e
z=zipWith

Çevrimiçi deneyin!

Ben ungolf şöyle olurdu:

import Data.List
f m = zipWith (zipWith max) m (transpose m)

... çok daha zarif.


2
Clean'te golf oynayabileceğim en iyi şey, golf oynamamış Haskell ile aynıdır.
Οurous

5

Kabuk , 5 4 bayt

Boğmaca, daha önce hiç kullanmadım (veya ):

S‡▲T

Çevrimiçi deneyin!

açıklama

S  T -- apply the function to itself and itself transposed
 ‡▲  -- bi-vectorized maximum




2

JavaScript (ES6), 48 bayt

m=>m.map((r,y)=>r.map((v,x)=>v>(k=m[x][y])?v:k))

Test senaryoları


2

J , 4 bayt

Ön ek önek işlevi.

>.|:

Çevrimiçi deneyin!

>. [argümanın] tavanı

|: aktarılmış argüman


Um, eklemeniz gerektiğini sanmıyorum f=:. : P ilk başta bayt sayısını 3 byte azalttığınızı sanıyordum ...
Outgolfer Erik

<.olduğunu gerekiyor>.
FrownyFrog

@FrownyFrog Gerçekten.
Adam

@EriktheOutgolfer Hayır, bilmiyorum.
Adám


1

CJam , 8 bayt

{_z..e>}

Girişi yığından alan ve çıktıyla değiştiren anonim blok (işlev).

Çevrimiçi deneyin! Veya tüm test senaryolarını doğrulayın .

açıklama

{      }    e# Define block
 _          e# Duplicate
  z         e# Zip
   .        e# Apply next operator to the two arrays, item by item
            e# (that is, to rows of the two matrices)
    .       e# Apply next operator to the two arrays, item by item
            e# (that is, to numbers of the two rows)
     e>     e# Maximum of two numbers

1

R , 23 bayt

function(A)pmax(A,t(A))

Çevrimiçi deneyin!

Bu diğer cevapların çoğuna eşdeğerdir. Bununla birlikte, R'nin maxiki yaygın senaryo için iki ayrı işlevi vardır :

maxve minbağımsız değişkenlerinde bulunan tüm değerlerin maksimum veya minimum değerlerini, tümü mantıksal veya tamsayı ise, tümü sayısal ise çift, aksi takdirde karakter döndürür.

pmaxve pminbir veya daha fazla vektörü (veya matrisi) bağımsız değişken olarak alın ve vektörlerin 'paralel' maksimumlarını (veya minimumlarını) veren tek bir vektör döndürün. Sonucun ilk öğesi, tüm bağımsız değişkenlerin ilk öğelerinin maksimum (minimum) değeri, sonucun ikinci öğesi, tüm bağımsız değişkenlerin ikinci öğelerinin maksimum değeri (minimum) vb. Gerekirse daha kısa girişler (sıfır olmayan uzunlukta) geri dönüştürülür.



1

C (gcc) , 79 77 bayt

  • Steadybox sayesinde iki bayt tasarruf edildi ; bu zorluktaki tüm matrisler kare olduğu için sadece bir matris boyut parametresi alır.
j,i;f(A,n)int*A;{for(j=0;j<n*n;j++)printf("%d,",A[A[j]>A[i=j/n+j%n*n]?j:i]);}

Çevrimiçi deneyin!

Düz bir tamsayı dizisi Ave giriş olarak matris boyutunu n(matrisin kare olması gerektiği gibi) alır. Stdout'a düz tamsayı dizi dizesi temsili çıktılar.



0

05AB1E , 7 bayt

ø‚øεøεà

Çevrimiçi deneyin!

açıklama

ø         # transpose input matrix
 ‚        # pair with original matrix
  ø       # zip together
   ε      # apply on each sublist ([[row],[transposed row]])
    ø     # zip
     ε    # apply on each sublist (pair of elements)
      à   # extract greatest element





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.