Ihre Mission besteht darin, eine Reihe von Punktpaaren einzugeben, die ein Diagramm bilden, wie folgt:
A, BC, AB, AA, DA, EF, GC, G.
Anschließend müssen Sie eine ASCII-Visualisierung des Diagramms ausgeben.
Zum Beispiel A,B C,A C,D
könnte sein:
A-----------------B
\
\
C---------D
Bearbeiten: Gemäß den Kommentaren gibt es hier einige Eingabeeinschränkungen:
- Jeder Knoten hat höchstens 5 Verbindungen (+20, wenn Sie mehr verarbeiten können)
- Der Graph ist planar, dh es kreuzen sich keine Linien (+200, wenn Sie auch nur eine Überkreuzung verarbeiten können!)
- Es gibt höchstens 16 Knoten (+20, wenn Sie mehr verarbeiten können)
Ihre Punktzahl beträgt 999 - (Ihre Codelänge) + (alle Boni) .
Starten sie ihre Motoren :)
code-golf
ascii-art
graphical-output
Soham Chowdhury
quelle
quelle
code-golf
,code-challenge
Oder was? Und was ist / sind das Gewinnkriterium / die Gewinnkriterien?code-golf
/ 10charAntworten:
Python 3, 168 Zeichen, Punktzahl = 999-168 + 240 = 1071
Nur Keith Randalls gute Antwort verkürzen .
In Python 3
print
ist eine Funktion und kann daher mit abgekürzt werdenp=print
. Speichert den3 * (4 - 1) - 8 = 1
Charakter.Wird in Python 3
input
anstelle vonraw_input
4 Zeichen verwendet.Anstelle von können
' '*len(V)
Sie verwenden' '*80
(oder etwas ähnliches). Dies führt zu einer erhöhten Anzahl von Leerzeichen, aber wen interessiert das schon ... wenn es weitere 4 Zeichen spart!Jetzt wird es interessant: Verwenden Sie anstelle von Zeichenfolgen Listen! Dies
S
erleichtert das Aktualisieren erheblich, erschwert jedoch das Drucken etwas. Ich werde die Liste anrufen,T
damit ich sie nicht mit der ZeichenfolgeS
von Marinus verwechsle .Beginnen wir damit, die Eckpunkte in eine Liste umzuwandeln, nicht in eine durch Leerzeichen getrennte Zeichenfolge, die 4 Zeichen speichert. Die Ausgabezeile
T
muss zu einer Liste (T=[' ']*40
) werden, die 2 Zeichen kostet.Das Drucken der aktuellen Zeile
T
wird 5 Zeichen länger: Ich benötige Klammern, um die Listen der Zeichenfolgen korrekt zu verketten, ich benötige zwei weitere-
Zeichen (da x und y jetzt nur etwa halb so groß sind) und ich brauche a*
, damit dieprint
Funktion ausgeführt wird die Elemente der Liste als separate Argumente und drucken sie getrennt durch Leerzeichen aus (und nicht als Liste!). (Dieser Schritt war schwer .)Die aktuelle Zeile kann mit einem einfachen
T[x]=T[y]="|"
statt aktualisiert werdenS=S[:x]+'|'+S[x+1:y]+'|'+S[y+1:]
, wodurch 19 Zeichen gespeichert werden.Zum
T
erneuten Drucken und zum endgültigen Drucken der Scheitelpunkte in Abständen werden Sternchen benötigt, die 2 Zeichen kosten.Und gerade während ich dies schreibe, sehe ich, dass es nicht schadet, einen nicht verbundenen unsichtbaren Scheitelpunkt zu haben (
' '
). Auf diese Weise können Sie die Scheitelpunkte viel kürzer erstellen und 4 weitere Zeichen sparen.Insgesamt ist die Einsparung
1 + 4 + 4 + 4 - 2 - 5 + 19 - 2 + 4 = 27
.Beispiel für die Wirkung von 9.: Eingang
A,B A,C
führt zu Ausgangquelle
''.join()
Müll, der es länger gemacht hat. Ich wusste nicht, dass das*T
Ding in Python3 existiert. Nächster Golf ...APL (
171166162 Zeichen, alle Boni: 999 -171166162 + 20 + 20 + 200 =106810731077)Dies ist das längste Golf-APL-Programm, das ich bisher geschrieben habe. Dies mag leicht betrügen, aber es gibt nichts in der Frage, was dies tatsächlich verbietet. Ich setze alle Knoten auf eine vertikale Linie und zeichne den Graphen als Bogendiagramm. Es ist offensichtlich immer noch eine Grafik.
Ich habe noch ein paar Stunden gebraucht.
Die Knoten müssen aus einfachen Großbuchstaben bestehen, sodass maximal 26 Knoten unterstützt werden. Es kann gekreuzte Linien verarbeiten, und jeder Knoten kann so viele Verbindungen haben, wie das Display verarbeiten kann.
Beispielausgabe:
quelle
Python, 195 Zeichen, Punktzahl = 999 - 195 + 20 + 200 + 20 = 1044
Jede Kante bekommt eine Reihe. S ist eine Zeichenfolge mit den vertikalen Verbindungen, die wir beim Erstellen des Diagramms beibehalten müssen.
Hier sind einige Beispiele für die Eingabe / Ausgabe:
und von Marinus gestohlen:
quelle