Dada uma lista de números inteiros, crie uma máscara booleana para que os índices verdadeiros possam ser usados para filtrar os valores distintos da lista. Qual índice é selecionado como o verdadeiro não importa, desde que apenas um deles seja selecionado para cada conjunto de índices correspondentes a valores idênticos.
A entrada será uma lista não vazia de números inteiros não negativos em um formato adequado ao seu idioma e a saída será uma lista de valores booleanos seguindo a especificação acima. Você tem permissão para usar suas próprias definições de valores de verdade e falsidade na lista de saída.
Nos meus exemplos abaixo, defino 1
ser verdadeiro e 0
falso.
[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 ]
Casos de teste
Quando existe um or
, significa que existem várias saídas válidas. Se houver reticências à direita ...
após or
isso, significa que nem todas as saídas possíveis foram listadas.
[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 ...
Regras
- Isso é código-golfe então a solução mais curta vence.
- Builtins são permitidos!
- Você tem permissão para usar suas próprias definições de valores de verdade e falsidade na lista de saída. Se você optar por fazê-lo, indique suas definições.
- A entrada será uma lista não vazia de números inteiros não negativos.
- Você é livre para escolher entre produzir apenas uma das peneiras ou várias ou mesmo todas. Desde que cada peneira seja válida, ela será aceita.
fonte
[0, 8, 6, 6, 3, 8, 7, 2]
, deve[1, 0, 0, 1, 1, 1, 1, 1]
ser adicionado à lista de saídas válidas?Respostas:
MATL,
764 bytes1 byte economizado graças a @Luis
2 bytes economizados graças a @Dennis
Definimos
1
ser verdade e todos os outros valores como falseyExperimente Online
Todos os casos de teste
Explicação
fonte
&=Rs1=
l=
.Gelatina , 4 bytes
Favorece as últimas ocorrências. Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python 3,
47353936 bytesAparece o primeiro item da lista, verifica se ele existe em algum lugar da lista e insere
True
ouFalse
em uma nova lista.Para esta função,
False
indica um valor distinto e,True
caso contrário , é (True=0
eFalse=1
)Agradecimentos a Dennis por uma tonelada de bytes
Original, 47 bytes:
Tente
fonte
lambda n:[1-(n.pop()in n)for x in n*1]
salva alguns bytes.lambda n:[n.pop()in n for x in n*1]
funciona..pop(0)
ou a máscara sai invertida..pop()
processa o último elemento primeiro, então eles estão na ordem inversa.Pitão, 6 bytes
Mostra uma lista de bools (
True
eFalse
). Verifica cada elemento na entrada, se seu índice é igual ao índice da primeira ocorrência do valor. Em outras palavras, isso está verificando se cada elemento é a primeira ocorrência.No pseudocódigo pitônico:
Teste aqui.
fonte
J , 2 bytes
Foi daí que surgiu a idéia para esse desafio. O builtin
~:
é chamadoNub-Sieve
em J e cria uma lista booleana que executa a operação descrita no desafio. Aqui,1
representatrue
e0
representafalse
.fonte
05AB1E , 8 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online! .
fonte
APL, 6 bytes
Tente
Explicação:
fonte
C #, 63 bytes
Eu também poderia fazê-lo retornar 1 ou 0 e, portanto, tornar o parâmetro e retornar o mesmo tipo, permitindo que eu fizesse isso uma expressão lambda por si só?
alguma orientação seria apreciada
mesmo código de tipo
fonte
Python, 35 bytes
Usa
True
como valor falso eFalse
para o valor verdadeiro . Marca a última aparência de cada elemento.Seleciona o primeiro elemento apenas se ele não aparecer entre os elementos restantes e depois volta para o restante da lista, desde que não esteja vazio. Ele
l.pop(0)
extrai o primeiro elemento e também o remove.fonte
Retina , 23 bytes
Entrada é uma lista separada por espaço. (Na verdade, outros formatos
[1, 2, 3]
também funcionarão desde que haja um espaço na frente de cada número, exceto o primeiro.)Experimente online!(Funciona em vários casos de teste separados por avanço de linha de uma só vez.)
Simplesmente transformamos cada elemento em
0
se houver outra cópia mais tarde na entrada e em1
outro.fonte
PowerShell v2 +, 40 bytes
Cria uma matriz vazia
$a
. Então pegamos a lista de entradas via$args[0]
e isso em um loop|%{...}
. A cada iteração, selecionamos um1
ou0
de um pseudo-ternário com base em se o elemento atual está$a
ou não. Essas seleções são deixadas no pipeline. Em seguida, adicionamos o elemento atual à matriz$a
. Os elementos do pipeline são reunidos e a saída como uma matriz está implícita.Exemplo:
(imprima aqui com um separador de nova linha, já que esse é o padrão
.ToString()
para uma matriz)fonte
JavaScript (ES6), 31 bytes
Zero é verdade e outros números são falsos.
fonte
Mathematica,
5331 bytesObrigado por milhas por me dar uma idéia que salvou 22 bytes.
fonte
MapIndexed
sobre as sublistas anteriores?MapIndexed[s[[;;#-1&@@#2]]~FreeQ~#&,s=#]&
leva 41 bytes.MapIndexed
para este caso e você não tem sequer para extrair ou diminuir o índicePerl 5
fonte
..
fornece contexto escalar, portanto você não precisa~~
. 2.grep
retorna verdade / falsidade, portanto você não precisa?1:0
. 3.grep/.../,@a
é menor do quegrep{/.../}@a
. 4. Você não precisa da final;
. 5. Você não precisa dos parênteses1..@a
. 6. Você não mostra de onde a entrada vem ou a saída está indo: consulte meta.codegolf.stackexchange.com/q/2447Java, 96 bytes
Modifica a matriz no local. Favorece a última ocorrência.
O valor
1
verdade é enquanto o valor falsey é0
.Verifique todos os casos de teste .
Ungolfed:
fonte
Na verdade, 11 bytes
Experimente online!
Explicação:
fonte
Pyke, 4 bytes
Experimente aqui!
fonte
C ++, 242 bytes
É certo que é uma solução de exagero, pois funciona em qualquer contêiner padrão de qualquer tipo solicitado:
Ungolfed:
(e generalizado)
Suíte de teste:
fonte
TSQL 52 bytes
Violino
fonte
PHP,
666239 bytesexceto os valores avaliados como falso (falso, 0, "") e seqüências numéricas ("1" é igual a 1)
nova versão (programa, 37 + 2 bytes)
supera Java e (agora novamente) C #. Até quase supera o Python agora. Feliz.
0
(true) e1
(false)inserção
!
apósprint
a invertregister_globals=On
,short_open_tags=On
eerror_reporting=0
emphp.ini
paraphp-cgi
, em seguida, chamada
php-cgi -f <filename> a[]=<value1> a[]=<value2> ...;echo""
;$a
por$_GET[a]
(+6), definashort_open_tags=On
eerror_reporting=0
$a
porarray_slice($argv,1)
(+19), remova<?
(-2)e chame
php -d error_reporting=0 -r '<code>' <value1> <value2> ...;echo""
versão antiga (função, 62 bytes)
false
para verdadeiro etrue
para falso; (saída como string vazia ou1
)inserir
!
após$m[]=
invertertestes (na versão antiga)
fonte
Haskell,
2927 bytesUsa
False
como verdadeiro,True
como valor falso:Você pode precisar
import Data.List
usartails
, mas tryhaskell.org executa o código como está.fonte
\a->[...]
é uma função adequada. Em caso de dúvida, dar-lhe um nome:f a=[...]
.import Data.List
. uma. é uma inclinação muito escorregadia, pois você pode colocar qualquer quantidade de importações (ou mesmo definições!) em sua configuração do GHCi. b. trata o tryhaskell.org como uma implementação autorizada da linguagem Haskell, mas na verdade não é uma. (? Mais uma vez, o que se eu criar o meu próprio ambiente try-Haskell-online que vem com todos os significados e definições golfistas poderia querer é que ainda realmente “Haskell”?)Perl 5 + Perligata , 343 bytes
315 bytes, mais 28 para
-MLingua::Romana::Perligata
Use como
perl -MLingua::Romana::Perligata foo.pl
; input (from stdin) e output (to stdout) são sequências de números decimais separadas por sublinhado. Testado no Strawberry 5.20.2 com versão 0.6 do Perligata; Não sei se funciona com o Perligata versão 0.50.Obviamente, isso é claro como um sino. Caso contrário, execute-o com em
-MLingua::Romana::Perligata=converte
vez de-MLingua::Romana::Perligata
eperl
, em vez de executar o script, produzirá uma tradução no Perl regular:Para uma análise token por token, use
-MLingua::Romana::Perligata=discribe
.Notas de golfe:
.
.scinde
não precisa de um segundo argumento e usahoc
.ao aum tum nullum addementum da
porque não conseguiamorde
trabalhar.per ium in qis... ro I da
porque não conseguiavanne
trabalhar.huic vestibulo perlegementum da
, tentei-pMLingua::Romana::Perligata
, mas também não consegui fazê-lo funcionar.Apenas para chutes (embora toda essa resposta tenha sido apenas para chutes):
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.
, o Google Translate dá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.
.fonte