Une chaîne est considérée comme carrée si les conditions suivantes sont remplies:
- Chaque ligne a le même nombre de caractères
- Le nombre de caractères sur chaque ligne est égal au nombre de lignes.
Votre tâche consiste à écrire un programme ou une fonction qui détermine si une chaîne d'entrée donnée est un carré.
Vous pouvez avoir besoin que l’entrée soit délimitée par votre choix de LF, CR ou CRLF.
Les caractères de nouvelle ligne ne sont pas considérés comme faisant partie de la longueur de la ligne.
Vous pouvez avoir besoin d’être ou non une nouvelle ligne en fin de ligne, ce 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 est non vide et ne contient que de l'ASCII imprimable, espaces compris.
Vous devez indiquer une valeur de vérité pour les chaînes carrées et une valeur falsifiée pour les autres chaînes.
Cas de test de vérité:
foo bar baz
.
.s. .ss .s. (s représente l'espace)
ss ss (s représente l'espace)
aaaaa aaaaa aaaaa aaaaa aaaaa
Cas de tests de fausseté:
.. .
.
.
.... ....
4444 333 22
333 333
abc.def.ghi
Notez les lignes vierges supplémentaires dans certains cas de fausseté.
C'est du code-golf - le moins d'octets gagne!
Réponses:
Brachylog (2), 3 octets
Essayez-le en ligne!
Programme complet. Sorties
true.
pour la vérité,false.
pour Falsey.Explication
J'étais un peu sceptique quant à l'utilité de la fonction
ṁ
intégrée lorsqu'elle a été ajoutée, mais je ne peux vraiment pas nier que c'est utile ici…Brachylog (2), 7 octets
Essayez-le en ligne!
Solution non intégrée.
Bat encore toutes les autres entrées, au moment de l'écriture.EDIT: Pas tout à fait, l’entrée de longueur égale de Jelly est entrée pendant que j’écrivais ceci, et le bat via le tie-break de l’horodatage.Explication
la source
ṁ
= "Affirme que le résultat est carré" :(.\l~l
à quelque chose de semblable à l'époque, sauf que la commande backslash, qui affirme entre autres que son entrée est un rectangle , était cassée; notez que même si nous remplaçonsṁ
par.\l~l
, c’est toujours le programme le plus court ici; à bien y penser, j’ajouterai cela au post). La commande de barre oblique inverse a été corrigée, mais l'auteur de la langue a décidé d'ajouter un carré d'assertion au même moment. Je pensais "sûrement que cela ne reviendra jamais". Apparemment j'avais tort.Python 2 , 52 octets
Essayez-le en ligne! ou Essayez tous les cas de test
la source
'\n'
, laissez le champ vide (puisqu'il n'y a pas d'espaces et de tabulations dans l'entrée).JavaScript (ES6),
4645 octetsExplication
true
carré etfalse
non.L'essayer
la source
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
d'emblée, tout simplement parce que c'est la même longueur queevery
.05AB1E ,
10 à8 octetsEssayez-le en ligne!
-2 grâce à Riley, voici en gros sa réponse ._.
la source
s
. Comme ça¶¡€gDgQP
Gelée ,
75 octetsEssayez-le en ligne!
Merci à FryAmTheEggman pour -2
la source
Haskell,
38 à34 octetsEssayez-le en ligne!
Version sans pointes de
f s = all ((==length (lines s)).length) (lines s)
, c’est-à-dire scinder l’entrée en lignes et vérifier si la longueur de chaque ligne est égale au nombre de lignes.Edit: Merci à @xnor pour 4 octets.
la source
all
pourmap
couper leand.
.Gelée , 7 octets
Essayez-le en ligne!
Explication
la source
Japt , 9 octets
Testez-le en ligne!
Explication
En utilisant certaines fonctionnalités implémentées peu de temps après la publication de ce défi, il peut s'agir de 6 octets:
Testez-le en ligne!
Explication
la source
y
c'était la solution mais le mien arrivait à quelques octets de plus.Retina ,
3331 octetsEssayez-le en ligne! Explication: La première étape consiste simplement à remplacer tous les caractères ASCII imprimables par le même caractère, afin de faciliter la correspondance. (Cela pourrait se faire sans, mais c'est du code golf, pas du défi du code.) La deuxième étape correspond alors à au moins un caractère sur la première ligne. Toutefois, pour chaque caractère supplémentaire de la première ligne, il correspond éventuellement à une nouvelle ligne suivie d'une copie de la première ligne. La dernière partie de l'expression entraîne l'échec de la correspondance s'il y a plus de colonnes que de lignes.
la source
\S\n;
de la première ligne permet d'économiser un octet.
par en.
sauve deux, mais merci.Husk , 6 octets
Prend une ficelle et imprime soit
1
ou0
. Essayez-le en ligne! La première ligne itère sur les cas de test; supprimez-le si vous souhaitez tester sur une seule valeur.Explication
Husk est un nouveau langage de golf fonctionnel créé par Leo et moi-même . Il manque beaucoup de fonctionnalités et le développement est en cours. Sa principale caractéristique est un système de type rigide qui nous permet de surcharger des fonctions d'ordre supérieur.
À haut niveau, le programme fonctionne comme suit:
La fonction
≡
vérifie réellement si deux tableaux ont la même forme et la même distribution d'éléments de vérité. Dans Husk, tous les caractères sauf l'octet nul sont la vérité et cela ne se produira pas dans nos entrées. De plus,S
est le S-Combinator , une fonction qui prend en entrée deux fonctions, ici≡
etT'a
, et retourne une nouvelle fonction quix
à≡(x)(T'a x)
. Le résultat deS
est composé avec¶
, et cette fonction est appliquée implicitement à l'entrée.Comment Husk sait-il qu'il devrait s'appliquer
S
à la fonction suivante, mais¶
devrait être composé avec la fonction à sa gauche? Simple: il essaie toutes les interprétations et choisit celle où les types ont un sens. Ceci est expliqué plus en détail dans la documentation Husk .la source
Pure bash (no utilities), 55
mapfile
lit l'entrée dans le tableaua
Le sens opposé de ceci est renvoyé sous la forme d'un code de retour de shell (examiner avec
echo $?
) - le carré parfait vaut 1, tout le reste vaut 0.Essayez-le en ligne (vérité) .
Essayez-le en ligne (faux) .
Réponse précédente utilisant eval-escape-expansion hell, 78:
Essayez-le en ligne (vérité) .
Essayez-le en ligne (faux) .
la source
Perl 6 , 27 octets
Teste si le nombre de lignes dans la chaîne d'entrée est égal au nombre de caractères sur chaque ligne.
la source
.lines
méthode.Pyth, 7 octets
Essayez ici
Ne nécessite pas de nouvelle ligne. Remplace l'entrée par un tableau 2D de 1, où 1 représente n'importe quel caractère de l'entrée d'origine. Ensuite, nous vérifions si ce tableau est inchangé après l'avoir transposé (en remplaçant les colonnes par des lignes). Seul un carré reviendra vrai dans une telle situation.
la source
Java (OpenJDK 8) ,
96919087 octets-5 octets grâce à @KevinCruijssen
-1 octet grâce à @TheLethalCoder
-2 octets grâce à @ OlivierGrégoire
Essayez-le en ligne!
la source
String[]s
et,0
les.split("\\n");
3 octets. Et le point-virgule /;
à la fin, vous n'aurez pas à compter, de sorte qu'un autre -1. Oh, et vous devez inclure lejava.util.
devant du,Arrays
j'ai bien peur. Les importations / utilisations font également partie du nombre d'octets.java.util.
, une boucle normale comme celle-cifor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
semble être plus courte quereturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
est en réalité plus courte!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
etth()
. Donc, apparemment, ils apparaissent en premier après le 60e caractère puis tous les 20 caractères.05AB1E , 7 octets
Essayez-le en ligne!
la source
n
entrées au lieu de 1 et pourquoi ma réponse initiale n'a pas fonctionné.|
signifie "prendre le reste de l'entrée et le scinder en nouvelles lignes", ce qui ne prend en aucun cas plusieurs entrées. Vous devez simplement traiter STDIN comme une entrée unique.R , 57 octets
Une fonction anonyme; Fractionner sur les nouvelles lignes, calcule la longueur de chaque ligne et vérifie si toutes sont identiques au nombre de lignes.
Essayez-le en ligne!
la source
MATL ,
1412 octetsLa chaîne d'entrée est définie à l'aide de la concaténation de chaînes (
[...]
) et avec le point de code10
pour représenter LF. Par exemple,['aaa' 10 'bb']
est interprété en MATL comme une chaîne'aaa'
concaténée avec le caractère avec un point de code10
concaténé avec une chaîne'bb'
.La sortie est un vecteur numérique non vide, qui est véridique si et seulement si toutes ses entrées sont non nulles.
Essayez-le en ligne!
Explication
Considérez l'entrée
['4444' 10 '333' 10 '22']
.la source
R, 35 octets
Prend la contribution de stdin. Vérifie que le nombre de caractères de chaque ligne est égal au nombre total de lignes. Retours
TRUE
ouFALSE
selon le cas.la source
JavaScript (ES6), 48 octets
la source
CJam, 11 octets
Essayez-le en ligne!
la source
OCaml , 56 octets
Essayez-le en ligne!
la source
Pyth,
12 à10 octets2 octets sauvés grâce à @FryAmTheEggman.
Essayez-le en ligne
Explication
la source
QBIC , 43 octets
Moi, je suis heureux de la brièveté d'un dérivé de QBasic pour relever ce défi.
Explication:
la source
Pyth, 7 octets
Manifestation
Transposez l’entrée avec la troncature deux fois, puis vérifiez si le résultat est identique à l’original.
la source
Ruby, 50 octets
Essayez-le en ligne!
Explication
la source
.split($/,-1);
->.split $/,-1;
lines
au lieu deread
et ensuitesplit
(mais vous devez ensuite ajouter 1size
car les lignes incluent le retour à la fin)Cheddar , 39 octets
Essayez-le en ligne!
la source
Clojure, 58 octets
Nécessite un retour à la ligne, impatient de voir quelque chose de plus magique.
la source
APL (Dyalog) , 17 octets
Nécessite
⎕ML←3
ce qui est la valeur par défaut sur de nombreux systèmes. Utilise CR.Essayez-le en ligne!
↓∘⎕FMT
[est le] split-en-ligne F ou m a t ted-en-a-carré argumentation≡
identique à⎕TC[2]∘≠
les caractères en-groupes-de-non-nouvelle-ligne⊂
cloisonné⊢
argument?* Le deuxième élément de la liste de T erminal C personnages de.
Dans la version 16.0, on peut écrire
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
avec⎕ML←1
.la source
⎕ML
?⎕ML
, alors que celles qui ont commencé avec les autres APL ont tendance à avoir un taux bas⎕ML
.PowerShell, 64 octets
La même approche (fractionnée, longueur de ligne, nombre de lignes) est la même que pour les autres réponses en langage autre que le golf, mais il n’existe pas d’équivalent valable pour map (); est groupé. Les carrés sortent comme les
3,3,3,3 -> 1 group, all line lengths and line count were equal
non-carrés3,2,1 -> 3 groups
, il y avait quelque chose d'inégal dans le carré:Requiert des terminaisons newline de style Linux, pas de nouvelle ligne. par exemple
(Et vous pouvez faire la même chose pour les faux tests, mais je ne vais pas le dire ici car il y en a plus). Les deux
@
symboles sont nécessaires lorsque l'entrée est le seul'.'
sinon le fractionnement , il ne fait pas un tableau d'une chaîne , il est tout simplement une chaîne, puis la concaténation de tableau ne délivre pas1,1
qu'il émet2
.J'espérais qu'il serait peut-être plus court de remplacer tous les caractères par «a», puis par la force brute de 1 à la longueur indiquée par tous les carrés «a» et de voir si l'un d'eux correspondait à l'entrée. Une fois que j'ai passé param () et .Length et -join and-place, il se termine beaucoup plus longtemps à 81 octets:
la source
Grime , 11 octets
Imprime
1
pour les carrés et0
pour les non-carrés. Essayez-le en ligne!Explication
Une explication détaillée peut être trouvée sur la page du tutoriel Grime , qui contient ce programme exact à titre d'exemple.
la source