Jeder liebt Geometrie. Warum versuchen wir nicht, Golf zu programmieren? Diese Herausforderung besteht darin, Buchstaben und Zahlen aufzunehmen und daraus Formen zu machen.
Die Eingabe
Die Eingabe erfolgt in Form von (shapeIdentifier)(size)(inverter)
.
Aber was sind ShapeIdentifier, Größe und Inverter?
Der Formbezeichner ist der Bezeichner für den Formtyp, den Sie mit *
s erstellen . Im Folgenden sind die Formbezeichner aufgeführt:
s
- Platzt
- Dreieck
Die Größe wird zwischen 1-20
und es ist die Größe der Figur.
Der Wechselrichter gibt an, ob die Form auf dem Kopf steht oder nicht, was durch a +
oder a gekennzeichnet ist -
. Beachten Sie: s3-
== (gleich), s3+
da die Quadrate symmetrisch sind. Allerdings t5-
! = (Nicht gleich) t5+
.
Nachgestellte Leerzeichen sind in der Ausgabe in Ordnung, führende Leerzeichen jedoch nicht.
Ausgabebeispiele
Input: s3+
Output:
***
***
***
Input: t5+
Output:
*
***
*****
Input: t3-
Output:
***
*
Besondere Hinweise
Die Dreieckeingabe ist immer eine ungerade Zahl, sodass die Dreiecke immer mit 1 *
oben enden .
Die Größe des Dreiecks ist die Größe der Basis, wenn der Wechselrichter ist,
+
und die Größe der Oberseite, wenn der Wechselrichter ist-
.
quelle
Antworten:
Pyth,
40363432 Bytes-1 Byte von @isaacg
Ein Semikolon in einem Lambda ist jetzt der globale Wert der Lambda-Variablen, wodurch ein Byte gespart wird.
Probieren Sie es hier aus .
Testsuite .
quelle
qez\+
mit}\+z
, denn+
nur in der letzten Position angezeigt.Pyth, 38 Bytes
Testsuite
Grundsätzlich so einfach wie es nur geht. Ich wünschte, ich könnte einen Teil der Logik für die beiden Formen kombinieren, aber derzeit ist sie getrennt.
quelle
JavaScript (ES6), 142
146 147Edit 1 Byte gespeichert dank @ETHproductions Edit 2 Byte gespeichert dank @ user81655
Test (in FireFox ausführen)
quelle
\d
->.
, da es garantiert genau eine Stelle vor und nach dem gibti.match(/.(.+)(.)/)
->i.match`.(.+)(.)`
Python 2, 106 Bytes
Die Ausgabe ist ein perfektes Rechteck, wobei jede Zeile mit nachgestellten Leerzeichen aufgefüllt ist. Ich gehe davon aus, dass dies aufgrund der Kommentare im OP in Ordnung ist.
Hinweis: Ich bin mir immer noch nicht sicher, ob
input
Python 2 für solche Probleme zugelassen ist ...quelle
Japt,
6260555251 BytesProbieren Sie es online!
Als erstes müssen wir herausfinden, wie groß unsere Form sein muss. Das ist ziemlich einfach:
Nun organisieren wir die Form der Ausgabe:
Inzwischen haben wir uns um die Größe und Form der Ausgabe gekümmert. Alles was übrig bleibt ist die Rotation. Dreiecke sind momentan nach oben gerichtet, also müssen wir sie umdrehen, wenn das dritte Zeichen lautet
+
:Und mit impliziter Ausgabe ist unsere Arbeit hier erledigt. :-)
quelle
Python 2,
235193167157 BytesAktualisieren:
Einige signifikante Optimierungen mithilfe von Listenverständnissen und str.center () vorgenommen. Ich habe das Gefühl, dass ich noch mehr tun kann, um es mir später noch einmal genauer anzusehen.
Update 2
Sparte 10 Bytes mit den Vorschlägen von Sherlock9. Vielen Dank! :)
Alte Antwort
Ziemlich geradliniger Ansatz. Zeile für Zeile in eine Zeichenkette schreiben, die ich am Ende ausgegeben habe. Dreiecke werden immer invertiert gezeichnet und bei Bedarf umgekehrt. Die Tatsache, dass Sie eine Zeichenfolge mit einer Ganzzahl multiplizieren können, hat mir viele Bytes erspart!
Ich werde versuchen, das etwas später abzuspielen, würde mich in der Zwischenzeit über Anregungen freuen, da ich noch nicht so viel Erfahrung damit habe.
edit: Habe es mit der Hilfe in den Kommentaren viel runtergespielt und die Größenberechnung aus einer der anderen Python-Antworten gestohlen. Ich denke, das ist das Beste, was ich mit diesem Algorithmus machen kann.
quelle
wc
ich das benutze, bekomme ich eine Byteanzahl von 235. Irre ich mich?raw_input
, mitinput
sparen Sie 4 Bytes. Außerdem brauchen Sie die Klammern in der zweiten Zeile nicht, und wenn Sie die Variablex
überhaupt nicht verwenden (usingif"s"in d
), sparen Sie weitere 9 Bytes.[]
Klammern in jedemjoin
Funktionsaufruf entfernen . Zweitensif d<"t"else
ist kürzer und funktioniert da"s3+"<"t"<"t3+"
in Python. Drittenselse"\n".join
und.center(x)for
. Kein Platz. Es ist nicht erforderlich. Viertens,print o[::-1]if"+"in d else o
wo ich Dinge für zwei Bytes neu angeordnet habe (ein Leerzeichen zwischen]
undif
und ein anderes zwischenif
und"+"
.JavaScript, 220 Byte.
Laufen Sie mit
f(input here)
Probieren Sie es hier aus!
Die Quadrate haben nachgestellte Zeilenumbrüche, die Dreiecke jedoch nicht. Erläuterung:
quelle
Python 2,
157132 BytesDer erste Versuch stellte sich heraus, dass das
+/-
Ende optional warDie Idee hier ist, eine Liste zu erstellen, die in eine generische Ausgabe geworfen werden kann. Am schwierigsten war es, die Länge von der Eingabe zu trennen.
quelle
x=int(d[1]if len(d)<4 else d[1:3])
d als Eingabezeichenfolge verwendet. Das sind 5 Bytes kürzer als Ihre Lösung. Du bist meiner Python-Antwort immer noch weit voraus, musst versuchen zu verstehen, was du dort getan hast und dich das nächste Mal besiegen! :)x=int(d[1:-1])
ist das viel kürzer, habe es nur in der anderen Python-Antwort gesehen.Retina ,
102 bis85 BytesDie Byteanzahl setzt voraus, dass der Quellcode als ISO 8859-1 codiert ist.
Probieren Sie es online aus.
Ich versuche das später noch einmal.
quelle
\n
verwendet\r\n
. Base64 des Inhalts:XGQrCiQwJCo6wrYKXigoXHcpKyk6KDorKQokMSQyJDMkMsK2JDAKbWBzJHw6dAoKKWAoLispwrYtKFxEKikKLSQywrYkMQptYF4uCgpHYC4KVGB0czpgICo=
(direkte Kopie von Notepad ++). Komischerweise gibt mir jede Online-Lösung 85 Bytes ... Hum ...¶
. Sie sind definitiv ein einzelnes Byte in ISO 8859-1 (mit dem Wert 182).Im Ernst, 54 Bytes
Probieren Sie es online
@Mego: Sehen Sie das
#dXdXεj
? STRING SLICING ????quelle
ES6,
178172159 BytesDies funktioniert aufgrund einer interessanten Beobachtung, die ich gemacht habe. Wenn Sie
n
Leerzeichen undn
Sternchen wiederholen , erhalten Sie (z. B.n=5
) Folgendes:Nehmen Sie nun Teilzeichenfolgen mit demselben Anfang und derselben Länge:
Diese Teilzeichenfolgen sind genau die Zeichenfolgen, die wir benötigen
t5
.Bearbeiten: 6 Bytes dank @ edc65 gespeichert.
Bearbeiten: 13 Bytes gespart, da
u+=v
das dritte Argumentsubstr
ausgeblendet wurde, um die Initialisierung zu vereinfachen.quelle
t
Behandlungscode es stellte sich heraus , dassw
undu
wurde gleichwertig und das rettete mich genug Bytes mich zurück zu nehmen bis zu 178![,b,c]=s.match
und späters<'t'
... sollten einige Bytes speichern (nur Firefox)s
erlaubt es mir zu verwenden,s<'t'
was mir 6 Bytes erspart hat , danke.MATL , 48 Bytes
Verwendet die aktuelle Version (10.1.0) der Sprache / des Compilers.
Der Code akzeptiert Eingabezeichen in beliebiger Reihenfolge: alle
s11+
,11s+
und selbst1+s1
würde gültige Eingabezeichenfolgen sein.EDIT (30. Juli 2016): der verknüpften Code ersetzt
1L3$)
durchY)
die jüngsten Änderungen in der Sprache anzupassenProbieren Sie es online!
Erläuterung
quelle
C 259 Bytes
ungolfed
Anregungen und Kritik sind sehr willkommen.
quelle
Rubin, 99
Berechnet ein Quadrat oder ein Dreieck mit der Höhe
n
und mittlerer Breiten
von verying die Neigung der Seiten (so das berechnete Breite Dreieck 2n-1 ist an der Basis 1 an der Spitze.) , Aber es nur druckt die Zeilen , die nicht überschreitenn
Zeichen.im Testprogramm ungolfed
quelle
Jolf, 37 Bytes, nicht konkurrierend
Ich habe Funktionen hinzugefügt, nachdem diese Herausforderung veröffentlicht wurde, sodass dies nicht für die Annahme berücksichtigt werden kann. Dies ist in ISO-8859-7 kodiert. Probieren Sie hier alle Testfälle aus .
Teil 1: Analysieren der Zeichenfolge
Teil 2: Das Ergebnis erhalten
Teil 3: Invertieren des Ergebnisses
quelle