J, 21 14 bayt
Mil ve (dolaylı olarak) Jonathan sayesinde 7 bayt kurtardı!
{.@/:#@":"0,.-
Bu dört zincirlidir:
{.@/: (#@":"0 ,. -)
Girişin üzerinden geçelim 10 27 232 1000
. İç çatal üç çataldan oluşur. #@":"0
boyutları hesaplar, ,.
her bir boyutu negate ( -
) üyesiyle düzenler . Giriş için 10 27 232 1000
, biz bununla kaldı:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Şimdi, {.@/:
dış diş olarak bizde . Bu, ilk önce ( {.
) dyadic sort ( /:
) üzerinde monadiktir . Yani, biz dyadiç sonucunun ilk unsurunu alacağız /:
. Bu doğru argümanını sol argümanına göre sıralar; bu da bize girdilerimizi verir:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Ardından, {.
bize bu listenin ilk öğesini verir ve biz yapılır:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Eski versiyon
>./@(#~]=<./@])#@":"0
Hala iyileştirmeler üzerinde çalışıyorum. 30'dan golf oynadım ve bence bu yeterince iyi. İlk önce temel parçalara ayıracağım:
size =: #@":"0
max =: >./
min =: <./
over =: @
right =: ]
left =: [
selectMin =: #~ right = min over right
f =: max over selectMin size
f 3 4 5
5
f 3 4 53
4
f 343 42 53
53
İşte bu nasıl çalışıyor.
>./@(#~ ] = <./@]) #@":"0
Bu monadik bir tren, ancak bu kısım bir kanca. Fiil >./@(#~ ] = <./@])
, ana zincire girdi olarak sol argümanla #@":"0
ve doğru argüman olarak tanımlanan boyutlarla çağrılır . Bu, length ( #
) over ( @
) default format ( ":
), yani girişin ( "0
) 0 hücrelerine (yani üyelerine) uygulanacak sayısal dize olarak hesaplanır .
Örnek girdiden geçelim 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Şimdi iç fiil için >./@(#~ ] = <./@])
. Öyle görünüyor >./@(...)
etkili bir maksimum değeri (yani, >./
bir) ( @
içinde ne) (...)
. İçeriye gelince, bu dört tren, bu beş trene eşdeğer:
[ #~ ] = <./@]
[
orijinal argümana ve ]
boyut dizisine atıfta bulunur; 409 12 13
ve 3 2 2
bu örnekte sırasıyla. Doğru çatal, bu durumda <./@]
minimum boyutu hesaplar 2
. bu durumda ] = <./@]
, asgari değere eşit bir Boole değerleri dizisidir 0 1 1
. Son olarak, [ #~ ...
sağ argüman maskesine göre sol argümandan değerler alır. Bu, karşılık gelen elemanların 0
düşürüldüğü ve 1
tutulduğu anlamına gelir . Öyleyse kaldı 12 13
. Son olarak, yukarıdakilere göre, en yüksek sonuç alınır, bize doğru sonucu verir 13
ve yapılır.