목록에서 집합의 발생 횟수


15

비어 있지 않은 문자열 집합과 문자열 목록이 제공되면 목록에서 집합이 몇 번 발생하는지, 즉 목록의 항목으로 집합을 만들 수있는 횟수를 확인하십시오. 목록의 모든 요소는 한 번만 사용할 수 있습니다.

힌트 : 세트는 순서가없는 고유 항목 목록입니다.

기본 입력 / 출력 규칙이 적용됩니다.

외부 라이브러리는 허용되지 않습니다. 컴파일러 / 인터프리터 표준 라이브러리는 괜찮습니다. 이것은 코드 골프이므로 가장 짧은 솔루션 수입니다.


테스트 사례 :

["apple", "banana"], ["apple", "pear", "apple", "banana", "banana"] => 2

["apple", "banana"], ["apple", "pear", "apple", "banana", "apple"] => 1

["apple", "banana", "pear"], ["apple", "banana", "kiwi", "apple"] => 0

["coconut"], [] => 0

편집 : 입력 매개 변수가 로컬 범위에서 정의되었다는 문장을 제거했습니다. 이것은 위에 링크 된 기본 IO 규칙과 모순됩니다.


그렇습니다. 그러나 나는 세 번째 문장에 조금 끊어졌습니다. "객체를 처리하지 않음"은 무슨 뜻입니까?
Post Rock Garf Hunter

@WheatWizard 일부 언어는 객체 지향적이지 않으며 임의의 객체를 비교하는 개념을 모릅니다.
허버트 Grzeskowiak

1
내가 알고있는 모든 언어가 객체가 닫힌 클래스 인 경우에도 특정 유형의 객체를 처리하기 때문에 객체 지향으로 변경해야합니다. 또한 문자열을 전혀 처리 할 수없는 많은 언어가 있음을 지적해야합니다.
Post Rock Garf Hunter

@WheatWizard 알았어, 업데이트 된 설명. 이 단락은 C, 어셈블러 또는 메이플과 같은 언어를위한 것입니다.
허버트 Grzeskowiak

객체 지향 언어는 무엇입니까? 문자열이 아닌 경우 무엇을 사용해야합니까? 가장 쉬운 방법은 문자열로 제한하는 것입니다. 또는 정수만 사용할 수도 있습니다. 가장 간단한 유형을 사용하는 방법에 대한 이 조언 을 참조하십시오 .
xnor

답변:


12

파이썬, 30 바이트

lambda s,l:min(map(l.count,s))

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


좋은데 지도 사용에 대해서는 생각하지 않았습니다. 람다 BTW를 정의하는 대신 인쇄를 사용하여 조금만 절약 할 수 있습니다.
허버트 Grzeskowiak

1
@HubertGrzeskowiak 변화하는 lambdaA를하는 print바이트 때문에 두의 37 카운트 제공 input()에 필요한의.
Post Rock Garf Hunter

과제에 명시된대로 @WheatWizard는 로컬 범위에 정의 된 입력을 고려하십시오. 함수 매개 변수 또는 사용자 입력과 같이 입력을 명시 적으로 정의 할 필요는 없습니다.
허버트 Grzeskowiak

@HubertGrzeskowiak 그럴만한 이유가 없으면 입력 및 출력 에 대한 기본값과 codegolf 제출에 대한
ovs

@ovs 아, 나는 그 게시물을 몰랐다. 감사.
허버트 Grzeskowiak

6

젤리 , 4 바이트

⁼þSṂ

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

어떻게?

⁼þSṂ - Main link: list theSet, list theList
 þ   - outer product using the dyadic operation:
⁼    -     is equal? (non-vectorising)
  S  - sum (vectorises) (yields the number of times each element of theSet appears in theList)
   Ṃ - minimum (can only make the minimum as a multiple)

6

젤리 , 6 5 4 바이트

ċ@€Ṃ

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

프로그램의 첫 번째 인수는 세트이고 두 번째 인수는 목록입니다.

설명

ċ@€Ṃ
ċ@   -- Create a link which finds the number of occurrences of 
          its left argument in its right argument (the list)
  €  -- Map this link over each element in the first argument
          of the program (the set)
   Ṃ -- Minimum value of this.

@ETHproductions 덕분에 -1 바이트

@ETHproductions 덕분에 다시 1 바이트


아주 좋아요! 링크를 한 줄로 결합하여 바이트를 절약 ⁹ċ$€Ṃ할 수 있습니다. 대신에 암시적인 올바른 인수를 사용하여 더 짧게 만들 수있는 느낌이 있습니다 .
ETHproductions

나는 다른 바이트를 절약하기 위해 작동 한다고 생각 ċ@€Ṃ 합니다 ... ( @인수를 반대로 ċ)
ETHproductions

@ETHproductions 내가 테스트 한 한 올바르게 작동합니다.
fireflame241

이는 지난해 월까지 12 존재하지만하지 않았다 대신에 @€(프로그램에 반전 인수) 또 다른 바이트를 저장합니다 온라인으로보십시오!
관련이없는 문자열


5

자바 스크립트 (ES6), 64 바이트

(s,l)=>l.map(e=>m[s.indexOf(e)]++,m=s.map(e=>0))&&Math.min(...m)

가정 모두 sl객체의 배열입니다. 비교에 JavaScript 엄격한 동등성을 사용하므로 예를 들어 [] === []false입니다.


매우 흥미로운 해결책. 결과를 반환하거나 인쇄하십시오. AFAIK 익명 함수를 반환합니다.
허버트 Grzeskowiak

2
@HubertGrzeskowiak 표시된 코드는 익명 함수로 평가됩니다. 호출되면 함수는 원하는 수를 반환합니다.
Neil

4

하스켈 , 37 34 바이트

3 바이트를 줄인 @Laikoni에게 감사드립니다.

s#l=minimum[sum[1|y<-l,y==x]|x<-s]

파생 (set::[a]) # (list::[a])되는 a모든 유형은 어디 에서나 호출하십시오 Eq.


대신을 length[y|y<-l,y==x]사용할 수 있습니다 sum[1|y<-l,y==x].
Laikoni

@Laikoni, 확실합니까? 나는 sum[1|y<-l,y==x,_<-y]2 바이트 더 길게 나오는 것과 같은 것을 사용해야한다고 생각합니다.하지만 분명히 뭔가를 놓칠 수 있습니다.
Julian Wolf

걱정 마세요, 당신 말이 옳습니다. 잘 했어
Julian Wolf


3

Mathematica, 24 바이트

Min[#/.Rule@@@Tally@#2]&

제안 된 순서대로 두 목록을 인수로 사용하고 음이 아닌 정수를 리턴하는 순수 함수. Tally입력 목록에서 발생하는 모든 기호의 발생 횟수를 세고 #/.Rule@@@입력 세트의 각 요소를 해당 발생 횟수로 변환합니다.


3

T-SQL, 62 59 바이트

일치하지 않는 세트에서는 이전 버전이 작동하지 않았습니다.

select top 1(select count(*)from l where l=s)from s order by 1

s 및 l을 테이블로 사용하고 테이블과 동일한 이름의 열

select top 1         -- return only the first result
    (select count(*) -- count of rows
     from l          -- from table l
     where l=s)      -- for each l equal
from s               -- to each from s
order by 1           -- sort by count ascending

3

스위프트, 39 바이트

s.map{w in l.filter{$0==w}.count}.min()

설명:

s.map{} s의 각 단어를 통과하고 카운트의 배열을 생성합니다

w in 다음 필터에서 사용할 맵핑 된 단어의 이름을 지정합니다.

l.filter{} 필터를 l 배열에 적용

$0==w 필터 조건 일치 단어 w

.count 조건을 만족하는 l의 요소 수를 제공합니다.

.min() 매핑 된 결과에서 가장 낮은 개수를 반환합니다.


1
PPCG에 오신 것을 환영합니다! 귀하의 솔루션에 대한 코드 형식을 추가했습니다. 코드가 포함 된 행 앞에 4 개의 공백을 추가하여이 작업을 수행 할 수 있습니다.
Mego


2

펄 6 ,  37  18 바이트

37

{+(($_=@^a⊍@^b)≽@a)&&.values.min}

시도 해봐

넓히는:

{
  +( # turn into a 0 if False

    (
      $_ =        # store into $_ the result of
        @^a  @^b # use the baggy multiplication operator
    )  @a        # is that the baggy superset of the set
  )

  &&          # if that is True

  .values.min # get the minimum value from the Bag in $_
}

자세한 내용은 세트, 백 및 믹스 를 참조하십시오.


18

{@^b.Bag{@^a}.min}

시도 해봐

설명:

@^b.Bag값 키 에서 해당 백에 백 을 작성하고
{@^a}(카운트 목록을 리턴 함)
.min결과 목록의 최소값을 얻습니다.



깔끔한 답변이지만, 이것들 중 어느 것도 함수 / 완전한 프로그램처럼 보이지 않습니다
Julian Wolf

@JulianWolf 저는 "현재 범위에서 s와 l로 정의 된 두 입력을 모두 고려하십시오"및 "함수를 정의 할 필요가 없습니다."라는 문구를 기반으로 스 니펫이 허용되었다는 인상을 받았습니다. .
브래드 길버트 b2gills

아, 당신 말이 맞아요 내가 읽은 후에 그 질문을 편집해야합니다. 어쨌든, 나는이 버전의 미학을 마지막 것보다 훨씬 더 좋아한다. 펄의 문법은 항상 미스터리 일 것이다.
Julian Wolf

@JulianWolf 이것은 실제로 Perl 6 코드의 좋은 예가 아닙니다. Ovid의 1 시간 강연 Perl 6 – 사람들이 왜 흥분 하는지 또는 Perl6.org리소스 탭을 보는 것이 좋습니다 .
브래드 길버트 b2gills

네, 혼란을 드려 죄송합니다. 이것은 나의 첫 번째 도전이며 이미 입력 및 출력 규칙이 있다는 것을 몰랐습니다. 대부분의 답변이 필요하지 않은 경우 에도이 규칙을 사용했기 때문에 변경했습니다.
허버트 Grzeskowiak

2

공리, 42 바이트

f(a,b)==reduce(min,[count(x,b)for x in a])

테스트 코드 및 결과

(28) -> f(["1","2"], ["1", "2", "1", "1", "7"])
   (28)  1
                                                    Type: PositiveInteger
(29) -> f(["apple","banana"],["apple","pear","apple","banana","banana"])
   (29)  2
                                                    Type: PositiveInteger
(30) -> f(["apple","banana"],["apple","pear","apple","banana","apple"])
   (30)  1
                                                    Type: PositiveInteger
(31) -> f(["apple","banana","pear"],["apple","banana","kiwi","apple"])
   (31)  0

2

C ++, 203201 바이트

2 바이트를 절약 한 @Quentin에게 감사드립니다!

#import<vector>
#import<string>
using T=std::vector<std::string>;
int f(T S,T L){for(int j,b,i=0;;++i)for(auto s:S){for(b=j=0;j<L.size();++j)if(L[j]==s){b=1;L.erase(begin(L)+j);break;}if(!b)return i;}}

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


L.begin()-> begin(L)1 바이트를 저장 :)
Quentin

또한 using T=std::vector<std::string>;다른 것을 저장합니다! 현대의 예쁜 구문을 알고있는 사람도 골프를 도울 수 있습니다.
Quentin

@Quentin 나는 처음에 그것을 시도했다. 아마 눈치 채지 못한 간단한 오타가 있었을 것입니다.
Steadybox


1

Pyth, 5 바이트

hS/LF

목록을 먼저 가져오고 두 번째로 설정합니다. 테스트 스위트.

설명:

    F  Expand the input into l and s (not literally, 
                  since those are function names in Pyth, but...)
   L   for d in s:
  /        Count instances of d in l
   L   Package all the results as a list
 S     Sort the results smallest-first
h      grab the smallest element


1

자바, 135 바이트

int f(List<String> s,List<String> l){int n=0,i=0;while(i<s.size()){if(!l.remove(s.get(i++)))break;if(i==s.size()){n++;i=0;}};return n;}

이것은 내 첫 번째 코드 골프 도전과 답변이므로 형식에 대해 확실하지 않습니다. 전체 컴파일 프로그램이어야합니까? 매개 변수를 정의해야합니까? 제안에 감사드립니다.

편집 : 함수에 코드를 래핑했습니다. 감사합니다 @Steadybox


답은 완전한 프로그램, 함수 또는 다른 함수와 같은 구문 일 수 있습니다. 예를 들어 함수 또는 표준 입력의 인수로 매개 변수 를 사용할 수 있습니다 .
Steadybox


1

자바, 114 바이트

<T>int a(Set<T>b,List<T>c){int m=2e32;b.stream().map(i->{int j=java.util.Collections.frequency(c,i);m=j<m?j:m;});return m;}

티 오오

설명

  • 지역 변수 m을 만듭니다.

  • 세트를 스트림에 맵합니다.

  • 각 요소에 대해 목록에서 요소의 발생 수가 m보다 작 으면 m이 해당 값으로 설정됩니다.

  • 집합의 전체 버전 수인 m을 반환합니다.


0

R 54 바이트

f<-function(s,l) min(table(factor(l[l%in%s],levels=s)))

설명 : 서브리스트에도 나타나는 목록의 값 수만있는 테이블을 작성합니다.

그런 다음 하위 목록에 나타나는 값이 목록에 나타나지 않으면 0을 생성하기 위해 변수를 인수로 바꿉니다. 마지막으로, 나는 카운트의 최소값을 취합니다.


0

R, 61 57 44 바이트

print(min(sapply(s,function(x)sum(l%in%x))))

익명의 기능. 분명히이 도전에 대한 기능을 정의 할 필요는 없습니다. 카운트 덕분에 13 바이트를 절약했습니다.

설명:

sum(l%in%x))에서 문자열 s이 발견 된 횟수를 반환합니다 l.

lapply(s,function(x)) 각 문자열에 적용 s 개별적으로 합계 목록을 반환합니다.

min() 해당 목록에서 가장 작은 값을 반환합니다.


for 루프를 사용하여 40 바이트로 줄일 수 있습니다 :z=c();for(i in s)z[i]=sum(l%in%i);min(z)
카운트

또는 sapply를 사용하여 37 바이트까지 확장 할 수 있습니다.min(sapply(s,function(x)sum(l%in%x)))
센다

훌륭합니다. 부울을 합칠 수 있다는 것을 항상 잊습니다. 나중에 편집하겠습니다. 함수가 아닌 경우 print ()가 필요하다는 말을 들었습니다.
BLT

0

자바 스크립트 (ES6), 59 바이트

a=>b=>a.reduce((x,y)=>(l=b.filter(s=>s==y).length)>x?x:l)|0

시도 해봐

f=

a=>b=>a.reduce((x,y)=>(l=b.filter(s=>s==y).length)>x?x:l)|0

console.log(f(["apple","banana"])(["apple","pear","apple","banana","banana"]))
console.log(f(["apple","banana"])(["apple", "pear", "apple", "banana", "apple"]))
console.log(f(["apple","banana","pear"])(["apple","banana","kiwi","apple"]))
console.log(f(["coconut"])([]))

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