Desafio
Dada uma string que descreve uma regra de corte e outra, corte as peças da segunda string usando a regra descrita pela primeira string.
Ambas as strings consistirão em letras a-z
ou A-Z
, qualquer que você escolher (elas não precisam ser representadas da mesma maneira). A maneira como a segunda string deve ser modificada é descrita abaixo:
Algoritmo
Pegue a primeira corda e imagine preencher as lacunas entre letras não adjacentes (crescentes) com =
; por exemplo, abcfg
=> abc==fg
. Em seguida, alinhe as duas cadeias e retorne todos os caracteres da primeira cadeia que não estejam acima de um sinal de igual. Por exemplo, dados abcfg
e qrstuvw
como entradas:
qrstuvw - Modify
abc==fg - Modifier
qrs--vw -> qrsvw
Se o modificador for mais curto após o preenchimento com sinais de igual, todos os caracteres finais na segunda sequência deverão ser incluídos. Se o modificador for mais longo, os caracteres finais serão ignorados.
Não é garantido que o modificador seja classificado.
Casos de teste
abcfg, qrstuvw -> qrsvw
abqrs, qwertyuiopasdfghjklzxcvbnm -> qwjklzxcvbnm
za, qr -> qr
azazaz, qwertyuioplkjhgfdsazxcvbnmnbvcxzasdfghjklpoiuytrewq -> qmn
Implementação de referência (usada para gerar casos de teste) -> TIO
Regras
- As brechas padrão se aplicam
- Você pode receber a entrada como duas strings, duas listas de caracteres, uma matriz de caracteres etc. (qualquer outro formato razoável é aceitável)
- Você pode imprimir como uma string ou uma lista de caracteres (ou algum outro formato padrão para strings)
- Como código é golfe , a resposta mais curta em bytes em cada idioma é declarada a vencedora do seu idioma. Nenhuma resposta será aceita.
- Qualquer uma das seqüências pode estar vazia.
Golfe feliz!
Inspirado pelos dois desafios recentes de Kevin Cruijssen, "Pronto, consertei (com fita / corda )"
There, I blew it up (with a segfault)
Respostas:
JavaScript (ES6),
8180 bytesRecebe entrada na sintaxe de currying
(modify)(modifier)
.Experimente online!
Comentado
fonte
Python 3 , 99 bytes
Experimente online!
fonte
05AB1E ,
2017 bytesExperimente online!
Calcula a distância ASCII entre cada caractere, acrescentando muitos espaços, se positivo. A distância negativa resulta no acréscimo de 0 espaços, conforme a especificação. Depois disso, eu pressiono todos os caracteres nos mesmos índices na sequência 2 que os espaços na primeira sequência manipulada.
90% de certeza de que posso perder outros 2 a 3 bytes por não usar espaços, mas pressionando o caractere no índice N. Ainda estou trabalhando nessa variante no momento ... Qual foi minha "melhor idéia":
05AB1E , 18 bytes
Experimente online!
Eu sinto como se estivesse faltando alguma coisa, se você ver melhorias em
ε1‚Z}
,ʒ²g‹}
ou0¸ì
lmk ...Ç¥ε1‚Z}ηO0¸ìè
tinha 13 anos, mas envolve quandon > |input_2|
ainput_2[n%|input_2|]
...fonte
IgÅ1«
, mas talvez haja uma maneira melhor?Stax , 15 bytes
Execute e depure
Esta é a representação ascii.
fonte
╟╣i
Gelatina , 14 bytes
Um link diádico que aceita o modificador como uma lista de caracteres à esquerda e a lista de caracteres a serem modificados à direita, retornando uma lista de caracteres.
Experimente online!
Quão?
fonte
¬
truque na minha resposta. :) (que tecnicamente têm o mesmo algoritmo, mas você tinha mais curto, bem feito!)¬
, mas esqueci quando fiz uma postagem no celular de uma tentativa de 13 bytes ainda não pronta.JavaScript (ES6), 79 bytes
Usa o mesmo algoritmo para calcular a distância entre as letras da minha última resposta .
Casos de teste:
Mostrar snippet de código
fonte
APL (Dyalog Classic) ,
353432 bytesExperimente online!
fonte
K (ngn / k) ,
272425 bytesExperimente online!
fonte
Haskell , 49 bytes
Experimente online!
fonte
Perl 5 , 45 bytes
Experimente online!
fonte
Ruby ,
6864 bytesExperimente online!
fonte
Carvão ,
2928 bytesExperimente online! Link é a versão detalhada do código. Com base na minha resposta para Lá, eu o consertei com fita adesiva. Explicação:
Nota: deve ter 28 bytes, masAnd
está quebrado no momento da escrita.fonte
Java 8, 117 bytes
Explicação:
Experimente online.
fonte