Bestimmen Sie bei einer nicht negativen Ganzzahl oder einer Liste von Ziffern, auf wie viele Arten die Zahl durch Verketten von Quadratzahlen gebildet werden kann, die führende Nullen haben können.
Beispiele
input -> output # explanation
164 -> 2 # [16, 4], [1, 64]
101 -> 2 # [1, 01], [1, 0, 1]
100 -> 3 # [100], [1, 00], [1, 0, 0]
1 -> 1 # [1]
0 -> 1 # [0]
164900 -> 9 # [1, 64, 9, 0, 0], [1, 64, 9, 00], [1, 64, 900], [16, 4, 900], [16, 4, 9, 0, 0], [16, 4, 9, 00], [16, 49, 0, 0], [16, 49, 00], [16, 4900]
Regeln
- Es gelten Standardlücken
- Das ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes
code-golf
math
number
combinatorics
set-partitions
HyperNeutrino
quelle
quelle
Antworten:
Haskell , 135 Bytes
Probieren Sie es online!
Wahrscheinlich noch nicht gut golfen, aber das ist ein überraschend schwieriges Problem
quelle
Gelee , 8 Bytes
Ein monadischer Link, der eine Liste von Ziffern aufnimmt und eine nicht negative Ganzzahl zurückgibt.
Probieren Sie es online! oder sehen Sie sich die Testsuite an .
Wie?
quelle
Haskell , 88 Bytes
Definiert eine Funktion
f
, die eine Zeichenfolge akzeptiert und einen Gleitkommawert zurückgibt. Sehr langsam. Probieren Sie es online!Erläuterung
Ich verwende meinen Haskell-Tipp zum Berechnen aller Partitionen eines Strings mit
mapM
undwords
. Das SnippetmapM(\c->[[c],c:" "])x
ersetzt jedes Zeichen'c'
einer Zeichenfolgex
durch die Zeichenfolge mit einem"c"
oder zwei Elementen"c "
und gibt die Liste aller möglichen Kombinationen zurück. Wenn ich eines der Ergebnisse nehmey
, es verkette und das Ergebnis aufrufewords
, wird es an den von eingefügten Stellen aufgeteiltmapM
. Auf diese Weisex
erhalte ich alle Partitionen von in zusammenhängende Teilzeichenfolgen. Dann zähle ich nur die Ergebnisse, bei denen jedes Partitionselement ein perfektes Quadrat ist (indem ich es in der Liste finde[0,1,4,9,..,x^2]
). Eine Einschränkung ist, dass jede Partition zweimal mit und ohne Leerzeichen gezählt wird, also nehme ich die Summe von0.5
s statt1
s; Aus diesem Grund ist der Ergebnistyp ein Float.quelle
Pyth , 16 Bytes
Testsuite .
quelle
Python 3 ,
148139135134 Bytes10 Bytes dank Arnold Palmer.
Probieren Sie es online!
quelle
%1
undfor
...[[a[0]]]
durch[a[:1]]
wird ein Byte gespeichertMathematica, 141 Bytes
Eingabe (eine Liste von Ziffern)
quelle
{1,64,9}
,{16,4,9}
und{16,49}
) , aber Ihre Funktion zurück 4.Table[(function of s[[i]]),{i,Length[s=(stuff)]}]
ein paar Mal verwenden. Sie können dieses bis zu normalerweise Golf spielen(function of #)&/@(stuff)
.Python 2 ,
173163 BytesProbieren Sie es online!
Bearbeiten: 10 Bytes wegen ArnoldPalmer gespeichert
quelle
.5
anstelle von verwenden0.5
?