J, 21-14 Bytes
Dank Meilen und (indirekt) Jonathan 7 Bytes gespart!
{.@/:#@":"0,.-
Dies ist eine Viererkette:
{.@/: (#@":"0 ,. -)
Lassen Sie uns über die Eingabe gehen 10 27 232 1000
. Die innere Gabel besteht aus drei Zinken. #@":"0
berechnet die Größen, ,.
fasst jede Größe mit ihrem negierten ( -
) Element zusammen . Bei der Eingabe 10 27 232 1000
bleibt uns Folgendes übrig:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Nun haben wir {.@/:
als äußere Zinke. Dies ist zuerst monadisch ( {.
) über dyadisch ( /:
). Das heißt, wir nehmen das erste Element des Ergebnisses von dyadic /:
. Dies sortiert sein rechtes Argument nach seinem linken Argument, was uns zu unserer Eingabe verhilft:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Dann {.
gibt uns using das erste Element dieser Liste und wir sind fertig:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Alte Version
>./@(#~]=<./@])#@":"0
Wir arbeiten immer noch an Verbesserungen. Ich habe es von 30 golfen und ich denke, das ist gut genug. Ich werde es zuerst in grundlegende Teile zerlegen:
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
So funktioniert das
>./@(#~ ] = <./@]) #@":"0
Dies ist ein monadischer Zug, aber dieser Teil ist ein Haken. Das Verb >./@(#~ ] = <./@])
wird mit dem linken Argument als Eingabe für die Hauptkette und den Größen #@":"0
als dem rechten Argument aufgerufen . Dies wird berechnet als length ( #
) over ( @
) Standardformat (":
) , d. H. Als numerische Zeichenfolge, die für die 0-Zellen (dh Mitglieder) der Eingabe ( "0
) angewendet wird .
Lassen Sie uns über die Beispieleingabe gehen 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Nun zum inneren Verb >./@(#~ ] = <./@])
. Es sieht so aus >./@(...)
, als ob dies effektiv den Maximalwert ( >./
) von ( @
) bedeutet, was darin enthalten ist (...)
. Was das Innere betrifft, ist dies ein Vierzug, der diesem Fünfzug entspricht:
[ #~ ] = <./@]
[
verweist auf das ursprüngliche Argument und ]
auf das Größenarray; 409 12 13
und 3 2 2
jeweils in diesem Beispiel. Der rechte Strich <./@]
berechnet 2
in diesem Fall die Mindestgröße . ] = <./@]
ist 0 1 1
in diesem Fall ein boolesches Array von Werten, die dem Minimum entsprechen . Übernimmt schließlich [ #~ ...
Werte aus dem linken Argument gemäß der Maske mit den rechten Argumenten. Dies bedeutet, dass die entsprechenden Elemente 0
gelöscht und 1
beibehalten werden. Also bleiben wir mit 12 13
. Schließlich wird gemäß dem oben Gesagten das Maximum genommen, was uns das korrekte Ergebnis von gibt 13
, und wir sind fertig.