Sex Bob-ombs의 부기 (누계액이 너무 낮은 지 확인)


15

믿거 나 말거나, 섹스 밥 놈 은 세계적으로 유명한 밴드가되었으며 현재 세계 투어 중입니다! 회계 담당자 로서 일상적인 재정을 감독하고 정기적 인 보고서를 제공해야합니다.

몇 주마다 지출 목록을 전체 순서대로 USD 단위 로 작성하십시오.

예를 들어, 목록

378
-95
2234

378 달러가 계좌에 예치되었고 그 후 95 달러가 철회 된 후 2234 달러가 예치 된 후.

이 값의 누계 합계가 일부 임계 값 T 아래로 떨어지지 않도록하려고합니다 . 이를 위해 프로그램을 작성하기로 결정했습니다.

도전

단일 정수 T 와 정수 목록 을 취하는 프로그램이나 함수를 작성하십시오 . 정수 목록의 누계 합이 T 보다 작 으면 거짓 값 을 인쇄하거나 반환하고 , 그렇지 않으면 값을 인쇄하거나 반환합니다.

일반적인 입력 방법 (stdin, file, command line, arguments to function)을 사용할 수 있습니다.

  • 목록의 시작 부분에서 누적 합계는 0입니다. 따라서 양수 T 는 결과가 항상 거짓임을 의미합니다.
  • + 양의 정수 앞에 절대로 있지 않습니다.
  • 이 목록에는 0이 포함될 수 있습니다.
  • 목록이 비어있을 수 있습니다.

테스트 사례

이들 모두에서 T 는 -5이다.

거짓 :

-6
1
2
3
-20
200
-300
1000

진실한 :

[empty list]
-5
4
-3
-6

채점

가장 적은 바이트를 가진 제출이 이깁니다. Tiebreaker는 가장 빠른 게시 제출에갑니다.

이것을 유감스럽게 생각한 유감스러운 말.


1
테스트 사례는 T = 5, L = [10]이 필요했습니다. 어쩌면 나는 요점을 완전히 놓쳤다
edc65

1
@ edc65 "목록의 시작 부분에서 누적 합계는 0입니다. (따라서 양수 T는 결과가 항상 잘못된 것을 의미합니다.")
Martin Ender

@optimizer 슬퍼하지 말고, 내가 참고로 <3 있어요
undergroundmonorail

@undergroundmonorail이 너무 늦었습니다. 그리고 거기에 링크가 있습니다.
Optimizer

답변:


2

gs2-6 바이트

목록이 스택의 맨 위에 있고 임계 값이 레지스터 A에 있다고 가정합니다. 니모닉에서 :

inits
sum get-a lt filter3
not

바이트 코드로 :

78 64 D0 70 F2 22

이것이 실제로 gs2에서 동등한 기능입니까? 기본적으로 가정을 조금 더 정당화 할 수 있습니까? (그렇다면 받아 들일 것입니다.)
Calvin 's Hobbies

gs2에는 실제로 함수가 없지만 GolfScript에서와 같이 블록에 코드를 넣고 스택 위에 밀어 넣고 eval을 호출 할 수 있습니다. 이 6 바이트를 블록에 넣고 내가 설명한 상황에서 평가하면 스택 맨 위에있는 목록이 답변 (0은 거짓, 1은 참)으로 바뀝니다. 마찬가지로이 코드 앞에 목록을 푸시하고 임계 값을 레지스터 A에 할당하는 코드를 접두어로 사용하면 올바른 결과를 얻을 수 있습니다.
Lynn

다른 솔루션과 매우 유사한 방식으로 작동합니다. initsHaskell과 같습니다. "abcd" inits["" "a" "ab" "abc" "abcd"]모든 접두사를 가져옵니다. 그런 다음 __ __ __ F2바이트 코드로 된 세 개의 명령으로 구성된 "람다"로 필터링 합니다. 합이보다 작은 모든 접두사를 찾습니다 A. 그런 다음 not목록이 비어 있는지 확인합니다.
Lynn

11

하스켈, 22 바이트

f t=all(>=t).scanl(+)0

사용법 : f (-5) [4,-3,-6]출력 True.

소계 목록을 만들고 모든 요소가> = t인지 확인합니다.

편집 : 빈리스트 양성을위한 버그 수정 t


@ MartinBüttner : 이니셜 0은 목록에 없습니다 scanl1. 비어있는 목록이 제공되면 빈 목록 을 반환하지만 all이 경우를 잡습니다. f (-5) []을 반환합니다 True.
nimi

@ MartinBüttner : 죄송합니다. 그 사건을 놓치고 고쳤습니다. 감사!
nimi

7

파이썬 2, 41

f=lambda a,t:t<=0<(a and f(a[1:],t-a[0]))

첫 번째 인수는 배열입니다. 두 번째는 최소 누적 합계입니다.


6

J, 11 바이트

   */@:<:0,+/\

테스트

   _5 (*/@:<:0,+/\)  1 2 3 _20
0
   _5 (*/@:<:0,+/\)  >a: NB. empty list
1

FUZxxl 덕분에 1 바이트 개선 .

원본 버전에 대한 설명 (*/@(<:0,+/\))

  • +/\누적 합계 (작성 합 +/프리픽스를 \)
  • 0,+/\ 누계에 0을 추가합니다.
  • (<:0,+/\)좌측 입력 작거나 같은 <:(의 요소)보다 결과 0,+/\우측 입력에
  • @ 이전 결과로
  • */ 모든 요소의 곱 (모든 요소가 1 인 경우 1, 요소가 0 인 경우 0)

당신은 */@:<:0,+/\ 내가 생각하는 한 캐릭터를 위해 할 수 있습니다 .
FUZxxl

6

APL, 8 10

∧.≤∘(0,+\)

이것은 T왼쪽 인수로,리스트를 오른쪽 인수로 취하는 함수입니다 .

  • 0,+\: 오른쪽 인수의 누적 합계, 0에 추가
  • ∧.≤: 왼쪽 인수는 오른쪽 인수의 모든 항목 (smaller)보다 작거나 같습니다 (≤)

나는 또한 이것을 시도했지만 "긍정적 인 T는 결과가 항상 거짓임을 의미합니다."
jimmy23013

@ user23013 : 젠장. 글쎄, 그것은 지금 고정되어 있지만 이길 수 없습니다.
marinus

4

Mathematica, 34 바이트

FreeQ[Accumulate@{0,##2},n_/;n<#]&

이것은 T첫 번째 매개 변수로 사용하고 이름이없는 가변 함수를 정의 하고 나머지 매개 변수로 트랜잭션 을 취하고 부울을 리턴합니다.

FreeQ[Accumulate@{0,##2},n_/;n<#]&[-5, 1, 2, 3, -20]
(* False *)

나는 ##2두 번째에서 모든 인수를 목록으로 "스 플래트" 하는 드문 경우 를 사용할 수 있기 때문에 이것을 좋아 합니다. 자세한 내용은 이 골프 팁 의 마지막 섹션 참조하십시오 .


4

k, 8 자

임계 값을 첫 번째 인수로 사용하고 목록을 두 번째 인수로 사용하는 2 진 동사. 놀랍게도 이것은 오픈 소스 Kona를 포함한 모든 k 버전에서 작동합니다.

&/~0<-\,

k에서 함수의 구성은 하나를 작성하고 다른 하나를 작성하여 수행되므로 함수별로이를 구성 할 수 있습니다. 오른쪽에서 왼쪽으로 :

  • -\,연속 누계를 가져와 임계 값에서 뺍니다. ( f이진이면으로 f\ (a; b; c; ...) 확장됩니다 (a; a f b; (a f b) f c; ...)., 목록을 함께 조인합니다.) 항목이 0 일 때 끊김이 발생하고 오버 드로잉은 엄격하게 양수 값을 제공합니다.
  • ~0<0보다 작습니다. k에는 실제로는 크거나 같지 않은 <=연산자가 없으므로 부 울린 값보다 적은 값을 사용하지 말아야하지만 결과가 양수가 아닌지 테스트합니다. 목록의 각 원자에 자동으로 적용됩니다.
  • &/논리적 인 AND의 목록입니다. ( fDyadic의 경우) 따라서 목록의 모든 부울이 True인지 테스트합니다.

예 :

  (&/~0<-\,)[-5; 1 2 3 -20]
0
  f:&/~0<-\,  /assign to a name
  f[-5; 4 -3 -6]
1

나는 아마도 2 명의 문자를 추가 할 것이다. 그리고 가능하다면 1 개의 숯을 면도 할 수 있습니다~|/>+\,
tmartin

@tmartin Monadic >는 "내림차순 정렬"이므로 ~|/>+\,입력 목록이 비어있는 경우에만 적용됩니다.
algorithmshark

아 맞아, 내 실수
tmartin


3

피스, 16 15

!sm>vzs+0<QdhlQ

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

-5
[4, -3, 6]

설명:

                   Implicit: z and Q read 2 line from input
                   z = "-5" (this is not evaluated, it's a string)
                   Q = [4, -3, 6] (this is a list though)
 m         hlQ     map each number d in [0, 1, 2, ..., len(Q)] to:
  >vz                 the boolean value of: evaluated z > 
     s+0<Qd                                 the sum of the first d elements in Q 
!s                  print the boolen value of: 1 > sum(...)

그리고 다시 바보 s함수는 2 바이트를 낭비합니다. 나는 이것을 Pyth 저장소에 버그로보고 할 것이라고 생각합니다.

편집 : 13 (유효하지 않음)

1 바이트 저장 ( >1to !) 및 sPyth 저장소 의 구현 변경 을위한 isaacg 덕분입니다. 이제 다음 코드가 가능합니다 (물론이 도전에는 유효하지 않습니다).

!sm>vzs<QdhlQ

나는 그것들을 꽤 자주 사용합니다. codegolf.stackexchange.com/questions/45264/fill-in-the-blanks/…를 참조하십시오 . 이 경우 2자를 저장하지만 목록 목록에서 5자를 잃습니다. 그래도 두 가지 기능으로 분리하는 사용되지 않은 문자가 있는지 확인합니다. 또한 !대신을 사용하여 문자를 저장할 수 >1있습니다.
isaacg

@isaacg 빈 목록의 합계를 0 (거의)으로 정의해도 기존 Pyth 코드는 손상되지 않습니다. 그것이 깨질 유일한 코드는 #sY입니다. 그리고 1 바이트 저장에 감사드립니다.
Jakube

나는 그것이 공평하다고 생각합니다. 예외를 던지는 것은 누구에게도 도움이되지 않습니다. 결정된.
isaacg


3

줄리아, 33 바이트

(T,l)->all(i->i>=T,cumsum([0,l]))

이 두 파라미터를 받아들이 이름 함수를 생성 T하고l 부울을 반환 .

all()기능은 모든 무거운 작업을 수행합니다. 술어와 반복 가능한 두 가지 인수가 필요합니다. 술어의 경우, i명명되지 않은 함수를 사용하여 iterable의 현재 값 을 나타내는 것으로 지정합니다 i->. 그런 다음 각 반복에서을 사용하는 것과 비교 i합니다 .Ti>=T

Julia가 cumsum()빈 목록을 사용하는 것에 대해 놀라지 않도록하기 위해을 사용하여 0을 고정시킬 수 있습니다 [0, l].


3

전주곡 , 144 136 바이트

이건 ... 힘들었 어 ...

?
?(1- )v1+(1-
 ^    #       1) v #  -)1+(#
  v#         vv (##^v^+
   ^?+     v-(0## ^ #   01 #)(#)#
1         v#                  # )!

나는 6 가지 목소리가 나를위한 새로운 기록이라고 생각하지만, 그것을 줄이며 성가신 공백을 제거 할 수있는 방법이 있다고 확신합니다. Prelude에서는 값의 부호 확인 (따라서 한 값이 다른 값보다 큰지 확인)이 까다 롭습니다.

입력 및 출력은 바이트 값으로 제공됩니다. 당신이 사용하는 경우 파이썬 인터프리터를 , 당신은 설정할 수 있습니다 NUMERIC_OUTPUT = True당신이 실제로 ASCII를 얻을 그래서, 01. 숫자 입력의 경우 다른 NUMERIC_INPUT플래그 를 추가 해야합니다 (어쩌면 어느 시점에서 조정 된 인터프리터를 게시해야합니다).

또한 Prelude는 목록의 끝과 목록의 끝을 실제로 구별 할 수 없습니다 0. 따라서 제로 트랜잭션을 허용하기 위해을 읽은 T다음 L목록 의 길이 와 L트랜잭션을 읽습니다 .



2

자바 스크립트 (ES6) 38 33

편집 초기 밸런스 버그가 수정되었습니다. Thx @martin & @rainbolt

F=(t,l)=>![r=0,...l].some(v=>(r+=v)<t)

Firefox / FireBug 콘솔에서 테스트

console.log(F(-5,[-6]),F(-5,[1,2,3,-20]),F(-5,[200,-300,1000]))
console.log(F(-5,[]),F(-5,[-5]),F(-5,[4,-3,-6]))
console.log(F(5,[10]),F(5,[]))

거짓 거짓 거짓
사실 진실 사실
거짓 거짓


2
초기 잔액은 0입니다. 첫 번째 예금은 10이지만 첫 예금이 은행에 입금되기 전에 이미 임계 값보다 낮습니다.
Rainbolt

2

파이썬 2.7-55 바이트

f=lambda T,l:all(T<=sum(l[:i])for i in range(len(l)+1))

처럼 전화하십시오 print f(-5,[1,2,3,-20]). 여기에서 테스트 하십시오 .

도움을 주신 Jakube에게 감사드립니다.


2

> <>, 29 + 3 = 32 바이트

r0}&v >1n;n0<
&:&:<+^?=1l ^?(

다음과 같이 실행

py -3 fish.py bookkeep.fish -v -5 4 3 -6

여기서 임계 값은 첫 번째 숫자입니다.



1

펄 6 (21 바이트)

{$^a>none [\+] 0,@^b}

초기 인수와 요소 목록을 취하는 함수입니다. 요소의 접합점을 사용 하여 임계 값 미만 인지 확인하여 작동합니다 . [\+]예를 들어, 발생 러닝 합에 사용되는 [\+] 1, 2, 31, 3, 6 . 0,추가0양의 임계 값이 항상 실패해야한다는 요구 사항 때문에 목록 시작 부분에 해야합니다.

Perl 6 구문에서 Haskell 솔루션과 거의 동일합니다 (Perl 6은 Haskell의 많은 깔끔한 프로그래밍 기능을 사용했습니다).


0

펄-20

STDIN바꿈 으로 구분 된 숫자 목록을 가져 와서 플래그를 가져 T옵니다 -i.

die if$^I>($i+=$_)

+2 -i-n깃발. 종료 값은 255실패 및0 성공을위한 것입니다.

로 실행 :

echo -e "4\n3\n-6" | perl -i0 -ne'die if$^I>($i+=$_)'

0

클로저, 45

(fn[T t](every? #(<= T %)(reductions + 0 t)))

예 :

((fn[T t](every? #(<= T %)(reductions + 0 t))) -5 [1 2 3 -20])
;; =>false

아니면 좀 더 좋은;

(defn f[T t](every? #(<= T %)(reductions + 0 t)))

(testing
  (testing "tests from question"
    (is (false? (f -5 [-6])))
    (is (false? (f -5 [1 2 3 -20])))
    (is (false? (f -5 [200 -300 1000])))
    (is (true? (f -5 [-5])))
    (is (true? (f -5 [4 -3 -6])))
    (is (true? (f -5 []))))
  (testing "the start of the list the running sum is 0. So a positive T means the result is always falsy"
    (is (false? (f 5 [5])))
    (is (false? (f 5 [10])))
    (is (false? (f 5 [])))))

0

자바 8-153 자

골프 기능 :

import java.util.stream.*;
boolean f(int t, IntStream s){int r=1;try{s.reduce(0,(a,b)->(a+b>=t)?(a+b):(a/(a-a)));}catch(Exception e){r=0;}return r==1;} 

언 골프 드 :

import java.util.stream.*;

boolean f(int t, IntStream s) {
    int r=1;
    try {
        s.reduce(0,(a,b) -> (a+b>=t) ? (a+b) : (a/(a-a)));
    } catch(Exception e) {
        r=0;
    }

    return r==1;
} 

운전사 프로그램 :

import java.util.stream.*;
import java.util.*;

public class A {
    // function f as above

    public static void main(String... args) {
        int t = -5;
        IntStream s = null;

        s = Arrays.asList(-6).stream().mapToInt(i->i);
        System.out.println(new A().f(t,s));

        s = Arrays.asList(1,2,3,-20).stream().mapToInt(i->i);
        System.out.println(new A().f(t,s));

        s = Arrays.asList(200,-300,1000).stream().mapToInt(i->i);
        System.out.println(new A().f(t,s));

        System.out.println("above false, below true");

        s = IntStream.empty();
        System.out.println(new A().f(t,s));

        s = Arrays.asList(4,-3,-6).stream().mapToInt(i->i);
        System.out.println(new A().f(t,s));

        s = Arrays.asList(-5).stream().mapToInt(i->i);
        System.out.println(new A().f(t,s));
}

}

산출:

bash-3.2$ javac A.java ; java A

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