Arnaque d'une arnaque d'une arnaque d'une arnaque . Allez upvote ceux-ci!
Votre tâche, si vous souhaitez l'accepter, est d'écrire un programme / une fonction qui génère / renvoie son entrée / argument¹. La partie délicate est que si je transpose votre code source², la sortie / résultat doit également être transposé.
Vous pouvez choisir le type de données 2D que votre solution peut accepter. Par exemple, une liste de listes, une matrice, une liste de chaînes, etc. Indiquez celle (s) qu'elle gère. Vous pouvez supposer que l'entrée sera toujours rectangulaire et aura une longueur de 1 ou plus le long de chaque dimension.
Aux fins de la transposition, les lignes courtes de votre code source seront considérées comme remplies d'espaces de fin jusqu'à ce qu'elles soient rectangulaires, cependant, ces espaces de fin remplis ne contribuent pas à la longueur de votre code.
Puisqu'il s'agit de code-golf , l'objectif est d'optimiser le nombre d'octets du code source d'origine (pas la version transposée).
Exemples
Disons que votre solution prend une matrice numérique et que votre code source est
AB
DEF
et son entrée / argument est [[1,2],[3,4],[5,6]]
. Si j'écris
AD
BE
F
au lieu de cela et exécutez-le, la sortie / résultat doit être [[1,3,5],[2,4,6]]
.
Imaginons que votre solution prenne une chaîne séparée par des sauts de ligne et que votre code source soit
ABC
et son entrée / argument est "96\n"
. Si j'écris
A
B
C
au lieu de cela et exécutez-le, la sortie / résultat doit être "9\n6\n"
.
Réponses:
Python 3 + numpy, 45 octets
Essayez-le en ligne!
Merci à @EriktheOutgolfer de signaler un bug de la version précédente
Transposé:
Essayez-le en ligne!
Les fonctions prennent une matrice numpy en entrée et produisent une matrice numpy. La solution ne repose pas sur les commentaires comme le font de nombreuses autres solutions, mais exploite à la place des chaînes multi-lignes.
la source
\
lancera unSyntaxError
. Vous devez déplacer les guillemets dans les deux directions pour résoudre ce problème.Gelée , 2 octets
L'entrée est une liste de listes. Merci à Luis Mendo et Nick Kennedy d'avoir amélioré la réponse.
Essayez-le en ligne! Essayez-le transposé!
Le programme transpose l'entrée deux fois, renvoyant l'entrée d'origine. La version transposée ignore la première ligne et ne transpose qu'une seule fois.
la source
R ,
54 octetsEssayez-le en ligne!
Une fonction R, soit la fonction d'identité, soit la fonction de
I
transpositiont
lorsqu'elle est transposée. Le pied de page sur TIO affiche la sortie des deux.Merci à @RobinRyder d'avoir enregistré un octet!
la source
#
.C (gcc) ,
209205203201 octetsOrdinaire
Essayez-le en ligne!
Transposée
Essayez-le en ligne!
la source
Haskell , 51 octets
Cette version est valide, mais ne s'arrêtera pas lorsqu'elle sera donnée
[]
en entrée.Essayez-le en ligne!
Transposé, 75 octets
Essayez-le en ligne!
Haskell , 51 octets
Cette version est valide, mais se bloque avec
[]
comme entrée pour la version transposée.Essayez-le en ligne! Transposée
Haskell ,
756757 octetsAu moins 7 octets économisés grâce à Ørjan Johansen
Cette version sort
[]
lorsqu'elle est donnée[]
en entrée.Essayez-le en ligne!
Transposée
la source
Python 3 , 51 octets
Essayez-le en ligne!
Basé sur l'approche de Joel . L'entrée est un
tuple
detuple
s, et la sortie est unzip
(converti en untuple
over TIO pour une meilleure visibilité).Transposé:
Essayez-le en ligne!
la source
Perl 6 ,
2011 octetsEssayez-le en ligne!
Transposée
Essayez-le en ligne!
Les deux fonctions fonctionnent sur une liste de listes.
*[ ]
est un WwhatCode renvoyant la tranche zen de son argument, en fait la fonction d'identité.&[Z]
est l'opérateur zip.la source
Haskell,
185161 octetsEssayez-le en ligne!
Transposé:
Essayez-le en ligne!
Pas de commentaires, pas de littéraux de chaîne, juste quelques définitions de fonctions supplémentaires.
Edit: -24 octets grâce à @ Ørjan Johansen.
la source
PHP (7.4),
1148670 octetsMa toute première expérience à faire quelque chose comme ça en PHP, il doit y avoir une meilleure façon que je ne peux pas voir! L'entrée est un tableau de tableaux comme
[[1,2],[3,4],[5,6]]
.Ordinaire:
Essayez-le en ligne!
Transposée (espace rembourré):
Essayez-le en ligne!
la source
Fusain , 19 octets
Essayez-le en ligne! Prend l'entrée comme un tableau de chaînes. Explication:
A
imprime implicitement l'entrée explicite, tandis que¿⁰
est un conditionnel, avec0
comme condition, qui est donc toujours fausse.«
démarre alors un bloc de code Charcoal vide de sens qui n'est jamais exécuté. (Il pourrait être possible de supprimer certains de ces octets mais dans ce cas, je ne sais pas si Charcoal analyserait correctement le programme.) Transposé, 17 octets:Essayez-le en ligne! Explication: à peu près la même chose que le programme précédent, à l'exception de l'ajout de la commande transpose
‖↗
.J'ai une solution alternative où le programme original et le programme transposé font 18 octets:
Essayez-le en ligne! Explication:
A
comme ci-dessus;⊞υ
envoie une valeur à la liste vide prédéfinie (ce qui n'affecte pas la sortie);”y
commence une chaîne arbitraire (se termine à la fin du programme ou de la correspondance”
). Transposé:Essayez-le en ligne! Explication:
A‖↗
comme ci-dessus;⊞υ
comme ci-dessus; la petite différence ici est que je pousse les concaténations de petites cordes, car je ne veux pas répéter le”
.la source
Brain-Flak (BrainHack) ,
382375337 octetsSans commentaires!
Essayez-le en ligne!
Pour l'entrée, les deux premiers nombres sont les dimensions de la matrice et le reste est le contenu de la matrice. La sortie est donnée dans le même format.
Transposée
Brain-Flak (BrainHack) , 465 octets
Essayez-le en ligne!
la source
Japt , 2 octets
Essayez-le | Transposée
la source
JavaScript (Node.js) , 62 octets
Essayez-le en ligne!
Amélioré avec une disposition différente
la source
Haskell ,
153144 octets(merci, Sriotchilism O'Zaic )
Essayez-le en ligne!
Essayez-le transposé!
la source
foldr
récursivité pour les deux versions), n'aime pas ça.APL (Dyalog Unicode) , 7 octets
Essayez-le en ligne!
Transposé:
Probablement une réponse plutôt ennuyeuse, mais de toute façon ça y est.
La définition de la fonction en ligne
{...}
peut s'étendre sur plusieurs lignes. Dans ce cas, chaque ligne est exécutée séquentiellement, mais toute ligne sans affectation←
renvoie immédiatement sa valeur calculée. Ainsi, la première fonction revient⍵
tandis que la seconde revient⍉⍵
.Une réponse encore plus ennuyeuse serait l'abus de commentaire:
APL (Dyalog Unicode) , 4 octets
Aucun TIO n'est nécessaire, je suppose ...
la source
05AB1E , 3 octets
Essayez-le en ligne.
Essayez-le transposé.
Explication:
Contrairement à certaines autres langues, les sauts de ligne sont simplement ignorés dans 05AB1E, donc je ne pense pas qu'un 2-byter soit possible (même si j'adorerais me tromper).
la source
Rubis , 35 octets
Essayez-le en ligne!
Hanche pour être carré! (Presque)
Accepte les matrices rubis en entrée (tableaux de tableaux)
la source
Nettoyer , 64 octets
Essayez-le en ligne!
Essayez-le transposé!
la source
Python 3 ,
11895 octetsL'entrée et le résultat sont des listes de tuples.
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 13 octets
Essayez-le en ligne! / Transposé
la source
Cjam , 13 octets
Essayez-le en ligne!
Version transposée:
Essayez-le en ligne!
Format d'entrée
Le format d'entrée est le format de tableau CJam standard:
[[1 2] [3 4]]
Pas de version crash, 12 octets
La version normale se bloque après l' impression du tableau. Une version qui ne plante pas serait:
Essayez-le en ligne!
ou transposé:
Essayez-le en ligne!
Il y a probablement quelques octets supplémentaires qui peuvent être enregistrés, j'ai accidentellement travaillé sur la version transposée en premier, ce qui a conduit à quelques sauts de ligne supplémentaires et cela fait longtemps que je n'ai pas utilisé CJam pour la dernière fois. Toutes les améliorations sont les bienvenues.
la source
Zsh , 75 octets
TIO: Normal Transposed
La poubelle sous l'impression principale est inoffensive, elle imprime une erreur lors de la rencontre d'une nouvelle ligne après
fa<
et se termine. 86 octets pour supprimer cette erreur.La version transposée est ici. Après l'impression, il affiche des erreurs en voyant
<
à la fin d'une ligne et quitte.la source
Enchantements runiques , 88 octets
Essayez-le en ligne!
Essayez-le transposé!
L'entrée est séparée par des espaces pour chaque valeur et séparée par des virgules pour chaque ligne (les retours à la ligne sont facultatifs) et prend en charge les chaînes et les nombres (non nuls). Cela facilite l'analyse de l'entrée car elle est automatiquement interrompue par des espaces et des sauts de ligne. Ainsi, par exemple, l'entrée:
Serait représenté sous forme de tableau imbriqué comme
[[1,2,3],[4,5,6],[7,8,9]]
. Prise en charge minimale des tableaux irréguliers (seul le dernier peut être court), mais comme les entrées devraient être rectangulaires, cela satisfait cette exigence.La sortie est représentée dans le même format (la version transposée sort avec des sauts de ligne, mais ses zéro octets sont différents pour utiliser un espace à la place). La version normale a un espace de fin, la version transposée a une virgule de fin et une nouvelle ligne (en raison de la difficulté à déterminer quand il n'y a plus de données à imprimer).
La version normale a des caractères modificateurs dans des endroits étranges (par exemple
7̸0
), mais cela est dû au fait qu'ils en ont besoin au bon endroit lorsque la source est transposée et que l'exécution normale utilise uniquement la colonne d'instructions la plus à gauche.Explication
L'explication de la source transposée se fera sous une forme non transposée. Les flèches représenteront la directionnalité IP à l'entrée et à la sortie de divers blocs.
L'entrée est lue et lorsqu'un
,
caractère est trouvé, une nouvelle sous-pile est poussée. Cela permet à chaque pile de conserver chaque ligne séparément en mémoire. Entre dans la section suivante par le haut.[0
(exécuté vers la gauche) définit une pile vide pour servir de frontière entre la première et la dernière ligne, puis pivote vers la première pile ({̹
) et démarre l'impression des éléments et la rotation des piles. Lei!
n'est pas exécuté et{̹L [0r
n'est exécuté qu'une seule fois. Lorsqu'une pile de taille nulle est trouvée, la boucle se ferme.Lorsque la pile vide est trouvée, un
,
et une nouvelle ligne sont imprimés et la boucle de valeur est à nouveau saisie. Ordre d'exécution ( en miroir pour une meilleure lisibilité) où.
est une commande exécutée non:\',$!.6ak$?....../
. Changerak
pour'<space>
imprimerait des espaces au lieu de nouvelles lignes.L'exécution s'arrête lorsque le programme tente d'écrire à partir d'une pile vide; c'est pourquoi seul le jagginess de dernière ligne fonctionne correctement et pourquoi il y a une fin
,
dans la sortie: la virgule a déjà été imprimée avant que le programme ne sache qu'il n'y a plus de données.la source