Étant donné une chaîne de texte ASCII imprimable (y compris les retours à la ligne et les espaces) qui contient au moins un caractère qui n'est ni un retour à la ligne ni un espace, affichez une valeur véridique si la chaîne est rectangulaire et une valeur falsey dans le cas contraire. En outre, le code source de votre solution doit être rectangulaire .
Une chaîne est rectangulaire si elle remplit toutes les conditions suivantes:
- La première ligne et la dernière ligne ne contiennent aucun espace.
- Le premier et le dernier caractère de chaque ligne n'est pas un espace.
- Toutes les lignes ont le même nombre de caractères.
Par exemple, le texte suivant est rectangulaire:
abcd
e fg
hijk
Ce texte n'est cependant pas rectangulaire (exigence n ° 3):
1234
567
8900
Cas de test
Vérité:
sdghajksfg
asdf
jkl;
qwerty
u i op
zxcvbn
1234
5 6
7890
abcd
e fg
hijk
Falsey:
a b c
123
456
7 9
12
345
qwerty
uiop
zxcvnm
1234
567
8900
Il s'agit de code-golf , donc la solution la plus courte en octets l'emporte.
Réponses:
C (gcc) ,
127125124118 octetsr*=!e&(!t|t==c);
au golfr>>=e||t&&t-c;
. (Ce golf a été l'inspiration pour mes récents conseils sur la réponse à la mise à jour du drapeau inversé .*(_-2)
au golf_[~1]
.*_++-10||(...)
au golf*_++<11?...:0
et en utilisant l'espace réservé zéro...:0
(qui n'est pas utilisé de manière constructive) pour jouer au golf l'c++
incrément. Ces golfs ont permis un nouveau remaniement de la boucle.Essayez-le en ligne!
Disposition source réalisant un rectangle plus haut.
Explication
Ce qui suit explique la version longue de 124 octets.
Essayez-le en ligne!
la source
r,e,c,t
Java 10,
214176169152 152144139 octets-5 octets grâce à @Neil .
Utilise
String[]a
au lieu devar a
;return-r<0;
au lieu dereturn r>0;
; et ajouté un commentaire//
à la toute fin, donc il n'y a pas d'espace sur les première et dernière lignes.Notez que ce rectangle est plus court qu'une entrée sur une seule ligne, car
int r=1,...;
devrait être remplacé parint[]v{1,...};
, et toutes les utilisations des entiers deviendraient alorsv[n]
(où n est l'index de la variable dans le tableauv
).Essayez-le en ligne.
Explication:
Voici le même programme de base avec des espaces (
128126 octets ):-2 octets grâce à @Neil .
Essayez-le en ligne.
la source
T-SQL,
237207 octetsSorties 1 pour rectangulaire, 0 sinon. J'ai dû utiliser des tonnes de parens et de supports supplémentaires pour éliminer les espaces, je suis sûr qu'il y a une grande marge d'amélioration.
Explication :
Conformément à nos options d'E / S autorisées et à la clarification dans les commentaires de la question, l'entrée est considérée comme des lignes séparées dans un tableau préexistant t . Étant donné que les données dans SQL ne sont pas classées par nature, cette table comprend un champ d'identité "numéro de ligne" i :
Fondamentalement, mon SQL effectue 3 sous-requêtes, chacune renvoyant
0
ou1
basée sur les 3 critères du code "rectangulaire". Ces 3 valeurs sont multipliées ensemble, ne retournant que1
pour un code qui satisfait les 3.EDIT : Combiné les critères 2 et 3 dans le même SELECT pour économiser de l'espace
La
TRIM(v)
fonction n'est prise en charge que par SQL 2017 et versions ultérieures. Les versions antérieures auraient besoinLTRIM(RTRIM(v))
, ce qui nécessiterait un rééquilibrage des lignes.Une note aléatoire: la
LEN()
fonction en SQL ignore les espaces de fin, doncLEN('foo ') = 3
. Pour obtenir une "vraie" longueur, vous devez attacher un caractère à la fin, puis soustraire un: Pla source
C ++,
199183181175 octetsCette fonction de modèle accepte les lignes comme une collection de chaînes (qui peuvent être des chaînes larges), transmises comme une paire d'itérateurs.
Merci à l'utilisateur Erroneous de m'avoir rappelé le
back()
membre destd::string
et de lui avoir fait remarquer quenpos+1
c'est zéro.Équivalent non golfé
Le seul vrai golf est de concaténer les première et dernière lignes afin que nous puissions effectuer un single
find
pour les espaces dans celles-ci.Programme de test
la source
.find(' ')+1==0
ets.back()
au lieu de*s.rbegin()
.JavaScript (Node.js) , 85 octets
Essayez-le en ligne!
la source
NOR
opérateur!Python 2 , 82 octets
Essayez-le en ligne!
Invoquer en tant que
f("abcd", "e fg", "hijk")
.la source
Haskell ,
10610298110109102 102 octetsMerci à @nimi et @Laikoni pour un octet chacun!
Essayez-le en ligne!
la source
Haskell , 79 octets
Essayez-le en ligne!Prend l'entrée comme une liste de lignes.
Le modèle
g(x:r)= ...
lie la première ligne àx
et la liste (éventuellement vide) des lignes restantes àr
.all((==(0<$x)).(0<$))r
Vérifie ensuite si toutes les lignesr
ont la même longueur quex
(Utilisation de cette astuce ).Sinon, la conjonction
&&
court-circuite et revientFalse
, sinon le côté droit est évalué. Il y a une chaîne qui se compose dex
la première ligne,last(x:r)
de la dernière ligne der
(ou la première ligne à nouveau au cas où eller
est vide) et(head<$>r)
du premier et(last<$>r)
du dernier caractère de chaque ligne. Pour cette chaîne,all(>='!')
vérifie qu'elle ne contient aucun espace (nous ne pouvons pas l'utiliser en(>' ')
raison de la restriction du code source).la source
contains at least one character that is neither a newline nor a space
, qui permet également de supprimer le cas de liste vide.MATL , 13 octets
L'entrée est un tableau de chaînes, au format
{'abc' 'de'}
.La sortie est un tableau ne contenant que des unités , ce qui est vrai , ou un tableau contenant au moins un zéro, qui est falsey .
Essayez-le en ligne! Ou vérifiez tous les cas de test , y compris le test de véracité / fausseté.
Explication
la source
cO6Lt&(32=~
essayez-le en ligne! Annule simplement les parties non frontalières, puis vérifie s'il y a des espaces.cF6Lt&(32=~
. N'hésitez pas à le modifier, sinon nous pouvons simplement le laisser dans les commentaires.JavaScript (ES6), 88 octets
Essayez-le en ligne!
la source
Toile ,
1715 octetsEssayez-le ici!
Explication (ASCII-fied pour monospace):
la source
Perl 5 , 70 octets
Essayez-le en ligne!
Sorties
0
pour véridique, tout autre numéro pour falsey.la source
Rouge ,
216191 octetsEssayez-le en ligne!
J'ai mis beaucoup de parenthèses autrement inutiles dans les première et dernière lignes.
la source
Gelée , 17 octets
Essayez-le en ligne!
la source
Does not seem to enforce equal line length
c'est tout ce que je disais." \n "
Essayez-le en ligne!Gelée , 15 octets
Utilise une méthode développée par Mnemonic dans une soumission Pyth supprimée (actuellement - en raison d'une défaillance du cas de bord). (s'il est maintenant réparé, allez donner un crédit !)
Un lien monadique acceptant une liste de caractères qui renvoie 1 ou 0.
Essayez-le en ligne!
Comment?
la source
Japt , 22 octets
Réponse non concurrente: il existe un bogue connu dans Japt , où les rotations de tableaux bidimensionnels tronquent les résultats. En raison de ce bogue, le code ci-dessous ne fonctionne que sur les entrées carrées. Si le bogue n'était pas présent, le code ci-dessous devrait fonctionner complètement correctement.
Prend l'entrée comme un tableau de chaînes. L'utilisation de parenthèses au lieu d'espaces rend l'exigence de code rectangulaire assez facile.
Essayez-le ici .
la source
Ruby 2.5+, 63 octets
Prend l'entrée comme un tableau de chaînes. Pas de lien de test, car la version sur TIO (2.4) est trop ancienne pour celle-ci. Au lieu de cela, voici une version légèrement plus longue (69 octets) pour les tests:
Essayez-le en ligne!
La différence est que depuis 2.5 Ruby prend en charge le passage direct d'un modèle Regex aux
all?, any?, none?
méthodes, ce qui nous fait gagner quelques octets. La méthode elle-même est assez explicite - nous testons:la source
C (gcc) , 119 octets
Prend les entrées sous forme de liste (s) de n chaînes.
Essayez-le en ligne!
la source
C # (.NET de base) ,
145167 octetsEssayez-le en ligne!
la source
S[0].IndexOf(" ")
recherche un espace dans la première ligne etS[S.Count()-1].IndexOf(" ")
recherche dans la dernière ligne. S'il n'y a pas d'espace dans la première et la dernière ligne, c'est -2 qui est alors vrai à-2 < -1
.True
lorsqu'il est transmis à votre programme. C'est une restriction supplémentaire dans ce défi.