Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die einen Reißverschluss mit einer Länge von 10 Zeilen erzeugt. Jede Zeile des Reißverschlusses wird durch zwei Bindestriche dargestellt --
:
--
--
--
--
--
--
--
--
--
--
Das Programm / die Funktion nimmt einen Prozentsatz (teilbar durch 10) als Eingabe, und die Ausgabe ist der Reißverschluss, der von oben durch den Prozentsatz "entpackt" (Bindestriche getrennt) wird. Dabei wird die 1-indizierte niedrigste Ebene angezeigt, die zweimal mit wiederholt wird Alle vorherigen Levels wurden wiederholt 4, 6, 8, ... usw. Mal, während der Boden des Reißverschlusses zentriert bleibt.
Beispiele
>>10%
-11-
--
--
--
--
--
--
--
--
--
>>50%
-1111111111-
-22222222-
-333333-
-4444-
-55-
--
--
--
--
--
>>100%
-11111111111111111111-
-222222222222222222-
-3333333333333333-
-44444444444444-
-555555555555-
-6666666666-
-77777777-
-888888-
-9999-
-10-
Die Eingabe (in Prozent) kann beliebig formatiert werden (50%, .5, 50, 5 [impliziert null] usw.) und liegt immer im Bereich von 0 bis 100 und ist durch 10 teilbar Beispiele müssen in Ihrer Ausgabe erhalten bleiben.
0%
? Dürfen wir die Eingabe durch 10 teilen? zB statt50%
bekommen5
?5
?Antworten:
Python 2 -
184151146 BytesDie letzte Nummer hat mich ein bisschen durcheinander gebracht. Ich kann die zweite if-Anweisung möglicherweise entfernen, wenn ich sie später anschaue.
EDIT: Danke an mbomb007 zum Entfernen von 3 Bytes. Vielen Dank an charredgrass für die Formatierungstipps, mit denen Sie viele, viele Bytes entfernen können! :-D Danke an TheBikingViking für die Hilfe bei zwei weiteren Bytes!
quelle
i>9
anstelle voni==10
und entfernen Sie das Leerzeichen inrange(1, 11)
.p=" "*(i-1);print"%s-%s-"%(p,str(i)*2*n);n-=1
.(i-1)
in der letzten Zeile durch ersetzen~-i
. Dies nutzt die Priorität des Operators und die Tatsache, dass ein Bit-Flip gefolgt von einer Negation dasselbe ist wie das Subtrahieren1
.range(1,11)
und dann(i-1)
?Python 2, 74 Bytes
Zwei Bytes von gespeichert
exec
gespart, dank Dennis eine Schleife aktiviert wurde.EDIT: Ich habe einen etwas anderen Ansatz gewählt und zwei weitere Bytes gespeichert.
quelle
'-'+`x+1`*(n-x<<1-x/9)+'-'
in derexec
Schleife durch ersetzen'-%s-'%`x+1`*(n-x<<1-x/9)
.`x+1`*(n-x<<1-x/9)
.PowerShell v2 +,
130120116110 ByteEdit 1 - 10 Bytes durch Eliminieren von
$x
Variablen und leichtes Wiederholen der Formulierung der Zeichenfolge.Edit 2 - Weitere 4 Bytes durch Wiederholen der Eingabe und Wiederholen der
$i
Berechnung der einzelnen Schleifen.Edit 3 - 6 Bytes durch OP gespeichert, Eingabe als
0..10
, daher muss nicht durch 10 geteilt werden.Überraschend schwer!
Übernimmt die Eingabe als
1
,5
usw., gespeichert in$n
. Legt die$i
Hilfsvariable fest (eine der sehr seltenen Situationen, in denen eine Variable0
in PowerShell initialisiert werden muss ) und startet dann eine Schleife von10
bis1
.Bei jeder Iteration setzen wir den Anfang unseres Strings mit einer Anzahl von Leerzeichen
$i
, gefolgt von einem Pseudoternär(... , ...)[]
. Innerhalb des Pseudoternärs wählen wir eine Zeichenfolge aus, entweder-
mit einer Anzahl von Ziffern (der höheren von$n-10+$_
oder0
, multipliziert mit 2) oder der Zeichenfolge-10
- die Auswahl basiert darauf, ob wir uns bei der 10. Iteration befinden und unsere Eingabe erfolgte100
. Wir verketten das mit einem Finale-
. Diese resultierende Zeichenfolge wird in die Pipeline eingefügt.Schließlich erhöhen wir uns
$i
, und das war wirklich schwierig. Wir haben einen Binär-Cast-to-Int-Trick verwendet, um nur$i
bis zum Erreichen zu erhöhen$n
und ihn anschließend auf dem gleichen Wert zu halten. Dies stellt sicher, dass wir das "Ende" der Reißverschlusseinrückung auf der entsprechenden Ebene erreicht haben.Sobald die Schleife beendet ist, werden alle resultierenden Zeichenfolgen in der Pipeline akkumuliert und die Ausgabe ist implizit.
Beispiele
quelle
Pyth,
3734 BytesTestsuite.
quelle
Python,
9584 BytesIch wusste nicht, dass Lambdas legal sind, danke an Dr. Green Eggs und Iron Man
quelle
join
können einen Generator direkt übernehmen.lambda p:'\n'.join(' '*min(p,l)+'-'+(2-(l==9))*(p-l)*str(l+1)+'-'for l in range(10))
(84 Bytes)MATL ,
484135 BytesProbieren Sie es online!
quelle
Ruby, 74 Bytes
Verwendet das implizierte-Null - Format in der Frage angegeben, so
40%
ist ,f[4]
wenn die anonyme Funktion zugewiesen istf
. Wenn ein vollständiger Prozentsatz benötigt wird, +6 Bytes fürn/=10;
Probieren Sie es online!
quelle
Python 3,
98, 90, 87, 85 Bytes.Nimmt die Zahl bereits durch 10 geteilt. Ich kann wahrscheinlich einige der Parens entfernen, aber dies ist ziemlich geschlossen, um vollständig Golf zu spielen.
quelle
Haskell, 83 Bytes
quelle
++"-"
?Javascript es7, 105 Bytes
mit anrufen
quelle
The program/function ...
- kein Ausschnitt\n
durch eine aktuelle Zeile ersetzen , können Sie ein Byte speichern.Python 2.7,
11310877 Bytesn = Eingabe ()für x im Bereich (0,10):
v = str (x + 1) * (nx) 2,
wenn x n> 89: v = '10 '
print' '* min (x, n) + '-' + v + '-'
Zum ersten Mal Golf spielen. Ich werde weitermachen und versuchen, es auf <100 zu bringen.
Angenommen, die Eingabe ist 1-10.
Edit: Benutzte ein paar Tricks aus @LeakyNuns Antwort (danke), knackte sie dann ein bisschen weiter und bekam ... im Grunde die gleiche Antwort: / Wusste nichts über die `int` Stringkonvertierung, und 2 - boolean ließ mich Entfernen Sie die if-Anweisung, mit der ich die gesamte v-Variable entfernen kann. Sehr cool.
Meine Version:
quelle
n=input(); for x in range(0,10):print' '*min(x,n)+'-'+('10'if x*n>89 else str(x+1)*(n-x)*2)+'-'
Python 2, 81 Bytes
Ideone es!
quelle
Python 2.7,
110999591 Bytes:Ein vollständiges Programm , das Eingang durch eine ganze Zahl im inklusiven Bereich erfolgt
[1,10]
, in dem10
Mittel100%
und1
Mitteln10%
. Kann wahrscheinlich ein bisschen mehr golfen werden.Probieren Sie es online! (Ideone)
quelle
PHP 5.3,
9291 Bytesregister_globals=1
undshort_open_tags=1
(underror_reporting=0
)in cli mit aufrufen
php-cgi -f <filename> n=<number>
<scriptpath>?n=<number>
: voranstellen<pre>
?:
durch?1:
(+1)$n
mit($n=$_GET[n])
(+11)ungolfed als Funktion (beliebiges PHP> = 4.0.1)
Testsuite
Das ist neu für mich: PHP schlägt JavaScript.
Diese Herangehensweise ist, glaube ich, auf die Minute genau Golf.
quelle
STR_PAD_BOTH
Was ist das, K & R C? Tun wir das auch#define
in PHP? :-)Julia, 73 Bytes
Erste Julia Antwort! Trinkgelder sind erwünscht.
Probieren Sie es online!
quelle
Perl, 122 Bytes
quelle
Common Lisp (Lispworks), 314 Byte
nicht vergoldet:
Verwendung:
quelle
APL, 46 Bytes
Das Argument sollte als Prozentsatz geteilt durch 10 angegeben werden (das heißt: eine einfache ganze Zahl im Bereich [0,10]).
quelle