44 lines
2.8 KiB
Plaintext
44 lines
2.8 KiB
Plaintext
# 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=
|