(nous ne trouverons Find
ni n'attraperons untryCatch
, cependant)
Il s'agit de la deuxième partie d'une série en plusieurs parties d'implémentation de fonctions R intéressantes. La première partie peut être trouvée ici .
La tâche:
Vous devez implémenter la match
fonction de R dans le moins d'octets possible.
Contribution:
x
, une liste / tableau d'entiers éventuellement videtable
, une liste / tableau d'entiers éventuellement videnomatch
, une valeur entière uniqueincomparables
, une liste / tableau d'entiers éventuellement vide
Sortie:
- un seul tableau / liste d'entiers
O
de longueur égale àx
, où chaque valeurO[i]
représente soit:- L'index
j
de la première valeurtable
oùtable[j]==x[i]
nomatch
, indiquant qu'aucune valeur danstable
n'est égale àx[i]
OU quix[i]
est dans la liste deincomparables
.
- L'index
Cas de test
All in the form x, table, nomatch, incomparables -> output
outputs
[], [1,2,3], 0, [5] -> []
[1, 2, 3], [], 0, [5] -> [0, 0, 0]
[9, 4, 3, 6, 3], [9, 8, 7, 6, 5, 4, 3, 2, 1], -1, [4] -> [1, -1, 7, 4, 7]
[8, 6, 7, 5, 3, 0, 9], [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6], 1000, [1] -> [12, 8, 14, 5, 1, 1000, 6]
Plus de cas de test peuvent être générés selon les besoins.
Règles supplémentaires:
- R a des indices basés sur 1, mais des indices basés sur une alternative cohérente sont acceptables. Vous pouvez donc utiliser des indices qui commencent à 3 ou 17 ou autre chose, mais cela doit être cohérent, et vous devez l'indiquer dans votre réponse.
- Si vous avez choisi la langue avec une fonction intégrée qui le fait, veuillez également implémenter votre propre solution.
- Les explications sont appréciées.
Il s'agit de code-golf , donc la solution la plus courte en octets gagne!
code-golf
array-manipulation
Giuseppe
la source
la source
4
est activé,incomparables
il ne peut donc pas être mis en correspondance. Si votre langue ne peut pas prendre en charge les nombres négatifs, il est bon d'exiger des nombres non négatifs, mais énoncez cette hypothèse dans votre soumission.make
.Réponses:
Gelée ,
108 octets-2 merci à Erik l'Outgolfer
Un programme complet acceptant quatre arguments de ligne de commande,
incomparables nomatch table x
qui imprime une représentation Jelly * de la liste desmatch
résultats de la fonction de R.Essayez-le en ligne!
Comment?
par exemple avec
incomparables nomatch table x
=[1,4], 2, [2,4], [4,3,2,1,0]
:* Une liste vide est représentée comme rien, une liste de lenth est représentée comme juste l'élément, tandis que d'autres listes sont enfermées
[]
et délimitées par,
la source
R , 83 octets
Essayez-le en ligne!
Évite
match
,%in%
etsetdiff
.la source
R , 55 octets
Dans ce cas, le code n'utilise pas
match
avec toutes ses fonctionnalités, il est juste utilisé comme uneindex
fonction. Première réponse R, donc probablement incroyablement inefficace au niveau des octets!Remarque (merci à Giuseppe pour l'info) :
%in%
etsetdiff
sont également implémentés en internematch
, donc se débarrasser complètement de cette fonction étonnamment utile entraînera un gâchis . Par conséquent, il y a une prime de 150 représentants sans date limite pour cela! (notez quesetdiff
c'est autorisé, cependant)Essayez-le en ligne!
ou...
R , 5 octets
Essayez-le en ligne!
la source
%in%
etmatch
; si vous voulez trouver une bonne réponse golfique sans aucune de ces fonctions (susceptible d'être horrible), je vous en prie.match
soumissionifelse
utilisant cette astuce: codegolf.stackexchange.com/a/97826/59530match
: SGelée ,
98 octetsEssayez-le en ligne!
Un programme complet qui prend trois arguments:
[[table], incomparables]
,x
,nomatch
dans cet ordre.la source
C # (Visual C # Interactive Compiler) , 60 octets
Essayez-le en ligne!
la source
Rubis , 44 octets
Zéro indexé.
Essayez-le en ligne!
la source
R , 79 octets
Essayez-le en ligne!
R , 66 octets
Combiner ma solution avec des parties de la solution de Nick .
Essayez-le en ligne!
la source
Japt , 14 octets
Essayez-le
la source
Python 3 , 60 octets
Essayez-le en ligne!
la source
R has 1-based indices, but a consistent alternative-based indices are acceptable.
Vous pouvez donc retirer le-~
et utiliser simplement l'indexation 0 pour -1 octets.t.index(v)if v in{*t}-{*i}else n
Soit dit en passant , a exactement le même bytecount que votrev in{*t}-{*i}and-~t.index(v)or n
solution actuelle , hahaPowerShell , 63 octets
Essayez-le en ligne!
0 indexé
la source
JavaScript (ES6), 53 octets
Essayez-le en ligne!
la source
Perl 6 , 45 octets
Essayez-le en ligne!
Bloc de code anonyme qui prend les entrées au curry, comme
f(table, nomatch, incomparables)(x)
et renvoie les correspondances indexées à 0.Explication:
la source
$_∉d&&b.antipairs.Map{$_}||c
ce qui aurait bien fonctionné sans la valeur de falsey de 0. La première ($ _: k) est une excellente solution qui évite les longues antipairs.Fusain , 14 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. 1 indexé. Explication:
la source
C (gcc) , 125 octets
1 indexé.
Étant donné que je ne peux pas utiliser de valeur sentinelle dans les tableaux passés, je dois donner les limites du tableau pour chaque tableau.
Essayez-le en ligne!
la source
Attaché , 39 octets
Essayez-le en ligne!
Vérification assez simple. Notez que l'ordre des arguments diffère de celui de la correspondance; en particulier,
x
est le dernier argument plutôt que le premier, et correspond à_4
l'extrait ci-dessus.Explication
la source
Haskell,
5756 octetsOrdre argument est:
table
,nomatch
,incomparables
,x
.Essayez-le en ligne!
la source
05AB1E , 7 octets
0 indexé. Les entrées sont dans l'ordre:
incomparables, table, x, nomatch
.Essayez-le en ligne.
Explication:
la source