Suchen Sie die größte und die kleinste Zahl in einem Array

29

Die Aufgabe

Die Aufgabe ist sehr einfach. Bei einem Array, das nur Ganzzahlen und Zeichenfolgen enthält , geben Sie die größte und die kleinste Zahl aus.

Testfälle

Input: [1, 2, 3, 4, 5, 6, 7, 8]
Output: 1, 8

Input: [5, 4, 2, 9, 1, 10, 5]
Output: 1, 10

Input: [7, 8, 10, "Hello", 5, 5]
Output: 5, 10

Zahlen in Zeichenfolgen werden nicht als Ganzzahlen betrachtet:

Input: [1, 2, 3, 4, "5"]
Output: 1, 4

Wenn es nur eine ganze Zahl gibt, ist dies sowohl die größte als auch die kleinste ganze Zahl:

Input: [1]
Output: 1, 1

Input: ["1", "2", "3", "4", 5]
Output: 5, 5

Regeln

  • Sie können davon ausgehen, dass ein Array immer mindestens eine Ganzzahl enthält.
  • Alle ganzen Zahlen sind positiv (größer als 0)
  • Die Reihenfolge der Ausgabe spielt keine Rolle.
  • Das ist , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
  • Zeichenfolgen können alle druckbaren ASCII-Zeichen ( 32 - 126) enthalten und sind nicht leer.
Adnan
quelle
Wie werden Zeichenfolgen, die Anführungszeichen enthalten, in der Eingabe dargestellt?
Feersum
@feersum Kommt es nicht auf deine Sprache an?
Martin Ender
@feersum Mit Escape-Zeichen wahrscheinlich, aber wenn die Sprache das nicht schafft, ist das okay.
Adnan
@ MartinBüttner Wenn die Eingabe von stdin stammt, sollte es nicht darauf ankommen, welche Sprache verwendet wird.
Feersum
3
@feersum Das ist neu für mich. Sogar von STDIN [1, 2, 3] 1 2 3und {1; 2; 3}sind alle gültigen Eingabeformate, daher verstehe ich nicht, warum dies für von STDIN empfangene String-Literale anders sein sollte.
Martin Ender

Antworten:

9

Im Ernst, 9 6 Bytes

,ì;M@m

Probieren Sie es online

Wie es funktioniert

,                              Read list input
 ì                             Remove everything but numbers from it
  ;                            Make a copy
   m                           Extract its min value
    @M                         Extract the other one's max value
                               Implicit output (max then min)
Quintopie
quelle
Ah ja, ich habe nach so einem Befehl gesucht. Die Suche nach Dokumenten ist jedoch nicht einfach.
Quintopia
Genau. Die Dokumente sind mein nächstes großes Ziel.
Mego
11

JavaScript (ES6), 54 56

Bearbeite 2 Bytes, die dank @Neil gespeichert wurden

Hinweis: x===+xIst genau dann wahr, wenn xes sich um eine Zahl handelt

a=>[Math.max(...a=a.filter(x=>x===+x)),Math.min(...a)]
edc65
quelle
3
Warum das äußere ()s?
Neil
@Neil was äußeres ()? Warum um alles in der Welt sollte ich äußere () haben?
Edc65
Dies gibt eine Funktion zurück, die Sie noch aufrufen müssen. (oder entfernen Sie einfach ein =>)
Michael Theriot
2
Ja, es ist eine anonyme Funktion. Es ist durchaus üblich, eine Antwort in JavaScript @MichaelTheriot
edc65
@MichaelTheriot Standardmäßig erlauben wir Einsendungen, eigenständige Funktionen zu sein, anstatt immer vollständige Programme zu benötigen.
Alex A.
8

Pyth, 14 11 10 Bytes

hM_BS^I#1Q

Probieren Sie es online aus. Testsuite.

Erläuterung

  • Q: ausgewertete Eingabe
  • #: filtere das nach:
    • I: der Wert ist der gleiche nach:
      • ^…1 Anheben auf Strom 1
  • S: das sortieren
  • _B: Array erstellen [previous, reversed(previous)]
  • hM: nimm von jedem Gegenstand den ersten

Der schwierigste Teil ist das Entfernen von Strings, was derzeit 4 Bytes dauert. Der derzeitige Ansatz funktioniert aufgrund ^<str>1der Verwendung der ersten kartesischen Potenz der Sequenz (im Grunde genommen der Liste der Zeichen der Zeichenfolge), ^<int>1ist jedoch nur die Identitätsfunktion.

PurkkaKoodari
quelle
Hrm, Sie könnten auch verwenden *#_1Q, um die Zeichenfolgen zu entfernen, die kürzer wären, wenn eine Variable auf negativ initialisiert würde ...
FryAmTheEggman
7

Python 2, 42 Bytes

In Python 2 sind Ganzzahlen beim Vergleichen immer kleiner als Zeichenfolgen, sodass eine einfache min(s)Zahl die kleinste Ganzzahl findet. Wenn wir jedoch das Maximum finden, müssen wir zuerst die Zeichenfolgen herausfiltern. Die anonyme Funktion akzeptiert eine Sequenz und gibt ein Tupel mit dem Minimum und Maximum zurück.

lambda s:(min(s),max(x for x in s if''>x))

Beispiel:

[1,'77', 6, '', 4] -> (1, 6)
Logik-Ritter
quelle
3
Du brauchst lambda a:vorher ein Steckenbleiben.
Türklinke
if x>0oder if''>xein Byte speichern.
Grc
@Doorknob, jetzt Lambda wie vorgeschlagen.
Logic Knight
1
@Dennis, das wusste ich nicht. Ich habe die Lösung bearbeitet, um zu verdeutlichen, dass der Vergleich nur in Python 2 funktioniert.
Logic Knight
1
Aufbau: lambda s:(min(s),-min(-1*_ for _ in s))(39 Bytes)
Fran Borcic
7

Gelee, 8 Bytes

|f¹Ṣ0,1ị

Probieren Sie es online!

Hintergrund

In einer perfekten Welt würde es ausreichen, die Liste mit einer abgeflachten Version von sich selbst zu schneiden. Strings sind einfach Listen von Zeichen in Jelly. Während die ursprüngliche Liste also Ganzzahlen und Strings enthält, enthält die abgeflachte Version Ganzzahlen und Zeichen, sodass nur die Ganzzahlen in der Schnittmenge verbleiben.

In der realen Welt ergeben sowohl die Parser der Eingabe- als auch der String-Literale Zeichen anstelle von Zeichenfolgen der Länge 1. Die einzige Möglichkeit, eine einzelne Zeichenfolge an eine Funktion zu übergeben, besteht darin, sie "manuell" zu codieren, wie z. B. [”a]a Zeichen in ein Array eingeschlossen.

Dies würde ein Byte für insgesamt 7 Bytes sparen ( Online ausprobieren! ).

fFṢ0,1ị

Da dies wahrscheinlich nicht akzeptabel ist, benötigen wir auch eine Möglichkeit, Zeichen von ganzen Zahlen zu unterscheiden.

Jellys bitweise Atome versuchen verzweifelt , ihre Argumente in ganze Zahlen umzuwandeln. Sie beginnen mit der Vektorisierung, bis sie auf Arten der Tiefe 0 (Zahlen oder Zeichen) stoßen, und versuchen dann, sie in ganze Zahlen umzuwandeln. Für ein Zeichen, das eine Ganzzahl darstellt, ist dies erfolgreich. Für andere gibt ein dyadisches, bitweises Atom einfach auf und gibt 0 zurück .

Zum Beispiel ergibt sich eine bitweise ODER-Verknüpfung der Liste [1, "2", "34", "-5", "a", "bc"]mit sich selbst

[1, 2, [3, 4], [0, 5], 0, [0, 0]]

Durch das Überschneiden des Ergebnisses mit der ursprünglichen Liste werden die Arrays und Ganzzahlen entfernt, die in der ursprünglichen Liste nicht vorhanden waren.

Wie es funktioniert

|f¹Ṣ0,1ị  Main link. Input: A (list)

|         Bitwise OR the list A with itself.
 f¹       Filter the result by presence in A.
   Ṣ      Sort the resulting list of integers.
    0,1ị  Retrieve the elements at those indexes.
          Indices are 1-based and modular in Jelly, so 0 is the last (maximum),
          and 1 is the first (minimum).
Dennis
quelle
6

Mathematica, 20 Bytes

MinMax@*Select[#>0&]

Testfälle

MinMax@*Select[#>0&]@{1,2,3,4,"5"}
(* {1,4} *)
njpipeorgan
quelle
1
Warum ist da der *da? Es sieht so aus, als könnten Sie 19 erreichen, indem Sie es einfach abschneiden.
Ein Simmons
1
@ASimmons Es ist notwendig. MinMax@Select[#>0&]ist keine gültige reine Funktion.
njpipeorgan
1
@ASimmons @*ist die Funktionszusammensetzung, wohingegen @es die Funktionsanwendung ist.
Martin Ender
1
MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]liefert eine korrekte Antwort
A Simmons
1
@ASimmons Versuchen Sie, MinMax@Select[# > 0 &]ein Symbol zuzuweisen , oder werten Sie es einfach aus.
njpipeorgan
6

Rubin, 57 36 29 Bytes

Neuling hier, also ich weiß nicht, ob es einen Standard oder allgemein akzeptierten Ort / Weg gibt, um die verwendeten Bytes zu berechnen, jede Hilfe wäre sehr dankbar!

Bearbeitet nach dem Kommentar von manatwork & Doorknob!

->n{(n.map(&:to_i)&n).minmax}

Prüfung

2.3.0 :076 > f=->n{[(n.map(&:to_i) & n).min, (n.map(&:to_i) & n).max]}
 => #<Proc:0x007ff7650ee868@(irb):76 (lambda)>
2.3.0 :077 > f[[7, 8, 10, "Hello", 5, 5]]
 => [5, 10]
Nirajan Pokharel
quelle
1
36 Zeichen:->n{[(x=n.map(&:to_i)&n).min,x.max]}
Manatwork
2
29 Bytes mit minmax:->a{(a.map(&:to_i)&a).minmax}
Türknauf
5

CJam, 15 13 Bytes

{_:z&$2*_,(%}

Ein unbenannter Block (Funktion), der das Eingabearray auf dem Stapel erwartet und das Ausgabearray an seiner Stelle belässt.

Führen Sie alle Testfälle aus.

Erläuterung

_     e# Duplicate.
:z    e# Map over list: a) take abs() of integer elements (a no-op) or b) wrap strings
      e# in an array.
&     e# Set intersection: only the integers will appear in both arrays.
$     e# Sort.
2*    e# Repeat array twice (to make the code work with single-integer input).
_,    e# Duplicate, get length N.
(%    e# Decrement, get every (N-1)th element, i.e. the first and the last.
Martin Ender
quelle
Ich habe e) und e (zu aditsu sugeested. Er hat das nicht akzeptiert
username.ak
@ username.ak Ich denke nicht, dass diese wirklich nützlich sind. Es ist unwahrscheinlich, dass Aditsu einen Operator mit zwei Zeichen hinzufügt, der nur ein einziges Byte gegenüber der aktuellen Lösung spart, und ich denke auch, dass es nützlichere Funktionen geben muss, um diese zu verwenden.
Martin Ender
es werden 3 Bytes gespart:q~_e(ae)a+
username.ak
@ username.ak Naja, das setzt das voraus e(und e)würde Strings oder ähnliches ignorieren, was inkonsistent erscheint. Und wenn es beinhaltet Vergleich mit Streichern wäre es wahrscheinlich auf die gleiche Weise versagen , dass $und e>nicht ganze Zahlen mit Strings vergleichen.
Martin Ender
5

Haskell, 41 39 Bytes

f x=[minimum,maximum]<*>[[i|Left i<-x]]

In Haskell alle Elemente einer Liste haben von der gleichen Art sein, also kann ich nicht mischen Integerund String. Es gibt jedoch den EitherTyp zum Kombinieren von zwei Typen zu einem einzigen. Die Eingabeliste ist daher vom Typ Either Integer String1 . ffiltert die Ganzzahlen, entfernt dieEither Wrapper, setzt die Liste als einzelnes Element in eine neue Liste (zB [[1,2,3]]), so dass<*> die im ersten Argument angegebenen Funktionen angewendet werden können.

Anwendungsbeispiel: f [Left 1, Left 3, Right "Hello", Left 2] -> [1,3].

Edit: @xnor gebracht <*> ins Spiel gebracht und 2 Bytes gespeichert. Vielen Dank!


1 tatsächlich ist es im zweiten Typ vollständig polymorph, da die StringEigenschaft nie verwendet wird.

nimi
quelle
Schöne Idee mit dem Pattern Match. Sie können zwei Zeichen mit einer umgekehrten Karte f x=[minimum,maximum]<*>[[i|Left i<-x]]
speichern
@xnor: sehr nett. Vielen Dank!
nimi
5

jq, 21 Zeichen

[.[]|numbers]|min,max

Probelauf:

bash-4.3$ bin/jq '[.[]|numbers]|min,max' <<< '[7, 8, 10, "Hello", 5, 5]'
5
10

Online-Test:

Mann bei der Arbeit
quelle
4

Mathematica, 28 Bytes

MinMax[#/._String->Nothing]&
Ein Simmons
quelle
Ich verstehe immer noch nicht Ihre Besessenheit mit Nothing... Es bedeutet nichts Besonderes ... Auch für 23 Bytes:MinMax@*Select[NumberQ]
LegionMammal978
@ LegionMammal978 Nutze "alle ganzen Zahlen sind positiv"! Siehe meine Antwort.
Njpipeorgan
1
Nette Lösungen, Leute, ich hätte es mir überlegen sollen! @ LegionMammal978, Nothinghat eine besondere Bedeutung. Seit Mathematica 10.2 wird es automatisch aus Listen entfernt.
Ein Simmons
@ LegionMammal978 Nothingist eine dokumentierte Funktion in den neuesten Versionen.
Mr.Wizard
4

PHP, 50 48 Bytes

<?=min($a=array_filter($a,is_int)).', '.max($a);
PaulSkinner
quelle
1
Schlage mich um 2 Minuten :).
TMH
2
Es ist generell verboten anzunehmen, dass sich die Eingabe bereits in einer Variablen befindet. Übrigens, Sie können zwei Bytes sparen, indem Sie das " 'Around" entfernen is_int.
Blackhole
@Blackhole Danke. Nicht realisiert. Ich habe Ihre Zitat Entfernung genutzt :)
PaulSkinner
4

Retina , 71

Vielen Dank (wie immer) an @ MartinBüttner für die Golfhilfe.

Nicht konkurrenzfähig in Bezug auf Golf, aber es ist interessant, eine Ganzzahl-Blasensortierung in Retina zu implementieren.

Angenommen, alle Zeichenfolgen in der Eingabe werden in "doppelte Anführungszeichen gesetzt und enthalten keine Anführungszeichen \".

A`"
¶

\d+
$&$*a $&$*a
+`\b(a+) +\1(a+)\b
$1$2 $1
 +[a ]+ +

(a)+
$#1

Die Eingabe ist durch Zeilenumbrüche getrennt.

Probieren Sie es online aus.

Digitales Trauma
quelle
Ich denke, Sie können <space>.*<space>in der vorletzten Stufe wegen der Gier verwenden.
FryAmTheEggman
4

Mathematica , 14

#&@@@MinMax@#&

Beispiel:

tests = {
   {1, 2, 3, 4, 5, 6, 7, 8},
   {5, 4, 2, 9, 1, 10, 5},
   {7, 8, 10, "Hello", 5, 5},
   {1, 2, 3, 4, "5"},
   {1},
   {"1", "2", "3", "4", 5}
 };

# & @@@ MinMax@# & /@ tests
{{1, 8}, {1, 10}, {5, 10}, {1, 4}, {1, 1}, {5, 5}}

Erläuterung:

Wenn MinMaxbekommt nicht-numerische Eingabe reduziert es das Problem so weit wie sie kann, dann Begriffe in Blätter gewickelt Minund Max:

MinMax @ {7, 8, 10, "Hello", 5, 5}
{Min[5, "Hello"], Max[10, "Hello"]}

Aufgrund der automatischen Reihenfolge folgen die Zeichenfolgen ganzen Zahlen.

ApplyBei levelspec {1} wird die Kurzform @@@verwendet, um das erste Argument nichtatomarer Elemente abzurufen . Beachten Sie, dass 5hier unberührt bleibt:

foo @@@ {5, Max[10, "Hello"]}
{5, foo[10, "Hello"]}
Mr.Wizard
quelle
3

Oracle SQL 11.2, 189 Byte

SELECT MIN(TO_NUMBER(i)),MAX(TO_NUMBER(i))FROM(SELECT REGEXP_SUBSTR(:1,'[^,]+',1,LEVEL)i FROM DUAL CONNECT BY LEVEL<REGEXP_COUNT(:1,',')+2)WHERE TRIM(TRANSLATE(i,' 0123456789',' '))IS NULL;

Nicht golfen

SELECT MIN(TO_NUMBER(i)),MAX(TO_NUMBER(i)) 
FROM  (
        SELECT REGEXP_SUBSTR(:1,'[^,]+',1,LEVEL)i 
        FROM   DUAL 
        CONNECT BY LEVEL<REGEXP_COUNT(:1,',')+2
      )
WHERE TRIM(TRANSLATE(i,' 0123456789',' '))IS NULL;

Die Unterabfrage analysiert das Array und teilt es, um eine Ansicht mit einem Element pro Zeile zu füllen. Dann werden die nicht numerischen Elemente herausgefiltert.

Ich wünschte, ich hätte einen Weg finden können, dies mit LEAST und GREATEST zu tun, aber ich hätte kein Glück, wie man mit dem Array als Parameter umgeht.

Jeto
quelle
Sie belassen das []im Array, damit Sie nicht das Maximum oder das Minimum auswählen, wenn es sich um das erste oder das letzte Element des Arrays handelt. Sie benötigen auch keine WHERE-Klausel. Sie wählen bereits Aggregate aus, sodass Sie nicht filtern müssen. Suchen Sie nach numerischen Zeichen in Ihren regulären Ausdrücken, und drücken Sie die Zahlenumwandlung auf die Unterabfrage (sehr geringe Gefahr von geschobenen Prädikaten), und es werden 126 Bytes:select min(i),max(i)from(select to_number(regexp_substr(&1,'\d+',1,level))i from dual connect by level<=regexp_count(&1,'\d'))
Ben
+In der zweiten regulären Ausdrücke wird hier kein benötigt , da es keine Rolle spielt, ob Sie einige zusätzliche Zeilen generieren (ein Byte wird gespeichert). Beachten Sie jedoch auch, dass eine Zeichenfolge, die nur aus Zahlen besteht, hier nicht ignoriert wird. das braucht überladene funktionen im selben paket, ist also überhaupt nicht hübsch.
Ben
3

Vimscript, 25 Bytes

g/"/d
sort n
t.
t.
2,$-1d

Ja, das stimmt, Vimscript.

Erwartet Eingaben in das Formular

1
2
3
4
"5"

Und gibt in der Form aus

1
4

Erläuterung:

g/"/d    delete all lines that contain quotes
sort n   sort numerically
t.       duplicate the first line
t.       duplicate it again
2,$-1d   delete from line 2 to line (END-1)

Die erste Zeile muss zweimal dupliziert werden , um den Kantenfall einer Eingabe einer einzelnen Zahl zu behandeln. Dies liegt daran, dass der letzte Befehl sich beschwert, wenn er erreicht ist und nur zwei Zeilen enthält, da es sich letztendlich 2,1dum einen Rückwärtsbereich handelt.

Türknauf
quelle
3

Perl 44 39 + 3 = 41 Bytes

@a=sort{$a-$b}grep!/"/,@F;$_="@a[0,-1]"

Benötigt -pa Flaggen:

$ perl -pae'@a=sort{$a-$b}grep!/"/,@F;$_="@a[0,-1]"' <<< '1 2 3 5 4'
1 5
$ perl -pae'@a=sort{$a-$b}grep!/"/,@F;$_="@a[0,-1]"' <<< '1 2 3 4 "5"'
1 4

Vielen Dank an @manatwork für das Abschneiden einiger Bytes

undlrc
quelle
Welche Perl-Version? Für Ihr zweites Beispiel erhalte ich ein anderes Ergebnis: pastebin.com/judJys5g
Manatwork
@ Manatwork Sie sind richtig, Abbildung kann ich nicht entfernensort{$a-$b}grep...
andlrc
Die Anforderung besagt nicht, dass die Ausgabe genau wie in den Beispielen formatiert werden muss, und in dieser Aufgabe geht es eindeutig nicht um die Formatierung. So viele von uns haben nur das verwendet, was in der Sprache ihrer Wahl handlicher ist. In Perl würde ich es tun , wie folgt: $_="@a[0,-1]".
Manatwork
Ein Zeichen kürzer Filterung: grep!/"/.
Manatwork
Es heißt, das Array besteht aus Zahlen und Zeichenfolgen. Alle Beispiele in der Frage sind mit doppelten Anführungszeichen versehen, aber ich sehe nichts, was besagt, dass sie nicht mit einfachen Anführungszeichen versehen werden können. Ich denke, !/\D/ist stattdessen !/"/für ein weiteres Byte notwendig .
msh210
3

Julia, 35 Bytes

x->extrema(filter(i->isa(i,Int),x))

Dies ist eine Lambda-Funktion, die ein Array akzeptiert und ein Tupel von ganzen Zahlen zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.

Julia verfügt über eine integrierte Funktion extremazum Abrufen der minimalen und maximalen Elemente eines Arrays als Tupel. Da das Array jedoch auch Zeichenfolgen enthalten kann, müssen diese zuerst herausgefiltert werden. Wir können dies tun, indem wir testen, ob jedes Element eine Ganzzahl ist isa.

Alex A.
quelle
3

Japt, 23 Bytes

[V=Uf_bZÃn@X-Y})g Vw g]

Online testen!

Wie es funktioniert

[V=Uf_  bZÃ n@  X-Y})g Vw g]
[V=UfZ{ZbZ} nXY{X-Y})g Vw g]

UfZ{ZbZ}   // Filter out the items Z in U where Z.b(Z) is falsy.
           // For numbers, this the original number, which is always non-0 (non-falsy).
           // For strings, this returns Z.indexOf(Z), which is always 0 (falsy).
nXY{X-Y}   // Sort by subtraction. Small items move to the front, large to the back.
V=         // Set variable V to the resulting array.
)g Vw g    // Take the first item in V, and the first in V.reverse().
[       ]  // Wrap them in an array so both are sent to output.
ETHproductions
quelle
3

Bash, 40 31 30 Bytes

sort -n|sed /\"/d|sed '1p;$p;d'

Benötigt eine zeilengetrennte Liste:

$ echo $'5\n4\n2\n9\n1\n"10"\n5' | sort -n|sed /\"/d|sed '1p;$p;d'
1
9

Danke an @manatwork , um ein paar Bytes zu sparen

undlrc
quelle
sed '1p;$p;d'Speichert ein Byte.
Dennis
3

Power Shell, 53 36 Bytes

@($args[0]|?{$_-is[int]}|sort)[0,-1]

17 Bytes dank @goric gespeichert

OOOF ... PowerShell spielt beim Casting normalerweise ziemlich schnell und locker, was normalerweise gut zum Golfen ist, aber hier schadet es.

Nimmt unsere Eingabe $args[0]und leitet sie in eine Where-ObjectAnweisung (the ?) weiter, die nur Ganzzahlen auswählt und sie entlang der Pipeline weiterleitet, wobei alles andere verworfen wird. Da dynamisches Re-Casting für Sie spontan im Hintergrund stattfindet (z. B. 1+"5"Rückkehr)6 PowerShell vollkommen gültig), müssen wir den -isOperator verwenden um zwischen den Datentypen zu unterscheiden.

Von dort leiten wir diese Sammlung in Sort-Object, die die ganzen Zahlen vom kleinsten zum größten sortiert. Das äußere ()Element ist erforderlich, damit wir auf das erste und das letzte Element mit [0,-1](dh dem kleinsten und dem größten) verweisen können. Beachten Sie jedoch, dass das äußere Element auch erforderlich ist @, um die Ausgabe von sortals Array zu erzwingen, wenn nur ein Objekt vorhanden ist (als Ergebnis von) das? oder nur ein Objekt wurde eingegeben).

AdmBorkBork
quelle
1
Schauen Sie sich hier den -isTypoperator an . Ich glaube , Sie ersetzen könnte .GetType().Name-eq"Int32"mit -is[int]zu sparen 17 Bytes
Gorić
@goric Super genial! Danke für das tolle Golfen!
AdmBorkBork
3

MATL , 23 Bytes

"@Y:tX%1)2\?x]N$htX<wX>

Probieren Sie es online!

"       % implicitly input cell array. For loop that iterates on each cell
  @     %   push each cell
  Y:    %   cell's contents (either a number or a string)
  tX%   %   duplicate and push class. This will produce 'char'  or 'double'
  1)    %   get first letter: either 'c' or 'd'
  2\    %   is its ASCII code odd?
  ?     %   if so...
    x   %     delete (it's a string)
  ]     %   end if
  N$h   %   concatenate all stack into an array. This array will contain up to
        %   three numbers: minimum up to now, maximum up to now, new value (if any)
  tX<   %   duplicate. Push minimum
  wX>   %   swap. Push maximum.
        % implicitly end for
        % implicitly display stack contents
Luis Mendo
quelle
Oh, mein schlechtes: p. Gute Antwort :)
Adnan
@Adnan Danke! Ein bisschen zu lang :-)
Luis Mendo
2

JavaScript (ES5), 105 Byte

function a(b){m=Math;b=b.filter(function(c){return c===+c});alert(m.min.apply(m,b)+','+m.max.apply(m,b))}

Verwendung: a([1,2,3,'4'])

Nur mal ausprobieren :)

"Ungolfed":

function a(b){
  m=Math;
  b=b.filter(function(c){
    return c===+c
  });
  alert(m.min.apply(m,b) + ',' + m.max.apply(m,b))
}
Alex
quelle
2

Pyth, 11 Bytes

hJSf!>TkQeJ

Erläuterung:

   f    Q   - filter([V for T in >], Q)
    !>Tk    - not(T>"")
  S         - sorted(^)
hJ       eJ - print first and last element

Probieren Sie es hier aus!

Blau
quelle
2

Perl 6 , 25 Bytes

Die offensichtliche Antwort wäre dieses WhateverCode Lambda

*.grep(Int).minmax.bounds

Wenn es ein volles Programm sein muss

put get.words».&val.grep(Int).minmax.bounds

Die Eingabe für dieses vollständige Programm ist eine durch Leerzeichen getrennte Liste von Werten


Verwendung

# give it a lexical name
my &code = *.grep(Int).minmax.bounds;

say code [1, 2, 3, 4, 5, 6, 7, 8];  # (1 8)
say code [5, 4, 2, 9, 1, 10, 5];    # (1 10)
say code [7, 8, 10, "Hello", 5, 5]; # (5 10)
say code [1, 2, 3, 4, "5"];         # (1 4)
say code [1];                       # (1 1)
say code ["1", "2", "3", "4", 5];   # (5 5)

say code []; # (Inf -Inf)
Brad Gilbert b2gills
quelle
2

𝔼𝕊𝕄𝕚𝕟 16 Zeichen / 20 Byte

[МƲ(ï⇔⒡≔=+$⸩,МƵï

Try it here (Firefox only).

Nicht schlecht nicht schlecht...

Erläuterung

Dies gibt ein Array aus, das sowohl das Maximum als auch das Minimum enthält. (ï⇔⒡≔=+$⸩,filtert grundsätzlich alle Zeichenfolgen in der Eingabe heraus, МƲerhält das Maximum in der Eingabe undМƵ erhält das Minimum.

Nur ein Hinweis: Dies ist die erste Herausforderung , wo ich verwenden bekommen , was im Grunde verwandelt sich ï⇔in ï=ï.

Mama Fun Roll
quelle
2

Python 3, 56 Bytes

lambda x:[m(t for t in x if str(t)!=t)for m in(min,max)]

Probieren Sie es online auf Ideone .

Dennis
quelle
2

APL (Dyalog) , 13 Bytes

(⌊/,⌈/)⎕AV~⍨∊

Probieren Sie es online!

 enlist (flatten - das macht alle Strings zu Zeichen in der großen Liste)

⎕AV~⍨ Entfernen Sie alle Zeichen in A tomic V ector entfernen (der Zeichensatz - hinterlässt Zahlen)

() Wenden folgende stillschweigende Funktion an:

⌊/ das Minimum über

, angehängt an

⌈/ der Maximus über

Adam
quelle
2

Java (OpenJDK 8) , 124 Byte

a->{int s[]={0,0},t;for(Object i:a)try{t=(int)i;s[0]=s[0]<1|t<s[0]?t:s[0];s[1]=s[1]<t?t:s[1];}catch(Exception e){}return s;}

Probieren Sie es online!

Java 8 Lambda-Funktion, nimmt Array als Eingabe und gibt Array aus {min, max} . Nicht konkurrierend, da die Eingabe ein Integer-Array sein muss.

Fix und -1 Byte dank Kevin Cruijssen

HyperNeutrino
quelle
Sie können dies konkurrieren lassen, indem Sie eine Liste von Objekten erstellen und prüfen, ob ein Element eine Ganzzahl oder eine Zeichenfolge ist.
Kevin Cruijssen
@ KevinCruijssen getan, danke
HyperNeutrino
<iJetzt gibt es einen Fehler ohne Ganzzahlumwandlung. Außerdem funktioniert Ihr ursprünglicher Code (und auch dieser) nicht min, da er immer 0für ausgegeben wird min. Hier ist eine mögliche Lösung. EDIT: Try-Catch scheint 1 Byte kürzer zu sein als der if(i instanceof Integer).
Kevin Cruijssen
@ KevinCruijssen oh nicht bemerkt, danke!
HyperNeutrino
1

Jolf, 20 Bytes

Ich kann wahrscheinlich Golf spielen ... Ich muss kürzere Lösungen für die Typprüfung implementieren.

γ fxd='nF~tH0ͺZkγZKγ
 _fx                 filter the input
    d='nF~tH0        checking for number type
γ                    call that "γ"
             ͺ       pair
              ZkγZKγ  the min and max of the array
Conor O'Brien
quelle