Dada a entrada de uma lista de palavras, imprima as palavras com suas letras dispostas na diagonal:
p
r
o
p g
u r
z a
a z m
n l m
d e i
c s n
o g
d
g e
o
l
f
(A descrição acima deve ser a saída da entrada programming puzzles and code golf
.)
Para ser mais preciso, cada palavra começa na primeira coluna e três linhas abaixo da palavra anterior, e cada letra sucessiva move uma coluna para a direita e uma linha para baixo.
A entrada pode ser fornecida como uma única sequência de palavras, separada por exatamente um espaço, ou como uma lista / matriz de palavras. As palavras serão compostas apenas por letras minúsculas a-z
, e sempre terão pelo menos um caractere.
A saída pode ser uma única sequência, uma matriz de linhas ou uma matriz de matrizes de caracteres. O espaço em branco à esquerda ou à direita não é permitido, exceto por uma única nova linha à direita.
Mais casos de teste:
a bcd efgh i j
a
b
c
d
e
f
g
i h
j
x
x
verylongword short
v
e
r
s y
h l
o o
r n
t g
w
o
r
d
Como esse é o código-golfe , o código mais curto em bytes vencerá!
Respostas:
Vim,
85, 76, 66, 52 pressionamentos de tecla / bytesQuando olhei pela primeira vez para esse desafio, pensei "Isso é perfeito para o vim!" E então, quando eu tentei, tudo deu errado. Aqui está, em toda a sua glória bagunçada:
Experimente online, graças ao intérprete V (compatível com versões anteriores).
Explicação:
No começo, pensei que poderia fazer essa versão lindamente simples de 37 bytes:
Infelizmente, não é assim tão simples. Vamos levá-lo linha por linha:
Isso habilita um recurso chamado 'edição virtual'. Permite que o cursor se mova para colunas que ainda não existem. Essa resposta seria basicamente impossível sem ela.
Agora precisamos separar as palavras em linhas diferentes. Então, substituiremos cada espaço por 3 novas linhas. Como esse é um comando ex, podemos executá-lo simultaneamente com nosso último comando ex
:se ve=all
, separando os dois com uma barra.Agora o buffer fica assim:
Aqui é onde a diversão começa. Configuramos a macro recursiva tradicional com:
qq
e, em seguida, chamamos isso:Em seguida, finalizamos a macro recursiva com
@qq@q
. Neste ponto, temos todas as diagonais, só precisamos fazer um pouco de limpeza.fonte
Turtlèd ,
2826 bytesOh, parece que estou batendo em um idioma projetado especificamente para jogar golfe. Este é um grande dia.
Experimente online!
Explicação
(escrever significa escrever para a célula na grade, char apontado significa char na entrada que o ponteiro da string aponta)
observe o espaço à direita.
A entrada também precisa de espaço à direita. como o python pode fazer uma lista, é como fazer uma lista em Turtlèd
fonte
MATL , 28 bytes
Input é uma matriz de células, com vírgulas como separadores opcionais:
ou
Experimente online! Ou verifique todos os casos de teste: 1 , 2 , 3 , 4 .
Explicação
Considere a seguinte entrada como um exemplo:
Você pode visualizar os resultados parciais (conteúdo da pilha) inserindo o símbolo de comentário
%
em qualquer ponto do código. Por exemplo, visualize o conteúdo da pilha após a quarta função (&n
).fonte
JavaScript (ES6),
11810984 bytesRecebe a entrada como uma matriz de palavras. Retorna uma matriz de matrizes de caracteres.
Versão alternativa, 109 bytes
Retorna uma string.
Mostrar snippet de código
fonte
Lisp comum,
673668597 bytesSolução terrível, eu sei. Provavelmente vou editar isso mais depois de dormir.
Uso:
Isso percorre todas as palavras da lista fornecida e adiciona caracteres apropriados à linha atual. O preenchimento apropriado é fornecido pelo meu uso subpar de
format
.Nota: Eu sou novo no Common Lisp, mas sei o suficiente para perceber que isso poderia usar muitas melhorias.
fonte
C #, 336 bytes:
Golfe:
Ungolfed:
Testando:
fonte
Func<string[], string>
s=>{int i=0,x=0,y=0,r=0,l=s.Length,q=2*(s.Max().Length+l)+1,j;var a=new char[q,q];for(;i<l;i++){y=r;for(j=0;j<s[i].Length;)a[y++,x++]=s[i][j++];x=0;r+=3;}var o="";for(;x<q;x++){var t="";for(y=0;y<q;)t+=a[x,y++];o+=t==string.Join("",Enumerable.Repeat('\0',q))?"":(t.TrimEnd('\0')+"\n");}return o;};
using System.Linq;
i
ej
à declaração int no topo e movendo-se alguns dos++
que eles são utilizados no último uso da variávelPython 2, 146 bytes
Nota: os recuos das duas últimas linhas são
<space>
e<tab>
, o que economiza um byte, pois não preciso recuar duas vezes.A entrada deve ser inserida como uma matriz de seqüências de caracteres da seguinte forma:
["hello", "world"]
ou['hello', 'world']
. Saída é uma matriz de matrizes de caracteres.Provavelmente existe uma maneira melhor de fazer isso ...
EDIT Agradecimentos à maçaneta da porta por apontar um colchete fechado faltando. Coloquei antes
*k...
da terceira linha.fonte
Mathematica, 146 bytes
Estou desapontado com esse número, mas tudo bem.
Define uma função anônima que pega uma lista de palavras (por exemplo
{"this","that","these"}
) e retorna uma matriz bidimensional de caracteres. Para visualizar em forma de grade, adicione a//Grid
no final.Converte as strings em uma matriz, adiciona linhas extras, transpõe a matriz, precede os turnos necessários e depois transpõe novamente.
Exemplo de resultado (formatado como grade):
fonte
Gelatina , 24 bytes
Experimente online!
Quão?
fonte
Python 2, 182 bytes
Um pouco longo, mas no lado positivo, ele retorna uma sequência sem espaço em branco à direita em cada linha e sem espaço em branco à direita ou retorna no final; restrições que algumas outras entradas não obedecem.
Uma lista de palavras é passada para a função; alguns 'espaços em branco' são adicionados a esta lista e, em seguida, o algoritmo mapeia uma linha, par de colunas para um wordNumber, characterNumber na lista expandida. (Isso é um pouco da inversa da estratégia usual vista em outras soluções).
Se permitirmos o espaço em branco à direita em todas as linhas, exceto a última, podemos melhorar um pouco (163 bytes):
fonte
q / kdb +,
13010994908684 bytesSolução:
Exemplos:
Explicação (não destruída):
A essência básica é criar um monte de strings de comprimento igual a partir da string de entrada, girá-los (girá-los) e adicionar espaços em branco apropriados para obter algo parecido com isto:
que é invertido novamente e impresso em stdout.
Aqui está um detalhamento linha a linha do conceito:
Notas:
Algumas maneiras de eliminar alguns (11) bytes fáceis se realmente quisermos :
f:
e deixando como uma função anônima-1
e;
e retornando uma lista de strings em vez de imprimir para stdoutEditar% s:
rtrim
para encontrar o comprimento máximo a ser preenchido, removendo a necessidade de armazenarC
variáveismax count each
função lambdaa
que é criada uma vez e usada duas vezesraze
função lambda para salvar umraze each
(+)
como abreviação paraflip
fonte
Carvão ,
169 bytesMinha primeira resposta de carvão. Graças a @DLosc pela sugestão
P
e, emM
vez de usarS
eJ
(Jump), volte para o início da linha (e três para baixo).Experimente online (detalhado) ou Experimente online (puro) .
Explicação:
Faça um loop enquanto ainda houver uma próxima string de entrada:
Imprima esta sequência sem mover o cursor na direção inferior direita:
E então mova três posições para baixo para a próxima iteração:
fonte
θ
variável representa a primeira entrada, então apenas atribuo a entrada de teste a essa variável no cabeçalho e depois escrevo o restante do código, para que você possa se livrar daα
variável e iterar nos itens divididos deθ
. Experimente online! (Não-concorrente devido aos principais espaços).Japonês
-Rx
,171613 bytesRecebe a entrada como uma matriz de palavras. Se o espaço em branco à direita em cada linha for permitido, os 4 últimos caracteres poderão ser removidos para vincular à solução de carvão vegetal.
Experimente ou execute todos os casos de teste
Explicação
fonte
K4 , 58 bytes
Solução:
Exemplos:
Explicação:
Cordas do teclado direito para que tenham o mesmo comprimento, transponham, juntem
" "
-se ao teclado esquerdo para gerar diagonais e, em seguida, teclado direito para corrigir comprimentos e voltar a transpor. Pega uma lista de cadeias e retorna uma lista de cadeias. Provavelmente jogável, mas ainda mais curto que minha solução q / kdb +.fonte
Perl 6 , 73 bytes
Experimente online!
O argumento de entrada é uma lista de palavras. A saída é uma matriz de matriz de caracteres.
fonte
PHP , 100 bytes
Experimente online!
fonte