Zum Üben im Golf habe ich die Aufgaben im Intro-to-Python-Kurs meiner Freundin ausgeführt. Ich fand heraus, dass es für diese Aufgabe mehrere Strategien gab, die in der Anzahl der Charaktere sehr nahe kamen, und ich bin sicher, dass die Leute hier noch bessere Wege finden können. Obwohl ich am meisten an Möglichkeiten interessiert bin, dies in Python zu tun, würde ich gerne wissen, welche Möglichkeiten dieses Programm bietet. Daher ist dies Codegolf und die kürzeste Antwort gewinnt.
Die Regeln:
Die Zuordnung ist unten aufgeführt. Der Benutzer sollte zweimal zur Eingabe aufgefordert werden, obwohl die Eingabeaufforderungen nichts zu sagen haben und sich in einer anderen Reihenfolge befinden können.
Es gelten Standardlücken.
Aufgabe 3: Pfeile
Schreiben Sie ein Programm, das den Benutzer zur Eingabe einer Reihe von Spalten auffordert und das Muster wie unten gezeigt druckt. Sie können davon ausgehen, dass der Benutzer positive Zahlen liefert. Ihr Programm sollte sowohl mit dem linken als auch mit dem rechten Pfeil umgehen können. Hier einige Beispielläufe:
How many columns? 3
Direction? (l)eft or (r)ight: r
*
*
*
*
*
How many columns? 5
Direction? (l)eft or (r)ight: l
*
*
*
*
*
*
*
*
*
Antworten:
Pyth, 23 Bytes
Kann gültig oder ungültig sein, basierend auf der Antwort auf diesen Kommentar . Ungeachtet dessen fand ich dies ordentlich, und wenn es ungültig ist, sind die anderen Pyth-Antworten ebenfalls ungültig. ;)Na ja, es ist gültig , weil ich anscheinend das offensichtlichste verpasst habe. : /EDIT: Ich habe gewonnen !!!! JAAA!!!! Das erste Mal! : D
Live-Demo.
quelle
m+*\ d\*Q
stattdessen aufzählen Ding. Spart 2 Bytes.Pyth, 27
Probieren Sie es online aus
Die Grundidee hier ist, eine Zeichenfolge zu erstellen, die beispielsweise wie folgt aussieht:
Und dann drehen Sie es auf den Kopf, wenn wir
l
als Eingabe erhalten. Dann nehmen wir alle bis auf die letzteninput-1
Zeilen dieser Zeichenfolge und drucken sie aus.quelle
Python 2,
8179 BytesKönnte noch golffähig sein, aber wir werden sehen :)
quelle
l
undr
. Ich hatte nicht bemerkt, dass die Eingabeeval
in derselben Umgebung wie der Code erfolgt.Pyth,
302827 BytesProbieren Sie es online aus.
Anscheinend bin ich derzeit mit FryAmTheEggman mit einem ganz anderen Ansatz verbunden. (Ich denke, dass man genial ist.)
Beispiel
Erläuterung
quelle
PowerShell,
9185102 Bytes$c
. Wir subtrahieren eine, weil jede Spalte auch eine hat*
und uns nur interessiert, wie viele Leerzeichen benötigt werden.1
, wird gedruckt*
und beendet - der Rest des Skripts spielt keine Rolle. +-eq
abgefragt und geprüftl
, ob dies tatsächlich der Fall ist. Anschließend wird ein Array basierend auf der Indizierung in ein Array dynamisch generierter Arrays basierend auf dem Wert von erstellt$c
. Zauber. Im Wesentlichen ist dies die Anzahl der Leerzeichen pro Zeile, die wir benötigen.5 r
würde für diese Sammlung gelten(0,1,2,3,4,3,2,1,0)
.%
Schleife weiter, in der wir eine Zeichenfolge mit einer Anzahl von X Leerzeichen ausgeben*
Anwendungsbeispiel:
Bearbeiten - Variable
$e
durch direktes Weiterleiten der Sammlung entfernen. Bearbeiten2 -Kontiert jetzt korrekt 1 Spalte
+ Wenn die Eingabe der Richtung für einspaltige Pfeile immer noch obligatorisch ist (ich behaupte, dass dies nicht der Fall ist), können wir die Position von tauschen
Read-Host
und ein paar weitere Bytes verlieren, indem wir die$d
Variable für 106 erneut einfügen :quelle
TI-BASIC,
756557545047 BytesVielen Dank an @ThomasKwa für die korrekte Byte-Berechnung und das Golfen von 10 Bytes .
Getestet auf meinem TI-84 + Silver Edition.
Erste TI-BASIC Einreichung, Golf Vorschläge willkommen (ich kenne noch nicht viele Tricks). Wenn der Name einen Faktor im angezeigten Speicher spielt, waren dies 3 Zeichen anstelle von 1 (ich habe die Byteanzahl auf meinem Rechner selbst überprüft). Dieses Programm ist durch die
output
Funktionseinschränkungen begrenzt (ich denke an Pfeile der Länge 4), aber ich könnte wahrscheinlich auf umschaltentext
, was grafisch angezeigt wird, wenn das eine zu geringe Länge hat.Beachten Sie, dass dadurch auch der Bildschirm nicht gelöscht oder angehalten wird.
Ich habe wirklich das Gefühl, dass die Gleichung, die ich benutze, mehr Golf spielen kann. Es fühlt sich auch so falsch an, das endende Anführungszeichen auszuschließen.
quelle
Ans
ist kostenlos, da Sie es nicht für Eingaben verwenden undOutput(
nicht ändernAns
. Verwenden Sie es und entfernen Sie die VariableA
. Sie können zuweisen mit-2(Str1="R
; keine Notwendigkeit für eine Bedingung.-2
. Mach einfachStr1="R
für die zweite Zeile. Das ist die vierte ZeileOutput(I,(1-2Ans)abs(I-L)+AL+1,"*
, die Ihnen 4 weitere Bytes einbringt. Aber warte, es gibt ein Idiom für(1-2Ans)
- escos(πAns)
spart ein Byte plus eins mehr, weil wir die offene Klammer kostenlos bekommen!Python 2, 89 Bytes
Funktioniert fast identisch mit meiner Pyth-Antwort und berechnet nur die richtige Anzahl von Leerzeichen im laufenden Betrieb.
quelle
PowerShell,
104 10297 ByteNB. Wenn Sie es erneut ausführen möchten, öffnen Sie eine neue PowerShell oder
rv o
setzen Sie den Variablenstatus zurück.Verglichen mit der Knappheit der anderen tut das weh. [Tut mit 97 weniger weh als mit 122]. Zwei Teile, von denen keiner sehr überraschend ist; Liest eine Reihe von Spalten, verwendet einen Array-Index-Ternär-Operator-Ersatz, um einen Versatz zu erhalten, und durchläuft eine Wellenfunktion, die am Versatz beginnt (und eine Optimierung, damit es nicht umkippt
mod 0
).(Und autsch habe ich ewig mit dieser Wellenfunktion verbracht, ohne mein Missverständnis zu erkennen und all die ehrlichen Parens, die es nicht gibt, zu tippen).
quelle
Python 2,
9889 BytesEtwas länger.
Verwendung
quelle
NameError: name 'l' is not defined
,NameError: name 'd' is not defined
.i
undd
überhaupt, nur mitrange(P())
undif P()=='l'
...)f=[...][::2*('r'>input())-1]
eigentlichPerl, 85 Bytes
Verwendung:
quelle
simplearrows2.pl
scheint nicht so gut zu sein! : PPHP, 156 Bytes
Erstellt zwei Arrays wie folgt:
Verwenden Sie dann die Array-Vereinigung
$s+$t
oder$t+$s
kombinieren Sie sie undarray_splice
entfernen Sie das Element in der Mitte. Zuletzt ausgegeben mit<?=join()
quelle
Python 2,
111109104 BytesZiemlich einfache Lösung. Ich bin sicher, es kann mehr Golf gespielt werden. Für diejenigen, die nicht wissen,
~x+n
ist das gleiche wien-1-x
.Probieren Sie es online aus
Bearbeiten : Dies wurde in die letzte Zeile gespielt:
quelle
Matlab,
10910596 BytesVielen Dank an @beaker, der mir 9 Bytes gespart hat .
quelle
x=x*10+32;
Ruby, 118 Bytes
2.times{
- natürlich zweimal ...l,d=gets.split;
- Holen Sie sich die Eingabel=l.to_i;
- Länge in eine ganze Zahl änderna=(d=="r"?(0..l-1):(l-1).downto(0)).to_a;
- Erstellen Sie ein Array aus dem Bereich von 0 bis zur Länge(a+a[0..-2].reverse).each{|x| puts "#{' '*x}*"}
- iterieren, in die Saiten drehen, um die Pfeile zu machenNicht gerade der beste Golf aller Zeiten, aber hey.
quelle
PowerShell,
9894 BytesWenn ich einen Weg finden könnte, den Read-Host für die Richtung in die foreach-object-Schleife zu setzen, aber erst dann zur Eingabe auffordern könnte, wenn ich in der Lage wäre, ein paar Bytes zu speichern.
Edit: 94 Bytes. Anstatt nach links zu testen, testen Sie nach rechts (vereinfacht die Schleife).
Ursprüngliche 98 Byte:
quelle
$_
Variablen - trickreicher Hobbit. Sehr klug und ich habe heute etwas gelernt.> <> 60 Bytes
2 verschwendete Bytes in der unteren Zeile, wie irritierend!
Aufgrund der Funktionsweise der Eingabe in> <> kann nicht auf die Eingabe
i
gewartet werden. Der Befehl prüft, ob in STDIN ein Eingabezeichen verfügbar ist. Ist dies der Fall, wird der ASCII-Wert dieses Zeichens und andernfalls -1 übertragen.Dies bedeutet, dass für die Verwendung dieses Programms die Nummer und die Richtung bereits auf STDIN bereit sein müssen, z. B.
3r
für einen nach rechts zeigenden Pfeil der Größe 3. Ich bin mir nicht sicher, ob das diesen Eintrag disqualifiziert, lass mich deine Gedanken wissen: o)Ich werde auch eine Beschreibung schreiben, wenn jemand eine will.
quelle
:
für 10PHP, 154 Bytes
Es sieht wirklich repetitiv aus, aber es tut das Gewünschte:
Läuft von der Kommandozeile aus wie:
quelle
Python, 88 Bytes
Bearbeitet
quelle