Votre défi aujourd'hui est de prendre une chaîne multiligne et de produire le plus grand carré contenu dans la chaîne qui comprend le coin supérieur gauche.
Une chaîne carrée est celle où:
- Chaque ligne a le même nombre de caractères
- Le nombre de caractères sur chaque ligne est égal au nombre de lignes.
Considérez la chaîne d'entrée possible suivante:
abcde
fgh
asdf
foobar
Le plus grand carré que vous pouvez en prendre qui comprend le premier caractère (le a
dans le coin supérieur gauche) est le suivant:
abc
fgh
asd
Il ne peut pas y avoir de carré de côté 4, car la deuxième ligne n'est pas assez longue. Considérez maintenant cette entrée potentielle:
a
bcd
edf
ghi
La plus grande place ici est juste a
. Le carré 3x3 formé en bas ne contient pas le tout premier caractère et ne compte pas.
Voici quelques cas de test supplémentaires:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
Vous pouvez exiger que l'entrée soit délimitée par votre choix de LF, CR ou CRLF.
Le ou les caractères de nouvelle ligne ne sont pas considérés comme faisant partie de la longueur de la ligne.
Vous pouvez exiger qu'il y ait ou non une nouvelle ligne de fin en entrée, qui ne compte pas comme une ligne supplémentaire.
L'entrée est une chaîne ou un tableau de caractères 1D; ce n'est pas une liste de chaînes.
Vous pouvez supposer que l'entrée n'est pas vide et que toutes les lignes ne sont pas vides et qu'elle ne contient que de l'ASCII imprimable, y compris des espaces et des retours à la ligne (pour le délimiteur de ligne) mais pas des tabulations.
C'est du code-golf , le moins d'octets gagne!
.split('\n')
donc je ne vois pas pourquoi certains devraient l'obtenir gratuitement.Réponses:
Brachylog , 11 octets
Essayez-le en ligne!
Explication
la source
ṁ
intégré est en effet assez pratique!Husk , 13 octets
Essayez-le en ligne!
Explication
la source
GNU sed ,
106 + 194 + 2 = 96 octets+2 octets pour les
-rz
drapeaux. Utilise les caractères non imprimables NUL et BEL, représentés comme@
et#
ici. Voir ci-dessous pour un vidage xxd.Merci à @seshoumara de m'avoir envoyé sur le chemin de
-z
.Essayez-le en ligne!
Explication
Cela fonctionne en insérant deux curseurs dans le texte: un pour passer les lignes et l'autre pour passer les colonnes. Les curseurs sont représentés respectivement par NUL (0x00) et BEL (0x07), mais dans les exemples ci-dessous, j'utiliserai
@
et#
. Supposons que nous ayons cette entrée:Le curseur BEL est inséré avant la 0ème colonne et le curseur BEL avant la 0ème ligne (ici j'ai gardé les colonnes alignées pour plus de lisibilité; mais en réalité il n'y a pas de remplissage gauche):
Dans une boucle, les curseurs sont déplacés d'un caractère vers la droite et d'une ligne vers le bas, respectivement:
Après chaque itération, il vérifie deux conditions:
Si l'une ou l'autre condition est fausse, la boucle se termine. Le script se termine en supprimant tout ce qui se trouve après
@
sur chaque ligne et tout ce qui se trouve après#
dans l'espace modèle.vidage xxd
la source
line1\nline2\nline3
où\n
est\x5C\x6E
? Lequel?\n
est interprétée comme un caractère de nouvelle ligne (\x0A
, pas\x5C\x6E
) et je ne trouve pas de moyen de faire entrer sed avec des caractères de nouvelle ligne comme une seule ligne.-z
drapeau. Merci!Python 2 , 81 octets
Essayez-le en ligne!
Une méthode intéressante, mais 2 octets de plus.
Python 2 , 83 octets
Essayez-le en ligne!
la source
input
lit pas seulement une ligne?raw_input()
cela ajouterait plus d'octets.JavaScript (ES6), 77 octets
Utilise récursivement une expression régulière pour rechercher un carré de plus en plus grand jusqu'à ce qu'aucun ne soit trouvé.
L'expression régulière serait la suivante pour un carré 3x3:
L'entrée devrait se terminer par une nouvelle ligne et la sortie est une liste.
Explication:
Fragment:
Afficher l'extrait de code
la source
Brachylog , 16 octets
Essayez-le en ligne!
la source
Perl 5 , 84 octets
Essayez-le en ligne!
Remplit le
"abcde\nfghij\nklm\nno"
cas de test.la source
chop
place dechomp
et++$i<@a
au lieu de$i++<$#a
R ,
84838176 octets-5 octets portant l'approche de Dennis avec
sum
Essayez-le en ligne!
lit depuis stdin, imprime vers stdout sans retour à la ligne.
Légèrement non golfé:
la source
C (gcc) ,
162159151147144142137 octetsIl doit y avoir quelques coups pour jouer au golf ici ...
Essayez-le en ligne!
la source
!=-1
être>-1
ou ne lesgetchar()
valeurs de sortie inférieure à un moins? Serait-ce même possible+1
?~
pour détecter moins un.Gelée , 15 octets
Essayez-le en ligne!
Comment ça marche
la source
Java 8, 150 octets
Explication:
Essayez-le ici.
la source
MATL , 33 octets
Essayez-le en ligne!
Mon sens vague me dit qu'il y a probablement un chemin plus court (je pense à quelque chose avec
Ybo
dès le début) ... Nécessite une nouvelle ligne à la fin. (Remarque: j'ai un peu trop modifié cela, car cela gérera également les lignes vides, ce qui n'est pas nécessaire. Je vais voir si je peux réduire le nombre de bytecards, car dans le code golf, ce n'est pas une fonctionnalité, mais un bug)la source
Python 2 , 132 octets
Essayez-le en ligne!
la source
Python 2 , 103 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 95 octets
Nécessite une nouvelle ligne de fin en entrée.
la source
Wolfram Language (Mathematica) , 81 octets
Essayez-le en ligne!
la source
APL (Dyalog) , 25 octets *
Fonction de préfixe tacite. Renvoie une matrice.
Essayez-le en ligne!
C'est vraiment un sommet de deux fonctions indépendantes, à savoir
⎕AV[3]∘≠⊆⊢
qui traite du format d'entrée maladroit et↑↑⍨2⍴(⌊/≢,≢¨)
qui fait le travail réellement intéressant.⎕AV[3]∘≠
différence de LF (le troisième élément du A tomic V ecteur - le jeu de caractères)⊆
partitions (sous-chaînes commençant à des valeurs supérieures à leur prédécesseur et tombant à 0 s)⊢
l'argument(
…)
Appliquez la fonction tacite suivante:2⍴(
…)
Remodeler ce qui suit en longueur 2:⌊/
le minimum de≢
le nombre de cordes,
suivi par≢¨
le nombre de caractères dans chaque chaîne↑⍨
prendre autant de lignes et de colonnes↑
les chaînes mélangées pour former une matrice (remplissage avec des espaces)* En Classique avec
⎕ML
( M igration L Evel)3
(par défaut sur de nombreux systèmes) et son remplacement⊂
pour⊆
et⊃
le plus à gauche↑
. Tio!la source
⎕ML←3
sont obsolètes, je préfère donc afficher la langue telle qu'elle apparaît normalement. En fait, presque toutes mes solutions Dyalog APL supposent Classic simplement parce que nous comptons les octets au lieu des caractères, même si la version Unicode attribue une signification à moins de 256 caractères.PHP, 123 octets
nécessite PHP 5.4, 5.5 ou 5.6. Remplacez
split
parexplode
pour PHP plus tard.Courez avec
php -nr '<code> '<string>'
ou essayez-le en ligne . (Assurez-vous de sélectionner une version PHP adaptée!)
la source
Haskell ,
9288 octetsEssayez-le en ligne!
la source
Perl 5, 60 +5 (-0777p) octets
Essayez-le en ligne
la source
-0777
. Que faire-00
et-0777
faire, de toute façon.-0
est de spécifier que le séparateur d'enregistrement au format octal777
est une valeur spéciale pour indiquer qu'il n'y a pas de séparateur afin que le fichier entier soit lu,0
est une autre valeur spéciale pour indiquer le "mode paragraphe", le séparateur est plus de 1 sauts de ligne consécutifsPerl 6 ,
158140 octetsEssayez-le en ligne!
Hourra pour ma première réponse Perl 6. Je vais jouer avec quelques options de ligne de commande pour voir si je peux jouer au golf un peu plus. Toute aide pour économiser des octets est la bienvenue!
la source
Scala , 201 octets
Essayez-le en ligne!
Golf pour la première fois dans cette langue, donc peut-être pas le meilleur.
la source