จัดอันดับรายการจำนวนเต็ม


21

คุณได้รับรายการจำนวนเต็มบวกที่ไม่ว่างเปล่าเช่น

[6 2 9 7 2 6 5 3 3 4]

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

[3 9 1 2 9 3 5 7 7 6]

ตัวอย่างเช่นค่าสูงสุดในอินพุตคือ9ดังนั้นนี่จะกลายเป็น1(อันดับแรก) ค่าสูงสุดอันดับที่สามคือ6ทั้งคู่จึง6กลายเป็น3และอันดับ4จะถูกข้ามทั้งหมด

กฎระเบียบ

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

คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นและใช้วิธีการมาตรฐานของเราในการรับอินพุตและให้เอาต์พุต

คุณอาจใช้ภาษาการเขียนโปรแกรมใด ๆแต่โปรดทราบว่าช่องโหว่เหล่านี้เป็นสิ่งต้องห้ามตามค่าเริ่มต้น

นี่คือดังนั้นคำตอบที่สั้นที่สุดที่ถูกต้อง - วัดเป็นไบต์ - ชนะ

กรณีทดสอบ

[8] -> [1]
[1 15] -> [2 1]
[18 14 11] -> [1 2 3]
[11 16 14 8] -> [3 1 2 4]
[15 15 15 15 15] -> [1 1 1 1 1]
[10 2 5 4 15 5] -> [2 6 3 5 1 3]
[5 5 10 10 5 11 18] -> [5 5 3 3 5 2 1]
[2 4 9 4 17 9 17 16] -> [8 6 4 6 1 4 1 3]
[11 17 19 17 10 10 15 3 18] -> [6 3 1 3 7 7 5 9 2]
[2 11 4 8 3 3 12 20 4 18] -> [10 4 6 5 8 8 3 1 6 2]
[12 6 10 2 19 19 6 19 8 6 18] -> [5 8 6 11 1 1 8 1 7 8 4]
[5 6 14 19 13 5 19 9 19 9 9 19] -> [11 10 5 1 6 11 1 7 1 7 7 1]
[9 2 12 3 7 11 15 11 6 8 11 17 11] -> [8 13 3 12 10 4 2 4 11 9 4 1 4]
[3 5 15 7 18 5 3 9 11 2 18 1 10 19] -> [11 9 4 8 2 9 11 7 5 13 2 14 6 1]
[6 11 4 19 14 7 13 16 10 12 7 9 7 10 10] -> [14 6 15 1 3 11 4 2 7 5 11 10 11 7 7]
[11 20 11 1 20 16 11 11 4 8 9 7 11 14 10 14] -> [6 1 6 16 1 3 6 6 15 13 12 14 6 4 11 4]
[4 7 15 2 3 2 3 1 14 2 10 4 7 6 11 2 18] -> [9 6 2 13 11 13 11 17 3 13 5 9 6 8 4 13 1]
[5 1 17 7 1 9 3 6 9 7 6 3 2 18 14 4 18 16] -> [12 17 3 8 17 6 14 10 6 8 10 14 16 1 5 13 1 4]
[5 6 8 10 18 13 20 10 7 1 8 19 20 10 10 18 7 2 1] -> [16 15 11 7 4 6 1 7 13 18 11 3 1 7 7 4 13 17 18]
[12 17 8 2 9 7 15 6 19 5 13 16 14 20 10 11 18 4 3 1] -> [9 4 13 19 12 14 6 15 2 16 8 5 7 1 11 10 3 17 18 20]

1
ที่เกี่ยวข้องอย่างใกล้ชิด. ความแตกต่างคือความท้าทายนั้นรับประกันได้ว่าอินพุตถูกเรียงลำดับซึ่งหมายความว่าคำตอบส่วนใหญ่ขึ้นอยู่กับรูปแบบของindexOfฟังก์ชัน ฉันเชื่อว่าข้อมูลที่ไม่เรียงลำดับมีหลายทางเลือกที่สั้นกว่าในหลายภาษา
Martin Ender


ฉันขอโทษ แต่ฉันเชื่อว่านี่ใกล้กับลิงก์ของ Lynn มากเกินไป ความแตกต่างนั้นน้อยที่สุด: ค่าจะถูกตัดทอนคุณไม่สามารถถือว่าอินพุตที่เรียงลำดับแล้วและครึ่งหนึ่งของเอาต์พุตมีการสลับลำดับ คำตอบที่ได้รับการยอมรับสำหรับคำถามที่เชื่อมโยงนั้นใช้งานได้เกือบ ด้วยความพยายามเพียงเล็กน้อยก็ทำให้ใครบางคนทำงานได้ ดังนั้นฉันจึงเห็นว่าสิ่งนี้ซ้ำซ้อน
Ismael Miguel

ฉันไม่เห็นด้วยอย่างชัดเจนว่าไม่ซ้ำกัน
Timtech

ฉันเห็นด้วยกับ timtech ความท้าทายนี้ง่ายกว่า แต่ไม่ใช่ความซ้ำซ้อน
tuskiomi

คำตอบ:


13

วิธีแก้ปัญหาใน Excel สำหรับกฎโง่ ๆ เกี่ยวกับการใช้เมาส์ในการแลกเปลี่ยนสแต็คของรหัสกอล์ฟ: (WESRRMICGSE) 28 ไบต์

rank(RC[1],r1c1:r1024:c1024)

รายการอินพุตเป็น csv ( 10,23,34,2,) ลงในคอมไพเลอร์หลังจากป้อนแหล่งข้อมูล ไม่มีคำพูดไม่มีวงเล็บเครื่องหมายจุลภาคต่อท้าย

WESRRMICGSE เหมือนกับการเขียนโปรแกรมใน excel ยกเว้นคุณสามารถละเว้นเครื่องหมายเริ่มต้น '=' เพื่อบันทึกไบต์ ความแตกต่างในการทำงานมาจากข้อเท็จจริงที่ว่า WESRRMICGSE จะลากสูตรลงไปเพื่อคัดลอกรหัสโดยอัตโนมัติและให้ผลลัพธ์ที่แตกต่างกันโดยมีอินพุตจำนวนเต็มเดียว หากมีรายการเป็นอินพุตรายการนั้นจะเข้าสู่คอลัมน์ B (คอลัมน์อินพุต) และสูตรจะลดลงโดยอัตโนมัติเพื่อจับคู่กับจำนวนอินพุต (เช่น: อินพุต 34,21,45 จะ 'ลาก' สูตรลง 2 เซลล์รวมเป็น 3 เซลล์ด้วยสูตร)

แก้ไข: ฉันไม่เคยคาดหวังคำตอบนี้จะเป็นที่นิยม ว้าว!


21
ชื่อภาษาเป็นบิตที่น่าสะพรึงกลัว ...
Conor โอไบรอัน

คุณอ้างถึงกฎอะไรและพวกเขาโง่แค่ไหน?
Luis Mendo

3
@ LuisMendo กฎประกาศที่นี่: meta.codegolf.stackexchange.com/questions/10199/ฉันคิดว่ากฎนั้นโง่เพราะฉันใช้เวลา 5 นาทีในการเขียน 'ล่าม' ที่หลีกเลี่ยงสิ่งที่พวกเขากำลังพูดถึง ยิ่งภาษานี้สามารถใช้ในการท้าทายได้มากเท่าไหร่กฎก็ยิ่งมากเท่านั้น ฉันจะต้องรวมสิ่งนี้ไว้ในลิงค์ด้วย
tuskiomi


9

Python 2, 41 ไบต์

lambda l:map(sorted(l+[l])[::-1].index,l)

สำหรับแต่ละค่าค้นหาดัชนีในรายการเรียงลำดับตามการลดลง ในการทำให้ค่ามากที่สุดให้ 1 แทน 0 เราใช้องค์ประกอบ "อนันต์" พิเศษของรายการเองเนื่องจาก Python 2 ถือว่ารายการมีขนาดใหญ่กว่าตัวเลข

โซลูชันที่ตรงกว่าคือ 42 ไบต์และทำงานใน Python 3

lambda l:[1+sum(y<x for x in l)for y in l]

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



7

R, 24 25 20ไบต์

ใช้ฟังก์ชั่นการจัดอันดับมาตรฐานด้วยเมธอด "min" เหนือเวกเตอร์ที่ถูกทำให้ยุ่งเหยิง catเพิ่มเพื่อส่งออกไปยัง STDOUT บันทึกไว้หนึ่งรายการด้วย @Guiseppe

cat(rank(-scan(),,"mi"))

ตัวอย่าง

> cat(rank(-scan(),,"mi"))
1: 9 2 12 3 7 11 15 11 6 8 11 17 11
14: 
Read 13 items
8 13 3 12 10 4 2 4 11 9 4 1 4
> 

ฉันคิดว่าคุณต้องปิดมันcatเพื่อให้มันเป็นโปรแกรมที่สมบูรณ์
Alex A.

@AlexA ฉันสงสัยเกี่ยวกับเรื่องนั้น มันจะยุติธรรมที่จะบอกว่านี่คือฟังก์ชั่นในสิทธิของตนเองและในกรณีนั้นrank(-a,,'min')จะตกลงที่เป็นรายการอินพุตในรูปแบบเวกเตอร์?
MickyT

ในกรณีนั้นเราจะพิจารณาเป็นข้อมูลโค้ดเพราะถือว่ามีตัวแปรอยู่ในเนมสเปซแล้ว function(a)rank(-a,,'min')เพื่อให้การส่งฟังก์ชั่นที่เหมาะสมที่คุณจะต้อง
Alex A.

สามารถลงไปเพียงมากกว่า"mi" "min"
Giuseppe

@AlexA ทำไมมันจะต้องมีการห่อcat? หากการส่งได้รับการfunction(a)rank(-a,,'mi')พิจารณาแล้วว่ามีความเพียงพอและผลลัพธ์ของโปรแกรมนั้นตรงกับrank(-scan(),,'mi')
Mark

4

PowerShell v2 +, 43 41 ไบต์

($a=$args)|%{@($a|sort -d).indexof($_)+1}

พัฒนาอย่างอิสระ แต่ฉันเห็นว่านี่เป็นอัลกอริทึมเดียวกับโซลูชัน Pythonของ @ xnor ดังนั้น / ยัก

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

สำหรับองค์ประกอบในรายการป้อนข้อมูลแต่ละมันsorts รายการการป้อนข้อมูลใน-dการสั่งซื้อ escending จะใช้เวลาองค์ประกอบปัจจุบันและเพิ่ม.indexOf() 1สังเกตุอาเรย์ที่ชัดเจน@(...)เพื่อพิจารณาการป้อนข้อมูลด้วยตัวเลขหลักเดียว ตัวเลขผลลัพธ์จะถูกทิ้งไว้บนไปป์ไลน์และเอาท์พุทนั้นเป็นนัย

บันทึก 2 ไบต์ต้องขอบคุณ @Matt!

ตัวอย่าง

PS C:\Tools\Scripts\golfing> .\rank-the-integers.ps1 6 2 9 7 2 6 5 3 3 4
3
9
1
2
9
3
5
7
7
6

มีเหตุผลที่sort -dไม่ได้ผลสำหรับคุณหรือไม่? นั่นไม่ชัดเจนสำหรับฉัน
Matt

@ แมตแปลก ๆ ใน Win8.1 ISE ของฉันมันระบุไว้-Descendingและ-Debugคลุมเครือ แต่ในเชลล์ตรงบน Win8.1 และเชลล์และ ISE บน Win10 มันใช้งานได้ นี่จะไม่เป็นครั้งแรกที่การติดตั้ง Win8.1 โดยเฉพาะของฉันนั้นโง่ ... : - / ขอบคุณสำหรับการเล่นกอล์ฟ!
AdmBorkBork

สิ่งนี้ยังใช้ไม่ได้กับกรณีทดสอบทั้งหมดหรือไม่ $args|%{@($args|sort -d).indexof($_)+1}มันสั้นกว่า แต่ฉันไม่ได้ดูดีที่จะรู้ว่ามันใช้งานได้หรือไม่
Matt

@ Matt นั่นไม่ได้ทำงานเพราะที่สอง$argsฟังก์ชั่นเป็น input สำหรับบล็อกสคริปต์ของวง{...}เช่นเดียวกับถ้าคุณกำลังใช้หรือfilter function
AdmBorkBork

3

อ็อกเทฟ 15 ไบต์

@(x)sum(x<x')+1

พอร์ตของคำตอบของฉัน MATL เพื่อ Octave มันยังใช้งานได้ใน Matlab R2016b

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


3

JavaScript (ES6), 38 36 ไบต์

a=>a.map(e=>a.map(d=>r+=e<d,r=1)&&r)

แก้ไข: บันทึก 2 ไบต์ด้วย @ETHproductions


.mapFTW ;-)a=>a.map(e=>a.map(d=>r+=e<d,r=1)&&r)
ETHproductions

3
@ETHproductions ทำไมคุณต้องทำให้ฉันสนุก
Neil

2

เยลลี่ 5 ไบต์

<S‘ð€

TryItOnline!

อย่างไร?

<S‘ð€ - Main link: listOfValues
   ð  - dyadic chain separation
    € - for each
<     - less than (vectorises) - yields a list of 1s and 0s
 S    - sum - yields number of values the current value is less than (those that beat it)
  ‘   - increment - the place of a value is the number that beat it plus 1.

สิ่งนี้มีความคล้ายคลึงกับรหัส J ที่ฉันกำลังจะส่งหรือไม่ 1+(+/@:<)"0 1~
Dane

ดูเหมือนว่าคล้ายกัน (ใช้การลดเพื่อผลรวม?) แต่ไม่ควรหยุดการโพสต์รหัสของคุณ!
Jonathan Allan

ฉันเดาว่าฉันสงสัยมากขึ้นว่า "การแยกโซ่แบบไดเอดิค" และ "สำหรับแต่ละ" ทำในภาษาที่ได้แรงบันดาลใจจากเจ
Dane

อืมจากคำอธิบายของคุณฉันคิดว่ารหัสของคุณเป็นไปได้มากกว่า>€µS‘หรือชอบ<@€µS‘( @กลับรายการอาร์กิวเมนต์ไปที่<โอเปอเรเตอร์) J ~คือปริยายในห่วงโซ่ทางด้านซ้ายของการµแยก monadic (แทนที่จะเป็น dyadic) และ<เวกเตอร์ถ้าอาร์กิวเมนต์ (s) คือรายการ (เป็น)
Jonathan Allan

2

Perl 6 ,  42  26 ไบต์

ค้นหาดัชนีแรก:kในรายการที่[R,]เรียงกลับกัน

{map {[R,](.sort).first(*==$^a,:k)+1},@$_}

นับค่าที่มากกว่าและบวกหนึ่งค่า

{map {1+.grep(*>$^a)},@$_}

2

JavaScript, 87 49 ไบต์

f=a=>a.slice().map(function(v){return a.sort(function(a,b){return b-a}).indexOf(v)+1 })

a=>[...a].map(v=>a.sort((a,b)=>b-a).indexOf(v)+1)

ขอบคุณ Conor O'Brien และ ETHProductions!


1
v=>a.sort((a,b)=>b-a).indexOf(v)+1คุณสามารถใช้ฟังก์ชั่นที่ไม่ระบุชื่อในแผนที่คือ
Conor O'Brien

คุณไม่จำเป็น.slice()เลยเพราะ.mapทำงานกับสำเนาของอาร์เรย์
ETHproductions

และนโยบายเว็บไซต์ของเราก็คือไม่จำเป็นต้องตั้งชื่อฟังก์ชั่นเพื่อให้คุณสามารถลบผู้นำf=ได้เช่นกัน
Conor O'Brien

@ETHproductions หากฉันลบส่วนแบ่งให้ส่ง[18,13,18]คืน[1,1,2]แทน[1, 3, 1]
Oliver

โอ้มันแปลก ... ฉันเดาว่าเป็นเพราะa.sort()เก็บอาร์เรย์ที่เรียงaไว้ แต่คุณสามารถเปลี่ยนa.slice()การ[...a]บันทึกไม่กี่ไบต์
ETHproductions

2

Mathematica, 44 bytes 42 bytes 40 bytes

xPosition[SortBy[x,-#&],#][[1,1]]&/@x

คืออักขระการใช้งานส่วนตัวขนาด 3 ไบต์U+F4A1( หน้า Wolfram docs )

แก้ไข: ขอบคุณJHMสำหรับการประหยัดไบต์


1
ล้มเหลวสำหรับกรณีทดสอบ{10,2,5,4,15,5}(ผลลัพธ์ไม่ควรเป็นไป{2,6,3,5,1,3}ได้{2,5,3,4,1,3}โปรดสังเกตว่า4ต้องข้ามเนื่องจากมีสอง5s ในอินพุต)
JungHwan Min

แก้ไขถูกต้องแล้ว
ngenisis

1
-2 ไบต์โดยการเปลี่ยนxและ(อย่างมีประสิทธิภาพการกำจัดวงเล็บ):# xPosition[SortBy[x,-#&],#][[1,1]]&/@x
JungHwan Min Min


2

J , 14 8 ไบต์

1+1#.</~

อย่างไร?

1+1#.</~ - Consumes and returns a list of integers
       ~ - Use the same list for both inputs
     </  - Create a table of less-than comparisons
  1#.    - Treat each row like digits of a base-one number, returning a list of integers
1+       - Increment the results

วิธีแก้ไขก่อนหน้า

1+(+/@:<)"0 1~

สวัสดีฉันได้พบรุ่นสั้น 8 1+1#.</~ไบต์ การสรุปแถวที่ชาญฉลาดทำได้โดยใช้การแปลงฐาน 1 อีกทางเลือกหนึ่งคือ1+\:~i.]ซึ่งก็คือ 8 ไบต์
ไมล์

ดี! คุณต้องการโพสต์คำตอบของคุณเอง? ฉันจะรวมการปรับปรุงพื้นฐานไว้เป็นอย่างอื่น
Dane

2
ไม่ฉันสบายดีด้วยการแนะนำการประหยัดแบบไบต์ รู้สึกอิสระที่จะใช้พวกเขา
ไมล์


1

สงสัย 28 ไบต์

@(->@+1:0iO#0rev sort#I#1)#0

การใช้งาน:

(@(->@+1:0iO#0rev sort#I#1)#0)[6 2 9 7 2 6 5 3 3 4]

แม็พกับอาร์เรย์อินพุตด้วยฟังก์ชันที่เพิ่ม 1 เข้ากับดัชนีแรกของไอเท็มในอินพุตที่เรียงลำดับจากมากไปหาน้อย



1

Mathematica ขนาด 37 ไบต์

Min@Position[-Sort@-#,i]~Table~{i,#}&

ฟังก์ชั่นบริสุทธิ์ซึ่งจะจัดอันดับมันป้อนตามกฎของปัญหา Ex:

Min@Position[-Sort@-#, i]~Table~{i, #} &[{6, 2, 9, 7, 2, 6, 5, 3, 3, 4}]
(*{3, 9, 1, 2, 9, 3, 5, 7, 7, 6}*)

1

แมงกะพรุนขนาด 15 ไบต์

p`&& ~i
  >/+`<

ลองออนไลน์!

คำอธิบาย

ดูเหมือนจะไม่มีวิธีที่ดีในการค้นหาดัชนีของค่าในรายการในแมงกะพรุนดังนั้นวิธีนี้จึงใช้วิธีการนับจำนวนค่าที่มีขนาดใหญ่กว่าค่าปัจจุบันและเพิ่มผลลัพธ์ สิ่งนี้ทำโดยการสร้างฟังก์ชั่นยูนารีซึ่งคำนวณค่านี้สำหรับองค์ประกอบที่กำหนด

     `<

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

     ~i
     `<

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

   & ~i
   /+`<

นี่/+คือการลดโดยการเพิ่มซึ่งหมายความว่ามันเป็นเพียงฟังก์ชั่น "รวมรายการนี้" &รวบรวมสิ่งนี้ลงในฟังก์ชั่นก่อนหน้าดังนั้นตอนนี้เรามีฟังก์ชั่นยูนารีซึ่งนับจำนวนค่าในอินพุตที่ใหญ่กว่าจำนวนเต็มนั้น

  && ~i
  >/+`<

นอกจากนี้เรายังเขียนฟังก์ชั่นการเพิ่มบนนี้

 `&& ~i
  >/+`<

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

p`&& ~i
  >/+`<

ในที่สุดนี้จะพิมพ์ผล


1

brainfuck, 124 ไบต์

->,[>>>+>,]<[-<+]+[-->[<[<<<<]>>>+>[>[>>]<[[<<+<<]>+>[->>>>]]<+>>>]+[-<<+]->]<[<
<<<]>+.,>>[>[>->+>>]<<[-<<<<]>-]+[->+]+>>>>]

จัดรูปแบบ:

->
,[>>>+>,]
<[-<+]
+
[
  -->
  [
    <[<<<<]
    >>>+>
    [
      >[>>]
      <
      [
        [<<+<<]
        >+>[->>>>]
      ]
      <+> >>
    ]
    +[-<<+]
    ->
  ]
  <[<<<<]
  >+.,>>
  [
    >[>->+>>]
    <<[-<<<<]
    >-
  ]
  +[->+]
  +>>>>
]

สิ่งนี้ถูกออกแบบมาสำหรับการใช้งาน brainfuck 8 บิต input และ output เป็นผ่านทางค่าไบต์

ลองออนไลน์

สำหรับแต่ละองค์ประกอบจะนับจำนวนองค์ประกอบที่มากกว่านั้นจากนั้นพิมพ์ผลลัพธ์บวกหนึ่ง สิ่งนี้สามารถทำได้โดยการเพิ่มองค์ประกอบทั้งหมดจนกว่าองค์ประกอบปัจจุบันเท่ากับศูนย์ปรับปรุงผลลัพธ์เมื่อองค์ประกอบอื่นกลายเป็นศูนย์ก่อนองค์ประกอบปัจจุบัน

เทปแบ่งออกเป็นโหนด 4 เซลล์

b c 0 0

โดยที่cเป็นองค์ประกอบและbเป็นธงนำทางที่เป็นลบสำหรับองค์ประกอบปัจจุบันมิฉะนั้นหนึ่ง

ผลลัพธ์และสำเนาขององค์ประกอบปัจจุบันจะถูกเก็บไว้ที่ด้านซ้ายของอาร์เรย์


1

Java, 215 ไบต์

public class G{public static void L(int[]A){int[]r=new int[A.length];for(int i=0;i<A.length;i++){int c=1;for(int j=0;j<A.length;j++){if(A[j]>A[i])c++;}r[i]=c;}for(int i=0;i<r.length;i++)System.out.print(r[i]+",");}}

คำอธิบาย:

อธิบายตนเองมาก

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

ฉันขอโทษนี่ไม่รัดกุม แต่ลองครั้งแรกของฉันที่หนึ่งเหล่านี้และฉันไม่เห็นรายการสำหรับ java ฉันแน่ใจว่ามันสามารถลงสนามได้มากกว่านี้

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


คุณสามารถลบช่องว่างนี้ออกได้ไหม? มันเป็นแบบนี้ไม่ได้เล่นกอล์ฟจริงๆเลย (เช่นช่องว่างในr = new)
Rɪᴋᴇʀ

@EasterlyIrk ใช่ขอโทษฉันไม่คุ้นเคยกับการทำเช่นนี้ ฉันคิดว่าฉันได้กำจัดช่องว่างที่ไม่จำเป็นออกไปทั้งหมด
เฮนรี่

คุณสามารถตั้งชื่อ "rankNumberGolf" บางอย่างที่สั้นกว่าเช่น "G" หรือบางอย่างได้ไหม
Rɪᴋᴇʀ

@EasterlyIrk ใช่ขอบคุณ
Henry

ฉันไม่ค่อยมีจาวา แต่คุณสามารถลบช่องว่างในสามช่องได้for (หรือไม่?
Rɪᴋᴇʀ

0

PHP, 101 ไบต์

ต้องมีวิธีที่สั้นกว่านี้

function f(&$a){for($r=1;$v++<max($a);$r+=$n,$n=0)foreach($a as$k=>$w)if($w===$v){$a[$k]="$r";$n++;}}

ฟังก์ชั่นรับอินพุตเป็นอาร์เรย์ของจำนวนเต็มเขียนทับตัวแปรอินพุตด้วยอันดับเป็นสตริงตัวเลข

การใช้งาน: $a=[1,2,4,2,2,3];f($a);print_r($a);


0

Ruby, 45 40 ไบต์

->a{a.map{|x|a.sort.reverse.index(x)+1}}

สิ่งนี้เรียกว่าอย่างไร? ฉันไม่สามารถจับคู่กรณีทดสอบได้ดูเหมือนว่ามีข้อผิดพลาดที่มีอันดับเท่ากัน ตัวอย่างเช่น[10, 2, 5, 4, 15, 5]ให้ฉันออก[2, 5, 3, 4, 1, 3]เมื่อมันควรจะ[2, 6, 3, 5, 1, 3]- ฉันคิดว่าการแก้ไขที่คุณเพิ่งลบ.uniq- ประหยัด 5 ไบต์!
Neil Slater

ฉันดูเหมือนจะอ่านคำถามผิดไป ขอบคุณที่จำได้!
Lee W

0

Clojure, 48ไบต์

อัปเดต: ใช้forแทนmap

#(for[i %](+(count(filter(partial < i)%))1))

เพียงกรองแต่ละค่าที่เล็กกว่าค่าปัจจุบันนับความยาวของรายการและเพิ่มทีละหนึ่ง



0

PHP, 84 ไบต์

function r($l){$s=$l;rsort($s);foreach($l as$n)$r[]=array_search($n,$s)+1;return$r;}

การใช้งาน: ผ่านฟังก์ชั่น r อาเรย์ของคุณจำนวนเต็มและมันจะส่งกลับอาร์เรย์ที่สอดคล้องกันของจำนวนเต็มอันดับ

ผ่านการทดสอบที่นี่



0

K (oK) 11 ไบต์

วิธีการแก้:

1+(x@>x)?x:

ลองออนไลน์!

ตัวอย่าง:

1+(x@>x)?x:6 2 9 7 2 6 5 3 3 4
3 9 1 2 9 3 5 7 7 6
1+(x@>x)?x:5 6 14 19 13 5 19 9 19 9 9 19
11 10 5 1 6 11 1 7 1 7 7 1

คำอธิบาย:

ค้นหาตำแหน่งของรายการต้นฉบับในรายการที่เรียงแล้วเพิ่มหนึ่งรายการ

1+(x@>x)?x: / the solution
         x: / save input as x
  (  >x)    / return indices of x sorted in descending order
   x@       / apply these indices to x (thus sort x)
        ?   / lookup right in left
1+          / add one
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.