ค้นหาเปอร์เซ็นต์


15

เราไม่ได้มีความท้าทายที่ดีและง่ายในขณะที่ดังนั้นเราไปที่นี่

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

เอาท์พุทควรเป็นอะไรก็ตามที่เป็นตัวแทนตามธรรมชาติสำหรับลอย / จำนวนเต็มอยู่ในภาษาของคุณ (unary, ทศนิยม, เลขคริสตจักร ฯลฯ ) หากคุณเลือกที่จะปัดเศษผลลัพธ์ในทางใดทางหนึ่งมันจะต้องมีทศนิยมอย่างน้อย 2 ตำแหน่ง (เมื่อเหมาะสม1.2ไม่จำเป็นต้องปัดเศษ แต่1.20ก็ยอมรับได้อย่างสมบูรณ์เช่นกัน)

ดัชนีสามารถเป็น 1 ดัชนีหรือดัชนี 0 และจะอยู่ภายในขอบเขตของอาร์เรย์เสมอ

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!

ตัวอย่าง

ใช้การจัดทำดัชนี 1 และปัดเศษเป็น 2 dp

list, index                    =>         output
[1, 2, 3, 4, 5], 5             => 5 / 15    => 33.33
[7, 3, 19], 1                  => 7 / 29    => 24.14
[1, 1, 1, 1, 1, 1, 1, 1, 1], 6 => 1 / 9     => 11.11
[20, 176, 194, 2017, 3], 1     => 20 / 2410 => 0.83
[712], 1                       => 712 / 712 => 100

หรือเป็นสามรายการ:

[[1, 2, 3, 4, 5], [7, 3, 19], [1, 1, 1, 1, 1, 1, 1, 1, 1], [20, 176, 194, 2017, 3], [712]]
[5, 1, 6, 1, 1]
[33.33, 24.14, 11.11, 0.83, 100]

โพสต์ Sandbox (ตอนนี้ถูกลบ)
caird coinheringaahing

3
จำนวนเต็มที่ไม่ใช่เอาท์พุทสามารถเป็นตัวเลขได้อย่างไร / เลขคริสตจักร?
Doorknob

1
@Doorknob อาจเป็นหมายเลขเอกภาพจุดและหมายเลขอื่น ๆ ?
HighlyRadioactive

เนื่องจากเอาต์พุตสามารถถูกปัดเศษเป็นทศนิยมสองตำแหน่งจึงอาจอนุญาตให้เอาต์พุตที่ปัดเศษเป็น 100 เท่า
สตริงที่ไม่เกี่ยวข้อง

1
กรณีทดสอบ 4 ควรเป็น 20/2410
attinat

คำตอบ:


6

APL (Dyalog Unicode) , 9 ไบต์SBCS

ฟังก์ชั่นเงียบสงบไม่ระบุชื่อ รับดัชนีเป็นอาร์กิวเมนต์ด้านซ้ายและแสดงรายการเป็นอาร์กิวเมนต์ที่ถูกต้อง

100×⌷÷1⊥⊢

ลองออนไลน์!

100 หนึ่งร้อย

× ครั้ง

 องค์ประกอบที่จัดทำดัชนี

÷ หารด้วย

1⊥ ผลรวม (สว่างการประเมินฐาน 1) ของ

 อาร์กิวเมนต์ที่ถูกต้อง




5

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

ị÷S}ȷ2×

ลิงก์ dyadic ยอมรับจำนวนเต็มดัชนีหนึ่งรายการทางด้านซ้ายและรายการตัวเลขทางด้านขวาซึ่งให้เปอร์เซ็นต์

ลองออนไลน์!

อย่างไร?

ị÷S}ȷ2× - Link: integer, i; list, L
ị       - (i) index into (L)
   }    - use right argument:
  S     -   sum (L)
 ÷      - divide
    ȷ2  - literal 10^2 = 100
      × - multiply

1
ดี! นั่นคือ byte สำหรับ byte สิ่งที่ฉันมี: P
caird coinheringaahing


4

R 28 ไบต์

function(n,l)100*l[n]/sum(l)

ลองออนไลน์!


ฉันไม่รู้ R แต่มันดูไม่เหมือนว่ามันใช้งานได้ (ไม่แน่ใจว่าจะทดสอบบน TIO ด้วยอาเรย์โดยพลการอย่างไร) ตามที่คุณควรจะดึงองค์ประกอบของlat at index nไม่ใช่แค่หารด้วยn(ดู[7, 3, 19], 1testcase )
caird coinheringaahing

@cairdcoinheringaahing สิ่งที่ไม่ดีของฉันมีการพิมพ์ผิด (ลืมl[]ไปรอบ ๆn)
niko

มีบางสิ่งในหน้าลิงก์ TIO ที่สามารถจัดรูปแบบนี้ให้คุณได้
SS Anne

4

C (gcc) , 64 ไบต์

0 การจัดทำดัชนี สิ่งที่สนุกเพียงอย่างเดียวก็คือการตระหนักว่า1e2เป็นการdoubleประหยัดไบต์ไป100.!

float f(v,n,t)int*v;{n=v[n];for(t=0;*v;t+=*v++);return n*1e2/t;}

ลองออนไลน์!


ลองออนไลน์! 59 ใช้ C (เสียงดัง)
AZTECCO

4

Java (JDK) , 47 ไบต์

a->i->1e2*a[i]/java.util.Arrays.stream(a).sum()

ลองออนไลน์!


ทำไมคุณถึงเขียน1e2แทนที่จะ100? เป็นเพราะ100จำนวนเต็มและ1e2ถือเป็นเลขทศนิยม?
Ismael Miguel

1
@IsmaelMiguel ใช่: 1e2ดำเนินการประเภทคู่ซึ่งa[i]และผลรวมไม่ เนื่องจากความท้าทายต้องส่งคืนเลขทศนิยมจึงเป็นสิ่งที่ฉันสามารถใช้ได้
Olivier Grégoire

เปลี่ยนเป็น BiFunction ค่า <int [] จำนวนเต็มคู่> และคุณสามารถบันทึก 10 (a,i)->1e2*a[i]/IntStream.of(a).sum()ไบต์ด้วยนี้ แก้ไข:> :( ลูกศรของฉันยากจนแลมบ์ดา
Avi

@Avi การนำเข้ายังคงเป็นสิ่งจำเป็นดังนั้นฉันต้องเขียน: (a,i)->1e2*a[i]/java.util.stream.IntStream.of(a).sum()ซึ่งมีความยาว 54 ไบต์ คำตอบปัจจุบันของฉันมีความยาวเพียง 47 ไบต์ นอกจากนี้ยังเป็นหนึ่งไบต์สั้นกว่าa->i-> (a,i)->
Olivier Grégoire

1
@Avi ใช่พวกเขาจำเป็นต้องใช้และมักจะสั้นกว่าในการเขียนชื่อเต็มชั้นแทนที่จะเป็นการนำเข้าดังนั้นนั่นคือสิ่งที่ฉันทำที่นี่
Olivier Grégoire








2

สีแดง , 31 29 ไบต์

-2 ไบต์ขอบคุณ ErikF

func[b i][1e2 * b/:i / sum b]

ลองออนไลน์!


1
(-2 ไบต์) แนะนำให้ใช้1e2แทน100.0: ลองออนไลน์! . ค่อนข้างเรียบร้อยมีกี่ภาษาที่สามารถใช้เคล็ดลับนี้ได้!
ErikF

@ErikF ขอบคุณ! ฉันรู้เรื่องนี้ในทางทฤษฎี แต่ดูเหมือนว่าฉันลืมที่จะใช้มัน :)
Galen Ivanov


2

Scratch 3.0 24 23 บล็อก / 239 228 ไบต์

-11 bytes thanks to @JoKing

อีกทางเลือกหนึ่งในไวยากรณ์ SB

when gf clicked
set[s v]to(0
ask()and wait
repeat until<(answer)=(
add(answer)to[m v
ask()and wait
end
set[n v]to(item(length of(n))of(m
repeat(length of((m)-(1
change[s v]by(item(1)of[m v
delete (1)of[m v
end
say(((n)/(s))*(100

บันทึก 11 ไบต์ด้วย @JoKing

ลองใช้ด้วยรอยขีดข่วน

คำตอบประวัติ

Oh Scratchblocks, why so long?

อีกทางเลือกหนึ่งในไวยากรณ์ SB

when gf clicked
set[s v]to(0
ask()and wait
repeat until<(answer)=(
add(answer)to[m v
ask()and wait
end
set[n v]to(item(length of(n))of(m
delete(n)of[m v
repeat(length of(m
change[s v]by(item(1)of[m v
delete (1)of[m v
end
say(((n)/(s))*(100

ลองใช้ด้วยรอยขีดข่วน

อินพุตอยู่ในรูปแบบของ:

item1
item2
...
itemN
index

ฉันควรหยุดทำสิ่งนี้กับตัวเองจริงๆ แต่มันเป็นความสนุกมาก!


คุณสามารถเปลี่ยนrepeat length of mเป็นlength of m-1และช่วยตัวเองdelete n?
Jo King

ไม่เพราะถ้าฉันทำมันจะไม่นับรวมรายการสุดท้าย
Lyxal

ถ้าคุณลบสิ่งที่delete n of mฉันแนะนำไปมันก็คงเป็น
โจคิง

2

Pyth , 13 ไบต์

c*100@hQeQshQ

ลองออนไลน์!

ครั้งแรกที่ใช้ Pyth ดังนั้นอาจมีการเพิ่มประสิทธิภาพที่ค่อนข้างใหญ่ที่นี่ แต่ฉันไม่รู้ว่าพวกเขาอยู่ที่ไหน ...

0-index รับอินพุตเป็น list, index




1

TI-Basic , 12 ไบต์ (12 โทเค็น)

Prompt X
Ans(X)E2/sum(Ans

1 การจัดทำดัชนี

รับรายการAnsและแจ้งให้ผู้ใช้รับดัชนี

ตัวอย่างการวิ่ง

คำอธิบาย:

Prompt X         # Prompt the user for the index
Ans(X)E2/sum(Ans
Ans(X)           # The value at the Xth index in the list
      E2         # times 100
        /sum(Ans # Divided by the sum of the list
                 # The result of the last expression in a program is implicitly returned

1

เรติน่า 0.8.2 , 102 ไบต์

\d+
$*
^(1)+((?<-1>.(1+))+)
$3$2
,

\G1
10000$*
;(1+)\1
$1;$1$1
r`.*(\2)*;(1+)
$#1
+`^..?$
0$&
..$
.$&

ลองออนไลน์! ลิงก์มีกรณีทดสอบ index;list,...จะเข้าเป็น คำอธิบาย:

\d+
$*

แปลงเป็นเอก

^(1)+((?<-1>.(1+))+)
$3$2

ดัชนีลงในรายการ

,

รวมรายการ

\G1
10000$*
;(1+)\1
$1;$1$1
r`.*(\2)*;(1+)
$#1

คูณค่าที่ต้องการด้วย 10,000 แล้วหารด้วยผลรวมด้วยการปัดเศษโดยบวกครึ่งหนึ่งของผลรวมก่อน

+`^..?$
0$&

ตรวจสอบให้แน่ใจว่าผลลัพธ์มีอย่างน้อยสามหลัก

..$
.$&

แทรกจุดทศนิยมที่ตำแหน่งสุดท้ายที่สอง



1

Perl 6 , 21 ไบต์

{100*@^a[$^b]/@a.sum}

ลองออนไลน์!

ทางออกที่ง่ายเนื่องจากฉันไม่สามารถใช้พารามิเตอร์ curried กับ$bพารามิเตอร์ที่ถูกทำดัชนี โซลูชัน funner ที่ไม่ต้องจัดการพารามิเตอร์สองตัวโดยใช้rotateฟังก์ชันแทน:

{100*.[0]/.sum}o&rotate

ลองออนไลน์!

แต่น่าเสียดายที่มันยาวกว่าสองไบต์



1

MathGolf , 7 6 ไบต์

§\Σ/♀*

การทำดัชนีแบบ 0

ลองออนไลน์

คำอธิบาย:

§       # Index the (implicit) second input-integer into the first (implicit) input-list,
        # which apparently doesn't pop the list
 \      # Swap so this list is at the top of the stack now
  Σ     # Take the sum of that list
   /    # Divide the earlier number we indexed by this sum
    ♀*  # Multiply it by 100
        # (after which the entire stack joined together is output implicitly as result)

1

ไอคอน , 53 ไบต์

procedure f(L,i)
s:=0;s+:=!L&\z
return 1e2*L[i]/s
end

ลองออนไลน์!

สิ่งที่น่าสนใจเพียงอย่างเดียวที่นี่คือการหาผลรวม ไอคอนเป็นหนึ่งในภาษาแรกที่มีเครื่องกำเนิดไฟฟ้า !สร้างค่าทั้งหมดของรายการLที่สะสมไว้sไว้ โดยปกติเราต้องเขียนevery s+:=!Lแต่ฉันใช้ backtracking ด้วย&\zซึ่งตรวจสอบว่าzตัวแปรที่ไม่มีอยู่คือnon-nullซึ่งไม่ใช่และแยกค่าถัดไปจากรายการจนกระทั่งหมดแรง



1

แบตช์ 111 ไบต์

@shift
@set s=%*
@call set/as=%s: =+%-%0,s=(%%%0*10000+s/2)/s,h=s%%%%10,t=s/10%%%%10,s/=100
@echo %s%.%t%%h%

รับอินพุตเป็นดัชนีและรายการเป็นอาร์กิวเมนต์บรรทัดคำสั่ง หมายเหตุ: ใช้งานได้เฉพาะกับค่าดัชนีตั้งแต่1ถึง9เนื่องจากข้อ จำกัด ของแบทช์ สามารถเขียนเวอร์ชัน 0 ที่จัดทำดัชนีซึ่งจะสามารถทำดัชนีองค์ประกอบ 10 อันดับแรก คำอธิบาย:

@shift

เลื่อนดัชนีไปที่%0และรายการเป็น%1... %9(หรือน้อยกว่า) โปรดทราบว่า Batch นั้นshiftจะไม่ส่งผลกระทบ%*ใด ๆ

@set s=%*

รับพารามิเตอร์ทั้งหมดคั่นด้วยช่องว่าง

@call set/as=%s: =+%-%0,s=(%%%0*10000+s/2)/s,h=s%%%%10,t=s/10%%%%10,s/=100

เปลี่ยนช่องว่างเป็น+s และประเมินผลทางคณิตศาสตร์จึงหาผลรวม แต่ลบดัชนี จากนั้นสร้างดัชนีลงในรายการคูณด้วย 10,000 บวกครึ่งหนึ่งของผลรวมแล้วหารด้วยผลรวม ในที่สุดทำ divmod 10 ครั้งเพื่อสร้างตำแหน่งทศนิยม (ตัว%ดำเนินการทางคณิตศาสตร์มีความหมายพิเศษในแบทช์และโดยปกติจะต้องเพิ่มเป็นสองเท่า แต่callต้องเพิ่มเป็นสองเท่า)

@echo %s%.%t%%h%

แสดงผลลัพธ์และตำแหน่งทศนิยม

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