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 kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
- String dapat berisi semua karakter ASCII yang dapat dicetak (
32 - 126
) dan tidak kosong.
[1, 2, 3]
1 2 3
dan{1; 2; 3}
semua format input yang valid, jadi saya tidak mengerti mengapa harus berbeda untuk string literal yang diterima dari STDIN.Jawaban:
Serius,
96 byteCobalah secara Online
Bagaimana itu bekerja
sumber
JavaScript (ES6), 54
56Edit 2 byte yang disimpan thx @Neil
Catatan:
x===+x
benar jika dan hanya jikax
merupakan angkasumber
()
?Pyth,
141110 byteCobalah online. Suite uji.
Penjelasan
Q
: input yang dievaluasi#
: filter yang di:I
: nilainya sama setelah:^…1
menaikkannya ke daya 1S
: semacam itu_B
: buat array[previous, reversed(previous)]
hM
: ambil item pertama dari setiap item ituBagian tersulit adalah bermain golf untuk menghilangkan string, yang saat ini membutuhkan 4 byte. Pendekatan saat ini bekerja karena
^<str>1
mengambil kekuatan Cartesian pertama dari urutan (pada dasarnya, daftar karakter string), tetapi^<int>1
hanya fungsi identitas.sumber
*#_1Q
untuk menghapus string, yang akan lebih pendek jika variabel diinisialisasi ke yang negatif ...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.Contoh:
sumber
lambda a:
buntu sebelum itu.if x>0
atauif''>x
simpan satu byte.lambda s:(min(s),-min(-1*_ for _ in s))
(39 byte)Jelly, 8 byte
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! ).
Karena itu mungkin tidak dapat diterima, kita juga perlu cara untuk membedakan karakter dari bilangan bulat.
Atom bitwise Jelly berusaha
kerasuntuk 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 menghasilkanDengan memotong hasil dengan daftar asli, kami menyingkirkan array dan bilangan bulat yang tidak ada dalam daftar asli.
Bagaimana itu bekerja
sumber
Mathematica, 20 byte
Uji kasus
sumber
*
disana? Sepertinya Anda bisa mencapai 19 hanya dengan memotongnya.MinMax@Select[#>0&]
bukan fungsi murni yang valid.@*
adalah komposisi fungsi, sedangkan@
aplikasi fungsi.MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]
menghasilkan respons yang benarMinMax@Select[# > 0 &]
ke simbol, atau cukup evaluasi saja.Ruby,
573629 bytePemula 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!
Uji
sumber
->n{[(x=n.map(&:to_i)&n).min,x.max]}
->a{(a.map(&:to_i)&a).minmax}
CJam,
1513 byteBlok tanpa fungsi (fungsi) yang mengharapkan array input pada stack dan meninggalkan array output di tempatnya.
Jalankan semua test case.
Penjelasan
sumber
q~_e(ae)a+
e(
dane)
akan mengabaikan string atau sesuatu, yang tampaknya tidak konsisten. Dan jika memang melibatkan perbandingan dengan string mungkin akan gagal dengan cara yang sama$
dane>
tidak dapat membandingkan bilangan bulat dengan string.Haskell,
4139 byteDi Haskell, semua elemen daftar harus dari tipe yang sama, jadi saya tidak bisa mencampur
Integer
danString
. Namun, adaEither
tipe untuk menggabungkan dua tipe menjadi satu. Oleh karena itu daftar input adalah tipeEither Integer String
1 .f
memfilter 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
String
properti tidak pernah digunakan.sumber
f x=[minimum,maximum]<*>[[i|Left i<-x]]
jq, 21 karakter
Contoh dijalankan:
Tes online:
sumber
Mathematica, 28 byte
sumber
Nothing
... Itu tidak berarti sesuatu yang istimewa ... Juga, untuk 23 byte:MinMax@*Select[NumberQ]
Nothing
memang memiliki arti khusus. Sejak Mathematica 10.2, secara otomatis dihapus dari Daftar.Nothing
adalah fungsi yang terdokumentasi dalam versi terbaru.PHP,
5048 bytesumber
'
sekitaris_int
.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\"
.Input dipisahkan oleh baris baru.
Cobalah online.
sumber
<space>.*<space>
tahap kedua hingga terakhir karena keserakahan.Mathematica , 14
Contoh:
Penjelasan:
Ketika
MinMax
mendapat input non-numerik, itu mengurangi masalah sejauh mungkin, lalu membiarkan istilah-istilah dibungkusMin
danMax
:Karena pemesanan otomatis yang terjadi, string mengikuti integer.
Apply
di levelspec {1}, singkatan@@@
, kemudian digunakan untuk menarik argumen pertama dari unsur-unsur non-atom. Catatan yang5
tidak tersentuh di sini:sumber
Oracle SQL 11.2, 189 byte
Tidak bermain golf
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.
sumber
[]
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'))
+
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.vimscript, 25 byte
Yap, benar, vimscript.
Mengharapkan input dalam formulir
Dan output dalam bentuk
Penjelasan:
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,1d
adalah kisaran mundur.sumber
Perl
4439 + 3 = 41 byteMembutuhkan
-pa
bendera:Terima kasih kepada @manatwork karena telah memangkas beberapa byte
sumber
sort{$a-$b}grep...
$_="@a[0,-1]"
.grep!/"/
.!/\D/
itu diperlukan alih-alih!/"/
, untuk satu byte lagi.Julia, 35 byte
Ini adalah fungsi lambda yang menerima array dan mengembalikan tuple bilangan bulat. Untuk menyebutnya, tetapkan ke variabel.
Julia memiliki fungsi
extrema
bawaan 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 integerisa
.sumber
Japt, 23 byte
Uji secara online!
Bagaimana itu bekerja
sumber
Bash,
403130 byteMembutuhkan daftar yang dipisahkan garis:
Terima kasih kepada @manatwork untuk mengurangi beberapa byte
sumber
sed '1p;$p;d'
menghemat satu byte.PowerShell,
5336 byteDisimpan 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 keWhere-Object
pernyataan (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"
pengembalian6
adalah PowerShell yang benar-benar valid), kami perlu menggunakan-is
operator 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 outputsort
sebagai array jika hanya ada satu objek (sebagai hasil dari yang?
, atau hanya satu objek adalah input).sumber
-is
jenis operator di sini . Saya pikir Anda bisa mengganti.GetType().Name-eq"Int32"
dengan-is[int]
untuk menyimpan 17 byteMATL , 23 byte
Cobalah online!
sumber
JavaScript (ES5), 105 byte
Pemakaian:
a([1,2,3,'4'])
Hanya mencoba :)
"Tidak Disatukan":
sumber
Pyth, 11 byte
Penjelasan:
Coba di sini!
sumber
Perl 6 , 25 byte
Jawaban yang jelas adalah lambda Apapun Kode ini
Jika harus program penuh
Input untuk program lengkap ini adalah daftar nilai yang dipisahkan ruang
Pemakaian
sumber
𝔼𝕊𝕄𝕚𝕟, 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ï=ï
.sumber
Python 3, 56 byte
Cobalah online di Ideone .
sumber
APL (Dyalog) , 13 byte
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 seluruhsumber
Java (OpenJDK 8) , 124 byte
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
sumber
<i
sekarang memberikan kesalahan tanpa integer-cast. Juga, kode awal Anda (dan yang satu ini juga) tidak bekerja untukmin
, karena akan selalu keluaran0
untukmin
. Berikut ini adalah kemungkinan perbaikan. EDIT: Try-catch tampaknya lebih pendek 1 byte dariif(i instanceof Integer)
.Jolf, 20 byte
Saya mungkin bisa bermain golf ini ... Saya perlu menerapkan solusi pendek pengecekan tipe.
sumber