割合を見つける


15

私たちはしばらくの間、素敵で簡単な挑戦をしていないので、ここに行きます。

それぞれが0より大きい整数のリストと入力としてのインデックスを指定すると、リストの合計の指定されたインデックスにあるアイテムの割合を出力します。

出力は、フロート/整数の自然な表現があなたの言語(単項式、10進数、教会の数字など)にあるものでなければなりません。何らかの方法で出力を丸めることを選択する場合、小数点以下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

または、3つのリストとして:

[[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
非整数を単項/教会の数字としてどのように出力できますか?
ドアノブ

1
@Doorknobおそらく単項数、ドット、および別の単項数でしょうか?
高放射能

出力は小数点以下2桁に丸めることができるため、丸められた時間100を出力することも許可される場合があります。
関連のない文字列

1
テストケース4は20/2410である必要があります
attinat

回答:





5

ゼリー、7 バイト

ị÷S}ȷ2×

左側の整数、1から始まるインデックス、および右側のパーセンテージの数値のリストを受け入れるダイアディックリンク。

オンラインでお試しください!

どうやって?

ị÷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
いいね!それは私が持っていたバイト
ごと


4

R 28バイト

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

オンラインでお試しください!


私はRを知りませんが、単に除算ではなくlat index の要素を取得することになっているので(これはテスト配列をTIOでテストする方法がわかりません)(テストケースを参照してください))nn[7, 3, 19], 1
ケアニアン共犯

私の悪い@cairdcoinheringaahing、(忘れてしまったタイプミスがあったl[]の周りn
ニコ

TIOリンクページには、これをフォーマットできるものがあります。
JL2210


4

Java(JDK)、47バイト

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

オンラインでお試しください!


なぜあなたは1e2代わりに書いたの100ですか?ので、それは100整数と1e2浮動小数点数として考えられていますか?
イスマエルミゲル

1
@IsmaelMiguelはい:1e2ダブルタイプをa[i]持ちますが、合計とそうではありません。この課題では浮動小数点数を返す必要があるため、ここで使用できます。
オリビエグレゴワール

これをBiFunction <int []、Integer、Double>に変更すると、これで10バイトを節約できます(a,i)->1e2*a[i]/IntStream.of(a).sum()。編集:> :(私の貧しいラムダ矢印
アヴィ

@Aviインポートはまだ必要なので(a,i)->1e2*a[i]/java.util.stream.IntStream.of(a).sum()、54バイトの長さのを書く必要があります。私の現在の答えはたった47バイトです。また、a->i->は1バイトよりも短いです(a,i)->
オリビエグレゴワール

1
@Avi はい、彼らが必要とされているように、私はここで何をすべきかの、それが輸入するのではなく、完全なクラス名を書くために、通常は短いです
オリヴィエ・グレゴワール








2

31 29バイト

ErikFのおかげで-2バイト

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

オンラインでお試しください!


1
(-2バイト)の1e2代わりに使用することをお勧めします100.0オンラインで試してください!。どのくらいの言語がこのトリックを使用できるかは、とてもきれいです!
ErikF

@ErikFありがとうございます!理論的にはこれを知っていますが、どうやらそれを使用するのを忘れていました:)
ガレンイワノフ


2

スクラッチ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

@JoKingのおかげで11バイト節約

最初から試す

回答履歴

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 mlength of m-1て自分自身を保存できますdelete nか?
ジョーキング

いいえ、私がやったとしても、最後のアイテムを集計しないからです。
Jono 2906

さて、あなたdelete n of mが私が提案したようなものを削除すると、それは削除されます
ジョーキング




1

TI-Basic12バイト(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

Retina 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

目的の値に10000を掛け、最初に合計の半分を加算することにより、合計を丸めて除算します。

+`^..?$
0$&

結果に少なくとも3桁があることを確認してください。

..$
.$&

最後から2番目の位置に小数点を挿入します。



1

Perl 6、21バイト

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

オンラインでお試しください!

簡単な解決策$b。インデックス付きのパラメーターでカリー化されたパラメーターを使用できないためです。を使用して2つのパラメーターを処理する必要がないファンナーソリューションrotate代わりに関数:

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

オンラインでお試しください!

ただし、残念ながら2バイト長くなります



1

MathGolf7 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

オンラインでお試しください!

ここで唯一面白いのは、合計を見つけることです。Iconは、ジェネレーターを持つ最初の言語の1つでした。!L蓄積されるリストのすべての値を生成しsます。通常every s+:=!L、を記述する必要がありますが、&\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バッチの制限による。最初の10個の要素にインデックスを付けることができる0インデックスバージョンを作成できます。説明:

@shift

インデックスを...にシフトし%0、リストを%1... %9(またはそれ以下)にシフトします。ただし、バッチshiftはに影響しないことに注意してください%*

@set s=%*

スペースで区切られたすべてのパラメーターを取得します。

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

スペースを+sに変更し、算術的に評価して合計を取得しますが、インデックスを減算します。次に、リストにインデックスを付け、10000倍し、合計の半分を加算し、合計で除算します。最後に、10でdivmodを2回実行して、小数点以下の桁を生成します。(%算術演算子はBatchでは特別な意味を持ち、通常は2倍にする必要がありますが、callその後はさらに2倍にする必要があります。)

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

結果と小数点以下の桁数を出力します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.