Post History
BQN, 25 bytesSBCS ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽} Run online! This expression has a complicated structure. This link uses BQN's explain feature to show the order in which everything is applied. It's...
Answer
#2: Post edited
- # [BQN](https://mlochbaum.github.io/BQN/), 25 bytes<sup>[SBCS](https://github.com/mlochbaum/BQN/blob/master/commentary/sbcs.bqn)</sup>
- ```
- ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽}
- ```
- [Run online!](https://mlochbaum.github.io/BQN/try.html#code=UkMg4oaQIOKMiuKKuOKJoSgvMD3ihpXiirh8KXsoK8K0w7fiiaAp4oiY8J2UvcKowqvin5zwnZS9fQoK4omN4p+cKFJDwqgpIDHigL8z4oC/NeKAvzEw4oC/MTXigL8yMDbigL8yMDc=)
- This expression has a complicated structure. [This link](https://mlochbaum.github.io/BQN/try.html#code=4oyK4oq44omhKC8wPeKGleKKuHwpeygrwrTDt+KJoCniiJjwnZS9wqjCq+KfnPCdlL19&explain) uses BQN's explain feature to show the order in which everything is applied. It's split into two expressions, where the `{` on the left indicates to apply the modifier on the right.
- ```
- ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽}
- (/0=↕⊸|){ } # Operand 𝔽 to block modifier: proper divisors
- ↕ # Range 0,…,n-1
- ⊸| # before modular division
- 0= # equals zero
- / # Indices of ones
- 𝔽 # Apply the operand
- «⟜ # Shift in the number itself
- ¨ # On each divisor:
- ∘𝔽 # Apply the operand again, then
- (+´÷≠) # Mean (sum divided by length)
- ⌊⊸≡ # Floor matches argument
- ```
Much of the structure is composed of [Before and After](https://mlochbaum.github.io/BQN/tutorial/combinator.html#before-and-after) (`⊸⟜`) and [trains](https://mlochbaum.github.io/BQN/doc/train.html), with one [block modifier](https://mlochbaum.github.io/BQN/doc/block.html#operands). The function `/0=↕⊸|` gives proper divisors including 1, but for testing which divisors are cool we want to include the number itself and exclude 1 (we know it's cool). [Shifting](https://mlochbaum.github.io/BQN/doc/shift.html) in the original number on the right side accomplishes this.
- # [BQN](https://mlochbaum.github.io/BQN/), 25 bytes<sup>[SBCS](https://github.com/mlochbaum/BQN/blob/master/commentary/sbcs.bqn)</sup>
- ```
- ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽}
- ```
- [Run online!](https://mlochbaum.github.io/BQN/try.html#code=UkMg4oaQIOKMiuKKuOKJoSgvMD3ihpXiirh8KXsoK8K0w7fiiaAp4oiY8J2UvcKowqvin5zwnZS9fQoK4omN4p+cKFJDwqgpIDHigL8z4oC/NeKAvzEw4oC/MTXigL8yMDbigL8yMDc=)
- This expression has a complicated structure. [This link](https://mlochbaum.github.io/BQN/try.html#code=4oyK4oq44omhKC8wPeKGleKKuHwpeygrwrTDt+KJoCniiJjwnZS9wqjCq+KfnPCdlL19&explain) uses BQN's explain feature to show the order in which everything is applied. It's split into two expressions, where the `{` on the left indicates to apply the modifier on the right.
- ```
- ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽}
- (/0=↕⊸|){ } # Operand 𝔽 to block modifier: proper divisors
- ↕ # Range 0,…,n-1
- ⊸| # before modular division
- 0= # equals zero
- / # Indices of ones
- 𝔽 # Apply the operand
- «⟜ # Shift in the number itself
- ¨ # On each divisor:
- ∘𝔽 # Apply the operand again, then
- (+´÷≠) # Mean (sum divided by length)
- ⌊⊸≡ # Floor matches argument
- ```
- Much of the structure is composed of [Before and After](https://mlochbaum.github.io/BQN/tutorial/combinator.html#before-and-after) (`⊸⟜`) and [trains](https://mlochbaum.github.io/BQN/doc/train.html), with one [block modifier](https://mlochbaum.github.io/BQN/doc/block.html#operands). Note that Modulus (`|`) has its arguments reversed relative to the modular division operator `%` in many languages: `3|5` is 2, for example. The function `/0=↕⊸|` gives proper divisors including 1, but for testing which divisors are cool we want to include the number itself and exclude 1 (we know it's cool). [Shifting](https://mlochbaum.github.io/BQN/doc/shift.html) in the original number on the right side accomplishes this.
#1: Initial revision
# [BQN](https://mlochbaum.github.io/BQN/), 25 bytes<sup>[SBCS](https://github.com/mlochbaum/BQN/blob/master/commentary/sbcs.bqn)</sup> ``` ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽} ``` [Run online!](https://mlochbaum.github.io/BQN/try.html#code=UkMg4oaQIOKMiuKKuOKJoSgvMD3ihpXiirh8KXsoK8K0w7fiiaAp4oiY8J2UvcKowqvin5zwnZS9fQoK4omN4p+cKFJDwqgpIDHigL8z4oC/NeKAvzEw4oC/MTXigL8yMDbigL8yMDc=) This expression has a complicated structure. [This link](https://mlochbaum.github.io/BQN/try.html#code=4oyK4oq44omhKC8wPeKGleKKuHwpeygrwrTDt+KJoCniiJjwnZS9wqjCq+KfnPCdlL19&explain) uses BQN's explain feature to show the order in which everything is applied. It's split into two expressions, where the `{` on the left indicates to apply the modifier on the right. ``` ⌊⊸≡(/0=↕⊸|){(+´÷≠)∘𝔽¨«⟜𝔽} (/0=↕⊸|){ } # Operand 𝔽 to block modifier: proper divisors ↕ # Range 0,…,n-1 ⊸| # before modular division 0= # equals zero / # Indices of ones 𝔽 # Apply the operand «⟜ # Shift in the number itself ¨ # On each divisor: ∘𝔽 # Apply the operand again, then (+´÷≠) # Mean (sum divided by length) ⌊⊸≡ # Floor matches argument ``` Much of the structure is composed of [Before and After](https://mlochbaum.github.io/BQN/tutorial/combinator.html#before-and-after) (`⊸⟜`) and [trains](https://mlochbaum.github.io/BQN/doc/train.html), with one [block modifier](https://mlochbaum.github.io/BQN/doc/block.html#operands). The function `/0=↕⊸|` gives proper divisors including 1, but for testing which divisors are cool we want to include the number itself and exclude 1 (we know it's cool). [Shifting](https://mlochbaum.github.io/BQN/doc/shift.html) in the original number on the right side accomplishes this.