백분율을 찾으십시오


15

우리는 한동안 훌륭하고 쉬운 과제를 겪지 않았으므로 여기로갑니다.

각각 보다 큰 정수 목록 과 입력으로서 색인 이 주어지면, 목록의 총계의 주어진 색인에서 항목의 백분율을 출력하십시오.0

플로트 / 정수를 자연스럽게 표현한 언어 (단일, 10 진수, 교회 숫자 등)로 출력해야합니다. 당신이 어떤 방법으로 출력을 반올림하도록 선택하는 경우, 그것은 (때 합리적인. 최소 2 소수점에 있어야합니다 하지 않습니다 필요가 둥근 수 있지만, 도 완벽하게 가능).1.21.20

인덱스는 1- 인덱싱되거나 0- 인덱싱 될 수 있으며 항상 배열 범위 내에 있습니다.

이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

1- 인덱스를 사용하고 2dp로 반올림

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]


3
비정 수를 정확히 단항 / 교회 숫자로 출력 할 수있는 방법은 무엇입니까?
Doorknob

1
@Doorknob 아마도 단항 수, 점 및 다른 단항 수?
HighlyRadioactive

출력을 소수점 이하 두 자리로 반올림 할 수 있으므로 반올림 시간을 100으로 출력 할 수도 있습니까?
관련이없는 문자열

1
테스트 케이스 (4)는 2,410분의 20해야
attinat

답변:





5

젤리 , 7 바이트

ị÷S}ȷ2×

왼쪽의 정수, 1부터 시작하는 인덱스 및 오른쪽의 숫자 목록을 허용하는 2 진 링크는 백분율을 나타냅니다.

온라인으로 사용해보십시오!

어떻게?

ị÷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
좋은! P : 내가 가진 무엇 바이트의 바이트 그
케어 드 coinheringaahing


4

R 28 바이트

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

온라인으로 사용해보십시오!


당신이의 요소를 검색 할 생각대로, 나는 R 모르지만, 작동처럼이 (확실하지 임의의 배열을 TIO에서 테스트하는 방법) 보이지 않는 l인덱스에 n의해뿐만 아니라 격차를 n투시 ( [7, 3, 19], 1테스트 케이스를 )
caird coinheringaahing

@cairdcoinheringaahing 나의 나쁜, 오타가 있었다 ( l[]주변을 잊었다 n)
niko

TIO 링크 페이지에이를 포맷 할 수있는 것이 있습니다.
SS Anne


4

자바 (JDK) , 47 바이트

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

온라인으로 사용해보십시오!


1e2대신에 쓰셨 100습니까? 100정수 이기 때문에 1e2부동 소수점 숫자로 간주됩니까?
이스마엘 미구엘

1
@IsmaelMiguel 예 : 1e2이중 유형을 포함 a[i]하지만 합계는 그렇지 않습니다. 도전 과제는 부동 소수점 숫자를 반환해야하기 때문에 사용할 수 있습니다.
Olivier Grégoire

BiFunction <int [], Integer, Double>으로 변경하면 다음과 같이 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->1 바이트보다 짧습니다 (a,i)->.
Olivier Grégoire

1
@Avi 예, 필수입니다 . 일반적으로 가져 오기 대신 전체 클래스 이름을 작성하는 것이 더 짧습니다. 그래서 제가 여기서하는 것
Olivier Grégoire










2

스크래치 3.0 24 23 블록 / 239228 바이트

@JoKing 덕분에 -11 바이트

또는 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 바이트 절약

처음에 사용해보십시오

답변 내역

오, 스크래치 블록 왜 그렇게 오래?

또는 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?
Jo King

아니요, 내가 한 경우 마지막 항목을 집계하지 않기 때문입니다.
Lyxal

글쎄, delete n of m내가 제안한 것을 제거하면 다음과 같이 될 것입니다
Jo King




1

TI 기본 , 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

원하는 값에 10000을 곱하고 합계의 절반을 먼저 더하여 반올림하여 합계로 나눕니다.

+`^..?$
0$&

결과에 최소 3 자리 숫자가 있는지 확인하십시오.

..$
.$&

마지막 두 번째 위치에 소수점을 삽입하십시오.





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

온라인으로 사용해보십시오!

여기서 흥미로운 점은 합계를 찾는 것입니다. 아이콘 은 생성기가있는 최초의 언어 중 하나였습니다. 에 누적 된 !목록의 모든 값을 생성합니다 . 일반적으로 우리는 쓸 필요가 있지만 with with backtracking을 사용 하여 존재하지 않는 변수가 아닌지 확인 하고 소진 될 때까지 목록에서 다음 값을 추출합니다.Lsevery s+:=!L&\zznon-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%

입력을 색인으로 사용하고 명령 행 인수로 나열합니다. 참고 :에서 인덱스 값 작동 19의한 배치의 제한; 처음 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을 곱한 다음 합계의 절반을 더한 다음 합계로 나눕니다. 마지막으로 소수점 자리를 생성하려면 divmod를 10 씩 두 번 수행하십시오. ( %산술 연산자는 Batch에서 특별한 의미가 있으며 일반적으로 두 배가 call필요 하지만 더 두 배가 필요합니다.)

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

결과와 소수점 이하 자릿수를 출력합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.