Bubble sort in pure CSS
dev.to
dev.to
Might I suggest a different animation. The current one swaps two elements (bars) by vertically shrinking the taller bar and growing the shorter one. Instead, the bars should stay the same height but move horizontally. I would rather see values move than slots in the array morph to the new value they should hold. The current animation feels like you are pumping water from one tank to another.
There is a reason why conjunction (AND) is also called logical multiplication, and disjunction (OR) logical addition. There is not much difference between this and:
(oneIsGreater ? origArray[0] : 0) | (twoIsGreater ? origArray[1] : 0)
This is often useful to think about when working on bitset or SIMD algorithms.Really? The connection between AND and multiplication is obvious, but disjunction doesn't behave like addition. (For one thing, just like AND, it destroys information, which multiplication does do and addition doesn't.) Addition would usually be XOR.
In fact, AND and XOR are what you get when you apply multiplication and addition to the integers (mod 2).
Meaning, using only elementary arithmetic and modulo?
Seems like there should be either an obvious answer or an interesting one :)
Then the answer seems to be no, right?
Edit: The abs() function seems to be enough, awesome:
The logical "and" and logical "or" functions are precisely particular cases of the minimum and maximum functions.
The so-called "exclusive or" function is simultaneously a particular case of addition and of subtraction, i.e. addition modulo 2 and subtraction modulo 2 are the same function. Therefore applying the 4 functions minimum, maximum, addition and subtraction to 1-bit numbers produces only 3 functions, AND, OR and XOR.
It makes no sense to search other functions for expressing logical "and" and logical "or" except for minimum and maximum, because this is what they are. The search could only find alternative more complicated ways to express minimum and maximum.
The minimum and maximum functions also work in logic systems with more than 2 values of truth. Also in hardware, analog circuits for minimum and maximum are one of the 2 ways of implementing the logical "and" and "or" functions, the other way being with series and parallel connections.
The main mistake of George Boole was his unsuccessful attempt to find an equivalence between logical "and" and "or" and integer multiplication and addition, because he was not habituated to use minimum and maximum, so he did not see the correct relationships.
The functions maximum and minimum are arithmetic functions as important as addition and subtraction. The only reason for which they have not been counted among the basic arithmetic functions is because when computed by a human they required much less effort than even addition, so there was no need for a long training of how to do computations with them, like for the more complex arithmetic functions.
Most modern instruction-set architectures now include maximum and minimum instructions, together with the addition and subtraction instructions.
As someone without much mathematical ropes, this might also be related to non-integer algebra and the distinction of "smooth" (edit: or differentiable) and discontinuous functions, no?
> The functions maximum and minimum are arithmetic functions as important as addition and subtraction. The only reason for which they have not been counted among the basic arithmetic functions is because when computed by a human they required much less effort than even addition
A set with minimum and maximum operations has a special algebraic structure named distributive lattice, which is a structure as useful and frequently encountered as structures like the algebraic groups and rings that characterize addition-like and multiplication-like operations.
And when the probabilities overlap as little as possible, then the formulas are:
P(a or b) = min(1, P(A)+P(B))
P(a and b) = max(0, P(a)+P(b)-1)
I guess there is some lesson about logic and truth here, but I can't quite see it...
Most textbooks define a set of elementary functions which does not include maximum and minimum only because they use "elementary" as an abbreviation for "elementary and differentiable", and they do not bother to explain this to the students.
a or b = a + b - (a * b)
The last term is equivalent to a conjunction. Which also makes sense when you think of probability:
P(a or b) = P(a) + P(b) - P(a and b)
For the mod 2 addition, the sign makes no difference I guess, but this cross-link makes the negative sign much more convincing
A ⊢ ((A ∨ B) ∨ C) ... ∨ nBy that argument, conjunction is also called "addition". Perhaps there's a different reason?
The choice of terminology, contrasting "logical addition" with "logical multiplication", obviously indicates that logical addition is supposed to be analogous to addition. What is the analogy?
Actually, you can add 1 and -1 to get 0, which breaks the model... Hmm... Guess it only works on natural numbers / unsigned.
P(A u B) = P(A) + P(B) - P(A^B)
P(A ^ B) = P(A u B) - P(A) - P(B)
And to the guy who said xor is addition — no it’s not:
P(A xor B) = P(A) + P(B) - 2 * P(A^B)
In Probability, when you have a space of outcomes, doing a Union on two disjoint events (sets of outcomes) the probabilities add. Whereas doing an Intersection on two non-disjoint events those probabilities multiply. If two events have no outcomes in common, for instance, the probability of them both occurring is zero.
When you “condition” probability on an event X happening, you restrict the space of all outcomes to that set X, and intersect every event with it.
When you condiition B[n] = A[n] given that (A[n-1] AND … A[1]) having already happened, you have a sales funnel and each step is independent of the previous, so the probabilities multiply.
It is also called a Markov Chain if you have a discrete set of possibilities at each step so you can form a matrix.
Though the original topic was truth values, not probabilities. To make it short, conjunctions in probability are multiplicative when they are independent, and disjunctions in probability are additive when they are mutually exclusive.
A chain of (arbitrary) conjunctions is not necessarily implied by the first proposition, so we have the much less interesting:
A ⊬ ((A ∧ B) ∧ C) ... ∧ nYeah, I just noticed:
a and b = a + b - (a or b)
Or with probability
P(a and b) = P(a) + P(b) - P(a or b)
Pretty cool trick nevertheless, well done to the author!
It is actually pretty good - the code uses 10 comparisons, while the optimal sorting network for 5 elements uses 9: https://bertdobbelaere.github.io/sorting_networks.html#N5L9D...
> A sorting algorithm that checks if the array is sorted until a miracle occurs. It continually checks the array until it is sorted, never changing the order of the array.
It basically waits for god intervention / single event upset. It is guaranteed to be optimal in at least one quantum universe, though.
Welcome to our phone screen at ${faang}. For the warmup question, let's solve this ${lc_hard} together in css.
I'm having trouble determening as written if this is a joke or not.
If anyone looked at this and thought something along the lines of "wow, think of the possibilities", I would would ask only that they don't put more thought into it. Other thoughts could bring pain ... to the browser that has to run it, the user staring at the page as the fans spin up, and the developer who has the pleasure to work with it next.
This was clearly one of those interesting-yet-useless things that was worth a read.
*Obviously, abusing CSS isn’t everyone’s idea of fun.
I stopped reading there.
Let us know when the second part is out. Why write half an article?
I learned from the article and found the subject interesting, but the breathlessly excited tone and forced cuteness were offputting.
Twice the page views? To "drive engagement"?