Isso foi inspirado por uma função que adicionei recentemente à minha linguagem Add ++ . Portanto, enviarei uma resposta curta em Add ++, mas não a aceitarei se vencer (não seria justo)
Você não odeia quando pode multiplicar números, mas não seqüências de caracteres? Então você deve corrigir isso, certo?
Você deve escrever uma função ou programa completo que use duas cadeias não vazias como entrada e saída da versão multiplicada.
Como você multiplica seqüências de caracteres? Eu vou te dizer!
Para multiplicar duas cadeias, você pega duas e compara cada caractere. O caractere com o ponto de código mais alto é então adicionado à saída. Se forem iguais, basta adicionar o caractere à saída.
Não é garantido que as cordas tenham o mesmo comprimento. Se os comprimentos forem diferentes, o comprimento da sequência final será o comprimento da sequência mais curta. A entrada sempre será minúscula e pode conter qualquer caractere no intervalo ASCII imprimível ( 0x20 - 0x7E
), excluindo letras maiúsculas.
Você pode produzir em qualquer formato razoável, como string, lista etc. Seja sensato, números inteiros não são uma maneira sensata de produzir neste desafio.
Com entradas de hello,
e world!
, é assim que funciona
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
Portanto, a saída final para hello,
e world!
seria worlo,
!
Mais casos de teste
(sem etapas)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
Este é um código de golfe, então o código mais curto vence! Luok!
Respostas:
Haskell, 11 bytes
Experimente online!
Não há muito o que explicar.
fonte
zipWith
não é muito estranho. É uma primitiva funcional bastante comum. A idéia de "compactar" duas listas juntas surge em muitos problemas e, quando você faz isso, geralmente deseja aplicar alguma função aos itens de 2 elementos resultantes, daí a parte "com".05AB1E , 4 bytes
Usa a codificação 05AB1E . Experimente online!
fonte
ø€à
deveria funcionar, mas não funciona.Perl 6 , 22 bytes
Como bônus, ele aceita qualquer número de multiplicandos, não apenas dois.
fonte
Japonês , 16 bytes
Teste online! Recebe a entrada como uma matriz de duas seqüências.
A falta de mínimos e máximos embutidos prejudica Japt aqui, mas ainda consegue obter uma pontuação um tanto decente ...
Explicação
fonte
Gelatina , 5 bytes
Experimente online!
Como funciona
Exemplo
Let s = misturados e t = negrito .
ż
rendimentos["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Os últimos três elementos são caracteres.«
é o vetor diádico vetorizante, portanto ele produz['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
remove exatamente uma ocorrência do n ° de caracteres no segundo agrupamento do n th cadeia / caracter na primeira matriz, obtendo-se["b", "o", "l", "n", "", "", ""]
.œ-
é o átomo de subtração multiset , e o rápido o"
torna vetorizado.Quando impresso, simplesmente lê boln .
fonte
PHP> = 7.1, 52 bytes
Sandbox do PHP Online
PHP> = 7.1, 69 bytes
Sandbox do PHP Online
PHP> = 7,1, 70 bytes
Sandbox do PHP Online
fonte
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Alice , 8 bytes
Experimente online!
Explicação
Alice também possui esse operador (que chamei de sobreposição ), mas não limita a saída ao comprimento da string mais curta (em vez disso, os caracteres restantes da string mais longa são anexados). No entanto, ele também tem um operador para truncar a mais longa das duas seqüências para o comprimento da mais curta.
fonte
Retina , 28 bytes
Experimente online!
Explicação
Ele
{
informa ao Retina para executar o programa inteiro em um loop até que ele não altere a string de trabalho.O
torna isso um estágio de classificação que classifica linhas não vazias por padrão. A^
opção reverte o resultado. Com efeito, obtemos um tipo inverso das duas linhas, se não estiverem vazias, colocando a linha com o caractere principal maior no topo.Descarte linhas vazias, se houver alguma.
Se restar apenas uma linha, uma das linhas estava vazia e removemos a outra também para interromper o processo.
Muitas configurações estão acontecendo aqui. Isso corresponde (
M
) ao primeiro caractere da string de trabalho (^.
), retorna (!
), imprime-o sem um avanço de linha à direita (\
) e depois reverte a string de trabalho para seu valor anterior (*
). Em outras palavras, simplesmente imprimimos o primeiro caractere da string de trabalho (que é o caractere inicial máximo) sem realmente alterar a string.Finalmente, removemos o primeiro caractere de cada linha, para que a próxima iteração processe o próximo caractere.
fonte
G`.
é desnecessário, embora isso produza uma nova linha extra que você pode remover usando^.+¶$
ou prefixando\
a no início da resposta.\
).C, 58 bytes
Experimente on-line
fonte
f(s,t)char*s,*t;{
dá o mesmo comprimento.JavaScript (ES6),
4745 bytesConvenientemente
c>b[i]
retorna falso após o final deb
. Editar: salvou 2 bytes graças a @ETHproductions.fonte
Gelatina , 6 bytes
Experimente online!
fonte
żṢ€Ḋ€
eżṢ€ZṪ
ambos salvam um byte.Mathematica, 78 bytes
Já existe outra resposta no Mathematica . Esta resposta recebe a entrada como uma lista de cadeias, portanto
/@
pode ser usada em#
vez de{##}
. E podemos apenasMap
o nome longo da função no objeto, em vez de atribuí-lo às variáveis. (de fato, cada nome de símbolo interno do Mathematica é usado no máximo uma vez na função)fonte
Java 8,
12412011763 bytes-4 bytes graças a @ Khaled.K .
-3 bytes graças a @Jakob .
As entradas são duas matrizes de caracteres e param com um
ArrayIndexOutOfBoundsException
.Explicação:
Experimente aqui.
fonte
C #,
8178 bytesC # está implícito
char
naint
conversão (porque achar
é na verdade uma parteint
inferior), o que é bom e, em vez de procurar a string mais curta, tente até a falhafonte
a=>b=>
compilando para aFunc<string, Func<string, string>>
. Você pode remover as chaves ao redor do loop for para economizar 2 bytes.C# has implicit char to int conversion
é verdadeira porque achar
é uma parteint
inferior.sizeof(int) == 4
massizeof(char) == 2
.MATL , 8 bytes
Entrada é uma matriz de células de cadeias, no formato
{'abcd' 'efg'}
Experimente online!
Como um aparte, isso também funciona para mais de duas seqüências .
Explicação
Considere entrada
{'blended' 'bold'}
. A pilha é mostrada de cabeça para baixo, com os elementos mais recentes abaixo.fonte
R, 103 bytes
Código:
Casos de teste:
fonte
Python 2 ,
474434 bytes-3 bytes graças a musicman523. -10 bytes graças ao Blender.
Recebe entrada como uma lista de seqüências de caracteres.
Experimente online!
fonte
V ,
28, 24, 21 bytesExperimente online!
Hexdump:
Três bytes salvos graças a @ nmjcman101!
Explicação:
fonte
dG
necessário? Todas as novas linhas não são removidasÍî
?CJam , 12 bytes
Entrada é uma lista de duas cadeias. O programa sai com um erro (após produzir a saída correta) se as duas seqüências tiverem comprimentos diferentes.
Experimente online!
Explicação
fonte
Clojure, 31 bytes
Yay para a composição da função :) Retorna uma sequência de caracteres em vez de uma string, mas eles geralmente funcionam da mesma maneira no Clojure, exceto ao imprimir ou corresponder a expressões regulares.
Infelizmente
max
não funciona com personagens.fonte
max
não funciona, masmax-key
funciona.#(map(partial max-key int)% %2)
É exatamente a mesma contagem de bytes, no entanto.(ffirst (sort-by second ...)
.Javascript (ES2015),
666349 bytesExplicação:
Versões prévias:
fonte
Retina ,
5536 bytesExperimente online! Explicação: Uma linha é prefixada para conter o resultado. Enquanto as duas strings ainda têm caracteres restantes, as entradas são classificadas e o caractere inicial com o ponto de código mais alto é movido para o resultado enquanto o outro caractere principal é excluído. Finalmente, o resultado é impresso.
fonte
Casca , 2 bytes
Experimente online!
"Ungolfed" / Explained
Faz uso
zip f
disso trunca a lista mais curta, de modo que sempre haja dois argumentos paraf
, por exemplozip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:fonte
Kotlin,
504137 bytes-9 bytes com sintaxe de referência da função -4 bytes com função de extensão
Se s e x estiverem no escopo e não em uma função, esse método terá apenas 16 bytes
Demo
fonte
PowerShell, 75 bytes
Salve como arquivo .ps1 e execute
Anteriormente, 78 bytes:
fonte
J, 25 bytes
explicação
metade dos bytes é resolvida, garantindo que as duas entradas tenham o menor comprimento de entrada (adoraria ver uma melhoria nessa parte, se alguém tiver uma):
<.&#
é o mínimo dos dois comprimentos e{."1,:
leva muitos caracteres de ambas as linhas da tabela de 2 linhas que consistem na sequência esquerda empilhada na parte superior direita.Use o verbo Under
&.
para converter cada caractere em seu índice ascii, use o máximo dos dois números e depois converta novamente em caracteres.Experimente online!
fonte
[:>./&.(3&u:)<.&#$&>;
u:
foi um TIL para mim.Coleções Java 8 + Eclipse,
7064 bytesa
eb
sãoMutableList<Character>
das coleções eclipse.fonte
Adicionar ++ , 8 bytes
Experimente online!
Nas versões 0.4 a 1.11,
^
expoente dois números ou "multiplica" duas seqüências de caracteres, dependendo do tipo dos argumentos.fonte
Mathematica, 102 bytes
entrada
fonte
L@a~Min~L@b
salva um byteAPL (Dyalog) , 22 bytes
Toma duas (ou mais!) Seqüências de caracteres como argumento correto.
Experimente online!
{
uma função anônima em que o argumento correto é representado por ⍵⎕UCS
os símbolos a partir da L nicode C haracter S et que correspondem ao⌈⌿
valor máximo em cada coluna de⎕UCS
os pontos de código a partir da L nicode C haracter S et pela↑
matrified (matriz da lista de strings)⍵
argumentos↑¨⍨
cada um tampado no⌊/
mínimo de≢¨
os comprimentos⍵
dos argumentos}
fonte