Files
project_euler/32/solution.uiua

44 lines
2.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# project euler #32
# denote the digit distribution by a×b=c, where
# a is the number of digits in the multiplicand,
# b is the number of digits in the multiplier and
# c is the number of digits in the product.
# ⍉ 1×1=7
# ⍉ 1×2=6 ≡ 2x1=6
# ⍉ 1×3=5 ≡ 3x1=5
# ⊚ 1×4=4 ≡ 4x1=4 only this
# ⍉ 2×2=5
# ⊚ 2×3=4 ≡ 3×2=4 and this
# ⍉ 3×3=3
# ⍉ ...
# because the other digit distributions go over
# or under too much.
# get three numbers that form candidate
# index_permutation ? factors_and_product
n ← ⊕(⋕/⊂≡°⋕)⊙(+1⇡9)
# check pandigital candidate numbers
# factors_and_product ? is_pand_prod
c ← =/×⊃↙₂⊣
# permutes a number
# n ? all_permutes_of_n
p ← □⋕⧅≠∞°⋕
# join all permutations
# triple_baka ? combinations
j ← ≡⇌♭₂⊞⊂°□⊣⟜(♭₂/◇⊞⊂↙2)
# generate solution for given digit distribution
# digit_distribution ? products
s ← (
◴⧅≠∞ # permutations of digits
♭₂≡(j≡p n) # permute multiplicand, multiplier, product
◴⊣⍉⊏⊸(⊚≡c) # check all hitherto permutations
)
s [2 2 2 2 1 1 1 0 0] # 2×3=5
s [2 2 2 2 1 1 1 1 0] # 1×4=5
/+◴⊂
# my online pad solution can be found here:
# https://uiua.org/pad?src=0_17_0-dev_2__IyBwcm9qZWN0IGV1bGVyICMzMgoKIyBkZW5vdGUgdGhlIGRpZ2l0IGRpc3RyaWJ1dGlvbiBieSBhw5diPWMsIHdoZXJlCiMgYSBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgbXVsdGlwbGljYW5kLAojIGIgaXMgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIG11bHRpcGxpZXIgYW5kCiMgYyBpcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgcHJvZHVjdC4KIyDijYkgMcOXMT03CiMg4o2JIDHDlzI9NiDiiaEgMngxPTYKIyDijYkgMcOXMz01IOKJoSAzeDE9NQojIOKKmiAxw5c0PTQg4omhIDR4MT00IG9ubHkgdGhpcwojIOKNiSAyw5cyPTUKIyDiipogMsOXMz00IOKJoSAzw5cyPTQgYW5kIHRoaXMKIyDijYkgM8OXMz0zCiMg4o2JIC4uLgojIGJlY2F1c2UgdGhlIG90aGVyIGRpZ2l0IGRpc3RyaWJ1dGlvbnMgZ28gb3ZlcgojIG9yIHVuZGVyIHRvbyBtdWNoLgoKIyBnZXQgdGhyZWUgbnVtYmVycyB0aGF0IGZvcm0gY2FuZGlkYXRlCiMgaW5kZXhfcGVybXV0YXRpb24gPyBmYWN0b3JzX2FuZF9wcm9kdWN0Cm4g4oaQIOKKlSjii5Uv4oqC4omhwrDii5Up4oqZKCsx4oehOSkKIyBjaGVjayBwYW5kaWdpdGFsIGNhbmRpZGF0ZSBudW1iZXJzCiMgZmFjdG9yc19hbmRfcHJvZHVjdCA_IGlzX3BhbmRfcHJvZApjIOKGkCA9L8OX4oqD4oaZ4oKC4oqjCiMgcGVybXV0ZXMgYSBudW1iZXIKIyBuID8gYWxsX3Blcm11dGVzX29mX24KcCDihpAg4pah4ouV4qeF4omg4oiewrDii5UKIyBqb2luIGFsbCBwZXJtdXRhdGlvbnMKIyB0cmlwbGVfYmFrYSA_IGNvbWJpbmF0aW9ucwpqIOKGkCDiiaHih4zima3igoLiip7iioLCsOKWoeKKo-KfnCjima3igoIv4peH4oqe4oqC4oaZMikKCiMgZ2VuZXJhdGUgc29sdXRpb24gZm9yIGdpdmVuIGRpZ2l0IGRpc3RyaWJ1dGlvbgojIGRpZ2l0X2Rpc3RyaWJ1dGlvbiA_IHByb2R1Y3RzCnMg4oaQICgKICDil7Tip4XiiaDiiJ4gICAgICAgIyBwZXJtdXRhdGlvbnMgb2YgZGlnaXRzCiAg4pmt4oKC4omhKGriiaFwIG4pICMgcGVybXV0ZSBtdWx0aXBsaWNhbmQsIG11bHRpcGxpZXIsIHByb2R1Y3QKICDil7TiiqPijYniio_iirgo4oqa4omhYykgIyBjaGVjayBhbGwgaGl0aGVydG8gcGVybXV0YXRpb25zCikKcyBbMiAyIDIgMiAxIDEgMSAwIDBdICMgMsOXMz01CnMgWzIgMiAyIDIgMSAxIDEgMSAwXSAjIDHDlzQ9NQovK-KXtOKKggo=