Arranque de um arranque de um arranque de um arranque . Voto a favor!
Sua tarefa, se você deseja aceitá-la, é escrever um programa / função que produz / retorna sua entrada / argumento¹. A parte complicada é que, se eu transpor seu código fonte², a saída / resultado também deverá ser transposta.
Você pode escolher que tipo de dados 2D sua solução pode aceitar. Por exemplo, uma lista de listas, uma matriz, uma lista de seqüências de caracteres, etc. Indique qual delas ele manipula. Você pode assumir que a entrada sempre será retangular e terá um comprimento de 1 ou mais ao longo de cada dimensão.
Para fins de transposição, as linhas curtas no seu código-fonte serão consideradas preenchidas com espaços à direita até que sejam retangulares; no entanto, esses espaços à direita não contribuem para o comprimento do código.
Como se trata de código-golfe , o objetivo é otimizar a contagem de bytes do código-fonte original (não a versão transposta).
Exemplos
Digamos que sua solução tenha uma matriz numérica e seu código-fonte seja
AB
DEF
e sua entrada / argumento é [[1,2],[3,4],[5,6]]
. Se eu escrever
AD
BE
F
em vez disso e execute-o, a saída / resultado deve ser [[1,3,5],[2,4,6]]
.
Digamos que sua solução use uma string separada por avanço de linha e seu código-fonte seja
ABC
e sua entrada / argumento é "96\n"
. Se eu escrever
A
B
C
em vez disso e execute-o, a saída / resultado deve ser "9\n6\n"
.
Respostas:
Python 3 + numpy, 45 bytes
Experimente online!
Graças a @EriktheOutgolfer apontando um bug da versão anterior
Transposto:
Experimente online!
As funções recebem uma matriz numpy como entrada e produzem uma matriz numpy. A solução não se baseia em comentários, como muitas outras soluções, mas explora seqüências de várias linhas.
fonte
\
lançará aSyntaxError
. Você precisa mover as aspas nas duas direções para corrigir isso.Geléia , 2 bytes
Entrada é uma lista de listas. Agradecemos a Luis Mendo e Nick Kennedy por melhorar a resposta.
Experimente online! Experimente transposto!
O programa transpõe a entrada duas vezes, retornando a entrada original. A versão transposta ignora a primeira linha e transpõe apenas uma vez.
fonte
R ,
54 bytesExperimente online!
Uma função R, a função de identidade
I
ou a função de transposiçãot
quando transposta. Rodapé no TIO mostra a saída de ambos.Obrigado a @RobinRyder por salvar um byte!
fonte
#
.C (GCC) ,
209205203201 bytesNormal
Experimente online!
Transposto
Experimente online!
fonte
Haskell , 51 bytes
Esta versão é válida, mas não será interrompida quando fornecida
[]
como entrada.Experimente online!
Transposto, 75 bytes
Experimente online!
Haskell , 51 bytes
Esta versão é válida, mas trava com a
[]
entrada da versão transposta.Experimente online! Transposto
Haskell ,
756757 bytesPelo menos 7 bytes salvos graças a Ørjan Johansen
Esta versão é
[]
emitida quando fornecida[]
como entrada.Experimente online!
Transposto
fonte
Python 3 , 51 bytes
Experimente online!
Baseado na abordagem de Joel . A entrada é a
tuple
detuple
s e a saída é azip
(convertida em umtuple
over TIO para melhor visibilidade).Transposto:
Experimente online!
fonte
Perl 6 ,
2011 bytesExperimente online!
Transposto
Experimente online!
Ambas as funções funcionam na lista de listas.
*[ ]
é um WhateverCode retornando a fatia zen de seu argumento, efetivamente a função de identidade.&[Z]
é o operador zip.fonte
Haskell,
185161 bytesExperimente online!
Transposto:
Experimente online!
Sem comentários, sem literais de string, apenas algumas definições de função adicionais.
Edit: -24 bytes graças a @ Ørjan Johansen.
fonte
PHP (7.4),
1148670 bytesMinha primeira experiência fazendo algo assim em PHP, deve haver uma maneira melhor que eu não possa ver! Input é uma matriz de matrizes como
[[1,2],[3,4],[5,6]]
.Normal:
Experimente online!
Transposto (espaço preenchido):
Experimente online!
fonte
Carvão , 19 bytes
Experimente online!Recebe entrada como uma matriz de seqüências de caracteres. Explicação:
A
imprime implicitamente a entrada explícita, enquanto¿⁰
é uma condicional, com0
como a condição, que é, portanto, sempre falsa.«
então inicia um bloco de código de carvão sem sentido que nunca é executado. (Pode ser possível remover alguns desses bytes, mas, nesse caso, não tenho certeza se o Charcoal analisará o programa corretamente.) Transposto, 17 bytes:Experimente online! Explicação: Muito parecido com o programa anterior, exceto pela adição do comando transpose
‖↗
.Eu tenho uma solução alternativa onde o programa original e o transposto são 18 bytes:
Experimente online! Explicação:
A
como acima;⊞υ
envia um valor para a lista vazia predefinida (que não afeta a saída);”y
inicia uma sequência arbitrária (termina no final do programa ou na correspondência”
). Transposto:Experimente online! Explicação:
A‖↗
como acima;⊞υ
como acima; a menor diferença aqui é que estou pressionando concatenações de cadeias menores, pois não quero repetir a”
.fonte
Flacidez Cerebral (BrainHack) ,
382375337 bytesSem comentários!
Experimente online!
Para a entrada, os dois primeiros números são as dimensões da matriz e o restante é o conteúdo da matriz. A saída é fornecida no mesmo formato.
Transposto
Brain-Flak (BrainHack) , 465 bytes
Experimente online!
fonte
Japonês , 2 bytes
Experimente | Transposto
fonte
JavaScript (Node.js) , 62 bytes
Experimente online!
Melhorado com um layout diferente
fonte
Haskell ,
153144 bytes(obrigado, Sriotchilism O'Zaic )
Experimente online!
Experimente transposto!
fonte
foldr
recursão para ambas as versões), não é assim.APL (Dyalog Unicode) , 7 bytes
Experimente online!
Transposto:
Provavelmente uma resposta bastante chata, mas de qualquer maneira aqui vai.
A definição da função embutida
{...}
pode abranger várias linhas. Nesse caso, cada linha é executada sequencialmente, mas qualquer linha sem uma atribuição←
retorna imediatamente seu valor calculado. Então a primeira função retorna⍵
enquanto a segunda retorna⍉⍵
.Uma resposta ainda mais chata seria o abuso de comentários:
APL (Dyalog Unicode) , 4 bytes
Nenhum TIO é necessário, eu acho ...
fonte
05AB1E , 3 bytes
Experimente online.
Experimente transposto.
Explicação:
Ao contrário de alguns dos outros idiomas, as novas linhas são simplesmente ignoradas no 05AB1E, portanto, não acho que seja possível um byter de 2 bytes (embora eu adoraria provar que estou errado).
fonte
Ruby , 35 bytes
Experimente online!
Quadril para ser quadrado! (Quase)
Aceita matrizes ruby como entrada (matrizes de matrizes)
fonte
Limpo , 64 bytes
Experimente online!
Experimente transposto!
fonte
Python 3 ,
11895 bytesEntrada e resultado são listas de tuplas.
Experimente online!
fonte
Wolfram Language (Mathematica) , 13 bytes
Experimente online! / Transposto
fonte
Cjam , 13 bytes
Experimente online!
Versão transposta:
Experimente online!
Formato de entrada
O formato de entrada é o formato padrão da matriz CJam:
[[1 2] [3 4]]
Nenhuma versão de falha, 12 bytes
A versão normal falha após a impressão da matriz. Uma versão que não trava seria:
Experimente online!
ou transposto:
Experimente online!
Provavelmente existem alguns bytes extras que podem ser salvos. Trabalhei acidentalmente na versão transposta primeiro, o que levou a algumas quebras de linha extras e já faz muito tempo desde a última vez que usei o CJam. Quaisquer melhorias são bem-vindas.
fonte
Zsh , 75 bytes
TIO: Transposto normal
O lixo abaixo da impressão principal é inofensivo, imprime um erro ao encontrar uma nova linha após
fa<
e sai. 86 bytes para remover esse erro.A versão transposta está aqui. Depois de imprimir, erros ao ver
<
no final de uma linha e sai.fonte
Encantos Rúnicos , 88 bytes
Experimente online!
Experimente transposto!
A entrada é separada por espaço para cada valor e separada por vírgula para cada linha (novas linhas são opcionais) e suporta seqüências de caracteres e números (diferentes de zero). Isso facilita a análise da entrada, pois a entrada é interrompida automaticamente por espaços e novas linhas. Então, por exemplo, a entrada:
Seria representado em forma de matriz aninhada como
[[1,2,3],[4,5,6],[7,8,9]]
. Suporte mínimo para matrizes irregulares (apenas a última pode ser curta), mas como as entradas devem ser retangulares, isso atende a esse requisito.A saída é representada no mesmo formato (a versão transposta sai com novas linhas, mas seus zero bytes são diferentes para usar um espaço). A versão normal possui um espaço à direita, a versão transposta possui uma vírgula à direita e uma nova linha (devido à dificuldade de determinar quando não há mais dados para imprimir).
A versão normal possui caracteres modificadores em lugares estranhos (por exemplo,
7̸0
), mas isso se deve à necessidade deles no lugar certo quando a fonte é transposta e a execução normal utiliza apenas a coluna de instruções à esquerda.Explicação
A explicação da fonte transposta será em uma forma não transposta. As setas representam a direcionalidade de IP na entrada e saída de vários blocos.
A entrada é lida e, quando um
,
caractere é encontrado, uma nova sub-pilha é enviada. Isso permite que cada pilha mantenha cada linha separadamente na memória. Entra na próxima seção a partir do topo.[0
(executado à esquerda) configura uma pilha vazia para atuar como um limite entre a primeira linha e a última linha e depois gira para a primeira pilha ({̹
) e inicia a impressão de elementos e pilhas rotativas. Oi!
não é executado e{̹L [0r
é executado apenas uma vez. Quando uma pilha de tamanho zero é encontrada, o loop sai.Quando a pilha vazia é encontrada, a
,
e newline são impressas e o loop de valor é digitado novamente. Ordem de execução (espelhado para facilitar a leitura), onde.
é um comando executado-un:\',$!.6ak$?....../
. Alterarak
para'<space>
imprimir espaços em vez de novas linhas.A execução é interrompida quando o programa tenta gravar de uma pilha vazia; é por isso que apenas a irregularidade da última linha funciona corretamente e por que há um rastro
,
na saída: a vírgula já foi impressa antes que o programa saiba que não há mais dados.fonte