# 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=