Znajdź największą i najmniejszą liczbę w tablicy


29

Zadanie

Zadanie jest bardzo proste. Biorąc pod uwagę tablicę zawierającą tylko liczby całkowite i łańcuchy , wypisz największą i najmniejszą liczbę.

Przypadki testowe

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

Liczby w ciągach nie są uważane za liczby całkowite:

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

Jeśli jest tylko jedna liczba całkowita, jest to zarówno największa, jak i najmniejsza liczba całkowita:

Input: [1]
Output: 1, 1

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

Zasady

  • Możesz założyć, że tablica zawsze będzie zawierała co najmniej jedną liczbę całkowitą.
  • Wszystkie liczby całkowite są dodatnie (większe niż 0)
  • Kolejność danych wyjściowych nie ma znaczenia.
  • To jest , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
  • Ciągi mogą zawierać wszystkie drukowalne znaki ASCII ( 32 - 126) i nie są puste.

Jak ciągi zawierające znaki cudzysłowu są reprezentowane na wejściu?
feersum

@feersum Czy to nie zależy od twojego języka?
Martin Ender

@feersum Prawdopodobnie ze znakami ucieczki, ale jeśli język tego nie obsługuje, to w porządku.
Adnan

@ MartinBüttner Jeśli dane wejściowe są pobierane ze standardowego wejścia, nie powinno to zależeć od używanego języka.
feersum

3
@feersum To dla mnie nowe. Nawet ze STDIN [1, 2, 3] 1 2 3i {1; 2; 3}wszystkie są poprawnymi formatami wejściowymi, więc nie rozumiem, dlaczego powinno być inaczej dla literałów łańcuchowych otrzymanych z STDIN.
Martin Ender

Odpowiedzi:


9

Poważnie, 9 6 bajtów

,ì;M@m

Wypróbuj online

Jak to działa

,                              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)

Ach, tak, szukałem takiego polecenia. Ale dokumenty nie są łatwe do przeszukiwania.
kwintopia

Zgadzam się. Dokumenty to mój kolejny wielki cel.
Mego

11

JavaScript (ES6), 54 56

Edytuj 2 bajty zapisane thx @ Neil

Uwaga: x===+xjest prawdziwe wtedy i tylko wtedy, gdy xjest liczbą

a=>[Math.max(...a=a.filter(x=>x===+x)),Math.min(...a)]

3
Dlaczego zewnętrzne ()?
Neil

@Neil what outer ()? Dlaczego, u licha, mam mieć zewnętrzne ()?
edc65

Zwraca to funkcję, którą musisz jeszcze wywołać. (lub po prostu usuń a =>)
Michael Theriot

2
Tak, to anonimowa funkcja. To dość powszechny sposób na opublikowanie odpowiedzi w JavaScript @MichaelTheriot
edc65

@MichaelTheriot Domyślnie zezwalamy, aby zgłoszenia były samodzielnymi funkcjami, a nie zawsze wymagały pełnych programów.
Alex A.

8

Pyth, 14 11 10 bajtów

hM_BS^I#1Q

Wypróbuj online. Zestaw testowy.

Wyjaśnienie

  • Q: oceniane dane wejściowe
  • #: filtruj to na:
    • I: wartość jest taka sama po:
      • ^…1 podniesienie do władzy 1
  • S: posortuj to
  • _B: utwórz tablicę [previous, reversed(previous)]
  • hM: weź pierwszy element każdego elementu

Najtrudniejsza jest gra w golfa przy usuwaniu łańcuchów, która obecnie zajmuje 4 bajty. Obecne podejście działa, ponieważ ^<str>1bierze pierwszą potęgę kartezjańską sekwencji (w zasadzie listę znaków ciągu), ale ^<int>1jest tylko funkcją tożsamości.


Hrm, możesz również użyć *#_1Qdo usunięcia ciągów, które byłyby krótsze, gdyby zmienna została zainicjowana na wartość ujemną ...
FryAmTheEggman

7

Python 2, 42 bajty

W Pythonie 2 liczby całkowite są zawsze mniejsze niż łańcuchy podczas porównań, więc prosty min(s)znajdzie najmniejszą liczbę całkowitą. Znajdując maksimum, musimy najpierw odfiltrować ciągi. Funkcja anonimowa akceptuje sekwencję i zwraca krotkę z minimum i maksimum.

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

Przykład:

[1,'77', 6, '', 4] -> (1, 6)

3
Musisz lambda a:utknąć przed tym.
Klamka

if x>0lub if''>xzapisz jeden bajt.
grc

@Doorknob, teraz lambda zgodnie z sugestią.
Logic Knight

1
@Dennis, nie wiedziałem tego. Zedytowałem rozwiązanie, aby wyjaśnić, że porównanie działa tylko w Pythonie 2.
Logic Knight

1
Tworzenie: lambda s:(min(s),-min(-1*_ for _ in s))(39 bajtów)
Fran Borcic

7

Galaretka, 8 bajtów

|f¹Ṣ0,1ị

Wypróbuj online!

tło

W idealnym świecie wystarczyłoby przeciąć listę spłaszczoną wersją samego siebie. Ciągi są po prostu listami znaków w Galaretce, więc podczas gdy oryginalna lista zawierałaby liczby całkowite i ciągi, spłaszczona wersja zawierałaby liczby całkowite i znaki, pozostawiając tylko liczby całkowite na przecięciu.

W prawdziwym świecie zarówno parsery literału wejściowego, jak i literału łańcuchowego dają znaki zamiast ciągów o długości 1. Jedynym sposobem na przekazanie ciągu singletonowego do funkcji byłoby zakodowanie go „ręcznie”, np. [”a], Który jest znak zawinięty w tablicę.

Pozwoliłoby to zaoszczędzić bajt, w sumie 7 bajtów ( Wypróbuj online! ).

fFṢ0,1ị

Ponieważ jest to prawdopodobnie nie do przyjęcia, potrzebujemy również sposobu na odróżnienie znaków od liczb całkowitych.

Bitowe atomy galaretki desperacko próbują przekonwertować swoje argumenty na liczby całkowite. Zaczynają od wektoryzacji, aż napotkają typy głębokości 0 (cyfry lub znaki), a następnie spróbują przekonwertować je na liczby całkowite. W przypadku znaku reprezentującego liczbę całkowitą to się powiedzie. Dla innych dyadyczny, bitowy atom po prostu zrezygnuje i zwróci 0 .

Na przykład bitowe ORowanie samej listy [1, "2", "34", "-5", "a", "bc"]da wynik

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

Przecinając wynik z oryginalną listą, pozbywamy się tablic i liczb całkowitych, których nie było na oryginalnej liście.

Jak to działa

|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).

6

Mathematica, 20 bajtów

MinMax@*Select[#>0&]

Przypadki testowe

MinMax@*Select[#>0&]@{1,2,3,4,"5"}
(* {1,4} *)

1
Dlaczego tam *jest? Wygląda na to, że możesz dostać się do 19 po prostu wycinając go.
A Simmons,

1
@ASimmons Jest to konieczne. MinMax@Select[#>0&]nie jest prawidłową funkcją czystą.
njpipeorgan

1
@ASimmons @*jest kompozycją funkcji, podczas gdy @jest aplikacją funkcji.
Martin Ender

1
MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]daje prawidłową odpowiedź
A Simmons

1
@ASimmons Spróbuj przypisać MinMax@Select[# > 0 &]symbol lub po prostu go oceń.
njpipeorgan

6

Ruby, 57 36 29 bajtów

Nowicjusz tutaj, więc nie wiem, czy jest jakieś standardowe lub powszechnie akceptowane miejsce / sposób obliczania bajtów, każda pomoc byłaby bardzo mile widziana!

Edytowane zgodnie z opisem i komentarzem Doorknob!

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

Test

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]

1
36 znaków:->n{[(x=n.map(&:to_i)&n).min,x.max]}
manatwork

2
29 bajtów, wykorzystując MinMax:->a{(a.map(&:to_i)&a).minmax}
Gałka

5

CJam, 15 13 bajtów

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

Nienazwany blok (funkcja), który oczekuje tablicy wejściowej na stosie i pozostawia tablicę wyjściową na swoim miejscu.

Uruchom wszystkie przypadki testowe.

Wyjaśnienie

_     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.

I sestestest e) i e (do aditsu. On tego nie zaakceptował
username.ak

@ nazwa_użytkownika.ak Nie sądzę, aby były naprawdę przydatne. Dodanie operatora dwuznakowego, który oszczędza tylko jeden bajt w stosunku do obecnego rozwiązania, nie jest czymś, co może wdrożyć aditsu, i uważam również, że muszą być bardziej użyteczne funkcje do ich wykorzystania.
Martin Ender,

zapisze 3 bajty:q~_e(ae)a+
username.ak

@ nazwa_użytkownika.ak Cóż, to założenie e(i e)zignoruje ciągi lub coś, co wydaje się niespójne. A jeśli pociągałoby to za sobą porównanie z łańcuchami, prawdopodobnie nie udałoby się to w ten sam sposób $i e>nie można porównać liczb całkowitych z łańcuchami.
Martin Ender,

5

Haskell, 41 39 bajtów

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

W Haskell wszystkie elementy listy muszą być tego samego typu, więc nie mogę mieszać Integeri String. Istnieje jednak Eithertyp łączenia dwóch typów w jeden. Lista wejściowa jest zatem typu Either Integer String1 . ffiltruje liczby całkowite, usuwa Eitheropakowanie, umieszcza listę jako pojedynczy element na nowej liście (np. [[1,2,3]]), dzięki czemu <*>można zastosować do niej funkcje podane w pierwszym argumencie.

Przykład użycia: f [Left 1, Left 3, Right "Hello", Left 2]-> [1,3].

Edycja: @xnor wprowadzono <*>do gry i zapisano 2 bajty. Dzięki!


1 faktycznie jest w pełni polimorficzny w drugim typie, ponieważ Stringwłaściwość nigdy nie jest używana.


Fajny pomysł z dopasowanym wzorem. Możesz zapisać dwa znaki z odwróconą mapą:f x=[minimum,maximum]<*>[[i|Left i<-x]]
xnor

@xnor: bardzo fajnie. Wielkie dzięki!
nimi


4

Mathematica, 28 bajtów

MinMax[#/._String->Nothing]&

Nadal nie rozumiem twojej obsesji na punkcie Nothing... To nie znaczy nic specjalnego ... Ponadto, dla 23 bajtów:MinMax@*Select[NumberQ]
LegionMammal978

@ LegionMammal978 Wykorzystaj „wszystkie liczby całkowite są dodatnie”! Zobacz moją odpowiedź.
njpipeorgan

1
Fajne rozwiązania chłopaki, powinienem pomyśleć o zrobieniu tego w ten sposób! @ LegionMammal978, Nothingma specjalne znaczenie. Od wersji 10.2 Mathematica jest automatycznie usuwana z list.
A Simmons,

@ LegionMammal978 Nothingto udokumentowana funkcja w najnowszych wersjach.
Mr.Wizard

4

PHP, 50 48 bajtów

<?=min($a=array_filter($a,is_int)).', '.max($a);

1
Pokonaj mnie o 2 minuty :).
TMH

2
To generalnie zabronione przypuszczać, że wejście jest już w zmiennej. Nawiasem mówiąc, możesz zapisać dwa bajty, usuwając 'około is_int.
Blackhole

@Blackhole Thanks. Nie zdawałem sobie sprawy. Wykorzystałem twoje usunięcie wyceny :)
PaulSkinner

4

Retina , 71

Dzięki (jak zawsze) @ MartinBüttner za pomoc w grze w golfa.

Nie jest konkurencyjny pod względem golfowym, ale interesujące jest zastosowanie sortowania liczb całkowitych w Retinie.

Zakłada, że ​​wszystkie ciągi wejściowe są "cudzysłowami i nie zawierają żadnych podwójnych cudzysłowów \".

A`"
¶

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

(a)+
$#1

Dane wejściowe są oddzielone znakiem nowej linii.

Wypróbuj online.


Myślę, że możesz użyć <space>.*<space>drugiego do ostatniego etapu z powodu chciwości.
FryAmTheEggman

4

Mathematica , 14

#&@@@MinMax@#&

Przykład:

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}}

Wyjaśnienie:

Gdy MinMaxotrzyma dane nienumeryczne, zmniejsza problem tak dalece, jak to możliwe, a następnie pozostawia terminy zapakowane Mini Max:

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

Ze względu na automatyczne porządkowanie, które ma miejsce, łańcuchy podążają za liczbami całkowitymi.

Applyna poziomiespec {1} stenografia @@@jest następnie używana do wyciągania pierwszego argumentu elementów nieatomowych. Zauważ, że 5tutaj nie ma wpływu:

foo @@@ {5, Max[10, "Hello"]}
{5, foo[10, "Hello"]}

3

Oracle SQL 11.2, 189 bajtów

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;

Nie grał w golfa

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;

Pod-zapytanie analizuje tablicę i dzieli ją, aby wypełnić widok jednym elementem na wiersz. Następnie elementy nienumeryczne są filtrowane.

Chciałbym móc znaleźć sposób, aby to zrobić z NAJMNIEJ i NAJWIĘKSZYM, ale bez powodzenia w obsłudze tablicy jako parametru.


Zostawiasz znak []w tablicy, więc nie wybierasz wartości maksymalnej ani minimalnej, jeśli są to pierwsze lub ostatnie elementy tablicy. Nie potrzebujesz również klauzuli WHERE, już wybierasz agregaty, więc nie musisz filtrować. Wyszukaj znaki liczbowe w wyrażeniach regularnych i przesuń konwersję liczb w dół do zapytania podrzędnego (bardzo małe niebezpieczeństwo wypchnięcia predykatów) i stanie się 126 bajtów: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

W +drugim wyrażeniu regularnym nie ma potrzeby, ponieważ nie ma znaczenia, czy wygenerujesz kilka dodatkowych wierszy (zapisuje bajt). Warto również zauważyć, że jeśli masz ciąg złożony wyłącznie z liczb, nie zignorujesz go tutaj; który potrzebuje przeciążonych funkcji w tym samym pakiecie, więc wcale nie jest ładny.
Ben,

3

vimscript, 25 bajtów

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

Tak, zgadza się, vimscript.

Oczekuje danych wejściowych w formularzu

1
2
3
4
"5"

I wyniki w postaci

1
4

Wyjaśnienie:

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)

Pierwszy wiersz musi zostać dwukrotnie zduplikowany, aby obsłużyć przypadek krawędziowy wejścia o pojedynczej liczbie. Wynika to z faktu, że ostatnie polecenie będzie narzekać, jeśli zostaną osiągnięte tylko dwie linie, ponieważ 2,1djest to zakres wstecz.


3

Perl 44 39 + 3 = 41 bajtów

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

Wymaga -paflag:

$ 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

Dzięki @manatwork za zgolenie kilku bajtów


Która wersja Perla? W twoim drugim przykładzie otrzymuję inny wynik: pastebin.com/judJys5g
manatwork

@manatwork Masz rację, rysunek nie mogę usunąćsort{$a-$b}grep...
andlrc

Wymaganie nie określa, że ​​dane wyjściowe muszą być sformatowane dokładnie tak, jak w przykładach, a w tym zadaniu wyraźnie nie chodzi o formatowanie. Tak wielu z nas właśnie skorzystało z tego, co jest wygodniejsze w naszym wybranym języku. W Perl zrobiłbym to tak: $_="@a[0,-1]".
manatwork

Jeden znak krótszy filtrowanie: grep!/"/.
manatwork

Mówi, że tablica będzie liczbami i łańcuchami. Wszystkie przykłady w pytaniu są łańcuchami z podwójnymi cudzysłowami, ale nie widzę nic, co by mówiło, że nie mogą być one pojedynczymi. Myślę, że !/\D/jest to konieczne zamiast !/"/jeszcze jednego bajtu.
msh210

3

Julia, 35 bajtów

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

Jest to funkcja lambda, która przyjmuje tablicę i zwraca krotkę liczb całkowitych. Aby go wywołać, przypisz go do zmiennej.

Julia ma wbudowaną funkcję extremapobierania minimalnych i maksymalnych elementów tablicy jako krotki. Ponieważ jednak tablica może również zawierać ciągi, musimy je najpierw odfiltrować. Możemy to zrobić, sprawdzając, czy każdy element jest liczbą całkowitą isa.


3

Japt, 23 bajty

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

Przetestuj online!

Jak to działa

[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.

3

Bash, 40 31 30 bajtów

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

Wymaga listy oddzielonej od linii:

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

Dzięki @manatwork zgoliłem kilka bajtów


sed '1p;$p;d'zapisuje bajt.
Dennis

3

PowerShell, 53 36 bajtów

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

Zaoszczędź 17 bajtów dzięki @goric

OOOF ... PowerShell zwykle gra dość szybko i luźno z rzucaniem, co zwykle jest dobrą rzeczą do gry w golfa, ale tutaj go boli.

Pobiera nasze dane wejściowe $args[0]i przekazuje je do Where-Objectinstrukcji (the ?), która wybierze tylko liczby całkowite i przekazuje je wzdłuż potoku, odrzucając wszystko inne. Ponieważ dynamiczne przerzucanie odbywa się w tle w locie (np. 1+"5"Zwracanie 6jest całkowicie poprawnym programem PowerShell), musimy użyć -isoperatora , aby rozróżnić typy danych.

Stamtąd przesyłamy tę kolekcję Sort-Object, która posortuje liczby całkowite od najmniejszej do największej. Zewnętrzne ()jest konieczne, abyśmy mogli odwoływać się do pierwszego i ostatniego elementu za pomocą [0,-1](tj. Najmniejszego i największego), ale pamiętaj, że potrzebujemy również zewnętrznego, @aby wymusić rzutowanie wyniku sortjako tablicy, jeśli jest tylko jeden obiekt (w wyniku ?lub tylko jeden obiekt został wprowadzony).


1
Spójrz na -isoperatora typu tutaj . Myślę, że można zastąpić .GetType().Name-eq"Int32"z -is[int]aby zapisać 17 bajtów
goric

@goric Super awesome! Dzięki za masywnego golfa!
AdmBorkBork

3

MATL , 23 bajty

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

Wypróbuj 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

Och, mój zły: p. Ładna odpowiedź :)
Adnan

@Adnan Thanks! Trochę za długo :-)
Luis Mendo

2

JavaScript (ES5), 105 bajtów

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

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

Tylko próbuję :)

„Niegolfowany”:

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

2

Pyth, 11 bajtów

hJSf!>TkQeJ

Wyjaśnienie:

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

Wypróbuj tutaj!


2

Perl 6 , 25 bajtów

Oczywistą odpowiedzią byłaby ta lambda WhokolwiekKod

*.grep(Int).minmax.bounds

Jeśli to musi być pełny program

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

Dane wejściowe do tego pełnego programu to oddzielona spacjami lista wartości


Stosowanie

# 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)

2

𝔼𝕊𝕄𝕚𝕟, 16 znaków / 20 bajtów

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

Try it here (Firefox only).

Nieźle nieźle...

Wyjaśnienie

Daje to tablicę zawierającą zarówno maksimum, jak i minimum. (ï⇔⒡≔=+$⸩,w zasadzie odfiltrowuje wszystkie ciągi wejściowe, МƲpobiera maksimum na wejściu i МƵdostaje minimum.

Tylko uwaga: jest to pierwsze wyzwanie gdzie mogę dostać się do wykorzystania , która zasadniczo zmienia ï⇔się ï=ï.


2

Python 3, 56 bajtów

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

Wypróbuj online na Ideone .


2

APL (Dyalog) , 13 bajtów

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

Wypróbuj online!

 enlist (spłaszczyć - powoduje to, że wszystkie ciągi znaków stają się znakami na dużej liście)

⎕AV~⍨ usunąć wszystkie znaki w Tomic V wtryskiwacza (zbiór znaków - cyfr liście)

() Zastosuj następującą funkcję ukrytą:

⌊/ minimum w poprzek

, dołączone do

⌈/ maksyma w poprzek


2

Java (OpenJDK 8) , 124 bajty

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;}

Wypróbuj online!

Funkcja lambda Java 8, pobiera tablicę jako dane wejściowe i podaje tablicę {min, max}. Nie konkuruje, ponieważ wejściem musi być tablica liczb całkowitych.

Naprawiono i -1 bajt dzięki Kevin Cruijssen


Możesz konkurować, biorąc listę obiektów i sprawdzając, czy element jest liczbą całkowitą lub ciągiem znaków.
Kevin Cruijssen

@KevinCruijssen zrobione, dzięki
HyperNeutrino

<iteraz daje błąd bez rzutowania liczb całkowitych. Ponadto, twój początkowy kod (i ten również) nie działa min, ponieważ zawsze będzie generowany 0dla min. Oto możliwa poprawka. EDYCJA: Try-catch wydaje się być o 1 bajt krótszy niż if(i instanceof Integer).
Kevin Cruijssen

@KevinCruijssen oh nie zauważyłem tego, dzięki!
HyperNeutrino

1

Jolf, 20 bajtów

Prawdopodobnie mogę to zagrać w golfa ... Muszę wdrożyć krótsze rozwiązania sprawdzające typ.

γ 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.