( aunque no encontraremos Find
ni atraparemos un tryCatch
)
Esta es la segunda parte de una serie de varias partes de implementación de algunas funciones interesantes de R. La primera parte se puede encontrar aquí .
La tarea:
Debe implementar la match
función de R en el menor número de bytes posible.
Entrada:
x
, una lista / matriz posiblemente entera de enterostable
, una lista / matriz posiblemente entera de enterosnomatch
, un solo valor enteroincomparables
, una lista / matriz posiblemente entera de enteros
Salida:
- una sola matriz / lista de enteros
O
de igual longitudx
, donde cada valorO[i]
representa:- El índice
j
del primer valor entable
dondetable[j]==x[i]
nomatch
, lo que indica que ningún valor entable
es igual ax[i]
OR quex[i]
está en la lista deincomparables
.
- El índice
Casos de prueba
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]
Se pueden generar más casos de prueba según sea necesario.
Reglas adicionales:
- R tiene índices basados en 1, pero son aceptables índices consistentes basados en alternativas. Por lo tanto, puede usar índices que comienzan en 3 o 17 o lo que sea, pero esto debe ser consistente y debe indicarlo en su respuesta.
- Si eligió el idioma tiene una función integrada que hace esto, también implemente su propia solución.
- Las explicaciones son apreciadas.
Este es el código de golf , por lo que la solución más corta en bytes gana.
code-golf
array-manipulation
Giuseppe
fuente
fuente
4
está dentroincomparables
, por lo que no se puede igualar. Si su idioma no puede admitir números negativos, entonces está bien requerir números no negativos, pero indique esa suposición en su envío.make
.Respuestas:
Jalea ,
108 bytes-2 gracias a Erik the Outgolfer
Un programa completo que acepta cuatro argumentos de línea de comando,
incomparables nomatch table x
que imprime una representación Jelly * de la lista dematch
resultados de la función de R.Pruébalo en línea!
¿Cómo?
por ejemplo, con
incomparables nomatch table x
=[1,4], 2, [2,4], [4,3,2,1,0]
:* Una lista vacía se representa como nada, una lista de lenth one se representa solo como el elemento, mientras que otras listas están encerradas
[]
y delimitadas por,
fuente
R , 83 bytes
Pruébalo en línea!
Evita
match
,%in%
ysetdiff
.fuente
R , 55 bytes
En este caso, el código no se usa
match
con toda su funcionalidad, solo se usa como unaindex
función. Primera respuesta R, ¡así que probablemente sea increíblemente ineficiente en bytes!Nota (gracias a Giuseppe por la información) :
%in%
ysetdiff
también se implementan internamente usandomatch
, por lo que deshacerse por completo de esta función sorprendentemente útil resultará en un desastre . ¡Por lo tanto, hay una recompensa de 150 repeticiones sin fecha límite para esto! (tenga en cuenta quesetdiff
está permitido, sin embargo)Pruébalo en línea!
o...
R , 5 bytes
Pruébalo en línea!
fuente
%in%
ymatch
; Si desea encontrar una buena respuesta de golf sin ninguna de esas funciones (probablemente sea horrible), se lo recompensaré.match
sumisión sarcásticaifelse
usando este consejo: codegolf.stackexchange.com/a/97826/59530match
: SJalea ,
98 bytesPruébalo en línea!
Un programa completo que toma tres argumentos:
[[table], incomparables]
,x
,nomatch
en ese orden.fuente
C # (compilador interactivo de Visual C #) , 60 bytes
Pruébalo en línea!
fuente
Ruby , 44 bytes
Indexado a cero.
Pruébalo en línea!
fuente
R , 79 bytes
Pruébalo en línea!
R , 66 bytes
Combinando mi solución con partes de la solución de Nick .
Pruébalo en línea!
fuente
Japt , 14 bytes
Intentalo
fuente
Python 3 , 60 bytes
Pruébalo en línea!
fuente
R has 1-based indices, but a consistent alternative-based indices are acceptable.
Por lo tanto, puede sacar-~
y simplemente usar 0-indexing para -1 bytes.t.index(v)if v in{*t}-{*i}else n
tiene exactamente el mismo bytecount que suv in{*t}-{*i}and-~t.index(v)or n
solución actual , jajaPowerShell , 63 bytes
Pruébalo en línea!
0 indexado
fuente
JavaScript (ES6), 53 bytes
Pruébalo en línea!
fuente
Perl 6 , 45 bytes
Pruébalo en línea!
Bloque de código anónimo que toma la entrada curry, como
f(table, nomatch, incomparables)(x)
y devuelve las coincidencias 0 indexadas.Explicación:
fuente
$_∉d&&b.antipairs.Map{$_}||c
lo que hubiera funcionado bien, pero por el valor falso de 0. El primero ($ _: k) es una gran solución que evita los largos pares de pares. Coacción de mapas.Carbón , 14 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. 1 indexado. Explicación:
fuente
C (gcc) , 125 bytes
1 indexado.
Dado que no puedo usar un valor centinela en las matrices pasadas, necesito dar los límites de la matriz para cada matriz.
Pruébalo en línea!
fuente
Adjunto , 39 bytes
Pruébalo en línea!
Verificación bastante simple. Tenga en cuenta que el orden del argumento difiere del del partido; específicamente,
x
es el último argumento en lugar del primero, y corresponde al_4
fragmento anterior.Explicación
fuente
Haskell,
5756 bytesOrden de los argumentos es:
table
,nomatch
,incomparables
,x
.Pruébalo en línea!
fuente
05AB1E , 7 bytes
0 indexado. Las entradas están en el orden:
incomparables, table, x, nomatch
.Pruébalo en línea.
Explicación:
fuente