Ihre Aufgabe ist es, ein Programm zu erstellen, das die Form der Eingabe identifiziert. Die zu identifizierenden Formen können folgende sein:
Platz
Um als Quadrat identifiziert zu werden, muss die Quelle Zeilen mit der gleichen Länge und der gleichen Anzahl von Zeilen wie Zeichen pro Zeile enthalten (Zeilenumbruch ausgeschlossen). Ein optionaler abschließender Zeilenumbruch ist zulässig.
$_='
$_="
$_"'
;say
Rechteck
Um als Rechteck identifiziert zu werden, muss die Quelle Zeilen mit der gleichen Länge haben, aber die Anzahl der Zeilen stimmt nicht mit der Anzahl der Zeichen pro Zeile überein (Zeilenumbruch ausgeschlossen). Ein optionaler abschließender Zeilenumbruch ist zulässig. Dies kann entweder horizontal oder vertikal sein.
$_=
"no
t a
squ
are
";#
$_="but it
is still a
consistent
shape!";##
Dreieck
Um als Dreieck identifiziert zu werden, muss die Quelle entweder mit einem Zeichen beginnen und jede nachfolgende Zeile muss ein zusätzliches Zeichen (einschließlich des letzten Zeichens) enthalten, oder nach der ersten Zeile sollte jede nachfolgende Zeile bis zur letzten Zeile ein Zeichen weniger enthalten hat nur einen.
$
_=
"So
this
"."".
shape;
$_="or
even,
this
way
!!
"
Chaos
Alles, was nicht einem einheitlichen Format wie oben folgt, muss als Durcheinander identifiziert werden.
Regeln
- Sie können vier konsistente druckbare Werte zurückgeben, um jede Form zu identifizieren.
- Ihr Quellcode muss sich auch an eine der oben genannten Formen halten (nein, kein Durcheinander).
- Eine einzelne nachgestellte Zeile in Ihrer Quelle ist akzeptabel.
- Sie können davon ausgehen, dass die Eingabe keine Leerzeilen (einschließlich nachfolgender Zeilenumbrüche) enthält, nicht leer ist und nicht nur aus Zeilenumbrüchen besteht.
- Alle Formen müssen eine Höhe und Breite von> = 2 haben, andernfalls wird dies als Durcheinander definiert.
- Standardlücken sind verboten.
- Die kürzeste Lösung in Bytes in jeder Sprache gewinnt.
quelle
All shapes must have a height and width of >= 2.
['abc','cfd','fgh']
?Antworten:
Gelee , 35 Bytes
Probieren Sie es online!
0
= Durcheinander1
= Rechteck2
= Quadrat3
= Dreieckquelle
Brachylog , 45 Bytes
Probieren Sie es online!
Code ist ein Rechteck (trotz der Darstellung auf meinem Bildschirm). Ausgänge: 1 für Quadrat, 2 für Rechteck, 3 für Dreieck und nichts für Chaos
Erläuterung:
quelle
Java 10,
231221219217213211207 BytesFunktion ist selbst ein Rechteck.
1
= Quadrate;2
= Rechtecke;3
= Dreiecke;0
= Durcheinander.-14 Bytes dank @ OlivierGrégoire .
Erläuterung:
Probieren Sie es online aus.
quelle
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;}
(doppeltes Leerzeichen danachvar
, Zeilenumbruch danachD=L-l;
.D==-1|D==1
anD>-2|D<2
. Dieses undl==1|L==1
jenes könnte mit einigen bitweisen Operationen besser Golf spielen, aber das ist nicht wirklich mein Fachwissen.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 danachD=L-l;++
). Immer noch golffähig, indem man den Loop und die Aussage danach in einem zusammenführt, aber ich verstehe jetzt nicht, wie.Python 2 ,
129114109107113 BytesProbieren Sie es online!
Druckt
0
=Mess
1
=Triangle
2
=Square
3
=Rectangle
quelle
Jelly ,
3227 BytesProbieren Sie es online!
Nehmen Sie nun die Eingabe in einer Liste von Zeilen vor und schalten Sie
>1×
mit’a
und usingSƲ
afterL€
stattFLƲƊ
. Dadurch konnte ich mich in zwei Zeilen zusammenfassen und insgesamt 5 Bytes einsparen. Die folgenden Werte sind dieselben wie zuvor.[0.0, 0.0]
= Durcheinander[0.0, 1.5707963267948966]
= Rechteck[0.0, 0.7853981633974483]
= Quadrat[1.5707963267948966, 0.0]
= DreieckZL«L
erhält das Minimum an Höhe und Breite und’
subtrahiert 1 davon.Ç
ruft den zweiten Link auf und am Ende, wenn die Eingabe eine einzelne Zeile ist, wird das Ergebnis vonÇ
mit der vorherigen Nummer logisch UND-verknüpft, wenn es nur eine einzelne Zeile gibt, wird die Ausgabe erfolgen[0.0, 0.0]
.Im zweiten Link:
,U
Gibt eine Liste der Zeilenlängen in Kombination mit der Umkehrung zurück.J
istrange(number of lines)
und⁼€
prüft, ob jeder von ihnen gleich dem Ergebnis von istJ
.Ẹ
(Any) ergibt 1, wenn die Eingabe ein Dreieck ist.E
prüft, ob alle Zeilenlängen gleich sind (Rechteck / Quadrat).SƲ
Mit a$
, um sie zu einer einzelnen Monade zu gruppieren, wird überprüft, ob die Gesamtzahl der Zeichen eine quadratische Zahl ist.Am Ende des zweiten Links steht also,
[[a,b],c]
wo sich jede Zahl befindet0
oder1
ob die Eingabe ein Dreieck, ein Rechteck oder eine quadratische Anzahl von Zeichen ist.Eine quadratische Anzahl von Elementen bedeutet jedoch nicht, dass die Eingabe ein Quadrat ist, da eine unordentliche Eingabe wie
hat eine quadratische Anzahl von Elementen, ist aber kein Quadrat.
Hier kommt
æA
(arctan2) ins Spiel.0æA0
==0æA1
==0
. Mit anderen Worten, wenn die Eingabe eine quadratische Anzahl von Elementen hat, jedoch kein Rechteck ist, ist sie kein Quadrat. Es gibt sicherlich klarere Wege, um dies zu tun, aber was macht das schon, wenn wir über Bytes nachdenken müssen und wir die Möglichkeit haben, willkürlich konsistente Ausgaben zu machen.Hinweis: Früher habe ich
æA/
anstelle vonæAƝ
(und,
anstelle von a;
im zweiten Link) verwendet, aber die erstere Methode unterscheidet zwischen Dreiecken mit einer quadratischen Anzahl von Elementen und solchen, die keine haben, aber sie sollten offensichtlich als dasselbe gezählt werden.quelle
arctan2
war genau das, was ich brauchte.Java 10,
274323298229 BytesErste Dreieckseinreichung.
0
Chaos1
Rechteck3
Platz4
DreieckProbieren Sie es hier online aus .
Mehrmals bearbeitet, um ein bisschen mehr Golf zu spielen.
Natürlich könnte ich eine Menge Bytes sparen, indem ich dies ebenfalls in ein Rechteck verwandle (
281267259200 Bytes, siehe hier ).Das Ergebnis der Identifikation wird mit bitweisem AND manipuliert und ergibt eine Bitmaske wie folgt:
Ungolfed-Version:
quelle
Javascript 125 Bytes
quelle
Perl 5
-p
, 83 BytesProbieren Sie es online!
quelle
PHP,
195205 BytesDas umgedrehte Dreieck fügt diesem 56 Bytes hinzu!
Ausgänge sind S, R, T, M
Ein paar Bytes gespart dank Dom Hastings.
Probieren Sie es online!
Einige Probleme wurden behoben ... Testläufe erzeugen dies.
quelle
?>
sollte nur in Ordnung seinT
fürcccc\na\naa\ncccc
Try it online zurückzukehren!Perl 6 , 81 Bytes
Probieren Sie es online!
Gibt
True
für Quadrat,False
für Rechteck,3
für Dreieck,Nil
für Chaos zurück.quelle
$_ Z- .skip
?Stax , 39 Bytes
Online ausführen und debuggen!
Kürzeste reine ASCII-Antwort.
Erläuterung
Die Lösung nutzt die folgende Tatsache: Wenn bei der Ausführung des Programms explizit etwas gedruckt wird, wird keine implizite Ausgabe generiert. Andernfalls wird implizit die Stapelspitze am Ende der Ausführung ausgegeben.
quelle
Haskell ,
113107103101 BytesProbieren Sie es online!
Gibt 0, 1, 2 und 3 für Chaos, Rechteck, Quadrat bzw. Dreieck zurück.
Edit: -2 Bytes dank Lynn !
quelle
05AB1E ,
352927 Bytes8 Bytes gespart dank Magic Octopus Urn
Probieren Sie es online!
0
= Durcheinander4
= Dreieck1
= Rechteck3
= Quadratquelle
gs€g©QP®¥ ÄP®1å&®ËJC
kann aber ein Leerzeichen und einC
für 21 hinzufügen .R 101 Bytes
Der Code kann nicht mit 'NEGATIVER BESTÄTIGUNG' (U + 0015) oder dem Quadrat im obigen Code umgehen. Dieses Byte kann auf etwas anderes umgeschaltet werden, wenn der Eingang dieses Byte enthält.
Probieren Sie es online!
quelle
readLines()
statt verwendenscan()
?file("stdin")
, dass es von der Konsole gelesen werden soll (und nicht von den nächsten Codezeilen). Das heißt, es wird wahrscheinlich weniger Golf sein. Ah, gut.Schnecken, 29 Bytes
Ausgabetaste:
Ohne Quell-Layout wären es 23 Bytes:
quelle
Wolfram Language (Mathematica) , 119 Byte
Verwenden
Replace
/.
und Anpassen von Mustern für die Anzahl der Zeichen pro Zeile.Replace
Gibt die erste RHS einer Regel aus, die übereinstimmt. Die Reihenfolge ist also, nach der Eingabe von 1 Zeichen zu suchen, danach nach Quadraten, Rechtecken, Dreiecken und einem Durchfall für Unordnung.Quadrat = 0, Rechteck = 1, Dreieck = 2, Durcheinander = 3
Probieren Sie es online!
quelle
Rot , 209 Bytes
Probieren Sie es online!
0
Chaos1
Platz2
Rechteck3
Dreieckquelle
AWK , 119 Bytes
Probieren Sie es online!
Ausgabe:
0
= Quadrat1
= Rechteck2
= Dreieck3
= Durcheinanderquelle
Ruby ,
115111 BytesProbieren Sie es online!
Anonymes Lambda. Ausgänge:
quelle
C (GCC) ,
125123 BytesDanke an ceilingcat für -2 Bytes.
Probieren Sie es online!
quelle