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. #@":"0berechnet die Größen, ,.fasst jede Größe mit ihrem negierten ( -) Element zusammen . Bei der Eingabe 10 27 232 1000bleibt 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 #@":"0als 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 13und 3 2 2jeweils in diesem Beispiel. Der rechte Strich <./@]berechnet 2in diesem Fall die Mindestgröße . ] = <./@]ist 0 1 1in 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 0gelöscht und 1beibehalten 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.