Étant donné une liste d'entiers, créez un masque booléen de sorte que les vrais indices puissent être utilisés pour filtrer les valeurs distinctes de la liste. Quel indice est sélectionné comme vrai n'a pas d'importance tant qu'un seul d'entre eux est sélectionné pour chaque ensemble d'indices correspondant à des valeurs identiques.
L'entrée sera une liste non vide d'entiers non négatifs dans un format adapté à votre langue et la sortie sera une liste de valeurs booléennes suivant la spécification ci-dessus. Vous êtes autorisé à utiliser vos propres définitions des valeurs véridiques et fausses dans la liste de sortie.
Dans mes exemples ci-dessous, je définis 1
pour être vrai et 0
pour être faux.
[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 ]
Cas de test
Lorsqu'il y a un or
, cela signifie qu'il y a plusieurs sorties valides. S'il y a des points de suspension ...
après le or
, cela signifie que toutes les sorties possibles n'ont pas été répertoriées.
[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 ...
Règles
- C'est le golf de code, donc la solution la plus courte l'emporte.
- Les Builtins sont autorisés!
- Vous êtes autorisé à utiliser vos propres définitions des valeurs véridiques et fausses dans la liste de sortie. Si vous choisissez de le faire, veuillez indiquer vos définitions.
- L'entrée sera une liste non vide d'entiers non négatifs.
- Vous êtes libre de choisir entre sortir un seul des tamis ou plusieurs ou même tous. Tant que chaque tamis est valide, il sera accepté.
[0, 8, 6, 6, 3, 8, 7, 2]
, devrait[1, 0, 0, 1, 1, 1, 1, 1]
être ajouté à la liste des sorties valides?Réponses:
MATL,
764 octets1 octet enregistré grâce à @Luis
2 octets enregistrés grâce à @Dennis
Nous définissons
1
la vérité et toutes les autres valeurs comme falseyEssayez-le en ligne
Tous les cas de test
Explication
la source
&=Rs1=
l=
.Gelée , 4 octets
Favorise les dernières occurrences. Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
Python 3,
47353936 octetsExtrait le premier élément de la liste, vérifie s'il existe ailleurs dans la liste et insère
True
ouFalse
dans une nouvelle liste.Pour cette fonction,
False
indique une valeur distincte, etTrue
est autrement (True=0
etFalse=1
)Merci à Dennis pour une tonne d'octets
Original, 47 octets:
Essayez-le
la source
lambda n:[1-(n.pop()in n)for x in n*1]
enregistre quelques octets.lambda n:[n.pop()in n for x in n*1]
fonctionne également..pop(0)
ou le masque sort inversé..pop()
traite le dernier élément en premier, donc ils sont dans l'ordre inverse.Pyth, 6 octets
Affiche une liste de bools (
True
etFalse
). Vérifie pour chaque élément dans l'entrée, si son index est égal à l'index de la première occurrence de la valeur. En d'autres termes, cela vérifie si chaque élément est la première occurrence.En pseudocode pythonique:
Testez-le ici.
la source
J , 2 octets
C'est de là qu'est née l'idée de ce défi. Le builtin
~:
est appeléNub-Sieve
en J et crée une liste booléenne qui effectue l'opération décrite dans le défi. Ici,1
représentetrue
et0
représentefalse
.la source
05AB1E , 8 octets
Code:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
APL, 6 octets
Essayez-le
Explication:
la source
C #, 63 octets
Je pourrais également lui faire retourner 1 ou 0 et faire ainsi le paramètre et le type de retour le même, ce qui me permet d'en faire une expression lambda par lui-même?
quelques conseils seraient appréciés
même code de type
la source
Python, 35 octets
Utilise
True
comme valeur fausse etFalse
pour valeur vraie. Marque la dernière apparition de chaque élément.Sélectionne le premier élément uniquement s'il n'apparaît pas parmi les éléments restants, puis revient au reste de la liste tant qu'il n'est pas vide. Le
l.pop(0)
extrait le premier élément tout en le supprimant.la source
Rétine , 23 octets
L'entrée est une liste séparée par des espaces. (En fait, d'autres formats comme
[1, 2, 3]
fonctionneront également tant qu'il y aura un espace devant chaque numéro, sauf le premier.)Essayez-le en ligne!(Fonctionne simultanément sur plusieurs cas de test séparés par des sauts de ligne.)
Nous transformons simplement chaque élément en
0
s'il en existe une autre copie plus tard dans l'entrée et dans le1
cas contraire.la source
PowerShell v2 +, 40 octets
Crée un tableau vide
$a
. Ensuite, nous prenons la liste d'entrée via$args[0]
et la canalisons dans une boucle|%{...}
. Chaque itération que nous sélectionnons soit1
ou à0
partir d'un pseudo-ternaire selon que l'élément courant est$a
ou non. Ces sélections sont laissées sur le pipeline. On ajoute ensuite l'élément courant dans le tableau$a
. Les éléments du pipeline sont rassemblés et la sortie sous forme de tableau est implicite.Exemple:
(sortie ici avec un séparateur de nouvelle ligne, car c'est la valeur
.ToString()
par défaut pour un tableau)la source
JavaScript (ES6), 31 octets
Zéro est vrai et d'autres chiffres sont faux.
la source
Mathematica,
5331 octetsMerci aux miles de m'avoir donné une idée qui a permis d'économiser 22 octets.
la source
MapIndexed
sur les sous-listes précédentes?MapIndexed[s[[;;#-1&@@#2]]~FreeQ~#&,s=#]&
prend 41 octets.MapIndexed
pour ce cas et vous n'avez même pas besoin d'extraire ou de décrémenter l'indexPerl 5
la source
..
fournit un contexte scalaire, donc vous ne devriez pas en avoir besoin~~
. 2.grep
retourne véridique / fausse, donc vous ne devriez pas avoir besoin?1:0
. 3.grep/.../,@a
est plus court quegrep{/.../}@a
. 4. Vous ne devriez pas avoir besoin de la finale;
. 5. Vous ne devriez pas avoir besoin des parenthèses1..@a
. 6. Vous ne montrez pas d'où vient l'entrée ou la sortie va: voir meta.codegolf.stackexchange.com/q/2447Java, 96 octets
Modifie le tableau sur place. Favorise la dernière occurrence.
La valeur véridique est
1
tandis que la valeur de falsey est0
.Vérifiez tous les cas de test .
Non golfé:
la source
En fait, 11 octets
Essayez-le en ligne!
Explication:
la source
Pyke, 4 octets
Essayez-le ici!
la source
C ++, 242 octets
Certes, une solution exagérée, car elle fonctionne sur n'importe quel conteneur standard de tout type commandé:
Non golfé:
(et plus généralisé)
Suite de tests:
la source
TSQL 52 octets
Violon
la source
PHP,
666239 octetsexception des valeurs évaluées en faux (faux, 0, "") et les chaînes numériques ("1" est égal à 1)
nouvelle version (programme, 37 + 2 octets)
bat Java et (maintenant encore) C #. Même bat presque Python maintenant. Content.
0
(true) et1
(faux)insérer
!
aprèsprint
inverserregister_globals=On
,short_open_tags=On
eterror_reporting=0
dansphp.ini
pourphp-cgi
demandâmes
php-cgi -f <filename> a[]=<value1> a[]=<value2> ...;echo""
;$a
par$_GET[a]
(+6), définissezshort_open_tags=On
eterror_reporting=0
$a
pararray_slice($argv,1)
(+19), supprimez<?
(-2)et appelez
php -d error_reporting=0 -r '<code>' <value1> <value2> ...;echo""
ancienne version (fonction, 62 octets)
false
pour vrai ettrue
pour faux; (ouput sous forme de chaîne vide ou1
)insérer
!
après$m[]=
pour inversertests (sur ancienne version)
la source
Haskell,
2927 octetsUtilise
False
comme valeur vraieTrue
ou fausse:Vous devrez peut-être
import Data.List
utiliser,tails
mais, tryhaskell.org exécute le code tel quel .la source
\a->[...]
est une fonction appropriée. En cas de doute, donnez - lui un nom:f a=[...]
.import Data.List
. une.est une pente très glissante car vous pouvez mettre n'importe quel montant d'importations (ou même de définitions!) dans votre configuration GHCi. b. traite tryhaskell.org comme une implémentation faisant autorité du langage Haskell, mais ce n'en est vraiment pas une. (Encore une fois, que se passe-t-il si je crée mon propre environnement try-Haskell-online qui comprend toutes les importations et définitions que les golfeurs pourraient souhaiter? Est-ce vraiment "Haskell"?)Perl 5 + Perligata , 343 octets
315 octets, plus 28 pour
-MLingua::Romana::Perligata
Utilisé comme
perl -MLingua::Romana::Perligata foo.pl
; entrée (depuis stdin) et sortie (vers stdout) sont des chaînes séparées par des traits de soulignement d'entiers décimaux. Testé sur Strawberry 5.20.2 avec la version 0.6 de Perligata; Je ne sais pas si cela fonctionne avec la version 0.50 de Perligata.Évidemment, c'est clair comme une cloche. Dans le cas contraire, exécutez-le avec
-MLingua::Romana::Perligata=converte
au lieu de-MLingua::Romana::Perligata
, etperl
, au lieu d'exécuter le script, produisez une traduction en Perl normal:Pour une analyse jeton par jeton, utilisez
-MLingua::Romana::Perligata=discribe
.Notes de golf:
.
.scinde
n'a pas besoin d'un deuxième argument et utilisehoc
.ao aum tum nullum addementum da
parce que je ne pouvais pasmorde
au travail.per ium in qis... ro I da
parce que je ne pouvais pas obtenirvanne
au travail.huic vestibulo perlegementum da
, j'ai essayé-pMLingua::Romana::Perligata
, mais je n'ai pas pu le faire fonctionner non plus.Juste pour les coups de pied (bien que toute cette réponse soit juste pour les coups de pied):
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 Translate donneThis 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.
.la source