solve problem 32 in uiua

This commit is contained in:
2025-08-29 07:51:28 +02:00
parent cb48d24875
commit 849deeec75

View File

@@ -0,0 +1,43 @@
# 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=