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 golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
- Ciągi mogą zawierać wszystkie drukowalne znaki ASCII (
32 - 126
) i nie są puste.
[1, 2, 3]
1 2 3
i{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.Odpowiedzi:
Poważnie,
96 bajtówWypróbuj online
Jak to działa
źródło
JavaScript (ES6), 54
56Edytuj 2 bajty zapisane thx @ Neil
Uwaga:
x===+x
jest prawdziwe wtedy i tylko wtedy, gdyx
jest liczbąźródło
()
?Pyth,
141110 bajtówWypró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 1S
: posortuj to_B
: utwórz tablicę[previous, reversed(previous)]
hM
: weź pierwszy element każdego elementuNajtrudniejsza jest gra w golfa przy usuwaniu łańcuchów, która obecnie zajmuje 4 bajty. Obecne podejście działa, ponieważ
^<str>1
bierze pierwszą potęgę kartezjańską sekwencji (w zasadzie listę znaków ciągu), ale^<int>1
jest tylko funkcją tożsamości.źródło
*#_1Q
do usunięcia ciągów, które byłyby krótsze, gdyby zmienna została zainicjowana na wartość ujemną ...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.Przykład:
źródło
lambda a:
utknąć przed tym.if x>0
lubif''>x
zapisz jeden bajt.lambda s:(min(s),-min(-1*_ for _ in s))
(39 bajtów)Galaretka, 8 bajtów
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! ).
Ponieważ jest to prawdopodobnie nie do przyjęcia, potrzebujemy również sposobu na odróżnienie znaków od liczb całkowitych.
Bitowe atomy galaretki
desperackopró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 wynikPrzecinają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
źródło
Mathematica, 20 bajtów
Przypadki testowe
źródło
*
jest? Wygląda na to, że możesz dostać się do 19 po prostu wycinając go.MinMax@Select[#>0&]
nie jest prawidłową funkcją czystą.@*
jest kompozycją funkcji, podczas gdy@
jest aplikacją funkcji.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
daje prawidłową odpowiedźMinMax@Select[# > 0 &]
symbol lub po prostu go oceń.Ruby,
573629 bajtówNowicjusz 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!
Test
źródło
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 bajtówNienazwany blok (funkcja), który oczekuje tablicy wejściowej na stosie i pozostawia tablicę wyjściową na swoim miejscu.
Uruchom wszystkie przypadki testowe.
Wyjaśnienie
źródło
q~_e(ae)a+
e(
ie)
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$
ie>
nie można porównać liczb całkowitych z łańcuchami.Haskell,
4139 bajtówW Haskell wszystkie elementy listy muszą być tego samego typu, więc nie mogę mieszać
Integer
iString
. Istnieje jednakEither
typ łączenia dwóch typów w jeden. Lista wejściowa jest zatem typuEither Integer String
1 .f
filtruje liczby całkowite, usuwaEither
opakowanie, 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ż
String
właściwość nigdy nie jest używana.źródło
f x=[minimum,maximum]<*>[[i|Left i<-x]]
jq, 21 znaków
Przykładowy przebieg:
Test on-line:
źródło
Mathematica, 28 bajtów
źródło
Nothing
... To nie znaczy nic specjalnego ... Ponadto, dla 23 bajtów:MinMax@*Select[NumberQ]
Nothing
ma specjalne znaczenie. Od wersji 10.2 Mathematica jest automatycznie usuwana z list.Nothing
to udokumentowana funkcja w najnowszych wersjach.PHP,
5048 bajtówźródło
'
okołois_int
.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\"
.Dane wejściowe są oddzielone znakiem nowej linii.
Wypróbuj online.
źródło
<space>.*<space>
drugiego do ostatniego etapu z powodu chciwości.Mathematica , 14
Przykład:
Wyjaśnienie:
Gdy
MinMax
otrzyma dane nienumeryczne, zmniejsza problem tak dalece, jak to możliwe, a następnie pozostawia terminy zapakowaneMin
iMax
:Ze względu na automatyczne porządkowanie, które ma miejsce, łańcuchy podążają za liczbami całkowitymi.
Apply
na poziomiespec {1} stenografia@@@
jest następnie używana do wyciągania pierwszego argumentu elementów nieatomowych. Zauważ, że5
tutaj nie ma wpływu:źródło
Oracle SQL 11.2, 189 bajtów
Nie grał w golfa
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.
źródło
[]
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'))
+
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.vimscript, 25 bajtów
Tak, zgadza się, vimscript.
Oczekuje danych wejściowych w formularzu
I wyniki w postaci
Wyjaśnienie:
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,1d
jest to zakres wstecz.źródło
Perl
4439 + 3 = 41 bajtówWymaga
-pa
flag:Dzięki @manatwork za zgolenie kilku bajtów
źródło
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
jest to konieczne zamiast!/"/
jeszcze jednego bajtu.Julia, 35 bajtów
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ę
extrema
pobierania 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
.źródło
Japt, 23 bajty
Przetestuj online!
Jak to działa
źródło
Bash,
403130 bajtówWymaga listy oddzielonej od linii:
Dzięki @manatwork zgoliłem kilka bajtów
źródło
sed '1p;$p;d'
zapisuje bajt.PowerShell,
5336 bajtówZaoszczę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 doWhere-Object
instrukcji (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"
Zwracanie6
jest całkowicie poprawnym programem PowerShell), musimy użyć-is
operatora , 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 wynikusort
jako tablicy, jeśli jest tylko jeden obiekt (w wyniku?
lub tylko jeden obiekt został wprowadzony).źródło
-is
operatora typu tutaj . Myślę, że można zastąpić.GetType().Name-eq"Int32"
z-is[int]
aby zapisać 17 bajtówMATL , 23 bajty
Wypróbuj online!
źródło
JavaScript (ES5), 105 bajtów
Stosowanie:
a([1,2,3,'4'])
Tylko próbuję :)
„Niegolfowany”:
źródło
Pyth, 11 bajtów
Wyjaśnienie:
Wypróbuj tutaj!
źródło
Perl 6 , 25 bajtów
Oczywistą odpowiedzią byłaby ta lambda WhokolwiekKod
Jeśli to musi być pełny program
Dane wejściowe do tego pełnego programu to oddzielona spacjami lista wartości
Stosowanie
źródło
𝔼𝕊𝕄𝕚𝕟, 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ęï=ï
.źródło
Python 3, 56 bajtów
Wypróbuj online na Ideone .
źródło
APL (Dyalog) , 13 bajtów
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źródło
Java (OpenJDK 8) , 124 bajty
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
źródło
<i
teraz daje błąd bez rzutowania liczb całkowitych. Ponadto, twój początkowy kod (i ten również) nie działamin
, ponieważ zawsze będzie generowany0
dlamin
. Oto możliwa poprawka. EDYCJA: Try-catch wydaje się być o 1 bajt krótszy niżif(i instanceof Integer)
.Jolf, 20 bajtów
Prawdopodobnie mogę to zagrać w golfa ... Muszę wdrożyć krótsze rozwiązania sprawdzające typ.
źródło