Bir ızgaranın başka bir ızgara içerip içermediğini belirleme


10

Zorluk
Bir işlev oluşturmak, girişler olarak iki 2 boyutlu Karakter dizisini (veya programlama dili veri tipi olarak karakter içermiyorsa Dizeleri) alır: a ve b. Diliniz bu girişleri desteklemiyorsa, standart tek baytlık başka bir değişken kullanabilirsiniz.

Senin görevin b bir a içerip içermediğini belirlemektir. Bu durumda, true değerini döndürün. Aksi takdirde, false değerini döndürün.

Örnek Test Durumları

a:

123
456
789

b:

123
456
789

doğru dönmelidir.

a:

code
golf

b:

thisis
code!!
golf!!
ohyeah

doğru dönmelidir.

a:

abcd
efgh
ijkl

b:

abcdef
ghijkl
mnopqr

yanlış döndürmelidir.

a:

abc
def

b:

1abc2
3def4
5ghi6

doğru dönmeli

a:

ab
cd

b:

#ab##
##cd#

yanlış dönmeli

En az bayt kazanır.


2
Merhaba ve codegolf'a hoş geldiniz! Test vakalarınızı (umarım) biraz daha açık hale getirmek için düzenledim. Anaya göndermeden önce zorluklar üzerinde çalışmak için bir çalışma alanımız olduğunu unutmayın . İyi şanslar!
FryAmTheEggman

2
Ayrıca, benim dil (C #) yerleşik bir karakter türü olmasına rağmen, ilk dizeyi bir dizeler dizisi ve ikincisi yeni satırlarla ayrılmış bir dize olarak alabilir miyim?
Cehaletin Somutlaştırılması

@Neil Test durumları 2 ve 3 kare değildir.
Robin Ryder

5
Sol kenarında aolmayan doğru bir test senaryosu bve her bir satırın aardışık satırlarda bfakat sol kenarlarının kademeli olduğu bir falsey test senaryosu ekleyebilir misiniz ?
Shaggy

Cehalet evet
Tehlike

Yanıtlar:


9

Brachylog (v2), 4 bayt

s\s\

Çevrimiçi deneyin!

En kolayca için her zamanki gibi tam bir program olarak çalışacak ile, bir komut satırı argümanı olarak belirtilen b standart girişe. Soru bir işlev ister ve program aynı zamanda bir işlev olarak çalışır; solda b , sağda a ve yalnızca karar yanlışsa bir istisna üreterek çıktı .

açıklama

s\s\
s     a substring of rows of {the left input}
 \…\  assert rectangular; swap row and column operations
  s   a substring of <s>rows</s> columns of {the above matrix}
      {implicit} assert that the result can be {the right input}

"Dikdörtgen iddia" açıkçası anlamsızdır, çünkü soru bunu zaten garanti eder. Programın geri kalanı, satırların ve sütunların bir alt dizesini, yani bir alt matrisi tanımlayarak bizim için ızgara bulmayı yapar.

Meta-tartışma

Daha önce benzer bir sorum vardı ; Bir soruya verilen cevapların çoğunun diğer sorulara verilen cevaplara dönüştürülebilir olmasını beklerim. Bence bu daha düzgün bir versiyon.


Burada en kısa cevap, bu yüzden kabul edeceğim.
Tehlike

7

Python 2 , 67 bayt

f=lambda a,b,r=4:b*r and f(a,b[1:],r)|f(a,zip(*b)[::-1],r-1)or a==b

Çevrimiçi deneyin!

Girişi karakter gruplarının listesi olarak alır.

Tüm alt ızgaraları dener bve aaralarında olup olmadığını kontrol eder . Alt ızgaralar, ilk sıranın çıkarılması bveya 90 derece döndürülmesi üzerine tekrarlı olarak dallanarak üretilir . Tam olarak dört rotasyondan sonra, kesilen parçanın beşit olup olmadığını kontrol edin a.


1
@mazzy Giriş ızgaralarının dikdörtgen olması gerektiğini düşünüyorum.
xnor

5

J , 21 15 8 7 bayt

1#.,@E.

Çevrimiçi deneyin!

Bolce Bussiere sayesinde -7 bayt

orijinal cevap

J , 21 15 bayt

<@[e.&,$@[<;.3]

Çevrimiçi deneyin!

FrownyFrog sayesinde -6 bayt

Nasıl

  • <@[ kutulu sol arg
  • $@[<;.3] sağ arg içindeki tüm dikdörtgenler sol arg ile aynı şekle sahiptir
  • şimdi sol ve sağ argüman olarak geçmek ...
  • sol arg sağ argümanın bir elmidir, ikisini de düzleştirdikten sonra e.&,

Bence bu olabilir<@[e.&,$@[<;.3]
FrownyFrog

Ofc, ty! Eğer bir meydan okuma istiyorsanız, ben siteyi defiled bu canavarlık
Jonah

1
-7 Bayt: +/@:,@E.. E. hemen hemen bu meydan okuma için yapılır.
Bolce Bussiere

tyvm @BolceBussiere. bu gece güncelleyeceğim.
Jonah

4

Kömür , 26 bayt

⌈⭆η⭆ι⁼θE✂ηκ⁺Lθκ¹✂νμ⁺L§θ⁰μ¹

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Bitişik alt matrisleri sayma cevabım esas alındığında , tek fark, maksimumları aldığım maçların toplamını almak yerine ve sonucun kullanımı nedeniyle örtük dize dönüşümü nedeniyle zaten bir tasarruf sağlayan bir dizedir. bayt.


4

05AB1E , 10 bayt

øŒεøŒI.å}à

Alır bbirinci girdi olarak aikinci olarak. Her iki girdi de karakter matrisi olarak.

Port of @ Mr.Xcoder 'in bu ilgili meydan okuma için 05AB1E cevabı, bu yüzden onu onayladığınızdan emin olun!

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

Açıklama:

øŒ          # Get the sublists of every column of the (implicit) input `b`
  ε         # Map each list of sublists to:
   øŒ       #  Get the sublists of every column again
            #  (now we have all sub-matrices of `b`)
     I    #  Check if the second input `a` is in this list of sub-matrices
          # After the map: check if any are truthy by taking the maximum
            # (which is output implicitly as result)



3

JavaScript (ES6) , 131 112 105 bayt

105 bayt:

f=(m,n)=>m.some((x,i)=>i<=m.length-n.length&x.some((c,j)=>n.every((l,z)=>(m[i+z]+'').indexOf(l,j)==2*j)))

Çevrimiçi deneyin!

değişiklikler:

  • m[i]içine xve n[z]içine l: Bu değişkenlerin zaten örneklendiğini tamamen unuttum
  • &&içine &: Operatörün her iki tarafı zaten boolean olduğundan, bitsel bir operatör çalışacaktır

112 bayt:

f=(m,n)=>m.some((x,i)=>i<=m.length-n.length&&m[i].some((c,j)=>n.every((l,z)=>(m[i+z]+'').indexOf(n[z],j)==2*j)))

Çevrimiçi deneyin!

değişiklikler:

  • map((c,j)=>{...}).some(s=>s)içine some((c,j)=>{...}): Yedeklilik
  • m[i+z].join()into m[i+z]+'': Diziyi dizeye dönüştürmenin daha kısa bir yolu
  • indexOf(n[z].join(),j)içine indexOf(n[z],j): yöntemle zaten dönüştüren bir dizeye indexOf n[z]

131 bayt:

f=(m,n)=>m.some((x,i)=>i<=m.length-n.length&&m[i].map((c,j)=>n.every((l,z)=>m[i+z].join().indexOf(n[z].join(),j)==2*j)).some(s=>s))

Çevrimiçi deneyin!

Okunabilir:

function f (m, n) {
  return m.some((x, i) => {
    return i <= m.length - n.length
      && m[i].map((c, j) => {
        return n.every((l, z) => {
          return m[i + z].join().indexOf(n[z].join(), j) == 2 * j
        })
      })
        .some(s => s)
  })
}

Bireysel değerleri karşılaştırmak yerine, N ızgarasından gelen çizgilerin M ızgarasının satırlarına dahil edilip edilmediğini ve öyleyse hangi indekslerde olduğunu kontrol ettim. Tüm satırlar aynı dizinden başlayarak dahil edilirse, ızgara N ızgara M'de bulunur.


2

PowerShell , 71 102 85 98 bayt

teşekkürler @Jo King; test senaryoları eklendi.

param($a,$b)!!($a|%{$p=[regex]::Escape($_)
$b|sls $p -a -ca|% m*}|group index|?{"$a"-ceq$_.Group})

Çevrimiçi deneyin!

Daha az golf:

param($a,$b)

$matches = $a|%{
    $pattern = [regex]::Escape($_)
    $b|Select-String $pattern -AllMatches -CaseSensitive|% Matches
}

$relevantGroupsByMatchPosition = $matches|group index|?{
    "$a"-ceq$_.Group  # the '$_.Group' contains matches in source order
                      # -ceq is case sensitivity equation operator
                      # -ceq performs an implicit conversion to the left operand type
}

!!($relevantGroupsByMatchPosition)  # true if the variable is not $null

1

Javascript, 150 bayt

f=(a,b)=>{_='length';for(r=i=0;i<=b[_]-a[_];i++)for(j=0;j<=b[0][_]-a[0][_];j++){u=0;a.map((l,y)=>l.map((c,x)=>u=u||b[i+y][j+x]!=c));r=r||!u;}return r}

Ç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.