Deine Aufgabe ist es, ein Magical 8-Trapez auszugeben:
1 × 8 + 1 = 9
12 × 8 + 2 = 98
123 × 8 + 3 = 987
1234 × 8 + 4 = 9876
12345 × 8 + 5 = 98765
123456 × 8 + 6 = 987654
1234567 × 8 + 7 = 9876543
12345678 × 8 + 8 = 98765432
123456789 × 8 + 9 = 987654321
- Ausgabe in der von Ihnen gewählten Sprache in möglichst wenigen Bytes.
- Notieren Sie die Anzahl der Leerzeichen am Anfang jeder Zeile, um die Trapezform beizubehalten.
- Nachgestellte Leerzeichen sind erlaubt.
- Sie können
×
oder den Buchstaben x verwenden - je nachdem, was Sie bevorzugen.
code-golf
kolmogorov-complexity
rybo111
quelle
quelle
Antworten:
Python 2, 59 Bytes
Die Zahlen
a
undi
die Gleichunga * 8 + i
werden rechnerisch erzeugt. Jede Zeilei
wird inkrementiert unda
die nächste Ziffer wird über angehängta=a*10+i
. Wenn zum Beispiela=12345, i=5
danni
wird6
, so ist das Neuea
das,12345*10 + 6
was ist123456
.Wenn Sie diese Werte als Zahlen und nicht als Zeichenfolgen speichern, können Sie die RHS gemäß der Gleichung berechnen
a*8+i
, die kürzer ist als das Umkehren von Zeichenfolgen.quelle
V , 37 Bytes
Probieren Sie es online!
Dies enthält nicht druckbare, also hier ist ein Hexdump:
quelle
05AB1E ,
32313028 BytesCode:
Verwendet die CP-1252- Codierung. Probieren Sie es online! .
quelle
.c
ist hier nicht verwendbar?PHP,
105896057 Bytesmein erster golf versuch hier (danke an manatwork & user55641)
59
89 (mein eigener Versuch)
105 (erste)
quelle
$t.=10-$i
mit$s*8+$i
. tio.run/##K8go@G9jXwAk0/…$s*8+$i
stattdessen$t.=10-$i
zwei weitere.Pyth, 32 Bytes
Probieren Sie es online!
Vielen Dank an @FryAmTheEggman für das Speichern von 2 Bytes. Vielen Dank an @KennyLau für das Speichern von 3 Bytes.
quelle
s
verbindet sich nicht mit Leerzeichen - es verbindet sich ohne Begrenzer.CJam,
393836 BytesDanke an Optimizer für das Speichern von 2 Bytes.
Teste es hier.
Gleiche Byteanzahl:
Hierfür ist die neueste Version erforderlich, die unter Online testen verfügbar ist.
quelle
Python 2,
87847875 BytesProbieren Sie es online aus
Eine frühere Version verwendet etwas String-Magie.
Das Casting
range(1,10)
zu einer Zeichenkette ergibt[1, 2, 3, 4, 5, 6, 7, 8, 9]
, und das ist schön, da jede Zahl nur eine Ziffer ist. Also123456789
ist es mit einfach , die Zeichenfolge daraus zu ziehen`range(1,10)`[1::3]
. Der umgekehrte Bereich ist`range(1,10)`[-2::-3]
. Um nur so weit zu kommen, wie ich jede Iteration haben möchte, schneide ich sie entweder3*n
bei oder bei3*(9-n)
(27-3*n
) für die umgekehrten Ziffern ab.quelle
for n in range(1,10):print"%9s"%s[:n]+" x 8 + %s = "%n+s[::-1][:n]
für 80 Bytes tun .s="123456789";n=1;exec'print"%9s"%s[:n],"x 8 + %s ="%n,s[::-1][:n];n+=1;'*9
spart drei mehr! Bis auf 75.Perl, 49 Bytes
Verwendungszweck
quelle
Ruby,
77,73,6560 BytesProbieren Sie es online ~
Wichtige Überarbeitungen von @manatwork
Eine weitere Überholung von @xsot
quelle
puts'%9d x 8 + %d = %d'%[k=[*1..i]*'',i,k.to_i*8+i]
.(1..9).map
→1.upto(9)
%9d
dass es eine Formatierungsoption ist, um solche Ganzzahlen aufzufüllena=i=0;9.times{puts"%9d x 8 + %d = %d"%[a=a*10+i+=1,i,a*8+i]}
Java 10,
151133130129126110 BytesProbieren Sie es online aus.
Erläuterung:
quelle
x
anstelle des Multiplikationszeichens verwenden.s
,"\n"
indem Sie"\n"+
denfor
Loop×
ist 2 Bytes anstelle von 1 wiex
..s
bei jeder Iteration zum Ergebnis bei?return o
stattdessen tunSystem.out.print(o)
? Sie können auch zu Java 10 wechseln und mitvar
und lambdasC 74 Bytes
quelle
C #, 113 Bytes
Wenn Sie diese Lösung trotzdem verbessern müssen, können Sie sie gerne weitergeben.
quelle
;n=10*n+ ++i
in der for-Schleife kann geändert werden zu;n=++i+10*n
. Auch+" x "+"8 + "+
kann geändert werden , um+" x 8 + "+
. um 3 weitere Bytes zu sparen.Batch, 117 Bytes
Ja, das sind 16% Zeichen in einer Zeile. Das ist Batch für Sie!
quelle
Haskell, 92 Bytes
Wie es funktioniert:
quelle
Retina , 66 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus. Der Zeilenvorschub ist signifikant.
Probieren Sie es online!
quelle
Pyke,
3029 BytesProbieren Sie es hier aus!
quelle
PowerShell v2 +,
8564585752 ByteSchleifen von 8 bis 0
8..0|%{...}
über den Bereichsoperator. Bei jeder Iteration wird eine String-Verkettung ausgegeben, die aus (der entsprechenden Anzahl von Leerzeichen" "*$_
) plus einem-join
ed-String von (einem Bereich von1
bis zu einer vorab inkrementierten Hilfsnummer++$i
plus dem mittleren Bit" x 8 + $i = "
plus dem endgültigen Bereich von besteht9
bis zur aktuellen Nummer besteht$_
vor besteht inkrementiert).Ein großer Trick dabei ist, dass wir die "Linkspräferenz" für die Typisierung nutzen, um Arrays innerhalb der
-join
Parens zu "addieren" , was bedeutet, dass wir nur eine verwenden-join
Operator verwenden.Beispiel
quelle
%{
Geht es deinen Augen gut?MATL ,
383635 BytesProbieren Sie es online!
quelle
J, 51 Bytes
Erzeugt den String
123456789
und verarbeitet dann Präfixe und Suffixe, um die Ausgabe zu erstellen.Verwendungszweck
quelle
JavaScript ES6 (88)
Nutzen Sie die neue
repeat
Methode, Backticks und Vorlagen ...quelle
alert
anstatt zu verwendenconsole.log
, kann es einige bytes sparen!R,
107103 BytesUngolfed:
Ergebnis:
quelle
APL (Dyalog Unicode) ,
615239 Byte SBCSProbieren Sie es online!
-9 Bytes durch Verwenden des
10⊥
Tricks zum Parsen der Zahl anstelle einer Reduzierung. Vielen Dank an @ Adám für -13!Erläuterung:
quelle
JavaScript (ES6), 99 Byte
Wobei
\n
ein wörtliches Newline-Zeichen darstellt. Die zweite Version gibt eine abschließende Newline aus. Ich habe eine Formel für die Zahlen gefunden,('1'.repeat(9-i)+0+i)/9
aber das Auffüllen war auf diese Weise einfacher.quelle
Brainfuck , 232 Bytes
Probieren Sie es online!
Kann viel weiter golfen werden ...
quelle
Javascript (mit externer Bibliothek) (143 Bytes)
Link zu lib: https://github.com/mvegh1/Enumerable/
Erklärung des Codes: Erstellen Sie einen Bereich von 1 bis 9, und schreiben Sie für jeden Wert eine Zeile, die dem komplexen Prädikat entspricht. Dem Prädikat wird der aktuelle ganzzahlige Wert übergeben, und es wird ein Bereich erstellt, der 10 currentValue-Elemente umfasst, um so viele Leerzeichen zu erstellen. Diese Leerzeichen werden mit dem Formelteil der Zeile verkettet, und dann wird dieser mit dem hinteren Ende des Bereichs verkettet, der der Anzahl der Elemente entspricht, und zwar in umgekehrter Reihenfolge.
Anmerkung: In der Abbildung ist die erste Zeile um ein Leerzeichen versetzt, da die Konsole ein Anführungszeichen hinzugefügt hat, da der Rückgabewert eine Zeichenfolge ist. Der tatsächliche Wert ist korrekt formatiert
quelle
05AB1E , 24 Byte
Probieren Sie es online!
Verwendet eine neuere Version als die Herausforderung, die jetzt zulässig ist.
quelle
©
, und die ändern ,®
umy
ein Byte zu speichern.Canvas , 20 Bytes
Probieren Sie es hier aus!
quelle
VBA (Excel), 51 Byte
Sofortfenster verwenden
quelle
k (77 Bytes)
Könnte wohl etwas mehr gekürzt werden
Beispiel:
quelle
Golflua, 56 Zeichen
Probelauf:
quelle