Saiba o valor de uma sacola de moedas
Uma sacola de moedas novas americanas é roubada de um banco. Sem abrir a sacola, o que pode ser dito sobre seu valor monetário e seu conteúdo? Uma característica óbvia que pode ser medida facilmente é o peso da sacola. Supondo que é uma sacola de 1 lilbra, combine o conhecimento da Wolfram Knowledgebase em moedas com a habilidade integrada de resolver equações lineares para estudar o valor esperado do roubo.
Para começar, gere uma lista de moedas dos EUA em circulação atualmente por meio de uma classe de entidades definidas implicitamente.
EntityClass["CurrencyDenomination", {EntityProperty[
"CurrencyDenomination", "IssuingCountry"] ->
Entity["Country", "UnitedStates"],
EntityProperty["CurrencyDenomination", "Format"] -> "coin"}]
Expanda a classe de entidade definida implicitamente, clicando em [+], encontre seus membros, e classifique-os por valor.
coinsUS = EntityList[
EntityClass[
"CurrencyDenomination", {
EntityProperty[
"CurrencyDenomination", "IssuingCountry"] -> Entity[
"Country", "UnitedStates"],
EntityProperty["CurrencyDenomination", "Format"] -> "coin"}]] //
SortBy[#[EntityProperty["CurrencyDenomination", "Value"]] &]
Faça uma colagem de imagens das moedas.
ImageCollage[
EntityValue[coinsUS,
EntityProperty["CurrencyDenomination", "Image"]],
Background -> White]
Resuma as propriedades das moedas em uma tabela.
TextGrid[{ImageResize[#2, 60], #1,
Row[Riffle[#3, Style[" | ", Gray]]]} & @@@
EntityValue[
coinsUS, {EntityProperty["CurrencyDenomination", "Entity"],
EntityProperty["CurrencyDenomination", "Image"],
EntityProperty["CurrencyDenomination", "PeopleOnCurrency"]}],
Alignment -> {Left, Center}, Dividers -> All] // TraditionalForm
Obtenha denominações (em centavos) e massas (em gramas) das moedas e converta as massas em números racionais.
{values, masses} =
Transpose[EntityValue[coinsUS, {"Value", "Weight"}]]
coinsandweights = Transpose[{
QuantityMagnitude[UnitConvert[values, "USCents"]],
Rationalize[QuantityMagnitude[N[UnitConvert[masses, "Grams"]]]]
}]
lcm = LCM @@ Denominator[Rationalize[coinsandweights][[All, 2]]];
rationalcoinweights = lcm #2 & @@@ Rationalize[coinsandweights]
Encontre todas as distribuições de moedas que são compatíveis com uma medida de peso de uma libra com erro de medição de ± 0.1% (assumindo que a própria sacola contribui de modo insignificante).
meanWeight =
QuantityMagnitude[UnitConvert[Quantity[1, "Pounds"], "Grams"]];
error = Normal[Quantity[0.1, "Percent"]];
{minScaledWeight,
maxScaledWeight} = {Floor[lcm meanWeight (1 - error/2)],
Ceiling[lcm meanWeight (1 + error/2)]}
Use FrobeniusSolve para determinar todas as coleções de moedas possíveis, dando o peso total solicitado.
Flatten[allSolutions, 1] // Length
Encontre o mínimo, a mediana, a média, e o máximo dos valores monetário totais das moedas na sacola (assumindo que todas as combinações são igualmente prováveis).
Faça um histograma da distribuição do valor total de dinheiro.
Histogram[dollarValues, Automatic, "PDF",
AxesLabel -> {Quantity[None, "USDollars"], "fraction"}]
A distribuição de peso de todas as sacolas é bastante uniforme.
Histogram[weightvalues, 50, "PDF",
AxesLabel -> {Quantity[None, "USDollars"], "fraction"}]
Faça um gráfico da distribuição do número de moedas.
Histogram[Total /@ Flatten[allSolutions, 1], {5}]
A distribuição bivariada do valor monetário em relação ao número de moedas na sacola.
Histogram3D[{coins.#/100., Total[#]} & /@ Flatten[allSolutions, 1],
AxesLabel -> {Quantity[None, "USDollars"], "coins"}]