Temukan angka terbesar dan terkecil dalam sebuah array

29

Tugas

Tugasnya sangat sederhana. Diberikan array yang hanya berisi bilangan bulat dan string , menampilkan angka terbesar dan jumlah terkecil.

Uji Kasus

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

Angka dalam string tidak dianggap sebagai bilangan bulat:

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

Jika hanya ada satu bilangan bulat, itu adalah bilangan bulat terbesar dan terkecil:

Input: [1]
Output: 1, 1

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

Aturan

  • Anda dapat mengasumsikan bahwa array akan selalu mengandung setidaknya satu bilangan bulat
  • Semua bilangan bulat positif (lebih besar dari 0)
  • Urutan output tidak masalah.
  • Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang!
  • String dapat berisi semua karakter ASCII yang dapat dicetak ( 32 - 126) dan tidak kosong.
Adnan
sumber
Bagaimana string yang berisi tanda kutip terwakili dalam input?
feersum
@feersum Bukankah itu tergantung pada bahasa Anda?
Martin Ender
@feersum Dengan karakter pelarian mungkin, tetapi jika bahasa tidak mengatasinya, tidak apa-apa.
Adnan
@ MartinBüttner Jika input diambil dari stdin, itu tidak harus bergantung pada bahasa apa yang digunakan.
feersum
3
@feersum Itu baru bagi saya. Bahkan dari STDIN [1, 2, 3] 1 2 3dan {1; 2; 3}semua format input yang valid, jadi saya tidak mengerti mengapa harus berbeda untuk string literal yang diterima dari STDIN.
Martin Ender

Jawaban:

9

Serius, 9 6 byte

,ì;M@m

Cobalah secara Online

Bagaimana itu bekerja

,                              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)
kuintopia
sumber
Ah, ya, saya sedang mencari perintah seperti itu. Tetapi dokumen tidak mudah dicari.
kuintopia
Saya setuju. Dokumen adalah tujuan besar saya berikutnya.
Mego
11

JavaScript (ES6), 54 56

Edit 2 byte yang disimpan thx @Neil

Catatan: x===+xbenar jika dan hanya jika xmerupakan angka

a=>[Math.max(...a=a.filter(x=>x===+x)),Math.min(...a)]
edc65
sumber
3
Kenapa bagian luarnya ()?
Neil
@Neil apa yang terluar ()? Mengapa saya harus memiliki bagian luar?
edc65
Ini mengembalikan fungsi, Anda masih perlu menyebutnya. (atau hanya menghapus a =>)
Michael Theriot
2
Ya itu fungsi anonim. Ini adalah cara yang cukup umum untuk mengirim jawaban dalam JavaScript
@MichaelTheriot
@MichaelTheriot Secara default , kami mengizinkan pengiriman menjadi fungsi mandiri daripada selalu membutuhkan program lengkap.
Alex A.
8

Pyth, 14 11 10 byte

hM_BS^I#1Q

Cobalah online. Suite uji.

Penjelasan

  • Q: input yang dievaluasi
  • #: filter yang di:
    • I: nilainya sama setelah:
      • ^…1 menaikkannya ke daya 1
  • S: semacam itu
  • _B: buat array [previous, reversed(previous)]
  • hM: ambil item pertama dari setiap item itu

Bagian tersulit adalah bermain golf untuk menghilangkan string, yang saat ini membutuhkan 4 byte. Pendekatan saat ini bekerja karena ^<str>1mengambil kekuatan Cartesian pertama dari urutan (pada dasarnya, daftar karakter string), tetapi ^<int>1hanya fungsi identitas.

PurkkaKoodari
sumber
Hrm, Anda juga bisa menggunakan *#_1Quntuk menghapus string, yang akan lebih pendek jika variabel diinisialisasi ke yang negatif ...
FryAmTheEggman
7

Python 2, 42 byte

Dalam Python 2, integer selalu kurang dari string selama perbandingan, jadi sederhana min(s)akan menemukan integer terkecil. Ketika menemukan maksimum, kita harus menyaring string terlebih dahulu. Fungsi anonim menerima urutan dan mengembalikan tuple dengan minimum dan maksimum.

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

Contoh:

[1,'77', 6, '', 4] -> (1, 6)
Ksatria Logika
sumber
3
Anda perlu lambda a:buntu sebelum itu.
Gagang Pintu
if x>0atau if''>xsimpan satu byte.
grc
@ Doorknob, sekarang lambda seperti yang disarankan.
Logic Knight
1
@ Dennis, saya tidak tahu ini. Saya telah mengedit solusi untuk memperjelas perbandingan hanya berfungsi di Python 2.
Logic Knight
1
Membangun: lambda s:(min(s),-min(-1*_ for _ in s))(39 byte)
Fran Borcic
7

Jelly, 8 byte

|f¹Ṣ0,1ị

Cobalah online!

Latar Belakang

Di dunia yang sempurna, cukup untuk memotong daftar dengan versi yang rata dari dirinya sendiri. String hanyalah daftar karakter dalam Jelly, jadi sementara daftar asli akan berisi bilangan bulat dan string, versi yang diratakan akan berisi bilangan bulat dan karakter, hanya menyisakan bilangan bulat di persimpangan.

Di dunia nyata, baik parser dari input dan string literal menghasilkan karakter alih-alih panjang string 1. Satu-satunya cara untuk meneruskan string singleton ke suatu fungsi adalah dengan menyandikannya "secara manual" seperti, misalnya [”a], yang merupakan karakter terbungkus dalam array.

Ini akan menghemat satu byte, dengan total 7 byte ( Coba online! ).

fFṢ0,1ị

Karena itu mungkin tidak dapat diterima, kita juga perlu cara untuk membedakan karakter dari bilangan bulat.

Atom bitwise Jelly berusaha keras untuk mengubah argumen mereka menjadi bilangan bulat. Mereka mulai dengan membuat vektor hingga menemukan tipe kedalaman 0 (angka atau karakter), kemudian mencoba mengubahnya menjadi bilangan bulat. Untuk karakter yang mewakili integer, ini akan berhasil. Bagi yang lain, atom diad, bitwise hanya akan menyerah dan mengembalikan 0 .

Misalnya, bitwise ATAU daftar [1, "2", "34", "-5", "a", "bc"]dengan sendirinya akan menghasilkan

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

Dengan memotong hasil dengan daftar asli, kami menyingkirkan array dan bilangan bulat yang tidak ada dalam daftar asli.

Bagaimana itu bekerja

|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
sumber
6

Mathematica, 20 byte

MinMax@*Select[#>0&]

Uji kasus

MinMax@*Select[#>0&]@{1,2,3,4,"5"}
(* {1,4} *)
njpipeorgan
sumber
1
Kenapa ada *disana? Sepertinya Anda bisa mencapai 19 hanya dengan memotongnya.
A Simmons
1
@ ASimmons Itu perlu. MinMax@Select[#>0&]bukan fungsi murni yang valid.
njpipeorgan
1
@ ASimmons @*adalah komposisi fungsi, sedangkan @aplikasi fungsi.
Martin Ender
1
MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]menghasilkan respons yang benar
A Simmons
1
@ ASimmons Coba tetapkan MinMax@Select[# > 0 &]ke simbol, atau cukup evaluasi saja.
njpipeorgan
6

Ruby, 57 36 29 byte

Pemula di sini, jadi saya tidak tahu apakah ada tempat / cara standar atau diterima secara universal untuk menghitung byte yang digunakan, bantuan apa pun akan sangat dihargai!

Diedit sesuai manatwork & komentar Doorknob!

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

Uji

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
sumber
1
36 karakter:->n{[(x=n.map(&:to_i)&n).min,x.max]}
manatwork
2
29 byte, menggunakan minmax:->a{(a.map(&:to_i)&a).minmax}
Gagang pintu
5

CJam, 15 13 byte

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

Blok tanpa fungsi (fungsi) yang mengharapkan array input pada stack dan meninggalkan array output di tempatnya.

Jalankan semua test case.

Penjelasan

_     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
sumber
Saya sugeested e) dan e (ke aditsu. Dia belum menerima itu
username.ak
@ username.ak Saya pikir itu tidak berguna. Menambahkan operator dua karakter yang hanya menghemat satu byte pada solusi saat ini bukanlah sesuatu yang mungkin diterapkan aditsu, dan saya juga berpikir pasti ada fitur yang lebih berguna untuk menggunakannya.
Martin Ender
itu akan menghemat 3 byte:q~_e(ae)a+
username.ak
@ username.ak Nah itu dengan asumsi itu e(dan e)akan mengabaikan string atau sesuatu, yang tampaknya tidak konsisten. Dan jika memang melibatkan perbandingan dengan string mungkin akan gagal dengan cara yang sama $dan e>tidak dapat membandingkan bilangan bulat dengan string.
Martin Ender
5

Haskell, 41 39 byte

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

Di Haskell, semua elemen daftar harus dari tipe yang sama, jadi saya tidak bisa mencampur Integerdan String. Namun, ada Eithertipe untuk menggabungkan dua tipe menjadi satu. Oleh karena itu daftar input adalah tipe Either Integer String1 . fmemfilter Integer, menghapusEither pembungkus, menempatkan daftar sebagai elemen tunggal dalam daftar baru (misalnya [[1,2,3]]), sehingga <*>dapat menerapkan fungsi yang diberikan dalam argumen pertama untuk itu.

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

Sunting: @xnor dibawa <*> dimainkan dan disimpan 2 byte. Terima kasih!


1 sebenarnya sepenuhnya polimorfik dalam tipe kedua karena Stringproperti tidak pernah digunakan.

nimi
sumber
Ide bagus dengan pola yang cocok. Anda dapat menyimpan dua karakter dengan peta terbalik:f x=[minimum,maximum]<*>[[i|Left i<-x]]
xnor
@ xnor: sangat bagus. Terima kasih banyak!
nimi
5

jq, 21 karakter

[.[]|numbers]|min,max

Contoh dijalankan:

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

Tes online:

manatwork
sumber
4

Mathematica, 28 byte

MinMax[#/._String->Nothing]&
A Simmons
sumber
Saya masih tidak mengerti obsesi Anda dengan Nothing... Itu tidak berarti sesuatu yang istimewa ... Juga, untuk 23 byte:MinMax@*Select[NumberQ]
LegionMammal978
@ LegionMammal978 Manfaatkan "semua bilangan bulat positif"! Lihat jawaban saya.
njpipeorgan
1
Solusi yang bagus kawan, saya seharusnya berpikir untuk melakukannya dengan cara itu! @ LegionMammal978, Nothingmemang memiliki arti khusus. Sejak Mathematica 10.2, secara otomatis dihapus dari Daftar.
A Simmons
@ LegionMammal978 Nothingadalah fungsi yang terdokumentasi dalam versi terbaru.
Mr.Wizard
4

PHP, 50 48 byte

<?=min($a=array_filter($a,is_int)).', '.max($a);
PaulSkinner
sumber
1
Kalahkan saya 2 menit :).
TMH
2
Secara umum dilarang untuk menganggap bahwa input sudah dalam variabel. Omong-omong, Anda dapat menyimpan dua byte dengan menghapus 'sekitar is_int.
Blackhole
@ Blackhole Terima kasih. Tidak menyadari. Saya telah menggunakan penghapusan kutipan Anda :)
PaulSkinner
4

Retina , 71

Terima kasih (seperti biasa) kepada @ MartinBüttner atas bantuan golfnya.

Bukan golf-bijaksana, tetapi menarik untuk menerapkan penyortiran gelembung bilangan bulat di Retina.

Asumsikan semua string dalam input "dikutip ganda dan tidak mengandung tanda kutip ganda yang lolos \".

A`"
¶

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

(a)+
$#1

Input dipisahkan oleh baris baru.

Cobalah online.

Trauma Digital
sumber
Saya pikir Anda dapat menggunakan <space>.*<space>tahap kedua hingga terakhir karena keserakahan.
FryAmTheEggman
4

Mathematica , 14

#&@@@MinMax@#&

Contoh:

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

Penjelasan:

Ketika MinMaxmendapat input non-numerik, itu mengurangi masalah sejauh mungkin, lalu membiarkan istilah-istilah dibungkus Mindan Max:

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

Karena pemesanan otomatis yang terjadi, string mengikuti integer.

Applydi levelspec {1}, singkatan @@@, kemudian digunakan untuk menarik argumen pertama dari unsur-unsur non-atom. Catatan yang 5tidak tersentuh di sini:

foo @@@ {5, Max[10, "Hello"]}
{5, foo[10, "Hello"]}
Tuan Wisaya
sumber
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;

Tidak bermain golf

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;

Sub-kueri menguraikan array dan membaginya untuk mengisi tampilan dengan satu elemen per baris. Kemudian elemen-elemen non numerik disaring.

Saya berharap saya bisa menemukan cara untuk melakukannya dengan LEAST dan TERTINGGI, tetapi tidak berhasil dengan cara menangani array sebagai parameter.

Jeto
sumber
Anda membiarkannya []dalam array sehingga Anda tidak memilih maks atau min jika itu adalah elemen pertama atau terakhir dari array. Anda juga tidak memerlukan klausa WHERE Anda, Anda sudah memilih agregat sehingga Anda tidak perlu memfilter. Cari karakter numerik di regex Anda dan dorong konversi angka ke sub-kueri (sangat sedikit bahaya predikat yang didorong) dan itu menjadi 126 byte: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
Tidak perlu untuk +di regex kedua di sini karena tidak masalah jika Anda menghasilkan beberapa baris tambahan (menghemat satu byte). Perlu juga dicatat bahwa jika Anda memiliki string yang hanya terdiri dari angka, Anda tidak akan mengabaikannya di sini; yang membutuhkan fungsi kelebihan beban dalam paket yang sama, jadi sama sekali tidak cantik.
Ben
3

vimscript, 25 byte

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

Yap, benar, vimscript.

Mengharapkan input dalam formulir

1
2
3
4
"5"

Dan output dalam bentuk

1
4

Penjelasan:

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)

Baris pertama harus diduplikasi dua kali untuk menangani kasus tepi dari input nomor tunggal. Ini karena perintah terakhir akan mengeluh jika hanya ada dua baris ketika tercapai, karena pada akhirnya 2,1dadalah kisaran mundur.

Gagang pintu
sumber
3

Perl 44 39 + 3 = 41 byte

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

Membutuhkan -pabendera:

$ 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

Terima kasih kepada @manatwork karena telah memangkas beberapa byte

andlrc
sumber
Versi Perl yang mana? Untuk contoh kedua Anda, saya mendapatkan hasil yang berbeda: pastebin.com/judJys5g
manatwork
@manatwork Anda benar, Figur saya tidak bisa menghapussort{$a-$b}grep...
andlrc
Persyaratan tidak menyatakan bahwa output harus diformat persis seperti pada contoh dan dalam tugas ini jelas bukan format adalah intinya. Begitu banyak dari kita hanya menggunakan apa yang lebih mudah dalam bahasa pilihan kita. Dalam Perl Aku akan melakukannya seperti ini: $_="@a[0,-1]".
manatwork
Filtering satu karakter yang lebih pendek: grep!/"/.
manatwork
Dikatakan array akan berupa angka dan string. Semua contoh dalam pertanyaan adalah dengan string yang dikutip dua kali lipat, tetapi saya tidak melihat apa pun yang mengatakan bahwa string tidak dapat dikutip satu kali. Saya pikir !/\D/itu diperlukan alih-alih !/"/, untuk satu byte lagi.
msh210
3

Julia, 35 byte

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

Ini adalah fungsi lambda yang menerima array dan mengembalikan tuple bilangan bulat. Untuk menyebutnya, tetapkan ke variabel.

Julia memiliki fungsi extremabawaan untuk mendapatkan elemen minimum dan maksimum dari sebuah array sebagai tuple. Namun, karena array juga dapat memiliki string di dalamnya, pertama-tama kita harus memfilternya. Kita bisa melakukannya dengan menguji apakah setiap elemen menggunakan integer isa.

Alex A.
sumber
3

Japt, 23 byte

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

Uji secara online!

Bagaimana itu bekerja

[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.
Produksi ETH
sumber
3

Bash, 40 31 30 byte

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

Membutuhkan daftar yang dipisahkan garis:

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

Terima kasih kepada @manatwork untuk mengurangi beberapa byte

andlrc
sumber
sed '1p;$p;d'menghemat satu byte.
Dennis
3

PowerShell, 53 36 byte

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

Disimpan 17 byte berkat @goric

OOOF ... PowerShell biasanya bermain sangat cepat dan longgar dengan casting, yang biasanya merupakan hal yang baik untuk bermain golf, tetapi menyakitkan di sini.

Membawa input kami $args[0]dan menyalurkannya ke Where-Objectpernyataan (yang ?) yang hanya akan memilih bilangan bulat dan meneruskannya di sepanjang pipa, membuang yang lainnya. Karena pengecoran ulang dinamis dilakukan saat Anda berada di latar belakang untuk Anda (misalnya, 1+"5"pengembalian 6adalah PowerShell yang benar-benar valid), kami perlu menggunakan -isoperator untuk membedakan antara tipe data.

Dari sana, kami menyalurkan kumpulan itu ke dalam Sort-Object, yang akan mengurutkan bilangan bulat dari terkecil ke terbesar. Bagian luar ()diperlukan agar kita dapat mereferensikan elemen pertama dan terakhir dengan [0,-1](yaitu, yang terkecil dan yang terbesar), tetapi perhatikan kita juga membutuhkan bagian luar @untuk memaksa casting output sortsebagai array jika hanya ada satu objek (sebagai hasil dari yang ?, atau hanya satu objek adalah input).

AdmBorkBork
sumber
1
Lihatlah -isjenis operator di sini . Saya pikir Anda bisa mengganti .GetType().Name-eq"Int32"dengan -is[int]untuk menyimpan 17 byte
goric
@icic Super luar biasa! Terima kasih untuk golfnya yang luar biasa!
AdmBorkBork
3

MATL , 23 byte

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

Cobalah 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
sumber
Oh, salahku: hlm. Jawaban yang bagus :)
Adnan
@ Adnan Terima kasih! Sedikit terlalu lama :-)
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))}

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

Hanya mencoba :)

"Tidak Disatukan":

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
sumber
2

Pyth, 11 byte

hJSf!>TkQeJ

Penjelasan:

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

Coba di sini!

Biru
sumber
2

Perl 6 , 25 byte

Jawaban yang jelas adalah lambda Apapun Kode ini

*.grep(Int).minmax.bounds

Jika harus program penuh

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

Input untuk program lengkap ini adalah daftar nilai yang dipisahkan ruang


Pemakaian

# 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
sumber
2

𝔼𝕊𝕄𝕚𝕟, 16 karakter / 20 byte

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

Try it here (Firefox only).

Tidak buruk, tidak buruk ...

Penjelasan

Ini menghasilkan array yang berisi maksimum dan minimum. (ï⇔⒡≔=+$⸩,pada dasarnya memfilter semua string dalam input, МƲmendapatkan maksimum dalam input, dan МƵmendapatkan minimum.

Hanya sebuah catatan: ini adalah tantangan pertama di mana saya bisa menggunakan , yang pada dasarnya berubah ï⇔menjadi ï=ï.

Mama Fun Roll
sumber
2

Python 3, 56 byte

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

Cobalah online di Ideone .

Dennis
sumber
2

APL (Dyalog) , 13 byte

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

Cobalah online!

 minta (ratakan - ini membuat semua string menjadi karakter dalam daftar besar)

⎕AV~⍨ hapus semua karakter dalam A tomic V ector (set karakter - meninggalkan angka)

(... ) terapkan fungsi diam-diam berikut:

⌊/ minimum melintasi

, ditambahkan ke

⌈/ pepatah di seluruh

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

Cobalah online!

Fungsi Java 8 lambda, mengambil array sebagai input dan memberikan array {min, max}. Non bersaing, karena input harus berupa array integer.

Tetap dan -1 byte terima kasih kepada Kevin Cruijssen

HyperNeutrino
sumber
Anda dapat membuat ini bersaing dengan mengambil daftar Objek dan memeriksa apakah suatu item bilangan bulat atau String.
Kevin Cruijssen
@KevinCruijssen selesai, terima kasih
HyperNeutrino
<isekarang memberikan kesalahan tanpa integer-cast. Juga, kode awal Anda (dan yang satu ini juga) tidak bekerja untuk min, karena akan selalu keluaran 0untuk min. Berikut ini adalah kemungkinan perbaikan. EDIT: Try-catch tampaknya lebih pendek 1 byte dari if(i instanceof Integer).
Kevin Cruijssen
@KevinCruijssen oh tidak memperhatikan itu, terima kasih!
HyperNeutrino
1

Jolf, 20 byte

Saya mungkin bisa bermain golf ini ... Saya perlu menerapkan solusi pendek pengecekan tipe.

γ 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
sumber