Napisz najkrótszy kod, aby wydrukować następującą tabliczkę mnożenia:
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
źródło
źródło
for
pętlami? Gdzie jest trudna (interesująca) część?for
. Ok, używamwhile
.Odpowiedzi:
Excel,
9291 bajtówW bezpośrednim oknie edytora VBA uruchom następującą komendę:
Range("A1:I9").Formula="=IF(ROW()<COLUMN(),"""",COLUMN()&""×""&ROW()&""=""&COLUMN()*ROW())"
Dane wyjściowe znajdują się bezpośrednio w aktywnym arkuszu.Grałem w dodatkowy bajt, zmieniając kolejność
if
zmiany>=
na<
. Nie zaktualizowałem zrzutu ekranu, ale wpływa on tylko na formułę u góry, a nie na wynik.źródło
FOR
pętli.Python (75)
trochę lepiej grał w golfa niż pozostałe dwie wersje Pythona.
źródło
C ++,
10698 bajtówUżyłem dwóch pętli i kilku sztuczek.
źródło
#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":" ";}
jest o 3 bajty krótszy.#import
i<cstdio>
?J:
5751 znakówBez pętli.
źródło
([:;"2*\#"2(":@],'x',":@[,'=',":@*,' '"_)"0/~)>:i.9
APL (37)
I to nie tylko dwie pętle for. W APL następująca konstrukcja:
gdzie
x
iy
są listami, iF
jest funkcją, stosuje sięF
do każdej pary pozycji wx
iy
i daje macierz.Zatem:
∆∘.×∆←⍳9
dostajemy tabliczkę mnożenia od 1 do 9. Powyższa funkcja generuje wymagany ciąg dla każdej pary, tj.(⍕⍺)
Reprezentacja ciągu pierwszej liczby, a×
następnie(⍕⍵)
reprezentacja ciągu drugiej liczby, po której=
następuje, a następnie⍕⍺×⍵
, o ile⍺≥⍵
.źródło
Rubin:
6059 znakówPrzykładowy przebieg:
źródło
(1..9).map{
na1.upto(9){
!Perl, 54 znaków
źródło
APL (Dyalog), 28
Analogicznie do podwójnej pętli w innych językach
{⍵{...}¨⍳⍵}¨⍳9
ustawia podwójną pętlę⍕⍵,'×',⍺,'=',⍺×⍵
tworzy ciąg dla każdej pary↑
Konwertuj tablicę ciągów na macierz żądełWynik
źródło
↑{⍵{⍕⍵'×'⍺'=',⍺×⍵}¨⍳⍵}¨⍳9
lub nawet skorzystać z nowego „głównego operatora”:{⍕⍵'×'⍺'=',⍺×⍵}¨∘⍳⌸⍳9
Mathematica , 45
Dość nudne, ale chyba służy jako porównanie składni:
źródło
D, 75 znaków
właśnie powiedziałeś, że kod nie działa lub pełny program
źródło
foreach(i,1..10){foreach(j,1..i+1)writef("%dx%d=%d ",i,j,i*j);writeln;}
VBScript (133); bez pętli.
Na żądanie pretendenta: bez pętli. Ten kod używa rekurencyjnych wywołań podprogramów.
źródło
Klon, 64
źródło
Kod maszynowy x86_64 (Linux),
1759976 bajtówTo zrzut pliku binarnego, a wszystko to 175 bajtów. Zasadniczo wykonuje te same dwie pętle, co wszystkie odpowiedzi, ale drukowanie na konsoli jest nieco trudniejsze i w zasadzie wymaga wypychania znaków do drukowania na stosie w odwrotnej kolejności, a następnie wykonania wywołania systemowego (specyficznego dla systemu Linux), aby faktycznie umieścić te znaki na standardowe wyjście.Zoptymalizowałem to teraz, aby wykonać tylko 1 operację zapisu (szybciej!) I mieć magiczne liczby (wow!) I pchając cały wynik do stosu do tyłu przed wykonaniem połączenia systemowego. Wyjąłem również procedurę wyjścia, bo kto potrzebuje odpowiedniego kodu wyjścia?
Oto link do mojego pierwszego i drugiego próby w oryginalnej składni nasm.
Z zadowoleniem przyjmuję każdego, kto ma inne sugestie dotyczące tego, jak można to poprawić. Mogę również wyjaśnić logikę bardziej szczegółowo, jeśli ktoś jest ciekawy.
(Ponadto nie drukuje dodatkowych spacji, aby wyrównać wszystkie kolumny, ale jeśli jest to wymagane, mogę umieścić logikę kosztem kilku dodatkowych bajtów).EDYCJA: Teraz drukuje dodatkowe miejsca i jest jeszcze bardziej golfa! Robi całkiem szalone rzeczy z rejestrami i jest prawdopodobnie niestabilny, gdyby ten program został rozszerzony.
źródło
JavaScript, 190 bajtów
Późno na imprezę, ale zachwycił mnie komentarz @jdstankosky i postanowiłem przyjąć inne podejście. Oto wpis Javascript, który wymusza szablon i ewaluuje się po drodze.
Wersja bez gry w golfa (nieco starsza wersja, w której funkcja zwraca tabelę zamiast skryptu ostrzegającego, ale obowiązują te same zasady):
źródło
Pascal, 128 bajtów
Jedna rekurencyjna procedura zajmuje się wszystkim. Zadzwoń z
m(9,9)
.Nie golfowany:
źródło
Fourier,
756632 bajtyDzięki @BetaDecay za 124 bajty!
źródło
vba 55
(bezpośrednie okno)
Uwaga - GWBasic potrzebuje tylko 2 dodatkowych znaków:
źródło
JavaScript, 75
Zastanawiam się, czy możliwe jest coś lepszego niż dwa (połączone?) Dla pętli ...
źródło
Coreutils / Basha:
147136135Gra w golfa, używając wyraźnej nowej linii i używając przestarzałej opcji głowy (dzięki manatwork):
Wynik:
źródło
$(( ))
obliczenia arytmetyczne$[ ]
; współdziel 2 znaki, zastępując$'\n'
znak nowej linii dosłownym (dosłownieyes '
w jednym wierszu, a następnie'
w następnym); Części 2 znaki nie używająchead
„s-n
opcję jawnie, tak-
i ten numer.$[ ]
notacji, dobrze wiedzieć. Zastąpienie-n
przez-
to tylko jedna postać mniej, więc w sumie jest to 11, dziękuję bardzo :).LOLCODE, 202 bajty
Nie golfowany:
Pythonated dla użytkowników innych niż leet:
źródło
c #, 142 bajty
I nie na widoku ...
źródło
ForEach
„nie na widoku” cóż ... xD> <> , 50 bajtów
Możesz to wypróbować na tłumaczu online .
Zauważ, że w każdej linii znajdują się końcowe spacje, co może sprawić, że będzie niepoprawna (OP nie podał w tym punkcie tej odpowiedzi).
źródło
/// , 268 bajtów
źródło
JAVA,
103 94 9290 bajtówUżywanie JShell z Java 9 SDK pozwala mi zaoszczędzić dużo miejsca
Zgodnie z sugestią Kevina zmniejszyłem rozwiązanie o 2 bajty.
Dzięki Cliffroot byłem w stanie zmniejszyć go o kolejny 1 bajt
źródło
int
z drugiej pętli for i dodając,j
do pierwszej. Więc tak: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
zi++<9
C 79 bajtów
główny
stół
źródło
Tcl 98 znaków
źródło
JavaScript: 82 znaki
źródło
for(i=0,s="";9>i++;){for(j=0;j++<i;)s+=j+"x"+i+"="+j*i+" ";s+="\n"}alert(s)
, jednak nie przestrzega się podwójnych spacji na 2 cyfrach, miałem zamiar go przesłać, ale użyłem+(9<i*j?" ":" ")
zamiast po prostu+" "
edytować: w trójce zniknęły podwójne spacje, ale są na drugiej param4x4
nie jest tak5x4
jak w zadaniu.Python: 87
Przyglądam się rozwiązaniom opublikowanym przez innych i większość z nich nie wydaje się, aby uzyskać prawidłowe odstępy.
źródło
Python (79)
lub ( 77 ) jeśli użyję
range(10)
oprócz tego, że na początku tworzy pustą linięźródło
Perl:
65, 62 znakówźródło
printf
nawias; zapasowa 1 znak przesuwając przypisanie $ i do wyrażenia zakres:map{map{printf"%dx%d=%2d ",$_,$i,$_*$i}1..($i=$_);print$/}1..9
.