Votre tâche consiste à créer un programme qui identifie la forme de l'entrée. Les formes à identifier peuvent être l'une des suivantes:
Carré
Pour être identifiée comme un carré, la source doit avoir des lignes de même longueur et le même nombre de lignes que de caractères par ligne (caractères de nouvelle ligne exclus). Une nouvelle ligne de fin facultative est acceptable.
$_='
$_="
$_"'
;say
Rectangle
Pour être identifiée comme un rectangle, la source doit avoir des lignes de longueur égale, mais le nombre de lignes ne correspond pas au nombre de caractères par ligne (caractères de nouvelle ligne exclus). Une nouvelle ligne de fin facultative est acceptable. Cela peut être horizontal ou vertical.
$_=
"no
t a
squ
are
";#
$_="but it
is still a
consistent
shape!";##
Triangle
Pour être identifiée comme un triangle, la source doit commencer par un caractère, et chaque ligne suivante doit avoir un caractère supplémentaire (y compris le dernier), ou après la première ligne, chaque ligne suivante doit avoir un caractère de moins jusqu'au dernier, ce qui n'en a qu'un.
$
_=
"So
this
"."".
shape;
$_="or
even,
this
way
!!
"
Désordre
Tout ce qui ne suit pas un format cohérent selon ce qui précède, doit être identifié comme un gâchis.
Règles
- Vous pouvez renvoyer quatre valeurs imprimables cohérentes pour identifier chaque forme.
- Votre code source doit également adhérer à l'une des formes ci-dessus (non, pas un gâchis).
- Une seule nouvelle ligne de fin dans votre source est acceptable.
- Vous pouvez supposer que l'entrée ne contient pas de lignes vides (y compris les retours à la ligne de fin), n'est pas vide et ne se compose pas uniquement de retours à la ligne.
- Toutes les formes doivent avoir une hauteur et une largeur> = 2, sinon cela est défini comme un gâchis.
- Les failles standard sont interdites.
- La solution la plus courte en octets, dans chaque langue, gagne.
la source
All shapes must have a height and width of >= 2.
['abc','cfd','fgh']
?Réponses:
Gelée , 35 octets
Essayez-le en ligne!
0
= Désordre1
= Rectangle2
= Carré3
= Trianglela source
Brachylog , 45 octets
Essayez-le en ligne!
Le code est un rectangle (malgré la façon dont il s'affiche sur mon écran). Sorties: 1 pour le carré, 2 pour le rectangle, 3 pour le triangle et rien pour le désordre
Explication:
la source
Java 10,
231221219217213211207 octetsLa fonction est un rectangle lui-même.
1
= Carrés;2
= Rectangles;3
= Triangles;0
= Mess.-14 octets grâce à @ OlivierGrégoire .
Explication:
Essayez-le en ligne.
la source
s->{var a=s.split("\n");int S=a.length,l=a[0].length(),L,D,b=0,i=1;if(S<2)return 0;for(L=a[1].length(),D=L-l; b<1&++i<S;)if((L=a[i].length())-a[i-1].length()!=D)b=1;return b<1?D==0?S==l?1:2:D==-1|D==1?l==1|L==1?3:0:0:0;}
(double espace aprèsvar
, saut de ligne aprèsD=L-l;
.D==-1|D==1
pourD>-2|D<2
. Celui-là et lel==1|L==1
pourrait être plus jouable avec certaines opérations au niveau du bit, mais ce n'est pas vraiment mon expertise.s->{var a=s.split("\n");int r=a.length,l=a[0].length(),L,D,b=0,i=1;if(r>1){for(L=a[1].length(),D=L-l;++ i<r;b=L-a[i-1].length()!=D?1:b)L=a[i].length();b=b<1?D==0?r==l?1:2:D>-2&D<2&(l<2|L<2)?3:0:0;}return b;}
(pause aprèsD=L-l;++
). Toujours jouable en fusionnant la boucle et la déclaration par la suite en une seule, mais je ne vois pas comment pour le moment.Python 2 ,
129114109107113 octetsEssayez-le en ligne!
Impressions
0
=Mess
1
=Triangle
2
=Square
3
=Rectangle
la source
Gelée ,
3227 octetsEssayez-le en ligne!
Prenant maintenant une entrée dans une liste de lignes et commutée
>1×
avec’a
et en utilisantSƲ
aprèsL€
au lieu deFLƲƊ
. Cela m'a permis de condenser en deux lignes et j'ai économisé 5 octets au total. Les valeurs suivantes sont les mêmes qu'avant.[0.0, 0.0]
= Désordre[0.0, 1.5707963267948966]
= Rectangle[0.0, 0.7853981633974483]
= Carré[1.5707963267948966, 0.0]
= TriangleZL«L
obtient le minimum de hauteur et de largeur et en’
soustrait 1.Ç
appelle le deuxième lien et à la fin si l'entrée est une seule ligne, le résultat deÇ
obtient logique ET avec le numéro précédent s'il n'y a qu'une seule ligne, la sortie sera[0.0, 0.0]
.Dans le deuxième lien:
,U
donne une liste des longueurs de ligne associées à son inverse.J
estrange(number of lines)
et⁼€
vérifie si chacun d'eux est égal au résultat deJ
.Ẹ
(Tout) renvoie 1 si l'entrée est un triangle.E
vérifie si toutes les longueurs de ligne sont égales (rectangle / carré).SƲ
avec a$
pour les regrouper en une seule monade vérifie si le nombre total de caractères est un nombre carré.Donc, à la fin du deuxième lien, nous avons
[[a,b],c]
où chaque numéro est0
ou1
indiquant si l'entrée est un triangle, rectangulaire et a un nombre carré de caractères respectivement.Cependant, un nombre carré d'éléments n'implique pas que l'entrée est un carré car une entrée en désordre comme
a un nombre carré d'éléments mais n'est pas un carré.
C'est là
æA
qu'intervient (arctan2).0æA0
==0æA1
==0
. En d'autres termes, si l'entrée a un nombre carré d'éléments mais n'est pas un rectangle, ce n'est pas un carré. Il existe certainement des moyens plus clairs de le faire, mais qu'importe si nous avons des octets à penser et que nous sommes autorisés à générer des sorties arbitraires cohérentes.Notez que j'utilisais précédemment
æA/
au lieu deæAƝ
(et un,
au lieu d'un;
dans le deuxième lien), mais l'ancienne méthode fait la distinction entre les triangles qui ont un nombre carré d'éléments et ceux qui n'en ont pas, mais ils doivent évidemment être comptés comme la même chose.la source
arctan2
c'était exactement ce dont j'avais besoin.Java 10,
274323298229 octetsPremière soumission triangulaire.
0
Désordre1
Rectangle3
Carré4
TriangleEssayez-le en ligne ici .
Édité plusieurs fois pour le jouer un peu plus.
Bien sûr, je pourrais économiser beaucoup d'octets en le transformant également en rectangle (
281267259200 octets, voir ici ).Le résultat de l'identification est manipulé à l'aide de ET au niveau du bit, ce qui donne un masque de bits comme suit:
Version non golfée:
la source
Javascript 125 octets
la source
Perl 5
-p
, 83 octetsEssayez-le en ligne!
la source
PHP,
195205 octetsLe triangle à l'envers ajoute 56 octets coûteux à cela!
Les sorties sont S, R, T, M
Enregistré quelques octets grâce à Dom Hastings.
Essayez-le en ligne!
Correction de quelques problèmes maintenant ... Les exécutions de test produisent cela.
la source
?>
devrait bien seT
pour l'cccc\na\naa\ncccc
essayer en ligne!Perl 6 , 81 octets
Essayez-le en ligne!
Renvoie
True
carré,False
rectangle,3
triangle,Nil
désordre.la source
$_ Z- .skip
?Stax , 39 octets
Exécutez et déboguez en ligne!
Réponse la plus courte en ASCII jusqu'à présent.
Explication
La solution utilise le fait suivant: Si quelque chose est explicitement imprimé dans l'exécution du programme, aucune sortie implicite n'est générée. Sinon, le haut de la pile à la fin de l'exécution est implicitement affiché.
la source
Haskell ,
113107103101 101 octetsEssayez-le en ligne!
Renvoie respectivement 0, 1, 2 et 3 pour mess, rectangle, square et triangle.
Edit: -2 octets grâce à Lynn !
la source
05AB1E ,
352927 octets8 octets enregistrés grâce à l' urne Magic Octopus
Essayez-le en ligne!
0
= Désordre4
= Triangle1
= Rectangle3
= Carréla source
gs€g©QP®¥ ÄP®1å&®ËJC
peut cependant ajouter un espace et unC
pour 21.R , 101 octets
Le code ne peut pas traiter avec 'ACCEPTATION NÉGATIVE' (U + 0015) ou le carré dans le code ci-dessus. Cet octet peut être changé pour quelque chose de différent si l'entrée requiert contient cet octet.
Essayez-le en ligne!
la source
readLines()
place descan()
?file("stdin")
pour qu'il soit lu à partir de la console (plutôt que les lignes de code suivantes). Cela signifie que ce sera probablement moins golfique. Et bien.Escargots, 29 octets
Touche de sortie:
Ce serait 23 octets sans mise en page source:
la source
Wolfram Language (Mathematica) , 119 octets
Utilisation
Replace
/.
et correspondance de motifs sur le nombre de caractères par ligne.Replace
va expulser le premier RHS d'une règle qui est mise en correspondance, donc l'ordre est de tester l'entrée à 1 caractère, puis les carrés, les rectangles, les triangles et un passage pour les dégâts.carré = 0, rectangle = 1, triangle = 2, désordre = 3
Essayez-le en ligne!
la source
Rouge , 209 octets
Essayez-le en ligne!
0
Désordre1
Carré2
Rectangle3
Trianglela source
AWK , 119 octets
Essayez-le en ligne!
Sortie:
0
= Carré1
= Rectangle2
= Triangle3
= Désordrela source
Rubis ,
115111 octetsEssayez-le en ligne!
Lambda anonyme. Les sorties:
la source
C (gcc) ,
125123 bytesMerci à plafondcat pour -2 octets.
Essayez-le en ligne!
la source