뚜렷한 체


17

정수 목록이 제공되면 실제 인덱스를 사용하여 목록에서 고유 한 값을 필터링 할 수 있도록 부울 마스크를 작성하십시오. 동일한 값에 해당하는 각 인덱스 세트에 대해 하나만 선택하기 만하면 어느 인덱스가 참 인덱스로 선택되는지는 중요하지 않습니다.

입력은 사용자 언어에 적합한 형식으로 비어 있지 않은 음이 아닌 정수의 목록이되고 출력은 위의 스펙에 따른 부울 값의 목록이됩니다. 출력 목록에서 자신의 진실성 및 허위 값 정의를 사용할 수 있습니다.

아래의 예에서, 나는 1진실하고 거짓 이라고 정의 합니다 0.

[5, 4, 7, 1]  Input
[1, 1, 1, 1]  Output
              Select only the values with with true indicies in the sieve
[5  4  7  1]  Contains zero duplicate values

[5, 9, 7, 5, 6, 0, 5]
[0, 1, 1, 1, 1, 1, 0]
[   9, 7, 5, 6, 0   ]

테스트 사례

가 있으면 or유효한 출력이 여러 개 있음을 의미합니다. 후행 생략 있으면 ...애프터는 or, 그 모든 가능한 출력이 나열된 것을 의미한다.

[0] = [1]

[55] = [1]

[32, 44] = [1, 1]

[0, 0] = [1, 0] or [0, 1]

[9001, 9001, 9001] = [1, 0 , 0] or [0, 1, 0] or [0, 0, 1]

[5, 4, 7, 1] = [1, 1, 1, 1]

[1, 2, 3, 4, 3, 5] = [1, 1, 1, 1, 0, 1] or
                     [1, 1, 0, 1, 1, 1]

[5, 9, 7, 5, 6, 0, 5] = [1, 1, 1, 0, 1, 1, 0] or
                        [0, 1, 1, 1, 1, 1, 0] or
                        [0, 1, 1, 0, 1, 1, 1]

[0, 8, 6, 6, 3, 8, 7, 2] = [1, 1, 1, 0, 1, 0, 1, 1] or
                           [1, 0, 0, 1, 1, 1, 1, 1] or
                           [1, 0, 1, 0, 1, 1, 1, 1] or
                           [1, 1, 0, 1, 1, 0, 1, 1]

[45, 47, 47, 45, 24, 24, 24, 8, 47, 41, 47, 88]
= [1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1] or ...

[154, 993, 420, 154, 154, 689, 172, 417, 790, 175, 790, 790, 154, 172, 175, 175, 420, 417, 154, 175, 172, 175, 172, 993, 689, 993, 993, 790]
= [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] or ...

규칙

  • 이것은 이므로 가장 짧은 솔루션이 승리합니다.
  • 내장이 허용됩니다!
  • 출력 목록에서 자신의 진실성 및 허위 값 정의를 사용할 수 있습니다. 그렇게하기로 선택한 경우, 정의를 명시하십시오.
  • 입력은 음이 아닌 정수의 비어 있지 않은 목록입니다.
  • 체 중 하나만 출력하거나 여러 개 또는 모두를 출력 할 수 있습니다. 각 체가 유효한 한 허용됩니다.

2
의 경우 유효한 출력 목록에 추가 [0, 8, 6, 6, 3, 8, 7, 2]해야 [1, 0, 0, 1, 1, 1, 1, 1]합니까?
atlasologist

않습니다 truthy 및 falsy 값의 자신의 정의는 언어를 참조하거나 우리가 자유롭게 선택할 수 있습니까? 일관성이 있어야합니까?
Dennis

@atlasologist 오타를 잡아 주셔서 감사합니다
마일

@Dennis 자신의 부울 값을 자유롭게 정의 할 수 있으며, 선택한 언어와 같을 필요는 없지만 자신의 정의와 일치해야합니다. 예제에서 true와 false에 대해 1과 0 대신 음수 값을 false로하고 음수가 아닌 (0 또는 양수) 값을 true로 수행 할 수 있습니다.
마일

알겠습니다 일관성있게, 나는 하나의 진실 된 가치가 있어야하는지 아니면 몇 가지 가치가있을 수 있는지를 의미했습니다.
Dennis

답변:


11

MATL, 7 6 4 바이트

@Luis 덕분에 1 바이트 절약 @Dennis 덕분에
2 바이트 절약

&=Rs

우리는 1진실하고 다른 모든 가치는 거짓이라고 정의합니다

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

모든 테스트 사례

설명

    % Implicitly grab input array
&=  % 2D array of equality comparisons
R   % Get the upper triangular portion
s   % Sum down the columns
    % Implicitly display the result

1 바이트 이하 :&=Rs1=
Luis Mendo

@LuisMendo Ha 나는 그 접근법으로 말 그대로 놀고있었습니다!
Suever

2
OP는이 도전에서 진실되고 허위가 무엇을 의미하는지 명확히했다. 1 을 진실로 정의 하고 다른 모든 것을 거짓으로 정의 하면을 삭제할 수 있습니다 l=.
Dennis

잘 사용합니다. 필터링 단계를 추가하지 않아도되었고 이제 Dennis 'Jelly 솔루션과 일치하게되었습니다.
마일

9

젤리 , 4 바이트

ĠṪ€Ṭ

마지막 발생에 유리합니다. 온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

작동 원리

ĠṪ€Ṭ  Main link. Argument: A (array)

Ġ     Group; paritition the indices of A according to their corresponding values.
 Ṫ€   Tail each; select the last index of each group.
   Ṭ  Untruth; generate a Boolean array with 1's at the specified indices.

마지막에 0을 잘리지 않습니까?
Leaky Nun

2
각 고유 정수 의 마지막 항목을 선택하기 때문에 끝에 0이 될 수 없습니다 .
Dennis

영리하다.
새는 수녀

8

파이썬 3, 47 35 39 36 바이트

lambda n:[n.pop(0)in n for x in n*1]

목록에서 첫 번째 항목을 팝업하여 목록의 다른 곳에 있는지 확인한 후 새 목록에 삽입 True하거나 False새 목록에 넣습니다.

이 함수의 False경우 고유 한 값을 나타내며 True그렇지 않으면 ( True=0False=1)

많은 바이트에 대한 Dennis에게 감사

원본, 47 바이트 :

lambda n:[(1,0)[n.pop()in n]for x in[1]*len(n)]

시도 해봐


lambda n:[1-(n.pop()in n)for x in n*1]몇 바이트를 절약합니다.
Dennis

3
OP는 진실 된 가치가 실제로 진실 할 필요는 없으며, lambda n:[n.pop()in n for x in n*1]또한 잘 작동 한다는 것을 분명히했다 .
Dennis

새 버전은 xnor와 같은 부정적 가치가 진실되고 허위로 사용되었음을 깨달을 때까지 조금 잃어 버렸습니다.
마일

당신은 할 필요가 .pop(0)또는 마스크는 반전 나온다.
xnor

xnor의 의미는 아닙니다. 마지막 요소를 먼저 .pop()처리 하므로 순서가 반대입니다.
Dennis

7

Pyth, 6 바이트

.eqxQb

부울 ( TrueFalse) 목록을 출력합니다 . 색인이 값의 첫 번째 발생 색인과 동일한 경우 입력의 각 요소를 확인합니다. 즉, 각 요소가 첫 번째 발생인지 확인합니다.

파이썬 의사 코드에서 :

.e      enumerated_map(lambda b,k:    # maps with b as value and k as index
  q       equal(
   xQb      Q.index(b),
            k),                       # implicit lambda variable
          Q)                          # implicit argument to map

여기에서 테스트하십시오.


6

J , 2 바이트

~:

이것이 바로이 도전에 대한 아이디어가 시작된 곳입니다. 내장 ~:Nub-SieveJ 로 호출 되며 챌린지에 설명 된 작업을 수행하는 부울 목록을 만듭니다. 여기서, 1대표 true0대표 false.


6

05AB1E , 8 바이트

암호:

v¹ykN>Qˆ

설명:

y         # For each in the array
 ¹yk      # Get the index of that element in the array
    N>Q   # And see if it's equal to the index
       ˆ  # Add to the global array and implicitly output

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오! .


4

APL, 6 바이트

⍳∘⍴∊⍳⍨

시도 해봐

설명:

   ⍳⍨  For each character in the string, get the index of its first occurrence
⍳∘⍴     Make a list 1 .. length of input
  ∊    Check if each index is present

4

C #, 63 바이트

int[]l(List<int> i)=>i.Select((m,n)=>i.IndexOf(m)-n).ToArray();

또한 1 또는 0을 반환 할 수 있으며 therby는 매개 변수와 반환 유형을 동일하게하여 람다 식 자체를 만들 수 있습니까?

일부 지침을 부탁드립니다

동일한 타입 코드

    public static List<int>l(List<int>i){
        return i.Select((m,n)=>i.IndexOf(m)==n?1:0).ToList();
    }

truthy를 0으로 정의하고 다른 것을 거짓으로 정의하면 == n을 -n으로 바꾸고 int []를 반환 할 수 있습니다.
raggy

좋은 생각입니다
downrep_nation

또한 식 본문 함수를 사용하십시오. int [] l (List <int> i) => i.Select ((m, n) => i.IndexOf (m) -n) .ToArray ();
raggy

오 마이 갓, 이제부터 내 대답에 너무 많은 바이트를 절약합니다. 감사합니다
downrep_nation

.NetFiddle에 대한 예를 제공 할 수 있습니까?
aloisdg는 Reinstate Monica

3

파이썬, 35 바이트

f=lambda l:l and[l.pop(0)in l]+f(l)

True허위 가치 및 진실한 가치로 사용 False합니다. 각 요소의 마지막 모양을 표시합니다.

첫 번째 요소가 나머지 요소 사이에 표시되지 않는 경우에만 선택하고 비어 있지 않은 한 나머지 목록으로 반복합니다. 는 l.pop(0)또한 그것을 제거하는 동안 첫 번째 요소를 추출합니다.


3

레티 나 , 23 바이트

(\d+)((?!.* \1\b))?
$#2

입력은 공백으로 구분 된 목록입니다. (실제로, 다른 형식 [1, 2, 3]은 첫 번째를 제외한 각 숫자 앞에 공백이있는 한 작동합니다.)

온라인으로 사용해보십시오! (여러 줄 바꿈으로 구분 된 테스트 사례에서 한 번에 작동합니다.)

0입력에서 나중에 다른 사본이 있으면 각 요소를 간단히 변환 1합니다.


2

PowerShell v2 +, 40 바이트

$a=@();$args[0]|%{(1,0)[$_-in$a];$a+=$_}

빈 배열을 만듭니다 $a. 그런 다음 입력 목록을 통해 $args[0]루프로 파이프합니다 |%{...}. 우리가 하나를 선택 반복 할 때마다 1또는 0현재 요소가 있는지 여부에 따라 의사 원에서 $a여부. 이러한 선택은 파이프 라인에 남아 있습니다. 그런 다음 현재 요소를 배열에 추가합니다$a . 파이프 라인 요소가 수집되고 배열로 출력됩니다.

예:

( .ToString()배열 의 기본값이므로 개행 구분 기호를 사용하여 여기에 출력 )

PS C:\Tools\Scripts\golfing> .\distinct-sieves.ps1 1,2,3,4,1,3,5,7
1
1
1
1
0
0
1
1

1

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

f=a=>a.map((e,i)=>i-a.indexOf(e))

0은 진실이며 다른 숫자는 거짓입니다.


1

Mathematica, 53 31 바이트

22 바이트를 절약 할 수있는 아이디어를 주셔서 감사합니다.

s[[;;x++]]~FreeQ~#&/@(x=0;s=#)&

MapIndexed이전 하위 목록을 사용 하는 것은 어떻습니까? MapIndexed[s[[;;#-1&@@#2]]~FreeQ~#&,s=#]&41 바이트가 걸립니다.
마일

@ 마일즈 오, 훨씬 나아 졌어요 (그리고 조금 더 개선했습니다)
Martin Ender

MapIndexed이 경우 를 단축시키는 좋은 방법 이며 색인을 추출하거나 줄일 필요조차 없습니다.
마일

1

펄 5

push@o,map{$b=pop@a;(grep{/^$b$/}@a)?1:0}(1..~~@a);

1. ..스칼라 컨텍스트를 제공하므로 필요하지 않습니다 ~~. 2. grep진실 / 거짓을 반환하므로 필요하지 않습니다 ?1:0. 3. grep/.../,@a보다 짧습니다 grep{/.../}@a. 4. 당신은 최종 필요하지 않아야합니다 ;. 5. 괄호가 없어도됩니다 1..@a. 6. 입력이 어디에서 나오는지
msh210

1

자바, 96 바이트

void s(int[]a){for(int i=0,j,n=a.length,b=1;i<n;a[i++]=b,b=1)for(j=i+1;j<n;)b=a[i]==a[j++]?0:b;}

배열을 제자리에서 수정합니다. 마지막 발생에 유리합니다.

진실 된 가치는 1거짓 가치는 0입니다.

모든 테스트 케이스 확인 .

언 골프 드 :

void sieve(int[]a){
    int n = a.length;
    for(int i=0;i<n;i++){
        int b = 1;
        for(int j=i+1;j<n;j++){
            if(a[i] == a[j]){
                b = 0;
            }
        }
        a[i] = b;
    }
}

1

실제로 11 바이트

;╗ñ`i@╜í=`M

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

설명:

;╗ñ`i@╜í=`M
;╗           save a copy of input in reg0
  ñ          enumerate
   `i@╜í=`M  for each (index, value) pair:
    i@         flatten, swap
      ╜í       first index in input of value
        =      compare equality


1

C ++, 242 바이트

틀림없이 잔인한 솔루션이 작동으로 모든 표준 컨테이너에 어떤 주문 유형 :

#include<algorithm>
#include<list>
#include<set>
template<class T>auto f(T a){using V=typename T::value_type;std::set<V>s;std::list<bool>r;std::transform(a.begin(),a.end(),std::back_inserter(r),[&](V m){return s.insert(m).second;});return r;}

언 골프 드 :

(그리고 더 일반화 됨)

template<class T>
auto f(T a)
{
    using std::begin;
    using std::end;
    using V=typename T::value_type;
    std::set<V>s;
    std::list<bool>r;
    std::transform(begin(a),end(a),std::back_inserter(r),[&](V m){return s.insert(m).second;});
    return r;
}

테스트 스위트 :

int test(const std::list<bool>& expected, const auto& x) { return f(x) != expected; }
#include<array>
#include<chrono>
#include<forward_list>
#include<initializer_list>
#include<string>
#include<vector>
using namespace std::literals::chrono_literals;
int main()
{
    return 0
        + test({},            std::vector<short>{})
        + test({1},           std::array<int,1>{})
        + test({1},           std::vector<char>{55})
        + test({true,true},   std::vector<unsigned>{32,44})
        + test({1,0},         std::list<std::string>{"zero", "zero"})
        + test({1,0,0},       std::vector<long>{9001,9001,9001})
        + test({1,1,1,1},     std::array<char,4>{5,4,7,1})
        + test({1,1,1,1,0,1}, std::initializer_list<std::string>{"one","two","three","four","three","five"})
        + test({1,0,1,0,0},   std::forward_list<std::chrono::seconds>{60s, 1min, 3600s, 60min, 1h});
}

1

TSQL 52 바이트

DECLARE @ TABLE(i int identity, v int)
INSERT @ values(1),(2),(3),(4),(3),(5)

SELECT i/max(i)over(partition by v)FROM @ ORDER BY i

깡깡이


1

PHP, 66 62 39 바이트

  • 모든 원자 값을 허용합니다 (부울, 정수, 부동 소수점, 문자열)
    false (false, 0, "") 및 숫자 문자열 ( "1"은 1과 같음)로 평가되는 값을 제외한 을 허용합니다.
  • 플래그가 처음으로 나타남

새로운 버전 (프로그램, 37 + 2 바이트)
은 Java와 C #을 능가합니다. 지금도 거의 파이썬을 이겼습니다. 행복.

<?foreach($a as$v)$u[$v]=print$u[$v]|0;
  • PHP의 경우 +6> = 5.4, 함수의 경우 + 16-3
  • 다음에 0(true) 및 1(false)
    삽입의 구분 !되지 않은 목록을 인쇄합니다.print반전
  • 사용 : 설정 register_globals=On, short_open_tags=On그리고 error_reporting=0php.ini대한 php-cgi
    다음 호출php-cgi -f <filename> a[]=<value1> a[]=<value2> ...;echo"" ;
  • PHP> = 5.4 : 교체 $a와 함께 $_GET[a](6), 세트 short_open_tags=Onerror_reporting=0
  • 또는 교체 $aarray_slice($argv,1)(19), 제거 <?(-2)
    및 전화php -d error_reporting=0 -r '<code>' <value1> <value2> ...;echo""

이전 버전 (기능, 62 바이트)

function f($a){foreach($a as$v)$u[$v]=1|$m[]=$u[$v];return$m;}
  • falsetrue 및 truefalse의 배열을 반환합니다 . (빈 문자열이나 OUPUT 1)
    삽입 !$m[]=반전
  • 55 바이트의 정규화 된 함수에 대한 다른 방법도 있습니다.

테스트 (이전 버전)

function out($a){if(!is_array($a))return$a;$r=[];foreach($a as$v)$r[]=out($v);return'['.join(',',$r).']';}
function test($x,$e,$y){static $h='<table border=1><tr><th>input</th><th>output</th><th>expected</th><th>ok?</th></tr>';echo"$h<tr><td>",out($x),'</td><td>',out($y),'</td><td>',out($e),'</td><td>',(strcmp(out($y),out($e))?'N':'Y'),"</td></tr>";$h='';}
$samples=[
    [0],[1],    [55],[1],    [32,44],[1,1],    [9001,9001,9001],[1,false,false],
    [5,4,7,1],[1,1,1,1],    [1,2,3,4,3,5],[1,1,1,1,false,1],
    [5,9,7,5,6,0,5],[1,1,1,false,1,1,false],    [0,8,6,6,3,8,7,2],[1,1,1,false,1,false,1,1],
    [45,47,47,45,24,24,24,8,47,41,47,88],[1,1,'','',1,'','',1,'',1,'',1],
    [154,993,420,154,154,689,172,417,790,175,790,790,154,172,175,
        175,420,417,154,175,172,175,172,993,689, 993,993,790],
        array_merge([1,1,1,false,false,1,1,1,1,1],array_fill(0,18,false))
];
for($i=count($samples);$i--;--$i)for($j=count($samples[$i]);$j--;)$samples[$i][$j]=!$samples[$i][$j];
while($samples)
{
    $a=array_shift($samples);
    $em=array_shift($samples);
    test($a,$em,$ym=s($a));
    $eu=[];foreach($em as$i=>$f)if($f)$eu[]=$a[$i];
    $yu=[];foreach($ym as$i=>$f)if($f)$yu[]=$a[$i];
#   sort($eu); sort($yu);
    test('unique values',$eu,$yu);
}
echo '</table>';

1

하스켈, 29 27 바이트

f a=[elem x t|x:t<-tails a]

거짓 값 False으로 true로 사용 True합니다.

λ> let f a=[elem x t|x:t<-tails a] in f [5, 9, 7, 5, 6, 0, 5]
[True,False,False,True,False,False,False]

import Data.List사용해야 할 수도 tails있지만 tryhaskell.org 는 그대로 코드를 실행합니다.


외부 괄호가 필요 없습니다. \a->[...]적절한 기능입니다. 확실하지 않은 경우 이름을 지정하십시오 f a=[...].
nimi

@nimi는 괄호 없이는 호출 할 수 없습니다. 하지만 이름을 밝히면 정말 감사합니다.
Will Ness

저는이 생략이별로 없다는 것을 좋아하지 않습니다 import Data.List. ㅏ. GHCi 설정에 많은 양의 가져 오기 (또는 정의)를 넣을 수 있기 때문에 매우 미끄러운 경사입니다. 비. tryhaskell.org를 Haskell 언어의 권위있는 구현으로 취급하지만 실제로는 그렇지 않습니다. (골프가 원할 수있는 수입품과 정의가 모두 포함 된 나만의 하스켈 온라인 환경을 만들면 어떨까요? 아직도 "하스켈"입니까?)
Lynn

여기서 코드를 그대로 실행하는 플랫폼이 있으면 해당 코드를 사용할 수 있다고 한 번 들었습니다. 정확한 규칙이 무엇인지 모르겠습니다. 귀하의 사이트가 연중 무휴 24 시간 이용 가능하고 표준 Haskell을 운영하고 있다면 어떨까요? 하지만 당신은 첫 번째에 대해 옳았습니다. 감사.
Will Ness

1

Perl 5 + Perligata , 343 바이트

315 바이트, 28 바이트 -MLingua::Romana::Perligata

로 사용 perl -MLingua::Romana::Perligata foo.pl; 입력 (stdin에서) 및 출력 (stdout으로)은 밑줄로 구분 된 십진 정수 문자열입니다. Perligata 0.6 버전으로 Strawberry 5.20.2에서 테스트되었습니다. Perligata 버전 0.50에서 작동하는지 여부를 모르겠습니다.

huic vestibulo perlegementum da.qis _ scindementa da.dum qis fac sic
ao qis decumulamentum da.ao aum tum nullum addementum da.meo io.meo ro.per ium in qis fac sic
si ium tum aum aequalitas fac sic ro I da cis cis
ro nullum tum non rum addementum da.capita bis rum cis
per in bis fac sic hoc tum _ egresso scribe cis

분명히 이것은 종으로 분명합니다. 경우는, 그것을 실행되지 것 -MLingua::Romana::Perligata=converte대신에 -MLingua::Romana::Perligata, 그리고perl 것 대신 스크립트 출력을 일반 펄로 번역을 실행 :

 $_ = Lingua::Romana::Perligata::getline (*STDIN );
 @q = split ( '_');
while (@q) { $a = pop (@q );
 $a =  ($a + 0);
my $i ;
my $r ;
for $i (@q) {if ( ($i eq $a)) { $r = 1}
}
;
 $r =  (0 +  ! ($r));
unshift (@b, $r)}
;
for $_ (@b) {print (STDOUT $_, '_')}

토큰 별 분석의 경우 -MLingua::Romana::Perligata=discribe .


골프 노트 :

  • 문서화되지 않았지만 (놀랍지 않은), 뒤에 공백이 필요하지 않습니다. . .
  • (놀랍지도 않지만) scinde두 번째 주장이 필요하지 않으며hoc .
  • 나는 ao aum tum nullum addementum da얻을 수 없어서 사용해야했다morde 했습니다.
  • 마찬가지로, 나는 per ium in qis... ro I da얻을 수 없기 때문에 사용vanne 했습니다.
  • 대신에을 huic vestibulo perlegementum da시도 -pMLingua::Romana::Perligata했지만 작동시키지 못했습니다.

발차기만 (이 전체 답변은 발차기를위한 것이지만) :

  • Huic vestibulo perlegementum da. Qis lacunam scindementa da. Dum qis fac sic ao qis decumulamentum da. Ao aum tum nullum addementum da. Meo io. Meo ro. Per ium in qis fac sic si ium tum aum aequalitas fac sic ro I da cis cis. Ro nullum tum non rum addementum da. Capita bis rum cis. Per in bis fac sic hoc tum lacunam egresso scribe cis.Google 번역은 까지 정리 한 후 제공합니다 This court perlegementum grant. QIS gap scindementa grant. While QIS QIS decumulamentum do so ao da. Ao sum and no addementum grant. My io. My ro. Through ium in QIS do so if the sum ium equality do so ro 1 from cis. Ro was not any rum addementum grant. The heads of the bis side. Write, do so as soon as he at that time that in the gap by the Kish was taken..
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.