(Inspiré au hasard par https://codegolf.meta.stackexchange.com/a/17272/42963 )
Étant donné une matrice rectangulaire de chiffres (c.-à-d. 0 - 9
), Sortez les "morceaux" de la matrice comme si les chiffres étaient reliés entre eux pour former une seule pièce, dans l'ordre croissant par les chiffres. Les pièces sont garanties de se connecter uniquement orthongonalement - aucune pièce ne se connectera en diagonale. Il n'y aura jamais qu'un maximum de 10 pièces (c'est-à-dire qu'une 3
pièce n'apparaîtra pas deux fois dans la même matrice).
Par exemple, étant donné la matrice
0 1 1 1
0 0 1 2
3 3 2 2
voici les pièces et un exemple de sortie:
0
0 0
1 1 1
1
2
2 2
3 3
L'espacement est important pour conserver la forme des pièces, mais les pièces n'ont pas nécessairement besoin d'espacement intérieur. Les pièces elles-mêmes devraient en quelque sorte être rendues distinctes de manière cohérente (par exemple, une nouvelle ligne entre les pièces, en s'assurant que chacune est un caractère différent, etc.). En outre, les espaces blancs superflus (par exemple, les retours à la ligne de fin ou les colonnes de début) ne sont pas autorisés. Par exemple, les éléments suivants seraient également valides:
0
00
111
1
2
22
33
ou
#
##
###
#
#
##
##
Mais ce ne serait pas le cas (notez les espaces derrière les 0
s):
0
0 0
Les rotations ou réflexions ne sont pas non plus autorisées. Par exemple, la sortie
1
111
pour la matrice ci-dessus est également invalide.
Les pièces de la matrice peuvent avoir des trous ou être un seul élément:
0 0 0 1
0 2 0 1
0 0 0 3
Ou, la pièce peut être la matrice entière:
0 0 0
0 0 0
Voici un cas de test plus grand et plus compliqué:
1 1 1 1 1 2 2
3 4 4 4 2 2 2
5 5 4 4 2 0 0
5 6 6 6 6 7 7
5 6 8 8 6 6 7
9 6 6 6 7 7 7
Et un exemple de sortie:
00
11111
22
222
2
3
444
44
55
5
5
6666
6 66
666
77
7
777
88
9
Règles et E / S
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Vous pouvez l'imprimer sur STDOUT ou le renvoyer en tant que résultat de fonction.
- Un programme complet ou une fonction sont acceptables.
- Un espace de tête pour conserver la forme (par exemple, la forme en "T" de
1
dans l'exemple) est requis, un espace cohérent pour rendre les pièces distinctes, et une seule nouvelle ligne de fin à la fin n'est autorisée, mais aucun autre espace n'est autorisé. - Vous pouvez supposer en toute sécurité que les pièces sont numérotées
0
de manièreN
contiguë, ce qui signifie que (par exemple)3
ne serait pas ignoré dans une matrice à six pièces. - Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
-1
ou un espace représentant un espace vide, ou absence d'élément si possible)?0
comme valeur de remplissage? Ainsi, chaque morceau serait sorti avec le reste des valeurs dans la matrice définie sur0
-1
ou une autre valeur au lieu de rien / espace ne serait cependant pas OK.' '
) devrait-il être utilisé dans ce cas?Réponses:
05AB1E ,
2019 octets-1 octet grâce à @ Mr.Xcoder .
Affiche des listes 2D de pièces (avec
1
et espaces" "
) par nouvelle ligne.Essayez-le en ligne ou vérifiez tous les cas de test ou imprimez tous les cas de test .
Explication:
la source
Haskell,
133132129 octetsPrend la matrice comme une liste de chaînes et renvoie une liste de liste de chaînes.
Essayez-le en ligne!
la source
Gelée , 18 octets
Essayez-le en ligne!
Renvoie une liste de pièces, où
1
représente une partie d'une pièce et' '
est un remplissage. Les' '
s de fin sont supprimés.la source
ẎQ=€
devrait faire, bien que nous ayons besoin des pièces dans l'ordre croissant, donc9Ż=€
(sauf si nous ne devons pas inclure les "pièces inexistantes" dans ce casẎQṢ=€
)9Ż=€
cela ne fonctionnera pas (je pense que "les espaces étrangers [...] ne sont pas autorisés" s'étend également aux tableaux, c'est pourquoi je coupe).Python 3 ,
271209206183176172 172191 octetsEssayez-le en ligne!
Edit: Un peu de nettoyage et -5 grâce à @ Jonathan Frech .
Edit:
-3-26 encore une fois grâce à @ Jonathan Frech .Edit: -7 encore grâce à @ Jonathan Frech .
Edit: +19: Comme indiqué par @ nimi, la sortie précédente avait un format incorrect.
L'entrée est une matrice sous forme de liste de listes:
La sortie est une liste de matricies:
Non golfé:
la source
Python 2 ,
173172165 165 octetsEssayez-le en ligne!
-15 octets à partir d'une observation de nimi .
Sous forme de programme, prend en entrée une liste de listes de caractères uniques; sorties en imprimant les pièces trouvées en utilisant leur caractère.
la source
C # (.NET Core) ,
258, 238 octetsSans LINQ.
EDIT: Incarnation Of Ignorance indiquant de meilleures déclarations var! Ty ty.
Essayez-le en ligne!
la source
Python 2 , 291 octets
Essayez-le en ligne!
Attend une piqûre délimitée par des guillemets en entrée. Un pourcentage semi-ridicule du code est dédié à la gestion des entrées non séparées par des espaces / non remplies par des espaces.
Explication sans golf:
la source
Rétine , 75 octets
Essayez-le en ligne! Explication:
Ajoutez un chiffre à l'entrée. Cela représente le compteur de boucle. La nouvelle ligne simplifie la suppression des espaces de fin.
Inhibez la sortie par défaut et répétez exactement 10 fois.
Avancez le chiffre de la boucle.
Générez le résultat du reste du script, puis restaurez le tampon.
Remplacez tous les chiffres qui ne correspondent pas au chiffre de la boucle par des espaces. (Parce que cela utilise une anticipation et qu'il n'y a rien à prévoir à ce stade, cela remplace également le chiffre de la boucle.)
Supprimez tous les espaces de fin.
Supprimez toutes les lignes vides.
Répétez l'opération tant qu'aucune ligne ne commence par un chiffre ...
... supprimez le premier caractère de chaque ligne.
S'il reste quelque chose, ajoutez une nouvelle ligne pour séparer chaque forme de la suivante. (Ceci est fait pour éviter les sauts de ligne parasites pour les chiffres manquants.)
la source
Fusain , 43 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Lisez l'entrée dans un tableau. (Cela pourrait être supprimé si j'utilisais un format d'entrée moche.)
Boucle sur les 10 chiffres.
Obtenez les lignes qui contiennent ces chiffres.
Vérifiez que le chiffre a bien été trouvé (pour éviter la sortie de nouvelles lignes parasites).
Désactivez le rembourrage automatique.
Faites une boucle sur les lignes trouvées.
Boucle sur chaque colonne ...
... si le caractère d'entrée actuel est égal au chiffre de la boucle actuelle, imprimez-le sinon déplacez le curseur vers la droite.
Passez au début de la ligne suivante. L'utilisation de commandes de mouvement comme celle-ci permet au charbon de bois de couper la sortie des deux côtés.
Vider et effacer la toile prête pour le chiffre suivant. Cela permet aux différents chiffres d'avoir différentes quantités de rognage.
J'ai essayé une approche programmatique, mais qui pesait 47 octets, même si elle aurait également été de 43 octets pendant une brève période lorsqu'elle a été
Equals
vectorisée:Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Désactivez le rembourrage automatique.
Lisez l'entrée dans un tableau.
Boucle sur les 10 chiffres.
Comparez chaque caractère avec l'entrée et créez un tableau booléen, puis filtrez les lignes sans correspondance.
Faites une boucle sur les lignes restantes et coupez de la première correspondance de n'importe quelle ligne à la dernière correspondance de la ligne actuelle, puis mappez le tableau booléen sur des chiffres ou des espaces, qui sont ensuite imprimés implicitement sous la forme d'un tableau de chaînes.
la source
Langue Wolfram 101 octets
Il doit y avoir un moyen beaucoup plus efficace d'accomplir cela.
la source
Perl 5, 97 octets
TIO
Explication
la source
APL (Dyalog Unicode) , 38 octets SBCS
Fonction de préfixe tacite anonyme. Prend une matrice numérique comme argument et renvoie une liste de chaînes de listes. Chaque liste de chaînes représente une pièce avec des
1
s séparés par des espaces . Les espaces de début et internes (mais pas de fin) sont des espaces.Essayez-le en ligne!
∪∘,
les éléments uniques de la matrice de ravel (aplatie)⊂{
…}¨
Pour chacun de ceux as⍵
, appelez la fonction suivante avec la matrice entière as⍺
:⍺=⍵
indiquer où se trouve le numéro de cette pièce dans la matrice⊢
rendement qui (se sépare2
de⍺
){
…}⍣2
Appliquer deux fois la fonction suivante (⍵
est la matrice booléenne):∨/
masque pour les rangées avec au moins un1
(allumé. réduction des rangées OU)⍵⌿⍨
utiliser cela pour filtrer les lignes⍉
transposer (donc nous le faisons aussi sur les colonnes, puis transposer en arrière)' '@~
remplacer par des espaces aux endroits où pas (c'est-à-dire où0
)⍕
format comme matrice de caractères↓
divisé en liste de chaînes' +$'⎕R''
PCRE remplace les espaces de fin (n'importe quel nombre d'espaces suivis d'une fin de ligne) par rienla source
Japt , 29 octets
Essayez-le en ligne!
Mis à jour pour se conformer à un formatage de sortie plus strict.
Sorties sous forme de liste de pièces, chaque pièce étant représentée par une liste de lignes, en utilisant 2 comme caractère de remplissage.
Explication:
la source
false
de fin des listes internes. Voici un pastebin pour que je puisse mieux expliquer ce qui est censé être la sortie. N'hésitez pas à demander à OP de clarifier, mais d'après ce que je comprends du défi, tous les espaces blancs à la fin ne devraient pas du tout être présents dans la sortie.Python 3 , 133 octets
Essayez-le en ligne!
Prend une chaîne séparée par une nouvelle ligne, retourne une liste de chaînes séparées par une nouvelle ligne. Utilise
textwrap.dedent
pour se débarrasser des espaces principaux.la source
Gelée , 19 octets
Essayez-le en ligne!
Un lien monadique prenant la matrice en entrée et renvoyant une liste d'une liste irrégulière par pièce. Le pied de page affiche cela joliment, mais je pense que la sortie sans cela est conforme aux règles de la question.
la source