Ziemlich einfache Herausforderung heute:
Schreiben Sie ein Programm oder eine Funktion, die eine positive ganze Zahl N aufnimmt und eine sortierte Liste der in der Multiplikationstabelle angezeigten eindeutigen Zahlen ausgibt oder zurückgibt, deren Zeilen- und Spaltenmultiplikanden beide im Bereich von 1 bis einschließlich N liegen.
Die Liste kann in aufsteigender Reihenfolge (kleinste bis größte) oder absteigender Reihenfolge (größte bis kleinste) sortiert und in jedem vernünftigen Format ausgegeben werden.
Der kürzeste Code in Bytes gewinnt!
Beispiel
Wenn N = 4 ist, sieht die Multiplikationstabelle folgendermaßen aus:
1 2 3 4
-----------
1| 1 2 3 4
|
2| 2 4 6 8
|
3| 3 6 9 12
|
4| 4 8 12 16
Die eindeutigen Nummern in der Tabelle sind 1, 2, 3, 4, 6, 8, 9, 12, 16
. Diese sind also schon sortiert
1, 2, 3, 4, 6, 8, 9, 12, 16
könnte Ihre genaue Ausgabe für N = 4 sein. Da die Sortierung jedoch umgekehrt werden kann und die Formatierung etwas Spielraum bietet, wären dies auch gültige Ausgaben:
[16,12,9,8,6,4,3,2,1]
1
2
3
4
6
8
9
12
16
16 12 9 8 4 3 2 1
Testfälle
N=1 -> [1]
N=2 -> [1, 2, 4]
N=3 -> [1, 2, 3, 4, 6, 9]
N=4 -> [1, 2, 3, 4, 6, 8, 9, 12, 16]
N=5 -> [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 20, 25]
N=6 -> [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 30, 36]
N=7 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 28, 30, 35, 36, 42, 49]
N=8 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 28, 30, 32, 35, 36, 40, 42, 48, 49, 56, 64]
N=9 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 54, 56, 63, 64, 72, 81]
N=10 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, 28, 30, 32, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72, 80, 81, 90, 100]
N=11 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 40, 42, 44, 45, 48, 49, 50, 54, 55, 56, 60, 63, 64, 66, 70, 72, 77, 80, 81, 88, 90, 99, 100, 110, 121]
N=12 -> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 27, 28, 30, 32, 33, 35, 36, 40, 42, 44, 45, 48, 49, 50, 54, 55, 56, 60, 63, 64, 66, 70, 72, 77, 80, 81, 84, 88, 90, 96, 99, 100, 108, 110, 120, 121, 132, 144]
quelle
Antworten:
Pyth, 8 Bytes
Probieren Sie es online aus.
Erklärung:
SQ
Nimmt die ausgewertete Listeneingabe (Q
) und erstellt eine Liste[1, 2, ..., Q]
.^SQ2
nimmt das kartesische Produkt dieser Liste mit - alle möglichen Produktkombinationen.*M
Multipliziert alle diese Paare, um alle möglichen Ergebnisse in der Multiplikationstabelle zu bilden,S{
macht sie eindeutig und sortiert sie.quelle
M
. +1Python 2,
6151 BytesVielen Dank an xnor für die Kürzung der Syntax.
quelle
set(...)
kann nur eine Menge sein comp{...}
. Außerdem sind hier standardmäßig Funktionen zulässig, sodass Sie nur schreiben könnenlambda n:...
.f=lambda n:n*[0]and sorted(set(range(n,n*n+n,n)+f(n-1)))
.APL,
1816 BytesDies ist eine unbenannte monadische Funktion. Die Ausgabe erfolgt in aufsteigender Reihenfolge.
Erläuterung:
Problem behoben und 2 Bytes dank Thomas Kwa gespeichert!
quelle
CJam,
1412 BytesNeueste Version mit von @aditsu vorgeschlagenen Verbesserungen:
Dies ist eine anonyme Funktion. Probieren Sie es online aus , mit Eingabe- / Ausgabe-Code, der zum Testen benötigt wird.
@Martin schlug eine andere sehr elegante Lösung (
{,:)_ff*:|$}
) mit der gleichen Länge vor. Ich habe das von aditsu verwendet, da es meiner ursprünglichen Lösung viel ähnlicher war.Der Hauptunterschied zu meiner ursprünglichen Lösung besteht darin, dass dadurch der
0
Wert in der ursprünglichen Reihenfolge beibehalten wird, wodurch am Anfang 2 Bytes gespart werden. Sie würden denken, dass dies nicht helfen würde, weil Sie den0
Wert aus dem Ergebnis entfernen müssen . Aber der Kern von @aditsus Idee ist0^
das Ende, was ein fester Unterschied zu ist0
. Dies entfernt die0
und eliminiert gleichzeitig, da es sich um eine Mengenoperation handelt, doppelte Elemente aus der Lösungsmenge. Da ich bereits 2 Bytes benötigt habe, um die Duplikate zu entfernen, ist das Entfernen0
dann im Wesentlichen kostenlos.Erläuterung:
quelle
{2m*::)::*_&$}
,{)2m*::*_&$0-}
{,:)_ff*:|$}
{)2m*::*0^$}
Oktave, 22 Bytes
quelle
Julia, 24 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl akzeptiert und ein Ganzzahl-Array zurückgibt.
Ungolfed:
quelle
MATLAB, 24 Bytes
quelle
zsh,
8656 Bytesdanke an @Dennis für das Speichern von 30 (!) Bytes
Erklärung / ungolfed:
Dies funktioniert in Bash nicht, da Bash nicht erweitert wird
{1..$1}
- es wird nur wörtlich interpretiert (alsoa=5; echo {1..$a}
Ausgaben{1..5}
statt1 2 3 4 5
).quelle
Ruby,
5048 BytesUngolfed:
Multiplizieren Sie mit der verschachtelten Schleife jede Zahl mit jeder anderen Zahl bis zu n, und sortieren Sie dann das Array.
50 Bytes
Verwendung:
quelle
R, 39 Bytes
Dies liest eine Ganzzahl von STDIN und schreibt eine durch Leerzeichen getrennte Liste nach STDOUT.
Wir erstellen die Multiplikationstabelle als Matrix mit
outer
, glätten sie implizit in einen Vektor und sortieren mitsort
, wählen eindeutige Elemente mitunique
und drucken den durch begrenzten Raum mitcat
.quelle
Mathematica, 25 Bytes
quelle
K, 17 Bytes
Hier gibt es nicht viel zu sagen. Sortieren (
t@<t:
) Sie die eindeutigen Elemente (?
) des abgeflachten (,/
) multiplizierten kartesischen Eigenprodukts (t*\:t:
) von 1 bis einschließlich N (1+!
).In Aktion:
quelle
Haskell,
5554 BytesAnwendungsbeispiel:
f 4
->[1,2,3,4,6,8,9,12,16]
.nub
Entfernt doppelte Elemente aus einer Liste.Edit: @Zgarb hat einen überflüssigen gefunden
$
.quelle
J,
21-20BytesDanke an @Zgarb für -1 Byte!
Meine erste Antwort! Golftipps sind erwünscht, wenn es etwas zum Golfen gibt.
Dies ist eine monadische Funktion; Wir nehmen das äußere Produkt durch Multiplikation der Liste
1..input
mit sich selbst, reduzieren, nehmen eindeutige Elemente und sortieren.quelle
Kotlin, 70 Bytes
Ungolfed-Version:
Teste es mit:
quelle
Shell + gemeinsame Dienstprogramme, 41
Oder alternativ:
Bash + Coreutils, 48
Konstruiert eine geschweifte Klammer innerhalb einer arithmetischen Erweiterung:
\$[{1..n}*{1..n}]
erweitert sich auf die arithmetischen Erweiterungen,$[1*1] $[1*2] ... $[1*n] ... $[n*n]
die ausgewertet und an übergeben werdenprintf
, wodurch eine pro Zeile ausgegeben wird, an die weitergeleitet wirdsort
.Sorgfältige Verwendung von Anführungszeichen, Escape-Zeichen und
eval
Sicherstellung, dass die Erweiterungen in der erforderlichen Reihenfolge erfolgen.Oder alternativ:
Pure Bash, 60
quelle
Pyth, 10
Probieren Sie es online aus oder führen Sie eine Testsuite aus
quelle
Minkolang 0.14 ,
252218 BytesIch erinnerte mich, dass ich kartesische Produkte sehr bequem implementiert hatte, bevor diese Frage gestellt wurde !
Probieren Sie es hier aus. (Ausgänge in umgekehrter Reihenfolge.)
Erläuterung
quelle
JavaScript (ES6),
92 bis90 ByteErläuterung
Prüfung
quelle
Perl 6 , 27 Bytes
Anwendungsbeispiel:
quelle
Haskell, 51 Bytes
Ziemlich langweilig. Filtert einfach die Liste
[1..n*n]
nach den Elementen des Formularsa*b
mita
undb
in[1..n]
. Verwendenfilter
ergibt die gleiche LängeIch habe eine Weile versucht, die Liste der Produkte mit etwas Klügerem wie
concatMap
oder zu generierenmapM
, habe aber nur längere Ergebnisse erzielt. Eine komplexere Überprüfung der Mitgliedschaft ergab 52 Bytes, 1 Byte länger, kann aber möglicherweise verkürzt werden.quelle
(*)<$>..<*>..
wie dieseJAVA - 86 Bytes
Ungolfed
quelle
Pyth, 11 Bytes
Dies ähnelt der Julia-Antwort. Vielen Dank an @Maltysen
quelle
PHP,
74,7370 BytesUngolfed:
Bisherige:
while(($j=$i++)<$n)for(;$j++<$n;)$a[]=$i*$j;$a=array_unique($a);sort($a);
Nicht 100% sicher, was mit der Ausgabe geschehen soll,
$a
enthält aber ein Array mit den entsprechenden Zahlen.$n
ist die Nummer geven via$_GET['n']
, mitregister_globals=1
quelle
TeaScript ,
3735 Zeichen; 40 Bytes2 Bytes dank @Downgoat gespart
TeaScript ist JavaScript zum Golfen.
Probieren Sie es online!
Ungolfed und Erklärung
quelle
r
anstelle vonA.r
zum Generieren von Bereichen verwendenC 96 Bytes
Dies druckt die Zahlen in absteigender Reihenfolge. Vorschläge sind willkommen, da dies alles andere als optimal aussieht.
quelle
JavaScript (ES6), 86 Byte
Versuchen Sie es zu verkürzen (vielleicht versuchen Sie es mit Schachtelschleifen).
quelle
Perl 5, 91 Bytes
wird ausgeführt, indem das Argument in der Befehlszeile übergeben wird. Es gibt eine ganze Reihe von Erklärungen, die mit Einschränkungen und Warnungen einhergehen.
quelle
Python,
124102 BytesPythonischer!
quelle
l.append(i*j)
dieselbe Zeile wie die if-Bedingung setzen. Ich denke, es endet insgesamt 102 Bytes.+=
stattdessen verwendenappend
.list(set(l))
ist nicht garantiert, dass es sortiert wird.Perl 5, 67 Bytes
quelle