Bir H cinsinden en büyük N hane sayısını bulun


25

Pozitif N tamsayısı ve genişlik W ve yükseklik H (aynı zamanda pozitif tamsayılar) olan bir ondalık basamak (0 ila 9) içeren bir program veya işlev yazın. N'nin W ve H'den daha büyük veya ona eşit olacağını varsayabilirsin.

Izgarada yatay veya dikey olarak görünen, normal okuma sırasına veya tersine yazılmış en büyük bitişik N basamaklı sayıyı yazdırın veya iade edin.

  • Rakamların çapraz çizgileri dikkate alınmaz.
  • Şebeke etrafına sarılmaz, yani periyodik sınır koşullarına sahip değildir.

Örneğin, 3 × 3 ızgara

928
313
049

olurdu 9N = 1 için çıkış olarak 94N = 2 için çıkış olarak ve 940N = 3 için çıkış olarak.

4 × 3 ızgarası

7423
1531
6810

8N = 1, 86N = 2, 854N = 3 ve 7423N = 4 için çıktı olarak olurdu .

3 × 3 ızgarası

000
010
000

1N = 1 ve 10N = 2 ve N = 3 için çıkışa sahip olacaktı (N = 3 010için de geçerlidir).

1 × 1 ızgarası

0

0N = 1 için çıkışa sahip olurdu .

Girişi uygun herhangi bir makul formatta alabilirsiniz. örneğin, ızgara, yeni bir satır ayrılmış basamak dizisi veya çok boyutlu bir dizi veya basamak listelerinin bir listesi olabilir, vb. Kılavuzun bir parçası olsaydı, çıktıda lider sıfırlara izin verilir.

Bu , bu yüzden bayttaki en kısa kod kazanıyor, ancak algoritmalarının hesaplama açısından verimli olduğunu gösterebilecek cevaplar için brownie puanları da (yani daha yüksek puanlar) vereceğim.


1
Baştaki sıfırları basmamıza izin var mı?
PurkkaKoodari

@ Pietu1998 "Şebekenin bir parçası olsaydı çıktıda lider sıfırlara izin verilir."
Calvin'in Hobileri

Yanıtlar:


0

Pyth, 22 19 bayt

Jakube sayesinde 3 bayt.

seSs.:RQ.n,L_MdCB.z

Çevrimiçi deneyin.

Baştaki sıfırları basmamıza izin verilirse, kod 18 bayttır:

eSs.:RQ.n,L_MdCB.z

Önde gelen sıfır içeren bir dizgenin bir tamsayıya dönüştürülmesi ile gerçekleştirilebilir s.
Jakube

9

CJam, 39 36 35 34 bayt

qN/)i\[{zW%_}4*]ff{_,@e<ew:i}e_:e>

Sadece hızlı, @Dennis uyanmadan önce: P

Çevrimiçi deneyin .

açıklama

Temel algoritma, ızgaranın dört rotasyonunun hepsini almak ve her bir sırayı uzunluk parçalarına N(veya sıra uzunluğu, hangisi daha küçükse) bölmektir. Sonra topakları inç'e çevirip en büyüğünü al

qN/             Split input by newlines, giving an array of lines
)i\             Drop N from the array and put at bottom
[        ]      Wrap in array...
 {    }4*         Perform 4 times...
  zW%_              Rotate grid anticlockwise and push a copy
                Note that this gives an array of 5 grids [CCW1 CCW2 CCW3 CCW4 CCW4]
ff{         }   For each grid row, mapping with N as an extra parameter...
   _,             Push length of row
     @e<          Take min with N
        ew        Split into chunks
          :i      Convert to ints
e_              Flatten that array
:e>             Take cumulative max

Meraktan, fewözel bir şey yapar mı , yoksa üç ayrı komut mu var?
ETHproductions

3
@ETHproductions Aslında ewkullanarak uygulanan operatörf , ya da "fazladan parametreli harita" . Örneğin, ["abcd" "efgh"] 2 fewsonuçlanır [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000

Gotcha :) Yine de ilginç bir tesadüf.
ETHProductions

Tek sorun, @Dennis uyandığında, başkalarının yine de kaybettiğidir. ;)
kirbyfan64sos 6:15

-2

vodvil

Henüz kesin bir cevap değil ama muhtemelen şöyle çalışacak:

blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{3.+ti}m[>]
854
blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{4.+ti}m[>]
7423

N ve ızgara tam olarak nasıl verilir?


Biri tipik olarak işe yarayana kadar bir cevap göndermek için beklemelidir. OP için herhangi bir sorunuz postaya yorum olarak verilmelidir.
Alex A.

Kod aslında işe yarıyor.
mroman
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.