ค้นหาจำนวนที่มากที่สุดและน้อยที่สุดในอาร์เรย์


29

งาน

งานง่ายมาก กำหนดอาร์เรย์ที่มีจำนวนเต็มและสตริงเท่านั้นให้ส่งออกจำนวนที่มากที่สุดและจำนวนที่น้อยที่สุด

กรณีทดสอบ

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

ตัวเลขในสตริงไม่ถือว่าเป็นจำนวนเต็ม:

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

หากมีเพียงจำนวนเต็มเดียวมันเป็นทั้งจำนวนเต็มที่มากที่สุดและน้อยที่สุด:

Input: [1]
Output: 1, 1

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

กฎระเบียบ

  • คุณสามารถคิดว่าอาร์เรย์จะเสมอมีอย่างน้อยหนึ่งจำนวนเต็ม
  • จำนวนเต็มทั้งหมดเป็นค่าบวก (มากกว่า 0)
  • ลำดับของเอาต์พุตไม่สำคัญ
  • นี่คือดังนั้นการส่งที่มีจำนวนไบต์น้อยที่สุดจะชนะ!
  • สตริงสามารถมีอักขระ ASCII ที่พิมพ์ได้ทั้งหมด ( 32 - 126) และต้องไม่ว่างเปล่า

สตริงที่มีเครื่องหมายคำพูดแสดงอยู่ในอินพุตได้อย่างไร
feersum

@feersum นั่นจะไม่ขึ้นอยู่กับภาษาของคุณ?
Martin Ender

@feersum ด้วยตัวหนีเอฟเฟ็กต์ แต่ถ้าภาษาไม่จัดการนั่นก็ไม่เป็นไร
Adnan

@ MartinBüttnerหากอินพุตถูกนำมาจาก stdin มันไม่ควรขึ้นอยู่กับภาษาที่ใช้
feersum

3
@feersum นั่นใหม่สำหรับฉัน แม้จะมาจาก STDIN [1, 2, 3] 1 2 3และ{1; 2; 3}เป็นรูปแบบอินพุตที่ถูกต้องทั้งหมดดังนั้นฉันจึงไม่เห็นว่าทำไมจึงควรแตกต่างจากตัวอักษรสตริงที่ได้รับจาก STDIN
Martin Ender

คำตอบ:


9

อย่างจริงจัง9 6 ไบต์

,ì;M@m

ลองใช้ออนไลน์

มันทำงานอย่างไร

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

อาใช่ฉันกำลังมองหาคำสั่งดังกล่าว แต่เอกสารไม่ใช่เรื่องง่ายที่จะค้นหา
quintopia

ฉันเห็นด้วย. เอกสารเป็นเป้าหมายสำคัญของฉันต่อไป
Mego

11

JavaScript (ES6), 54 56

แก้ไข 2 ไบต์ที่บันทึกไว้ขอบคุณ @Neil

หมายเหตุ: x===+xเป็นจริงถ้าหากxเป็นตัวเลข

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

3
ทำไมนอก()หรือไม่?
Neil

@ ไม่มีอะไรนอก ()? ทำไมบนโลกนี้ฉันควรมีด้านนอก
edc65

นี่เป็นการส่งคืนฟังก์ชันคุณยังต้องเรียกใช้ (หรือลบ a =>)
Michael Theriot

2
ใช่มันเป็นฟังก์ชั่นนิรนาม เป็นวิธีการทั่วไปในการโพสต์คำตอบใน JavaScript
@MichaelTheriot

@MichaelTheriot ตามค่าเริ่มต้นเราอนุญาตให้การส่งเป็นฟังก์ชันแบบสแตนด์อโลนแทนที่จะต้องใช้โปรแกรมแบบเต็มเสมอ
Alex A.

8

Pyth, 14 11 10 ไบต์

hM_BS^I#1Q

ลองออนไลน์ ชุดทดสอบ

คำอธิบาย

  • Q: อินพุตที่ประเมิน
  • #: ตัวกรองที่เปิด:
    • I: ค่าเหมือนเดิมหลังจาก:
      • ^…1 ยกมันให้เป็นพลังงาน 1
  • S: จัดเรียงที่
  • _B: สร้างอาร์เรย์ [previous, reversed(previous)]
  • hM: ใช้รายการแรกของแต่ละรายการ

ส่วนที่ยากที่สุดคือการกำจัดสายอักขระซึ่งปัจจุบันใช้เวลา 4 ไบต์ วิธีการในปัจจุบันทำงานเนื่องจากการ^<str>1ใช้อำนาจคาร์ทีเซียนแรกของลำดับ (โดยทั่วไปรายการของตัวละครของสตริง) แต่^<int>1เป็นเพียงฟังก์ชั่นตัวตน


Hrm คุณยังสามารถใช้*#_1Qในการลบสตริงซึ่งจะเป็นสั้นถ้าตัวแปรถูกเริ่มต้นได้ที่เชิงลบหนึ่ง ...
FryAmTheEggman

7

Python 2, 42 ไบต์

ใน Python 2 จำนวนเต็มจะน้อยกว่าสตริงเสมอในระหว่างการเปรียบเทียบดังนั้นแบบง่าย ๆmin(s)จะค้นหาจำนวนเต็มที่น้อยที่สุด เมื่อหาค่าสูงสุดเราต้องกรองสตริงก่อน ฟังก์ชั่นที่ไม่ระบุชื่อยอมรับลำดับและส่งกลับ tuple ด้วยขั้นต่ำและสูงสุด

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

ตัวอย่าง:

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

3
คุณต้องlambda a:ติดขัดก่อนหน้านั้น
Doorknob

if x>0หรือif''>xบันทึกหนึ่งไบต์
grc

@ Doorknob ตอนนี้แลมบ์ดาตามที่แนะนำ
Logic Knight อัศวิน

1
@ เดนนิสฉันไม่รู้เรื่องนี้ ฉันได้แก้ไขวิธีการเพื่อให้ชัดเจนการเปรียบเทียบใช้งานได้กับ Python 2 เท่านั้น
Logic Knight

1
สร้างขึ้น: lambda s:(min(s),-min(-1*_ for _ in s))(39 ไบต์)
Fran Borcic

7

เยลลี่ขนาด 8 ไบต์

|f¹Ṣ0,1ị

ลองออนไลน์!

พื้นหลัง

ในโลกที่สมบูรณ์แบบมันพอเพียงที่จะตัดกันรายการด้วยเวอร์ชันที่แบนราบ Strings เป็นเพียงรายการของตัวละครใน Jelly ดังนั้นในขณะที่รายการดั้งเดิมจะมีจำนวนเต็มและสตริงรุ่นที่แบนจะมีจำนวนเต็มและตัวอักษรเหลือเพียงจำนวนเต็มในสี่แยก

ในโลกแห่งความเป็นจริงทั้ง parsers ของทั้งอินพุตและสตริงตัวอักษรให้ผลผลิตอักขระแทนสตริงของความยาว 1 วิธีเดียวที่จะส่งสตริงซิงเกิลไปยังฟังก์ชันจะเข้ารหัส "ด้วยตนเอง" เป็นเช่น[”a]ซึ่งเป็น ตัวละครห่อในอาร์เรย์

วิธีนี้จะช่วยประหยัดไบต์รวมเป็น7 ไบต์ ( ลองออนไลน์! )

fFṢ0,1ị

เนื่องจากอาจไม่เป็นที่ยอมรับเราจึงต้องการวิธีแยกความแตกต่างอักขระจากจำนวนเต็ม

วุ้นของอะตอมบิตหมดพยายามที่จะแปลงข้อโต้แย้งของพวกเขาเพื่อจำนวนเต็ม พวกเขาเริ่มต้นด้วยการ vectorizing จนกว่าพวกเขาจะพบความลึก 0 (ตัวเลขหรือตัวอักษร) จากนั้นพยายามแปลงให้เป็นจำนวนเต็ม สำหรับตัวละครที่แสดงถึงจำนวนเต็มนี้จะประสบความสำเร็จ สำหรับคนอื่น ๆ เป็น dyadic อะตอมค่าที่เหมาะสมก็จะให้ขึ้นและกลับ0

ตัวอย่างเช่นค่าบิต ORing รายการ[1, "2", "34", "-5", "a", "bc"]ด้วยตัวเองจะให้ผล

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

ด้วยการตัดผลลัพธ์กับรายการต้นฉบับเราจะกำจัดอาร์เรย์และจำนวนเต็มที่ไม่ได้อยู่ในรายการเดิม

มันทำงานอย่างไร

|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 ไบต์

MinMax@*Select[#>0&]

กรณีทดสอบ

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

1
ทำไมถึงอยู่ที่*นั่น? ดูเหมือนว่าคุณจะได้ 19 ถึงเพียงแค่ตัดมัน
ซิมมอนส์

1
@ASimmons มันเป็นสิ่งที่จำเป็น MinMax@Select[#>0&]ไม่ใช่ฟังก์ชั่นแท้ที่ถูกต้อง
njpipeorgan

1
@ASimmons @*เป็นการจัดองค์ประกอบของ@ฟังก์ชัน
Martin Ender

1
MinMax@Select[# > 0 &][{1, 2, 3, 4, "Hello", 5}]ตอบสนองที่ถูกต้อง
ซิมมอนส์

1
@ASimmons ลองกำหนดให้MinMax@Select[# > 0 &]กับสัญลักษณ์หรือเพียงประเมินมัน
njpipeorgan

6

Ruby, 57 36 29 ไบต์

สมัครใหม่ที่นี่ดังนั้นฉันไม่รู้ว่ามีสถานที่ / วิธีมาตรฐานหรือเป็นที่ยอมรับในระดับสากลเพื่อคำนวณจำนวนไบต์ที่ใช้หรือไม่ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมาก!

แก้ไขตามความเห็นของผู้ใช้งาน & Doorknob!

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

ทดสอบ

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 ตัวอักษร:->n{[(x=n.map(&:to_i)&n).min,x.max]}
จัดการ

2
29 bytes โดยใช้ minmax:->a{(a.map(&:to_i)&a).minmax}
Doorknob

5

CJam, 15 13 ไบต์

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

บล็อกที่ไม่มีชื่อ (ฟังก์ชัน) ซึ่งคาดว่าอาร์เรย์อินพุตบนสแต็กและปล่อยให้อาร์เรย์อาร์เรย์อยู่ในตำแหน่งนั้น

เรียกใช้กรณีทดสอบทั้งหมด

คำอธิบาย

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

ฉัน sugeested e) และ e (ถึง aditsu. เขาไม่ยอมรับ
username.ak

@ username.ak ฉันไม่คิดว่ามันมีประโยชน์จริงๆ การเพิ่มผู้ให้บริการสองรายที่บันทึกเพียงหนึ่งไบต์ในโซลูชันปัจจุบันไม่ใช่สิ่งที่ aditsu มีแนวโน้มที่จะนำมาใช้และฉันคิดว่าต้องมีคุณสมบัติที่มีประโยชน์มากขึ้นสำหรับการใช้งาน
Martin Ender

มันจะบันทึก 3 ไบต์:q~_e(ae)a+
username.ak

@ username.ak ถ้าอย่างนั้นก็สมมติว่า e(และe)จะไม่สนใจสตริงหรืออะไรบางอย่างซึ่งดูเหมือนจะไม่สอดคล้องกัน และถ้ามันเกี่ยวข้องกับการเปรียบเทียบกับสตริงมันอาจจะล้มเหลวในลักษณะเดียวกันกับที่$และe>ไม่สามารถเปรียบเทียบจำนวนเต็มกับสตริงได้
Martin Ender

5

Haskell, 41 39 ไบต์

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

ใน Haskell องค์ประกอบทั้งหมดของรายการจะต้องเป็นชนิดเดียวกันดังนั้นฉันไม่สามารถผสมและInteger Stringอย่างไรก็ตามมีEitherประเภทสำหรับการรวมสองประเภทเป็นหนึ่งเดียว รายการป้อนข้อมูลจึงประเภทคือ1Either Integer String fกรองจำนวนเต็มลบEitherเสื้อคลุมทำให้รายการเป็นองค์ประกอบเดียวในรายการใหม่ (เช่น[[1,2,3]]) เพื่อให้<*>สามารถใช้ฟังก์ชั่นที่ได้รับในการโต้แย้งครั้งแรกกับมัน

ตัวอย่างการใช้งาน: ->f [Left 1, Left 3, Right "Hello", Left 2][1,3]

แก้ไข: @xnor นำมา<*>เล่นและบันทึกไว้ 2 ไบต์ ขอบคุณ!


1อันที่จริงมันเป็นโพลีมอร์ฟิคอย่างสมบูรณ์ในรูปแบบที่สองเนื่องจากStringไม่เคยใช้คุณสมบัติ


แนวคิดที่ดีกับการจับคู่รูปแบบ คุณสามารถบันทึกสองตัวอักษรด้วยแผนที่ที่กลับด้าน:f x=[minimum,maximum]<*>[[i|Left i<-x]]
xnor

@xnor: ดีมาก ขอบคุณมาก!
nimi


4

Mathematica ขนาด 28 ไบต์

MinMax[#/._String->Nothing]&

ฉันยังไม่เข้าใจความลุ่มหลงของคุณด้วยNothing... มันไม่ได้หมายความว่าอะไรพิเศษ ... นอกจากนี้สำหรับ 23 ไบต์:MinMax@*Select[NumberQ]
LegionMammal978

@ LegionMammal978 ใช้ประโยชน์จาก "จำนวนเต็มทั้งหมดเป็นค่าบวก"! ดูคำตอบของฉัน
njpipeorgan

1
วิธีแก้ปัญหาที่ดีพวกฉันควรจะคิดอย่างนั้น! @ LegionMammal978 Nothingมีความหมายพิเศษ ตั้งแต่ Mathematica 10.2 มันจะถูกลบโดยอัตโนมัติจากรายการ
ซิมมอนส์

@ LegionMammal978 Nothingเป็นฟังก์ชั่นที่มีการบันทึกไว้ในเวอร์ชันล่าสุด
Mr.Wizard

4

PHP, 50 48 ไบต์

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

1
เอาชนะฉัน 2 นาที :)
TMH

2
มันเป็นสิ่งต้องห้ามโดยทั่วไปจะคิดว่าการป้อนข้อมูลที่มีอยู่แล้วในตัวแปร โดยวิธีการที่คุณสามารถบันทึกไบต์ที่สองโดยการเอาไปรอบ ๆ' is_int
Blackhole

@Blackhole ขอบคุณ ไม่ได้ตระหนัก ผมเคยใช้กำจัดคำพูดของคุณ :)
PaulSkinner

4

เรติน่า , 71

ขอบคุณ (เช่นเคย) ที่ @ MartinBüttnerสำหรับความช่วยเหลือในการเล่นกอล์ฟ

ไม่ใช่การแข่งขันที่ชาญฉลาด แต่มันน่าสนใจที่จะใช้การเรียงลำดับฟองจำนวนเต็มใน Retina

ถือว่าทุกสายในการป้อนข้อมูลจะ"ยกมาสองครั้งและไม่ได้มีการใด ๆ \"หนีราคาคู่

A`"
¶

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

(a)+
$#1

อินพุตถูกคั่นด้วยบรรทัดใหม่

ลองออนไลน์


ฉันคิดว่าคุณสามารถใช้<space>.*<space>ในขั้นตอนที่สองถึงขั้นสุดท้ายเนื่องจากความโลภ
FryAmTheEggman

4

Mathematica , 14

#&@@@MinMax@#&

ตัวอย่าง:

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

คำอธิบาย:

เมื่อMinMaxได้รับการป้อนข้อมูลที่ไม่ใช่ตัวเลขจะช่วยลดปัญหาเท่าที่จะทำได้แล้วออกจากคำที่ห่อหุ้มMinและMax:

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

เนื่องจากการจัดเรียงอัตโนมัติที่ใช้สตริงเกิดขึ้นตามจำนวนเต็ม

Applyที่levelspec {1}, ชวเลข@@@, ถูกใช้เพื่อดึงอาร์กิวเมนต์แรกขององค์ประกอบที่ไม่ใช่อะตอม โปรดทราบว่า5ไม่มีการแตะต้องที่นี่:

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

3

Oracle SQL 11.2, 189 ไบต์

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;

ยกเลิกแข็งแรงเล่นกอล์ฟ

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;

แบบสอบถามย่อยแยกอาร์เรย์และแยกเพื่อเติมมุมมองที่มีหนึ่งองค์ประกอบต่อแถว จากนั้นองค์ประกอบที่ไม่ใช่ตัวเลขจะถูกกรองออก

ฉันหวังว่าฉันจะได้พบวิธีที่จะทำกับน้อยและยิ่งใหญ่ แต่ไม่มีโชคกับวิธีการจัดการอาร์เรย์เป็นพารามิเตอร์


คุณกำลังออกจาก[]อาร์เรย์ดังนั้นคุณจะไม่เลือกค่าสูงสุดหรือต่ำสุดหากเป็นองค์ประกอบแรกหรือองค์ประกอบสุดท้ายของอาร์เรย์ คุณไม่จำเป็นต้องใช้คำสั่งย่อย WHERE ของคุณคุณเลือกมวลรวมแล้วดังนั้นคุณไม่จำเป็นต้องกรอง ค้นหาอักขระที่เป็นตัวเลขใน regexes ของคุณและกดการแปลงตัวเลขลงไปที่คิวรีย่อย (อันตรายน้อยมากของเพรดิเคตที่พุช) และมันจะกลายเป็น 126 ไบต์: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'))
เบ็น

ไม่จำเป็นต้องใช้+regex อันที่สองที่นี่เพราะมันไม่สำคัญว่าคุณจะสร้างแถวพิเศษอีกสองสามแถว (บันทึกเป็นไบต์) นอกจากนี้ยังเป็นที่น่าสังเกตว่าหากคุณมีสตริงที่ประกอบขึ้นจากตัวเลขเพียงอย่างเดียวคุณจะไม่เพิกเฉยที่นี่ ที่ต้องการฟังก์ชั่นโอเวอร์โหลดในแพ็คเกจเดียวกันดังนั้นจึงไม่สวยเลย
Ben

3

vimscript ขนาด 25 ไบต์

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

ใช่ถูกต้อง vimscript

คาดว่าอินพุตในแบบฟอร์ม

1
2
3
4
"5"

และเอาท์พุทในรูปแบบ

1
4

คำอธิบาย:

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)

บรรทัดแรกจะต้องมีการทำซ้ำสองครั้งเพื่อจัดการกับกรณีขอบของอินพุตของหมายเลขเดียว นี่เป็นเพราะคำสั่งสุดท้ายจะบ่นหากมีเพียงสองบรรทัดเมื่อถึงมันเพราะมันจบลงด้วยการ2,1dเป็นช่วงหลัง


3

Perl 44 39 + 3 = 41 ไบต์

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

ต้องใช้-paธง:

$ 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

ขอบคุณ@manatwork ที่ช่วยให้การโกนหนวดมีขนาดเล็ก


Perl รุ่นไหน? สำหรับตัวอย่างที่สองของคุณฉันได้รับผลลัพธ์ที่แตกต่าง: pastebin.com/judJys5g
จัดการ

@Manatwork คุณถูกต้องรูปที่ฉันไม่สามารถลบได้sort{$a-$b}grep...
andlrc

ข้อกำหนดไม่ได้ระบุว่าเอาต์พุตจะต้องจัดรูปแบบเหมือนกับในตัวอย่างและในงานนี้อย่างชัดเจนว่าการจัดรูปแบบไม่เป็นประเด็น พวกเราหลายคนเพิ่งใช้สิ่งที่เหมาะสมกว่าในภาษาที่เราเลือก ใน Perl $_="@a[0,-1]"ฉันจะทำเช่นนี้
จัดการ

การกรองที่สั้นลงหนึ่งอักขระ: grep!/"/.
จัดการ

มันบอกว่าอาร์เรย์จะเป็นตัวเลขและสตริง ตัวอย่างทั้งหมดในคำถามนั้นมีสตริงที่มีเครื่องหมายคำพูดคู่ แต่ฉันไม่เห็นสิ่งใดที่บอกว่าพวกเขาไม่สามารถอ้างคำเดี่ยว ฉันคิดว่า!/\D/เป็นสิ่งจำเป็นแทน!/"/อีกหนึ่งไบต์
msh210

3

Julia, 35 ไบต์

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

นี่คือฟังก์ชั่นแลมบ์ดาที่ยอมรับอาร์เรย์และส่งกลับค่าจำนวนเต็ม หากต้องการเรียกใช้กำหนดค่าให้กับตัวแปร

Julia มีฟังก์ชันในตัวextremaสำหรับรับองค์ประกอบขั้นต่ำและสูงสุดของอาร์เรย์เป็น tuple อย่างไรก็ตามเนื่องจากอาร์เรย์ยังสามารถมีสตริงอยู่ในนั้นเราต้องกรองออกก่อน isaเราสามารถทำได้โดยการทดสอบว่าแต่ละองค์ประกอบเป็นจำนวนเต็มโดยใช้


3

Japt 23 ไบต์

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

ทดสอบออนไลน์!

มันทำงานอย่างไร

[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 ไบต์

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

ต้องมีรายการคั่นบรรทัด:

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

ขอขอบคุณ@manatwork ที่จะลดจำนวนการใช้งานลงได้


sed '1p;$p;d'บันทึกเป็นไบต์
เดนนิส

3

PowerShell, 53 36 ไบต์

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

บันทึกแล้ว 17 ไบต์ขอบคุณ@goric

OOOF ... PowerShell มักจะเล่นเร็วและหลวมด้วยการส่งนักกอล์ฟซึ่งปกติแล้วเป็นสิ่งที่ดีสำหรับการเล่นกอล์ฟ แต่เจ็บที่นี่

รับอินพุต$args[0]และไพพ์ของเราเป็นWhere-Objectคำสั่ง ( ?) ที่จะเลือกเฉพาะจำนวนเต็มและส่งผ่านไปตามไพพ์ไลน์ทิ้งสิ่งอื่นใด เนื่องจากการทำการวิเคราะห์ซ้ำแบบไดนามิกเกิดขึ้นแบบทันทีในพื้นหลังสำหรับคุณ (เช่นการ1+"5"กลับมา6เป็น PowerShell ที่ถูกต้องสมบูรณ์แบบ) เราจึงต้องใช้ตัว-isดำเนินการเพื่อแยกความแตกต่างระหว่างชนิดข้อมูล

จากนั้นเราไปป์คอลเลกชันSort-Objectนั้นซึ่งจะเรียงลำดับจำนวนเต็มจากน้อยไปหามากที่สุด ด้านนอก()เป็นสิ่งที่จำเป็นเพื่อให้เราสามารถอ้างอิงองค์ประกอบแรกและสุดท้ายด้วย[0,-1](เช่นที่เล็กที่สุดและใหญ่ที่สุด) แต่ทราบว่าเรายังต้องการนอก@เพื่อบังคับให้หล่อการส่งออกของsortเป็นอาร์เรย์ถ้ามีวัตถุเดียว (เป็นผลมาจาก?หรือเฉพาะวัตถุหนึ่งคือการป้อนข้อมูล)


1
ลองดูที่เป็น-isผู้ประกอบการประเภทที่นี่ ฉันคิดว่าคุณสามารถแทนที่.GetType().Name-eq"Int32"ด้วย-is[int]การบันทึก 17 ไบต์
goric

@goric สุดยอดมาก! ขอบคุณสำหรับสนามกอล์ฟที่ยิ่งใหญ่!
AdmBorkBork

3

MATL , 23 ไบต์

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

ลองออนไลน์!

"       % 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

โอ้ฉันไม่ดี: p คำตอบที่ดี :)
Adnan

@Adnan ขอบคุณ! ยาวเกินไป :-)
Luis Mendo

2

JavaScript (ES5), 105 ไบต์

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

การใช้งาน: a([1,2,3,'4'])

แค่ลอง :)

"Ungolfed":

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

Perl 6 , 25 ไบต์

คำตอบที่ชัดเจนน่าจะเป็นสิ่งนี้แลมบ์ดาโค้ด

*.grep(Int).minmax.bounds

ถ้ามันจะต้องเป็นโปรแกรมเต็มรูปแบบ

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

อินพุตไปยังโปรแกรมแบบเต็มนี้เป็นรายการที่คั่นด้วยช่องว่าง


การใช้

# 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 ตัวอักษร / 20 ไบต์

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

Try it here (Firefox only).

ไม่เลวไม่เลว ...

คำอธิบาย

สิ่งนี้จะส่งออกอาร์เรย์ที่มีทั้งค่าสูงสุดและต่ำสุด (ï⇔⒡≔=+$⸩,โดยทั่วไปจะกรองสตริงทั้งหมดในอินพุตМƲรับค่าสูงสุดในอินพุตและМƵรับค่าต่ำสุด

เพียงแค่ทราบ: นี่คือความท้าทายครั้งแรกที่ฉันได้รับการใช้ซึ่งโดยทั่วไปจะเปิดเข้าไปï⇔ï=ï



2

APL (Dyalog)ขนาด 13 ไบต์

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

ลองออนไลน์!

 เกณฑ์ (แบน - ทำให้สตริงทั้งหมดเป็นอักขระในรายการใหญ่)

⎕AV~⍨ ลบอักขระทั้งหมดในA tomic V ector (ชุดอักขระ - ปล่อยตัวเลข)

(... ) ใช้ฟังก์ชัน tacit ต่อไปนี้:

⌊/ ข้ามขั้นต่ำ

, ผนวกเข้ากับ

⌈/ สังฆราชา


2

Java (OpenJDK 8) , 124 ไบต์

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

ลองออนไลน์!

Java 8 lambda function, takes array as input and gives out array {min, max}. Non competing, because the input has to be an integer array.

Fixed and -1 byte thanks to Kevin Cruijssen


You could make this competing by taking a list of Objects and checking if an item is an integer or String.
Kevin Cruijssen

@KevinCruijssen done, thanks
HyperNeutrino

<i now gives an error without integer-cast. Also, your initial code (and this one as well) doesn't work for min, since it will always output 0 for min. Here is a possible fix. EDIT: Try-catch seems to be 1 byte shorter than the if(i instanceof Integer).
Kevin Cruijssen

@KevinCruijssen oh didn't notice that, thanks!
HyperNeutrino

1

Jolf, 20 bytes

I can probably golf this... I need to implement type-checking shorter solutions.

γ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.