Schreiben Sie den kürzesten Code, um die folgende Multiplikationstabelle zu drucken:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
1×4=4 2×4=8 3×4=12 4×4=16
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81
code-golf
kolmogorov-complexity
matrix89
quelle
quelle
for
Loops? Wo ist der herausfordernde (interessante) Teil?for
. Ok, ich benutzewhile
.Antworten:
Excel,
9291 BytesFühren Sie im unmittelbaren Fenster des VBA-Editors den folgenden Befehl aus:
Range("A1:I9").Formula="=IF(ROW()<COLUMN(),"""",COLUMN()&""×""&ROW()&""=""&COLUMN()*ROW())"
Die Ausgabe befindet sich direkt im aktiven Arbeitsblatt.Ich golfed ein zusätzliches Byte für die Reihenfolge der ein Vertauschen
if
ändern>=
zu<
. Ich habe den Screenshot nicht aktualisiert, aber er wirkt sich nur auf die Formel oben aus, nicht auf die Ausgabe.quelle
FOR
Schleife zu machen.Python (75)
etwas besser als die beiden anderen Python-Versionen.
quelle
C ++,
10698 BytesIch habe zwei Loops und ein paar Tricks benutzt.
quelle
#import <stdio.h> main(){for(int i=0,j;i++-9;j=0)while(j++-i)printf("%dx%d=%d%s",j,i,i*j,j<i?"\n":" ";}
ist 3 Bytes kürzer.#import
und<cstdio>
?J:
5751 ZeichenKeine Schleifen.
quelle
([:;"2*\#"2(":@],'x',":@[,'=',":@*,' '"_)"0/~)>:i.9
APL (37)
Und es sind nicht einmal zwei For-Loops. In APL das folgende Konstrukt:
where-
x
undy
are-Listen undF
sind eine Funktion, die fürF
jedes Elementpaar inx
und gilty
und Ihnen eine Matrix gibt.Also:
∆∘.×∆←⍳9
bekommt man eine Multiplikationstabelle von 1 bis 9. Die obige Funktion für jedes Paar der erforderliche Zeichenfolge erzeugt, das heißt(⍕⍺)
, Zeichenfolgendarstellung der ersten Zahl, gefolgt von×
, gefolgt von(⍕⍵)
, String - Darstellung der zweiten Reihe, gefolgt von=
, gefolgt von⍕⍺×⍵
, solange⍺≥⍵
.quelle
Ruby:
6059 ZeichenProbelauf:
quelle
(1..9).map{
in änderte1.upto(9){
!Perl, 54 Zeichen
quelle
APL (Dyalog), 28
Analog zu einer Doppelschleife in anderen Sprachen
{⍵{...}¨⍳⍵}¨⍳9
Beim Einrichten der Doppelschleife⍕⍵,'×',⍺,'=',⍺×⍵
wird die Zeichenfolge für jedes Paar erstellt.↑
Konvertieren Sie ein Array von Zeichenfolgen in eine Matrix von ZeichenfolgenAusgabe
quelle
↑{⍵{⍕⍵'×'⍺'=',⍺×⍵}¨⍳⍵}¨⍳9
oder sogar den neuen "Key Operator" verwenden:{⍕⍵'×'⍺'=',⍺×⍵}¨∘⍳⌸⍳9
Mathematica , 45
Ziemlich langweilig, aber ich denke, es dient als Syntaxvergleich:
quelle
D 75 Zeichen
Sie haben gerade gesagt, Code funktioniert nicht oder volles Programm
quelle
foreach(i,1..10){foreach(j,1..i+1)writef("%dx%d=%d ",i,j,i*j);writeln;}
VBScript (133); ohne schleifen.
Auf Wunsch des Herausforderers: keine Schleifen. Dieser Code verwendet rekursive Unterprogrammaufrufe.
quelle
Ahorn, 64
quelle
x86_64 Maschinencode (Linux),
1759976 BytesDies ist ein Speicherauszug der Binärdatei, und all dies ist 175 Bytes. Grundsätzlich werden die gleichen zwei Schleifen wie bei allen Antworten ausgeführt, aber das Drucken auf der Konsole ist etwas schwieriger und erfordert im Grunde, dass die Zeichen in umgekehrter Reihenfolge auf den Stapel gedruckt werden und dann ein (linuxspezifischer) Systemaufruf ausgeführt wird, um diese Zeichen tatsächlich zu setzen in stdout.Ich habe dies jetzt so optimiert, dass nur 1 Schreibvorgang ausgeführt wird (schneller!) Und magische Zahlen hat (wow!), Und indem das gesamte Ergebnis vor dem Syscall rückwärts auf den Stapel gelegt wird. Ich habe auch die Exitroutine rausgenommen, weil wer den richtigen Exitcode braucht?
Hier ist ein Link zu meinen ersten und zweiten Versuchen in ihrer ursprünglichen Nasm-Syntax.
Ich begrüße jeden, der andere Vorschläge hat, wie es verbessert werden kann. Ich kann die Logik auch genauer erklären, wenn jemand neugierig ist.
(Außerdem werden nicht die zusätzlichen Leerzeichen gedruckt, um alle Spalten auszurichten, aber wenn dies erforderlich ist, kann ich die Logik auf Kosten einiger weiterer Bytes einfügen.)BEARBEITEN: Jetzt werden zusätzliche Leerzeichen gedruckt und es wird noch mehr Golf gespielt! Es macht ein paar ziemlich verrückte Sachen mit den Registern und ist wahrscheinlich instabil, wenn dieses Programm erweitert wird.
quelle
Javascript, 190 Bytes
Spät zur Party, aber @jdstankoskys Kommentar hat mich gereizt und ich habe mich für eine andere Herangehensweise entschieden. Hier ist ein Javascript-Eintrag, der eine Vorlage erstellt und sich dabei selbst auswertet.
Ungolfed-Version (etwas ältere Version, in der eine Funktion die Tabelle zurückgibt, anstatt sie durch ein Skript zu warnen, aber die gleichen Prinzipien gelten):
quelle
Pascal, 128 Bytes
Eine rekursive Prozedur erledigt alles. Mit anrufen
m(9,9)
.Ungolfed:
quelle
Fourier,
756632 BytesDanke @BetaDecay für 124 Bytes!
quelle
vba 55
(sofortiges Fenster)
note - GWBasic benötigt nur 2 zusätzliche Zeichen:
quelle
Javascript, 75
Ich frage mich, ob etwas besseres als zwei (kombiniert?) Für Schleifen möglich ist ...
quelle
Coreutils / Bash:
147136135Golfen mit expliziter Newline und mit veralteter Head-Option (danke manatwork):
Ausgabe:
quelle
$(( ))
arithmetischen Auswertungen durch ersetzen$[ ]
. Teilen Sie 2 Zeichen, indem Sie das$'\n'
maskierte Zeilenumbruchzeichen durch ein wörtliches Zeichen ersetzen (ich meine,yes '
in einer Zeile, dann'
in der folgenden). ersparen Sie 2 Zeichen, indem Sie nicht explizit die Optionhead
's verwenden, sondern-n
nur-
die Zahl.$[ ]
Notation, gut zu wissen. Ersetzen-n
durch-
ist nur ein Zeichen weniger, also sind es insgesamt 11, vielen Dank :).LOLCODE, 202 Bytes
Ungolfed:
Pythoniert für Nicht-Lautsprecher:
quelle
142 Bytes
Und nicht für in Sicht ...
quelle
ForEach
"nicht für in Sicht" naja ... xD> <> , 50 Bytes
Sie können es mit dem Online-Dolmetscher ausprobieren .
Beachten Sie, dass in jeder Zeile ein Leerzeichen nachgestellt ist, was zu einer falschen Angabe führen kann (OP hat zu diesem Punkt zum Zeitpunkt der Beantwortung noch keine Angaben gemacht).
quelle
/// 268 Bytes
quelle
JAVA,
103 94 9290 BytesDurch die Verwendung von JShell aus Java 9 SDK kann ich viel Speicherplatz sparen
Auf Kevins Vorschlag hin reduzierte ich die Lösung um 2 Bytes.
Dank Cliffroot konnte ich es um ein weiteres Byte reduzieren
quelle
int
aus der zweiten for-Schleife entfernen und,j
zur ersten hinzufügen . Also so:for(int i=0,j;++i<=9;)for(j=1;j<=i;)System.out.print(i+"*"+j+"="+i*j+"\t"+(j++<i?"":"\n"));
++i<=9
miti++<9
C 79 Bytes
die Haupt
Der Tisch
quelle
Tcl 98 Zeichen
quelle
Javascript: 82 Zeichen
quelle
for(i=0,s="";9>i++;){for(j=0;j++<i;)s+=j+"x"+i+"="+j*i+" ";s+="\n"}alert(s)
, jedoch wird das doppelte Leerzeichen auf 2 Ziffern nicht beachtet. Ich wollte dieses einreichen, aber+(9<i*j?" ":" ")
statt nur zu+" "
bearbeiten: auf dem Ternär sind die doppelten Leerzeichen verschwunden, aber sie sind auf dem zweiten param4x4
nicht direkt unter5x4
wie in der Aufgabe.Python: 87
Ich sehe mir die Lösungen an, die andere veröffentlicht haben, und die meisten scheinen nicht den richtigen Abstand zu haben.
quelle
Python (79)
oder ( 77 ) wenn ich
range(10)
außer benutze , erzeugt das eine leere Zeile am Anfangquelle
Perl:
65, 62 Zeichenquelle
printf
Klammer entfernen . Ersatz 1 Zeichen durch die Zuweisung von $ i in den Bereich Ausdruck zu bewegen:map{map{printf"%dx%d=%2d ",$_,$i,$_*$i}1..($i=$_);print$/}1..9
.