(não encontraremos Find
nem capturamos um tryCatch
)
Esta é a parte dois de uma série de várias partes da implementação de algumas funções R interessantes. A primeira parte pode ser encontrada aqui .
A tarefa:
Você deve implementar a match
função de R no menor número possível de bytes.
Entrada:
x
, uma lista / matriz possivelmente vazia de números inteirostable
, uma lista / matriz possivelmente vazia de números inteirosnomatch
, um único valor inteiroincomparables
, uma lista / matriz possivelmente vazia de números inteiros
Saída:
- uma única matriz / lista de números inteiros
O
de comprimento igual ax
, em que cada valorO[i]
representa:- O índice
j
do primeiro valor emtable
quetable[j]==x[i]
nomatch
, indicando que nenhum valor emtable
é igual ax[i]
OR quex[i]
está na lista deincomparables
.
- O índice
Casos de teste
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]
Mais casos de teste podem ser gerados conforme necessário.
Regras adicionais:
- R possui índices baseados em 1, mas índices consistentes baseados em alternativas são aceitáveis. Portanto, você pode usar índices que começam em 3 ou 17 ou qualquer outra coisa, mas isso deve ser consistente e deve ser indicado na sua resposta.
- Se você escolheu um idioma que tenha isso embutido, implemente também sua própria solução.
- As explicações são apreciadas.
Isso é código-golfe , então a solução mais curta em bytes vence!
code-golf
array-manipulation
Giuseppe
fonte
fonte
4
está dentroincomparables
, portanto não pode ser correspondido. Se o seu idioma não suportar números negativos, não há problema em exigir números não negativos, mas indique essa suposição no seu envio.make
.Respostas:
Geléia ,
108 bytes-2 graças a Erik, o Outgolfer
Um programa completo que aceita quatro argumentos de linha de comando,
incomparables nomatch table x
que imprime uma representação Jelly * da lista dematch
resultados da função de R.Experimente online!
Quão?
por exemplo, com
incomparables nomatch table x
=[1,4], 2, [2,4], [4,3,2,1,0]
:* Uma lista vazia é representada como nada, uma lista da décima primeira é representada apenas como o item, enquanto outras listas são incluídas
[]
e delimitadas por,
fonte
R , 83 bytes
Experimente online!
Evita
match
,%in%
esetdiff
.fonte
R , 55 bytes
Nesse caso, o código não é usado
match
com todas as suas funcionalidades, é usado apenas como umaindex
função. Primeira resposta R, provavelmente incrivelmente ineficiente em bytes!Nota (obrigado a Giuseppe pela informação) :
%in%
esetdiff
também são implementados internamente usandomatch
, portanto, livrar-se completamente dessa função surpreendentemente útil resultará em uma confusão . Portanto, há uma recompensa de 150 representantes sem prazo para isso! (observe quesetdiff
é permitido)Experimente online!
ou...
R , 5 bytes
Experimente online!
fonte
%in%
ematch
; se você quiser encontrar uma boa resposta para o golfe sem nenhuma dessas funções (provavelmente horrível), eu recompensarei isso.match
submissão sarcásticaifelse
usando esta dica: codegolf.stackexchange.com/a/97826/59530match
: SGeléia ,
98 bytesExperimente online!
Um programa completo que leva três argumentos:
[[table], incomparables]
,x
,nomatch
nessa ordem.fonte
C # (compilador interativo do Visual C #) , 60 bytes
Experimente online!
fonte
Ruby , 44 bytes
Indexado a zero.
Experimente online!
fonte
R , 79 bytes
Experimente online!
R , 66 bytes
Combinando minha solução com partes da solução de Nick .
Experimente online!
fonte
Japonês , 14 bytes
Tente
fonte
Python 3 , 60 bytes
Experimente online!
fonte
R has 1-based indices, but a consistent alternative-based indices are acceptable.
Então você pode remover o-~
e apenas usar a indexação 0 para -1 bytes.t.index(v)if v in{*t}-{*i}else n
tem exatamente o mesmo bytecount da suav in{*t}-{*i}and-~t.index(v)or n
solução atual , hahaPowerShell , 63 bytes
Experimente online!
Indexado a 0
fonte
JavaScript (ES6), 53 bytes
Experimente online!
fonte
Perl 6 , 45 bytes
Experimente online!
Bloco de código anônimo que recebe a entrada com curry, gosta
f(table, nomatch, incomparables)(x)
e retorna as correspondências 0 indexadas.Explicação:
fonte
$_∉d&&b.antipairs.Map{$_}||c
que teria funcionado bem, mas pelo valor de falsey de 0. O primeiro ($ _: k) é uma ótima solução que evita os antipaires longos. Coerção do mapa.Carvão , 14 bytes
Experimente online! Link é a versão detalhada do código. 1 indexado. Explicação:
fonte
C (gcc) , 125 bytes
1 indexado.
Como não posso usar um valor de sentinela nas matrizes passadas, preciso fornecer os limites da matriz para cada matriz.
Experimente online!
fonte
Anexo , 39 bytes
Experimente online!
Verificação bastante simples. Observe que a ordem dos argumentos difere da ordem de correspondência; especificamente,
x
é o último argumento e não o primeiro e corresponde ao_4
snippet acima.Explicação
fonte
Haskell,
5756 bytesFim argumento é:
table
,nomatch
,incomparables
,x
.Experimente online!
fonte
05AB1E , 7 bytes
Indexado a 0. As entradas são na ordem:
incomparables, table, x, nomatch
.Experimente online.
Explicação:
fonte