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 Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
- Zeichenfolgen können alle druckbaren ASCII-Zeichen (
32 - 126
) enthalten und sind nicht leer.
[1, 2, 3]
1 2 3
und{1; 2; 3}
sind alle gültigen Eingabeformate, daher verstehe ich nicht, warum dies für von STDIN empfangene String-Literale anders sein sollte.Antworten:
Im Ernst,
96 BytesProbieren Sie es online
Wie es funktioniert
quelle
JavaScript (ES6), 54
56Bearbeite 2 Bytes, die dank @Neil gespeichert wurden
Hinweis:
x===+x
Ist genau dann wahr, wennx
es sich um eine Zahl handeltquelle
()
s?Pyth,
141110 BytesProbieren Sie es online aus. Testsuite.
Erläuterung
Q
: ausgewertete Eingabe#
: filtere das nach:I
: der Wert ist der gleiche nach:^…1
Anheben auf Strom 1S
: das sortieren_B
: Array erstellen[previous, reversed(previous)]
hM
: nimm von jedem Gegenstand den erstenDer schwierigste Teil ist das Entfernen von Strings, was derzeit 4 Bytes dauert. Der derzeitige Ansatz funktioniert aufgrund
^<str>1
der Verwendung der ersten kartesischen Potenz der Sequenz (im Grunde genommen der Liste der Zeichen der Zeichenfolge),^<int>1
ist jedoch nur die Identitätsfunktion.quelle
*#_1Q
, um die Zeichenfolgen zu entfernen, die kürzer wären, wenn eine Variable auf negativ initialisiert würde ...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.Beispiel:
quelle
lambda a:
vorher ein Steckenbleiben.if x>0
oderif''>x
ein Byte speichern.lambda s:(min(s),-min(-1*_ for _ in s))
(39 Bytes)Gelee, 8 Bytes
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! ).
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 selbstDurch 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
quelle
Mathematica, 20 Bytes
Testfälle
quelle
*
da? Es sieht so aus, als könnten Sie 19 erreichen, indem Sie es einfach abschneiden.MinMax@Select[#>0&]
ist keine gültige reine Funktion.@*
ist die Funktionszusammensetzung, wohingegen@
es die Funktionsanwendung ist.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
liefert eine korrekte AntwortMinMax@Select[# > 0 &]
ein Symbol zuzuweisen , oder werten Sie es einfach aus.Rubin,
573629 BytesNeuling 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!
Prüfung
quelle
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 BytesEin 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
quelle
q~_e(ae)a+
e(
unde)
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$
unde>
nicht ganze Zahlen mit Strings vergleichen.Haskell,
4139 BytesIn Haskell alle Elemente einer Liste haben von der gleichen Art sein, also kann ich nicht mischen
Integer
undString
. Es gibt jedoch denEither
Typ zum Kombinieren von zwei Typen zu einem einzigen. Die Eingabeliste ist daher vom TypEither Integer String
1 .f
filtert 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
String
Eigenschaft nie verwendet wird.quelle
f x=[minimum,maximum]<*>[[i|Left i<-x]]
jq, 21 Zeichen
Probelauf:
Online-Test:
quelle
Mathematica, 28 Bytes
quelle
Nothing
... Es bedeutet nichts Besonderes ... Auch für 23 Bytes:MinMax@*Select[NumberQ]
Nothing
hat eine besondere Bedeutung. Seit Mathematica 10.2 wird es automatisch aus Listen entfernt.Nothing
ist eine dokumentierte Funktion in den neuesten Versionen.PHP,
5048 Bytesquelle
'
Around" entfernenis_int
.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\"
.Die Eingabe ist durch Zeilenumbrüche getrennt.
Probieren Sie es online aus.
quelle
<space>.*<space>
in der vorletzten Stufe wegen der Gier verwenden.Mathematica , 14
Beispiel:
Erläuterung:
Wenn
MinMax
bekommt nicht-numerische Eingabe reduziert es das Problem so weit wie sie kann, dann Begriffe in Blätter gewickeltMin
undMax
:Aufgrund der automatischen Reihenfolge folgen die Zeichenfolgen ganzen Zahlen.
Apply
Bei levelspec {1} wird die Kurzform@@@
verwendet, um das erste Argument nichtatomarer Elemente abzurufen . Beachten Sie, dass5
hier unberührt bleibt:quelle
Oracle SQL 11.2, 189 Byte
Nicht golfen
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.
quelle
[]
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'))
+
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.Vimscript, 25 Bytes
Ja, das stimmt, Vimscript.
Erwartet Eingaben in das Formular
Und gibt in der Form aus
Erläuterung:
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,1d
um einen Rückwärtsbereich handelt.quelle
Perl
4439 + 3 = 41 BytesBenötigt
-pa
Flaggen:Vielen Dank an @manatwork für das Abschneiden einiger Bytes
quelle
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
ist stattdessen!/"/
für ein weiteres Byte notwendig .Julia, 35 Bytes
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
extrema
zum 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 istisa
.quelle
Japt, 23 Bytes
Online testen!
Wie es funktioniert
quelle
Bash,
403130 BytesBenötigt eine zeilengetrennte Liste:
Danke an @manatwork , um ein paar Bytes zu sparen
quelle
sed '1p;$p;d'
Speichert ein Byte.Power Shell,
5336 Bytes17 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 eineWhere-Object
Anweisung (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-is
Operator 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 vonsort
als Array zu erzwingen, wenn nur ein Objekt vorhanden ist (als Ergebnis von) das?
oder nur ein Objekt wurde eingegeben).quelle
-is
Typoperator an . Ich glaube , Sie ersetzen könnte.GetType().Name-eq"Int32"
mit-is[int]
zu sparen 17 BytesMATL , 23 Bytes
Probieren Sie es online!
quelle
JavaScript (ES5), 105 Byte
Verwendung:
a([1,2,3,'4'])
Nur mal ausprobieren :)
"Ungolfed":
quelle
Pyth, 11 Bytes
Erläuterung:
Probieren Sie es hier aus!
quelle
Perl 6 , 25 Bytes
Die offensichtliche Antwort wäre dieses WhateverCode Lambda
Wenn es ein volles Programm sein muss
Die Eingabe für dieses vollständige Programm ist eine durch Leerzeichen getrennte Liste von Werten
Verwendung
quelle
𝔼𝕊𝕄𝕚𝕟 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ï=ï
.quelle
Python 3, 56 Bytes
Probieren Sie es online auf Ideone .
quelle
APL (Dyalog) , 13 Bytes
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 überquelle
Java (OpenJDK 8) , 124 Byte
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
quelle
<i
Jetzt gibt es einen Fehler ohne Ganzzahlumwandlung. Außerdem funktioniert Ihr ursprünglicher Code (und auch dieser) nichtmin
, da er immer0
für ausgegeben wirdmin
. Hier ist eine mögliche Lösung. EDIT: Try-Catch scheint 1 Byte kürzer zu sein als derif(i instanceof Integer)
.Jolf, 20 Bytes
Ich kann wahrscheinlich Golf spielen ... Ich muss kürzere Lösungen für die Typprüfung implementieren.
quelle