Inspiração. * Não acredito que não tivemos esse desafio antes:
Tarefa
Dadas uma ou mais seqüências de caracteres ASCII imprimíveis, intercale-as usando um caractere de cada sequência, ciclicamente, até ficar sem caracteres. Se uma sequência ficar sem caracteres antes das outras, pule essa sequência a partir de então.
Exemplos
SIMPLE
dá SIMPLE
POLLS
e EPEES
dáPEOPLELESS
LYES
e APRONS
dáLAYPERSONS
ABCDE
e a c
e 123 567
dáAa1B 2Cc3D E567
"\n$?*
e
(string vazia) e ,(.)"
(espaço à direita) fornece ",\(n.$)?"*
(espaço à direita)
* Existem soluções mais curtas de APL.
Respostas:
Geléia , 1 byte
Experimente online!
O "transpose" embutido fará exatamente isso com uma lista de strings.
fonte
z⁶
.z
é "transpor para a esquerda, preenchendo com a direita";⁶
é um espaço.;"
(concatenação por elementos) resolveria a tarefa sem um built-in.Python 2,
101898669 bytesEspero conseguir colocar isso em um lambda de alguma forma, encurtando-o, tornando-o recursivo.Não é o ideal porque você espera que a transposição seja mais curta, infelizmente não é (pelo que eu consegui criar até agora).Soluções antigas:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
graças a mathmandan por me fazer sentir burra;) me salvou um monte de bytes! (em uma solução antiga)
fonte
while any(w):
? Strings vazias são falsey em Python.f=
.[]
desativar a chamada recursiva, deixando-af(x[1:] for x in s)
, o que a torna uma compreensão do gerador, que age da mesma forma que uma lista nesse contexto.Perl 6 ,
3432 bytesUm lambda que pega uma matriz de cadeias como argumento e retorna uma cadeia.
( Experimente online )
fonte
@_
vez de$_
CJam , 4 bytes
Experimente online!
Também podemos escrever uma função sem nome para 4 bytes, que espera uma lista de strings no topo da pilha:
Experimente online!
fonte
Pitão - 3 bytes
Muito simples, adicionará expansão mais tarde, no celular.
Suíte de teste
fonte
JavaScript (ES6),
5246 bytesRecebe entrada como uma matriz de sequências e saídas como uma única sequência.
Snippet de teste
fonte
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 bytes
Experimente em Ideone. Uso:
Sem usar um build-in: (
3834 bytes)Experimente em Ideone. 4 bytes de desconto graças ao Zgarb! Uso:
fonte
f a=a
para salvar um byte, porque ambos[]
têm um tipo diferente ... tão perto.C,
11484 bytes-20 bytes para não calcular o comprimento.
Aceita matriz de ponteiros de caracteres e requer que o último item seja um ponteiro nulo (consulte o uso).
Ungolfed e uso:
fonte
malloc
ereturn
antes e este foi mais do que apenas imprimirPHP,
6867 bytesLoops sobre argumentos de linha de comando. Corra com
-r
.Após a espira interna,
$f
é1
quando todas as cordas são terminado,0
else (bit a bit&
moldes""==$c
para int).Próxima iteração do loop externo: copiar
$f
para$k
(salva um byte de$k=0
) e alternar$f
:Quando todas as strings estiverem concluídas,
$f
agorafalse
e o loop será interrompido.fonte
Retina , 13 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
Explicação
Isso é baseado na técnica de transposição padrão na Retina. Classificamos (
O
) todos os caracteres sem avanço de linha (.
), por ($#
) o número de caracteres à frente deles na mesma linha ($.%`
), ou seja, sua posição horizontal.O segundo estágio simplesmente remove os feeds de linha da entrada.
fonte
Java,
19 + 155 = 174160Ungolfed:
Saída:
Primeira modificação: declaração de string mesclada para salvar alguns bytes. Removido
import
, foi usado pelomain()
método (não mostrado aqui) que também era necessárioLinkedList
. É menos bytes para referenciarQueue
diretamente.fonte
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 bytes
Golfe
Função anônima que recebe uma matriz de seqüências de caracteres.
Tenho certeza de que isso poderia ser mais praticado, mas ainda é cedo. Em cada iteração, pegamos a i-ésima letra de cada sequência especificada e a anexamos à nossa sequência final, uma de cada vez. O PHP apenas lança avisos se acessarmos bits de strings que não existem, então tudo bem. Paramos apenas quando nenhuma alteração foi feita após repetir todas as strings uma vez.
Eu sinto que o uso de
$d
pode ser jogado mais, mas é cedo. : Pfonte
Na verdade ,
76 bytesSugestões de golfe são bem-vindas! Experimente online!
Edit: -1 byte graças ao pelicano Teal.
Ungolfing
fonte
Z♂#Σ
paraZ♂Σ
todas elas. Obrigado pela dica: DJavaScript (ES6), 46 bytes
fonte
Python 2 , 58 bytes
Experimente online!
fonte
lambda *m
?J , 13 bytes
Experimente online!
Com base na inspiração para esta pergunta.
Outra maneira de fazer isso leva 27 bytes, mas opera usando transposição. A maioria dos bytes deve lidar com os zeros adicionados automaticamente do preenchimento.
Explicação
fonte
Utilitários Bash + GNU, 55
E / S via STDIN (separado por linha) e STDOUT.
O
sed
formata cada linha a uma substituição processo de bater . Estes são entãoeval
editadospaste
para fazer a real intercalação.tr
em seguida, remove novas linhas e guias desnecessárias.Ideone.
fonte
PHP, 63 bytes
Nota: usa codificação IBM-850
Execute assim:
Explicação
fonte
~■
(negado binário 254) em vez de"\x1"
(binário 1).$$
!Python 3, 75 bytes
Eu sei que o outro Python é mais curto, mas esta é a primeira vez que usei
map
na minha vida, por isso estou muito orgulhoso dissofonte
C,
7571 bytesApenas limitação é o comprimento da saída. Atualmente é 99, mas pode ser facilmente esticada para 999 (+1 byte).
Ungolfed:
fonte
Oracle SQL, 195 bytes
Recebe sua entrada de uma tabela nomeada
i
com colunasa
(contendo a sequência) eo
(ordem da sequência):Explicação:
Estamos explorando
CONNECT BY
para dividir as strings em cada um dos personagens que as compõem.PRIOR SYS_GUID()
sendoNOT NULL
garante que não acabemos presos em um loop.Em seguida, concatenamos os caracteres únicos,
LISTAGG
mas os embaralhamos com umaORDER BY
cláusula, ordenando-os primeiro pela posição na string original e somente depois pela string da qual eles vieram.Não é tão curto quanto as outras respostas, mas SQL não é realmente uma linguagem de manipulação de string :)
fonte
Python 2,
12896Eu esperava não precisar usar ferramentas
Ungolfed
fonte
Perl 5 , 28 bytes
Código de 26 bytes + 2 para
-0n
.Experimente online!
fonte
R , 73 bytes
Experimente online!
Explicação: muito simples (mas detalhada), basta percorrer a impressão do
i
caractere daj
sequência th. Felizmente,substr
retorna uma string vazia se receber uma entrada fora do intervalo.fonte
Python, 112 bytes
fonte
x
ey
de onde?Perl 5 , 53 bytes
Experimente online!
Método
Cria uma matriz bidimensional em que o número de linhas é igual ao comprimento da string mais longa e o número máximo de colunas é igual ao número de strings. Em seguida, imprima cada linha da matriz sem espaçamento.
fonte
TXR Lisp , 20 bytes
Corre:
Como a
weave
função é lenta, ela retorna uma lista, e é por isso que precisamos forçar o resultado a uma string. Por ser preguiçoso, pode tecer sequências infinitas. Por exemplo, podemos tecer os números naturais pares e ímpares, que são listas preguiçosas infinitas:fonte
K (oK) ,
3529 bytesSolução:
Experimente online!
Exemplo:
Explicação:
Use a indexação de segundo nível para obter índices de 0 a max (comprimento da lista nivelada) em todas as listas de entrada. Qualquer indexação além do limite da sub-lista retornará um valor nulo. Virar (gira 90), achatar e retirar os resultados não nulos.
Notas:
i$
) para obter nulos úteis, pois space () é considerado nulo para uma lista de caracteres, o que significa que você não pode diferenciar nulos de espaços válidos.
fonte
Jq 1.5 , 49 bytes
Explicação
Sample Run
Experimente online
fonte