- 1 year
This is actually the correct way to do it in JavaScript, especially if the right hand side is more than
1.If JavaScript thinks
icontains a string, and let’s say its value is27,i += 1will result inicontaining271.Subtraction doesn’t have any weird string-versus-number semantics and neither does unary minus, so
i -=- 1guarantees28in this case.For the increment case,
++works properly whether JavaScript thinksiis a string or not, but since the joke is to avoid it, here we are.
- henfredemars@infosec.pubEnglish1 year
Typing on mobile please excuse.
i = 0 while i != 1: pass # i is now 1- 1 year
Ah yes, the wait for a random bit flip to magically increment your counter method. Takes a very long time
- henfredemars@infosec.pubEnglish1 year
The time it takes for the counter to increment due to cosmic rays or background radiation is approximately constant, therefore same order as adding one. Same time complexity.
Constant time solution. Highly efficient.
- 1 year
If you do it on a quantum computer, it goes faster because the random errors pile up quicker.
Unless your machine has error correcting memory. Then it will take literally forever.
- 1 year
I like to shake the bytes around a little
i = ( i << 1 + 2 ) >> 1- 1 year
Wait, why does it multiply by 4? (apparently addition takes precedence over bitwise operations)
- 1 year
Create a python file that only contains this function
def increase_by_one(i): # this increments i f=open(__file__).read() st=f[28:-92][0] return i+f.count(st)Then you can import this function and it will raise an index error if the comment is not there, coming close to the most literal way
Any code which does not contain the comment “this increments i:” will produce a compile error and fail to run.
could be interpreted in python
- 1 year
int toIncrement = ...; int result; do { result = randomInt(); } while (result != (toIncrement + 1)); print(result); - 1 year
Trying to avoid using any arithmetic operators, and sticking just to binary (extending beyond 16 bit unsigned ints is left as an exercise for the interested reader):
#!/usr/bin/perl # This increments $i my $i=1; print "Start: $i "; if (($i & 0b1111111111111111) == 0b1111111111111111) {die "Overflow";} if (($i & 0b0000000000000001) == 0b0000000000000000) {$i=(($i & 0b1111111111111110) | 0b0000000000000001);} else { if (($i & 0b0111111111111111) == 0b0111111111111111) {$i=(($i & 0b0000000000000000) | 0b1000000000000000);} if (($i & 0b0011111111111111) == 0b0011111111111111) {$i=(($i & 0b1000000000000000) | 0b0100000000000000);} if (($i & 0b0001111111111111) == 0b0001111111111111) {$i=(($i & 0b1100000000000000) | 0b0010000000000000);} if (($i & 0b0000111111111111) == 0b0000111111111111) {$i=(($i & 0b1110000000000000) | 0b0001000000000000);} if (($i & 0b0000011111111111) == 0b0000011111111111) {$i=(($i & 0b1111000000000000) | 0b0000100000000000);} if (($i & 0b0000001111111111) == 0b0000001111111111) {$i=(($i & 0b1111100000000000) | 0b0000010000000000);} if (($i & 0b0000000111111111) == 0b0000000111111111) {$i=(($i & 0b1111110000000000) | 0b0000001000000000);} if (($i & 0b0000000011111111) == 0b0000000011111111) {$i=(($i & 0b1111111000000000) | 0b0000000100000000);} if (($i & 0b0000000001111111) == 0b0000000001111111) {$i=(($i & 0b1111111100000000) | 0b0000000010000000);} if (($i & 0b0000000000111111) == 0b0000000000111111) {$i=(($i & 0b1111111110000000) | 0b0000000001000000);} if (($i & 0b0000000000011111) == 0b0000000000011111) {$i=(($i & 0b1111111111000000) | 0b0000000000100000);} if (($i & 0b0000000000001111) == 0b0000000000001111) {$i=(($i & 0b1111111111100000) | 0b0000000000010000);} if (($i & 0b0000000000000111) == 0b0000000000000111) {$i=(($i & 0b1111111111110000) | 0b0000000000001000);} if (($i & 0b0000000000000011) == 0b0000000000000011) {$i=(($i & 0b1111111111111000) | 0b0000000000000100);} if (($i & 0b0000000000000001) == 0b0000000000000001) {$i=(($i & 0b1111111111111100) | 0b0000000000000010);} } print "End: $i\n"; Use bitwise operations to simulate an adder. Bonus points if you only use NOR
- 1 year
I decided to use NAND instead of NOR, but it’s effectively the same thing.
Scala:
//main @main def main(): Unit = var i = 15 //Choose any number here i = add(i, 1) //this increments i println(i) //Adds 2 numbers in the most intuitive way def add(a: Int, b: Int): Int = val pairs = split(a).zip(split(b)) val sumCarry = pairs.scanLeft(false, false)((last, current) => fullAdder(current._1, current._2, last._2)) return join(sumCarry.map(_._1).tail.reverse) //Converts an integer to a list of booleans def join(list: Seq[Boolean]): Int = BigInt(list.map(if (_) '1' else '0').mkString, 2).toInt //Converts a list of booleans to an integer def split(num: Int): Seq[Boolean] = num.toBinaryString.reverse.padTo(32, '0').map(_ == '1') //Adds 2 booleans and a carry in, returns a sum and carry out def fullAdder (a: Boolean, b: Boolean, c: Boolean): (Boolean, Boolean) = (NAND(NAND(NAND(NAND(a, NAND(a, b)), NAND(NAND(a, b), b)), NAND(NAND(NAND(a, NAND(a, b)), NAND(NAND(a, b), b)), c)), NAND(NAND(NAND(NAND(a, NAND(a, b)), NAND(NAND(a, b), b)), c), c)), NAND(NAND(NAND(NAND(a, NAND(a, b)), NAND(NAND(a, b), b)), c), NAND(a, b))) //The basis for all operations def NAND(a: Boolean, b: Boolean): Boolean = !a || !bEDIT: replaced
Integer.parseIntwithBigInt(...).toIntto fixNumberFormatExceptionwith negative numbers.try it online here
- 1 year
// C++20 #include <concepts> #include <cstdint> template <typename T> concept C = requires (T t) { { b(t) } -> std::same_as<int>; }; char b(bool v) { return char(uintmax_t(v) % 5); } #define Int jnt=i auto b(char v) { return 'int'; } // this increments i: void inc(int& i) { auto Int == 1; using c = decltype(b(jnt)); // edited mistake here: c is a type, not a value // i += decltype(jnt)(C<decltype(b(c))>); i += decltype(jnt)(C<decltype(b(c(1)))>); }I’m not quite sure it compiles, I wrote this on my phone and with the sheer amount of landmines here making a mistake is almost inevitable.
- 1 year
Just surround your eyes with
try {…} catch(Up& up) { }, easy fix
In c single quotes are for single chars only, while int is a string. That means you would need " around it. I think.
- 1 year
Multiple-character char literals evaluate as int, with implementation defined values - it is extremely unreliable, but that particular piece of code should work.
- 1 year
It’s funny that it complains about all of the right stuff (except the ‘int’ thing), but it doesn’t say anything about the concept.
About the ‘int’ literal (which is not a string): cppreference.com has a description on this page about it, ctrl+f “multicharacter literal”.
- 1 year
Just tested this: the “original+” code compiles, but does not increment i.
There were two problems:
b(bool)andb(char)are ambiguous (quick fix: change the signatures tochar b(bool&)andauto b(char&& v));- The concept def. has to come after the
bfunctions, even if the constraint is only checked after both, I was unaware of this (fix: defineCimmediately beforevoid inc(int&)).
Can’t increment negative numbers or zero smh.
Fix:
if x==0: return 1 else x==1: return 2 else if x==-1: return 0 else if x==2 return 3 else if x==-2 return -1 ...There is a finite number of integers in this context. For 32-bit it, it’s 4 billion or so (2^32).
- 1 year
But that’s what TDD is for. If the test fails for 55, you just add a
return 56, and then all is well.
- 1 year
I have no idea how your code works but I appreciate it for the excited guy /(oo)/
- 1 year
Looks like perl, they send the result of a regex match in scalar context. IIRC that gets the count of matches of oo in foobar (1)
- 1 year
Let f(x) = 1/((x-1)^(2)). Given an integer n, compute the nth derivative of f as f^((n))(x) = (-1)(n)(n+1)!/((x-1)(n+2)), which lets us write f as the Taylor series about x=0 whose nth coefficient is f^((n))(0)/n! = (-1)^(-2)(n+1)!/n! = n+1. We now compute the nth coefficient with a simple recursion. To show this process works, we make an inductive argument: the 0th coefficient is f(0) = 1, and the nth coefficient is (f(x) - (1 + 2x + 3x^(2) + … + nx(n-1)))/x(n) evaluated at x=0. Note that each coefficient appearing in the previous expression is an integer between 0 and n, so by inductive hypothesis we can represent it by incrementing 0 repeatedly. Unfortunately, the expression we’ve written isn’t well-defined at x=0 since we can’t divide by 0, but as we’d expect, the limit as x->0 is defined and equal to n+1 (exercise: prove this). To compute the limit, we can evaluate at a sufficiently small value of x and argue by monotonicity or squeezing that n+1 is the nearest integer. (exercise: determine an upper bound for |x| that makes this argument work and fill in the details). Finally, evaluate our expression at the appropriate value of x for each k from 1 to n, using each result to compute the next, until we are able to write each coefficient. Evaluate one more time and conclude by rounding to the value of n+1. This increments n.
OP asked for code, not a lecture in number theory.
That said, as someone with a degree in math…I gotta respect this.
- 1 year
The argument describes an algorithm that can be translated into code.
1/(1-x)^(2) at 0 is 1
(1/(1-x)^(2) - 1)/x = (1 - 1 + 2x - x^(2))/x = 2 - x at 0 is 2
(1/(1-x)^(2) - 1 - 2x)/x^(2) = ((1 - 1 + 2x - x^(2) - 2x + 4x^(2) - 2x(3))/x(2) = 3 - 2x at 0 is 3
and so on
Your CPU has big registers, so why not use them!
#include <x86intrin.h> #include <stdio.h> static int increment_one(int input) { int __attribute__((aligned(32))) result[8]; __m256i v = _mm256_set_epi32(0, 0, 0, 0, 0, 0, 1, input); v = (__m256i)_mm256_hadd_ps((__m256)v, (__m256)v); _mm256_store_si256((__m256i *)result, v); return *result; } int main(void) { int input = 19; printf("Input: %d, Incremented output: %d\n", input, increment_one(input)); return 0; } Admiral Patrick@dubvee.orgEnglish
1 year// this increments i: // Version 2: Now more efficient; only loops to 50 and just rounds up. That's 50% less inefficient! function increment(val:number): number { for (let i:number = 0; i < 50; i = i +1) { val = val + 0.01 } return Math.round(val) }let i = 100 i = increment(i) // 101 Susaga@sh.itjust.worksEnglish
1 yearThis should get bonus points for incrementing i by 1 as part of the process for incrementing i by 1.
Admiral Patrick@dubvee.orgEnglish
1 yearI tried to make the afterthought that increments the loop counter use the
incrementfunction recursively, but Javascript said no lol.
Why not wait for a random bit flip to increment it?
int i = 0; while (i != i + 1); //i is now incremented- 1 year
You just wait for the right bit too be flipped and the wrong ones flipped are flipped an even number of times
I didn’t really dig too deep into it. It might be interesting to see what it actually compiles to.
From what I can remember result of i+1 would have to be stored before it can be compared thus it would be possible for i to experience a bit flip after the result of i+1 is stored.








