Temukan persentasenya


15

Kami belum memiliki tantangan yang menyenangkan dan mudah dalam beberapa saat, jadi inilah dia.

Diberikan daftar bilangan bulat masing-masing lebih besar dari 0 dan indeks sebagai input, output persentase item pada indeks yang diberikan dari total jumlah daftar.

Output harus berupa apa pun representasi alami untuk pelampung / bilangan bulat dalam bahasa Anda (unary, desimal, angka Gereja, dll.). Jika Anda memilih untuk membulatkan output dengan cara apa pun, itu harus memiliki minimal 2 tempat desimal (bila masuk akal. 1.2 tidak perlu dibulatkan, tetapi 1.20 juga dapat diterima).

Indeks dapat berupa indeks-1 atau indeks-0, dan akan selalu berada dalam batas-batas array.

Ini adalah , jadi kode terpendek dalam byte menang!

Contohnya

Menggunakan 1-diindeks dan dibulatkan menjadi 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

Atau, sebagai tiga daftar:

[[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]


3
bagaimana tepatnya non-integer menjadi output sebagai angka unary / gereja?
Gagang Pintu

1
@ Doorknob Mungkin nomor unary, titik, dan nomor unary lainnya?
HighlyRadioactive

Karena output dapat dibulatkan ke dua tempat desimal, mungkin juga diizinkan untuk membulatkan kali 100?
String Tidak Terkait

1
test case 4 harus 20/2410
attinat

Jawaban:


6

APL (Dyalog Unicode) , 9 byte SBCS

Fungsi infiks diam-diam anonim. Mengambil indeks sebagai argumen kiri dan daftar sebagai argumen kanan.

100×⌷÷1⊥⊢

Cobalah online!

100 seratus

× waktu

 elemen yang diindeks

÷ dibagi dengan

1⊥ jumlah (lit. evaluasi base-1) dari

 argumen yang benar




5

Jelly , 7 byte

ị÷S}ȷ2×

Tautan diad yang menerima bilangan bulat, indeks berbasis satu di sebelah kiri dan daftar angka di sebelah kanan yang menghasilkan persentase.

Cobalah online!

Bagaimana?

ị÷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
Bagus! Itu byte untuk byte yang saya punya: P
caird coinheringaahing

5

05AB1E , 6 byte

è²O/т*

Program lengkap mengambil indeks kemudian daftar. Menggunakan pengindeksan 0.

Cobalah online!

Bagaimana?

è²O/т*
è      - index (input 1) into (input 2)
 ²     - push 2nd input
  O    - sum
   /   - divide
    т  - push 100
     * - multiply
       - print top of stack

4

R 28 byte

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

Cobalah online!


Saya tidak tahu R, tetapi ini sepertinya tidak berfungsi (tidak yakin bagaimana cara mengujinya pada TIO dengan array arbitrer), karena Anda seharusnya mengambil elemen lpada indeks n, tidak hanya dibagi dengan n(lihat [7, 3, 19], 1testcase )
caird coinheringaahing

@cairdcoinheringaahing Badaku, salah ketik (lupa l[]sekitar n)
niko

Ada satu hal di halaman tautan TIO yang dapat memformat ini untuk Anda.
SS Anne


4

Java (JDK) , 47 byte

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

Cobalah online!


Mengapa Anda menulis 1e2alih-alih 100? Apakah karena 100bilangan bulat dan 1e2dianggap sebagai angka titik mengambang?
Ismael Miguel

1
@ IsmaelMiguel Ya: 1e2membawa tipe ganda, yang a[i]dan jumlah tidak. Karena tantangan mengharuskan untuk mengembalikan angka floating point, di situlah saya dapat menggunakannya.
Olivier Grégoire

Mengubahnya ke BiFunction <int [], Integer, Double> dan Anda dapat menyimpan 10 byte dengan ini: (a,i)->1e2*a[i]/IntStream.of(a).sum(). Sunting:> :( panah lambda saya yang malang
Avi

@ Avi Impor masih diperlukan, jadi saya harus menulis:, yang panjangnya (a,i)->1e2*a[i]/java.util.stream.IntStream.of(a).sum()54 byte. Jawaban saya saat ini hanya 47 byte. Juga, a->i->satu byte lebih pendek dari (a,i)->.
Olivier Grégoire

1
@Vi Ya, mereka diharuskan , dan biasanya lebih pendek untuk menulis nama kelas penuh daripada impor, jadi itulah yang saya lakukan di sini
Olivier Grégoire




3

JavaScript (ES6), 30 bytes

Takes input as (array)(index), where index is 0-based.

a=>n=>a[n]*100/eval(a.join`+`)

Try it online!


3

MATL, 9 bytes

)1Gs/100*

Try it online!

Explanation

          implicitly take two inputs
)         get the entry within the first input at the index specified by the second
 1G       push the first input onto the stack again
   s      compute the sum 
    /     divide first entry of the stack by this number (the sum) 
     100* multiply by 100

Try it online!




2

Red, 31 29 bytes

-2 bytes thanks to ErikF

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

Try it online!


1
(-2 byte) menyarankan menggunakan 1e2daripada 100.0: Coba online!. It's pretty neat how many languages can use this trick!
ErikF

@ErikF Thank you! I know this in theory, but as it seems, I forgot to use it :)
Galen Ivanov


2

Gores 3.0 24 23 blok / 239 228 byte

-11 bytes thanks to @JoKing

Atau dalam sintaks 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

Disimpan 11 byte berkat @ JoKing

Cobalah dari awal

Jawab Sejarah

Oh Scratchblocks, why so long?

Atau dalam sintaks 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

Cobalah dari awal

Masukan dalam bentuk:

item1
item2
...
itemN
index

Aku benar-benar harus berhenti melakukan ini pada diriku sendiri. Tapi ini sangat menyenangkan!


Anda dapat mengubah repeat length of mke length of m-1dan menyelamatkan diri delete n?
Jo King

Tidak, karena jika saya lakukan, itu tidak akan cocok dengan item terakhir.
Jono 2906

Nah, jika Anda menghapus delete n of mseperti yang saya sarankan maka itu akan
Jo King

2

Pyth , 13 byte

c*100@hQeQshQ

Cobalah online!

Pertama kali menggunakan Pyth jadi mungkin ada beberapa optimasi yang cukup besar di sini, tapi saya tidak tahu di mana mereka ...

0-index, menerima input sebagai list, index


1

Perl 5 -ap -MList::Util=Sum , 19 byte

$_=100*$F[<>]/sum@F

Cobalah online!

Ambil daftar, spasi terpisah pada baris pertama, indeks (berbasis 0) pada baris kedua.



1

TI-Basic , 12 byte (12 token)

Prompt X
Ans(X)E2/sum(Ans

1-diindeks

Membawa daftar Ansdan meminta pengguna untuk indeks

Contoh dijalankan

Penjelasan:

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

Retina 0.8.2 , 102 byte

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

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

Cobalah online! Tautan termasuk kasus uji. Mengambil input sebagai index;list,.... Penjelasan:

\d+
$*

Konversikan ke unary.

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

Indeks ke dalam daftar.

,

Jumlahkan daftar.

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

Lipat gandakan nilai yang diinginkan dengan 10000 dan bagi dengan jumlah dengan pembulatan dengan menambahkan setengah dari jumlah pertama.

+`^..?$
0$&

Pastikan bahwa hasilnya memiliki setidaknya tiga digit.

..$
.$&

Masukkan titik desimal di posisi terakhir kedua.



1

Perl 6 , 21 byte

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

Cobalah online!

Solusi sederhana, karena saya tidak bisa menggunakan parameter curried dengan $bparameter diindeks. Solusi funner yang tidak harus menangani dua parameter dengan menggunakan rotatefungsi sebagai gantinya:

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

Cobalah online!

Tapi sayangnya dua byte lebih lama



1

MathGolf , 7 6 byte

§\Σ/♀*

Pengindeksan berbasis 0.

Cobalah online.

Penjelasan:

§       # 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

Ikon , 53 byte

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

Cobalah online!

Satu-satunya hal yang menarik di sini adalah menemukan jumlahnya. Ikon adalah salah satu bahasa pertama yang memiliki generator. !menghasilkan semua nilai daftar Lyang diakumulasikan s. Biasanya kita perlu menulis every s+:=!L, tetapi saya menggunakan backtracking &\z, yang memeriksa apakah zvariabel tidak ada non-null, yang tidak, dan mengekstrak nilai berikutnya dari daftar sampai kelelahan.



1

Batch, 111 byte

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

Takes input as index and list as command-line arguments. Note: Only works for index values from 1 to 9 due to limitations of Batch; a 0-indexed version could be written which would be able to index the first 10 elements. Explanation:

@shift

Shift the index to %0 and the list to %1...%9 (or less). Note however that Batch's shift does not affect %*.

@set s=%*

Get all of the parameters, space separated.

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

Ubah spasi menjadi +s dan evaluasi secara hitung, sehingga mengambil jumlah, tetapi kurangi indeks. Kemudian indeks ke dalam daftar, kalikan dengan 10.000, tambahkan setengah dari jumlah, dan bagi dengan jumlah. Akhirnya lakukan divmod sebanyak 10 kali untuk menghasilkan tempat desimal. ( %Operator aritmatika memiliki arti khusus dalam Batch dan biasanya perlu digandakan tetapi callkemudian membutuhkan penggandaan lebih lanjut.)

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

Keluarkan hasilnya dan tempat desimal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.