La tâche
Dans ce défi, votre entrée est une liste non vide d’entiers positifs, donnée dans le format natif de votre langue. Votre sortie est cette même liste, dans le même format, avec certains éléments supprimés. Vous devez supprimer chaque occurrence de 1
, une occurrence sur deux 2
, une occurrence sur trois 3
, etc. En général, pour chaque entier positif N
, vous devez supprimer chaque N
occurrence de N
de la liste, en commençant par la N
occurrence.
Exemple
Considérons la liste d'entrée
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2]
Tout d'abord, nous supprimons chaque occurrence de 1
:
[3,2,6, 6,2,3,2,6,6,6,6, 6,6,3,3,7,2]
Puis chaque seconde occurrence de 2
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6,3,3,7 ]
Puis à chaque troisième occurrence de 3
:
[3,2,6, 6, 3,2,6,6,6,6, 6,6, 3,7 ]
Les nombres 4
et 5
ne figurent pas dans l'entrée, ils peuvent donc être ignorés. Ensuite, nous supprimons chaque sixième occurrence de 6
:
[3,2,6, 6, 3,2,6,6,6, 6,6, 3,7 ]
Il n'y a qu'une seule occurrence de 7
, donc on peut aussi l'ignorer. Ainsi, la sortie correcte est
[3,2,6,6,3,2,6,6,6,6,6,3,7]
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus faible gagne et les failles standard sont interdites.
Cas de test
[1] -> []
[2] -> [2]
[1,1,1] -> []
[2,2,2] -> [2,2]
[1,1,2,2,2,3,3,3,3] -> [2,2,3,3,3]
[1,2,3,1,2,3,1,2,3,1,2,3] -> [2,3,3,2,3]
[3,2,6,1,1,6,2,3,2,6,6,6,6,1,6,6,3,3,7,2] -> [3,2,6,6,3,2,6,6,6,6,6,3,7]
[5,4,5,4,3,5,4,5,4,5,4,3,5,4,5,3,3,3,4,5,4,5,4,5,4,3,3,3,5,4] -> [5,4,5,4,3,5,4,5,4,3,5,4,5,3,3,4,5,5,4,4,3,3,5,4]
[6,4,5,8,2,9,3,1,8,5,3,5,5,6,3,5,1,2,3,9,3,5,8,7,5,9,1,3,4,8,2,3,4,7,8,5,8,5,3,1] -> [6,4,5,8,2,9,3,8,5,3,5,5,6,3,9,3,5,8,7,5,9,4,8,2,3,4,7,8,5,8,5,3]
[4,4,9,12,9,4,4,4,12,9,12,9,12,4,12,4,4,9,4,9,12,4,12,4,4,12,4,4,9,12,9,12,9,4,9,12,4,9,12,9,12,9,4,9,12,12,4,4,12,4] -> [4,4,9,12,9,4,4,12,9,12,9,12,4,12,4,9,4,9,12,4,12,4,12,4,4,9,12,9,12,4,9,12,9,9,12,9,4,9,12,12,4,4,12]
[2,2,11,11,11,11,6,2,2,6,6,2,2,2,2,6,11,6,11,11,2,11,2,6,6,11,2,11,6,2,6,6,6,6,6,11,2,11,11,6,6,6,11,6,2,6,2,6,6,2,11,2,2,11,11,11,11,2,6,2] -> [2,11,11,11,11,6,2,6,6,2,2,6,11,6,11,11,2,11,6,11,2,11,6,6,6,6,6,2,11,11,6,6,6,11,6,2,6,6,11,2,11,11,11,11,2,6]
[20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102] -> [20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,21,22,101,102,20,21,22,100,102,20,21,22,100,101,20,21,22,100,101,102,20,21,22,100,101,102,20,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,22,100,101,102,20,21,100,101,102]
Classement
Voici un extrait de pile permettant de générer un classement régulier et un aperçu des gagnants par langue. Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête, assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de classement:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
=
compare les entiers. Par exemple,[3,2,1]=;\
compare3
avec l'élément de[3]
,2
avec ceux de[3, 2]
et1
avec ceux de[3, 2, 1]
, donner[1, [0, 1], [0, 0, 1]]
.awk, 10 octets
Une entrée est attendue sur STDIN, un numéro par ligne.
Explication
Conserve un compteur pour chaque nombre dans un tableau associatif, ne s'imprime que si la valeur du compteur modulo
n
n'est pas zéro. L'impression est implicite. Version longue:la source
Pyth,
181514109 octetsJe pense que c'est le premier code que j'ai écrit qui comporte cinq références de variable consécutives sur neuf octets.
Je souhaite que la solution de manipulation de tableau (
u.DG%HgxHGH{QQ
, 14 octets) ne soit pas si longue.L'essayer ici .
la source
Python, 57 octets
la source
Perl 6 , 28 octets
Usage:
Vérifiez que les éléments corrects sont jetés
la source
Sérieusement,
2217 octetsDécharge Hex:
Essayez-le en ligne
Explication:
la source
JavaScript ES6, 34 octets
S'avère être le même que l'algorithme Perl de Brad.
Edit: 2 octets enregistrés grâce à @ edc65.
la source
a=>a.filter(v=>f[v]=-~f[v]%v,f=[])
Mathematica,
403836 octetsC'est une fonction sans nom qui prend et retourne un
List
. Il définit une fonction nomméef
lorsqu’il est exécuté (pour garder une trace des nombres), mais s’occupe de réinitialiser les définitions pertinentes def
.Explication
Le fonctionnement des fonctions (ou des définitions de fonctions) dans Mathematica est vraiment puissant. Comme dans Haskell (par exemple), les fonctions ne peuvent pas uniquement être surchargées et définies pour certains types, mais également pour des valeurs individuelles (ou des modèles d'arguments arbitraires). Mais il est encore plus puissant que Haskell en ce que a) ces valeurs peuvent être définies comme des effets secondaires lors du contrôle de flux et b) que les valeurs peuvent également être redéfinies à tout moment. Cela signifie que les fonctions sont en fait des tables de recherche assez puissantes (qui peuvent éventuellement calculer la valeur recherchée au lieu de la stocker).
Si nous supprimons la golfitude du code, cela ressemblerait un peu à ceci:
Nous commençons donc par parcourir l’entrée et définir
f[x] = x
pour tous les élémentsx
de la liste.f
sera finalement utilisé pour garder une trace de la fréquence à laquelle chaque numéro est déjà apparu dans la liste. Pourquoi ne compte-t-on pas0
? La boucle sur la liste est unMap
. L'expressionf[x] = y
retourney
(en plus de stocker la définition de la fonction). Donc, en définissantf[x]
surx
, la carte sera évaluée par la liste de saisie elle-même. Cela économise deux octets, car nous n'avons pas besoin de fournirlist
explicitement à nouveau àSelect
. Commencer parx
au lieu de0
n'affecte pas le calcul du tout puisque nous ne nous intéressons jamais qu'àMod[f[x], x]
.(Normalement, nous pourrions simplement utiliser quelque chose comme
f[_] = 0
une définition de secours pour éviter laMap
, mais nous ne savons pas si notre fonction a déjà été utilisée, ce qui laisserait certaines valeurs précédentes définies qui gêneraient notre comptage.)Ensuite,
Select
filtre la liste en ne conservant que les éléments pour lesquels la fonction non nommée passée en tant que deuxième argument a été généréeTrue
. Cette fonction incrémente d’ abord la valeur def[x]
(oùx
est l’élément de la liste en cours), afin de compter les occurrences, puis prend le compte résultant modulox
. Nous voulons supprimer tous les éléments où cela donne0
.la source
CJam, 17 octets
Juste battre ... J? Je ne sais pas vraiment quelles sont mes attentes pour ce défi, vraiment. Notez que
""
CJam représente un tableau vide.Essayez-le en ligne | Suite de tests (le dernier cas est trop long pour le permalien)
Explication
la source
JavaScript ES6, 55 octets
Explication
la source
J, 18 octets
Usage:
Méthode assez simple. Nous comptons les occurrences d’un nombre jusqu’à ce nombre et ne sélectionnons ce nombre que si ce nombre divise le nombre.
Plus d'explication vient plus tard.
Essayez-le en ligne ici.
la source
PowerShell, 56 octets
Utilise une astuce similaire à celle de Rainer P , que j'ai développée indépendamment mais que j'ai apparemment eu FGITW'd.
Prend l'entrée comme un tableau avec
param($a)
. Nous créons ensuite notre tableau d'assistance$b
sous la forme d'un tableau peuplé-avec-zéros à l'aide de l'opérateur de virgule associé à l'opérateur de multiplication surchargé. Cela crée$b
pour être égal à@(0,0,0...0)
avec$b.length
égal au nombre maximal dans$a
.(Prise rapide pour ma réponse "Présentez votre langue" où je décris cela en détail)
Suivant est notre sortie. Nous parcourons chaque élément de notre tableau d'entrée
$a|%{...}
et chaque boucle vérifie uneif
déclaration. Le conditionnel pré-incrémente la valeur de notre tableau d'assistance qui correspond à l'élément actuel, puis vérifie s'il s'agit d'un multiple de l'élément actuel avec l'opérateur modulo. Si c'est un multiple, la%
volonté égale0
Falsey, doncif
elle ne s'exécute pas. Sinon, nous produisons l'élément en cours.Profite de la conversion de type implicite pour économiser sur le formatage de la sortie. Si une fonction ou un programme renvoie plusieurs éléments et que vous enregistrez les résultats dans une variable, PowerShell créera cette variable de manière dynamique sous la forme d'un tableau. Exemple:
la source
R,
110989992 octetsÉdition complète des correctifs de réécriture bug avec scénario de test 2/3 Édition 2 Économisez 7 octets grâce à @ Alex-A
la source
function(a){for(i in 1:max(a))for(j in seq_along(b<-which(a==i)))if(j%%i<1)a[b[j]]=0;a[a>0]}
MATL , 20 octets
Ceci utilise la version actuelle (10.2.1) du langage / compilateur.
Essayez-le en ligne!
Explication
la source
R, 63 octets
la source
C #, 224 octets
Ce code utilise la récursivité. Avec des
using
instructions de 224 octets (160 pour le code de méthode lui-même).Essayez-le en ligne.
la source
for(int i=0,t=0;i<l.Count;i++)if(l[i]==n&&++t==n)l[i]=t=0;
System.Linq
alors!l.Any()
est plus court quel.Count<1
, ce qui est plus court quel.Count==0
.w != 0 && w !=1
parw > 1
.C # - 177 octets
Ungolfed
la source
Mathematica, 63 octets
Très intéressant de jouer au golf! Ignorer le message occasionnel qui apparaît.
la source
Ruby, 120 octets
la source
TI-BASIC, 47 octets
Ceci utilise le fait que, sur une nouvelle calculatrice,
L₁
est initialisée et effacée. Notez que le fait d’afficher une liste vide dans TI-BASIC renvoie une erreur.la source
APL, 16 caractères
En anglais:
,\⍵
: vecteur des préfixes de vecteurs jusqu'au nième élément de l'argument+/¨⍵=
: par vecteur de préfixe, compter combien sont égaux au n-ième élément lui-même×⍵|
: signes du mod (c'est-à-dire: 0 si le reste de la division est 0, sinon 1)⍵/⍨
: de l'argument ne conserve que l'élément où le mod est 0la source
Raquette 179 octets
Ungolfed:
Essai:
Sortie:
la source