Dada uma sequência a ser codificada e um número de colunas (a chave), codifique a sequência da seguinte maneira:
Vou usar o exemplo Hello, world!
e a chave3
Primeiro, escreva o número de colunas:
1 2 3
Em seguida, escreva o texto começando no canto superior esquerdo, um caractere por coluna e, quando ficar sem colunas, vá para a próxima linha.
1 2 3
H e l
l o ,
w o
r l d
!
Agora, para obter seu texto codificado, leia o texto começando no canto superior esquerdo, mas desta vez, primeiro leia uma coluna e depois a próxima, e assim por diante. Se não houver um caractere no slot, coloque um espaço.
Hl r!eowl l,od
Observe que aqui há um espaço à direita.
Este é o seu texto codificado.
Outro caso de teste é Programming Puzzles and Code Golf SE
com a chave 5
:
1 2 3 4 5
P r o g r
a m m i n
g P u z
z l e s
a n d C
o d e G
o l f S
E
O texto codificado é PagzaooErm lndl omPedef gius rnz CGS
.
Mais casos de teste
"abcdefghijklmnopqrstuvwxyz", 2 -> "acegikmoqsuwybdfhjlnprtvxz"
"codegolf.stackexchange.com", 4 -> "cg.ccgoooskhemdltea. efaxnc "
"Pen Pineapple Apple Pen!!!", 7 -> "PeAeeapnnpp! pl!Ple!ie n P "
"1,1,2,3,5,8,13,21,34,55,89", 10 -> "18,,,5115,3,2,8,2931 ,, 53 ,4 "
Lembre-se, isso é código-golfe , então o código com o menor número de bytes vence.
Programming Puzzles and Code Golf
,3
.Respostas:
MATL , 4 bytes
Experimente online!
Isso é o mais direto possível.
e
é um built-in que reformula uma matriz em n linhas. Então, lemos na entrada1 como uma string e formamos uma matriz com as linhas input2 :Em seguida, transpomos para obter isso:
Depois disso, chamamos
1e
para remodelá-lo em uma única linha e exibi-lo como uma sequência.Como você pode ver neste programa de exemplo , a função "remodelar" adiciona convenientemente quantos zeros forem necessários para que a matriz seja um retângulo perfeito. Ao exibir como uma seqüência de caracteres, o MATL trata os zeros como espaços, portanto, ele preenche automaticamente o número necessário de espaços para nenhum trabalho extra.
fonte
Gelatina , 3 bytes
TryItOnline!
Quão?
fonte
PHP, 85 bytes
PHP, 90 bytes
fonte
Ruby,
786765 bytesVeja-o em eval.in: https://eval.in/668412
Ungolfed
fonte
Pitão - 5 bytes
Experimente online aqui .
fonte
Python 2, 46 bytes
A idéia é pegar a string de entrada, copiá-la
n
com o primeiro caractere removido e, em seguida, pegar todosn
os caracteres.Vejamos, por exemplo
s="abcdef", n=3
, onde o comprimento é múltiplo den
:O primeiro ciclo através da string leva todos os
n
caracteres do primeiro. Em seguida, cada ciclo subsequente muda um índice para a direita, porque o primeiro caractere é ignorado. Para garantir que o comprimento seja múltiplo den
, a cadeia inicial é preenchida com espaços.fonte
Japonês, 15 bytes
Teste online!
Japt possui um "todas as subseções de comprimento N" interno, mas nem "todas as subseções não sobrepostas" nem "todo enésimo caractere". De repente, há um buraco na minha vida ...
Explicação
fonte
Python 2, 58 bytes
Teste em Ideone .
fonte
def f(s,n):t=[*s,' '];del t[print(end=s[::n]):f(''.join(t),n-1):n]
, mas é muito ...JavaScript (ES6), 84 bytes
É uma solução recursiva.
fonte
R,
9281 bytesExperimente no R-fiddle
Isso acabou sendo uma dor de cabeça, porque R recicla automaticamente o vetor de entrada quando as linhas ou colunas especificadas na criação da matriz não são um múltiplo do comprimento da entrada. Portanto, temos que preencher o vetor com
-nchar(x)%%n
espaços antes de passá-lo para a função matriz.O último passo é apenas transpor a matriz e imprimi-la.
fonte
l=nchar(x)
? Você parece não estar usando eml
lugar algum. A funçãoel
é bastante a descoberta, +1.Perl, 61 bytes
54 bytes de códigos e
-F -pi
sinalizadores.Pega a sequência de entrada sem nova linha final e a chave deve ser colocada após o
-i
sinalizador:fonte
Mathematica,
4340 bytesGraças a milhas por economizar três bytes!
Função sem nome, recebendo dois argumentos, uma matriz de caracteres e um número inteiro; retorna uma matriz de caracteres. A maior parte do trabalho pesado é realizada pela
Thread
função, que (neste contexto) troca linhas e colunas.Partition
precisa ser chamado com alguns argumentos inúteis para que ele atenda ao quinto argumento" "
.fonte
Thread
também, em vez deTranspose
Join@@Thread@Partition[##,#2,1," "]&
Ruby, 89 bytes
Pontuação terrível, dicas apreciadas.
fonte
size
vez delength
para um byte.Perl, 87 bytes
Aceita dois argumentos como parâmetros e Uso:
fonte
Pitão, 40 bytes
Teste aqui
Provavelmente o código Pyth mais feio de todos os tempos, mas esta é minha primeira tentativa em Pyth.
Se alguém tiver dicas para melhorar meu golfe, por favor, deixe um comentário!
fonte
(-len(Z))%Q
, para que você possa substituí-lo+Q-*Q/lZQlZ
por%_lZQ
. (Alternativamente, você pode reorganizar+Q-*Q/lZQlZ
a+-*/lZQQlZQ
Não é mais curto, mas.+-*/
Parece legal;))Na verdade , 12 bytes
Sugestões de golfe são bem-vindas, especialmente se você puder descobrir uma maneira de jogar golfe para preencher espaços. Experimente online!
Ungolfing
Outra versão de 12 bytes
Nesta versão, a ordem das entradas é revertida, mas isso pode ser alterado se isso não for permitido. Sugestões de golfe são bem-vindas. Experimente online!
Ungolfing
fonte
Pyke, 10 bytes
Experimente aqui!
fonte
C #, 161 bytes
Eu sinto muitíssimo.
fonte
GolfSharp , (não competindo) 82 bytes
fonte
Groovy, 90 bytes
Preencher a entrada pelo teto do tamanho dividido em
n
pedaços.Obtenha a string preenchida como uma lista de caracteres.
Agrupe em n pedaços e transponha.
Resulta em:
fonte
Python 3, 48 bytes
fonte
PowerShell, 57 bytes
Script de teste:
Resultado:
fonte
SINCLAIR ZX81 / TIMEX TS-1000/1500 BASIC, 134 bytes BASIC tokenizados
O primeiro parâmetro
A$
é o valor da string que você deseja codificar e o segundoA
é o número de colunas que você deseja codificar. A variávelC
é usada para adicionar uma nova linha após osA
caracteres.As linhas 4 a 6, inclusive, imprimem os números das colunas na parte superior da área da tela.
A linha 7 adiciona uma nova linha (
"\r\n"
equivalente).As linhas 8 - 13 imprimirão cada caractere de
A$
.Este programa não requer uma expansão de RAM para funcionar.
fonte
K (OK) , 27 bytes
Solução:
Experimente online!
Explicação:
fonte
05AB1E (herdado) , 3 bytes
A versão herdada do Python é usada em vez da reescrita do Elixir, porque a nova versão não converte implicitamente seqüências de caracteres em caracteres ao usar
zip
, o que a versão antiga fez.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte