Pristine Bit CheckingProgramming a Pristine WorldPriming a Pristine WorldGrowing Quine SequenceGenerate a parity bitWrite self-validating codeIs this number a factorial?Quining a Pristine WorldPristine and Unique Code BowlingFilthy and UniqueLucas and Fibonacci are in pair
What is the meaning of "of trouble" in the following sentence?
If a centaur druid Wild Shapes into a Giant Elk, do their Charge features stack?
Decoupling User Stories in Agile Development
What is GPS' 19 year rollover and does it present a cybersecurity issue?
Are white and non-white police officers equally likely to kill black suspects?
Prime joint compound before latex paint?
What is the offset in a seaplane's hull?
Domain expired, GoDaddy holds it and is asking more money
Patience, young "Padovan"
What is the command to reset a PC without deleting any files
Information to fellow intern about hiring?
Are objects structures and/or vice versa?
Lied on resume at previous job
Why doesn't a const reference extend the life of a temporary object passed via a function?
How can I add custom success page
Is domain driven design an anti-SQL pattern?
Is it wise to focus on putting odd beats on left when playing double bass drums?
When blogging recipes, how can I support both readers who want the narrative/journey and ones who want the printer-friendly recipe?
Latin words with no plurals in English
How many letters suffice to construct words with no repetition?
Symmetry in quantum mechanics
Is every set a filtered colimit of finite sets?
How is it possible for user's password to be changed after storage was encrypted? (on OS X, Android)
Relationship between the ideal gas constant and entropy
Pristine Bit Checking
Programming a Pristine WorldPriming a Pristine WorldGrowing Quine SequenceGenerate a parity bitWrite self-validating codeIs this number a factorial?Quining a Pristine WorldPristine and Unique Code BowlingFilthy and UniqueLucas and Fibonacci are in pair
$begingroup$
Write a program/function that takes two integers in the range $0$ to $255$ inclusive, and returns whether the binary forms of the numbers are exactly one bit different.
For example, $1$ and $0$ have binary forms 00000001 and 00000000, which are one bit apart. Similarly, $152$ and $24$ are 010011000 and 000011000, so they return true.
However, your code must be pristine, such that if any one bit in your program is flipped, it should throw an error. For example, if your program was the single byte a (01100001), then all the 8 possible modified programs:
á ! A q i e c `
must throw an error. Make sure you are modifying by bytes (e.g. the á up there is actually representing the byte $225$, not the actual two byte character á).
Test cases:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Rules:
- Provide a testing framework that can verify that your program is properly pristine, since there will be a lot of possible programs (number of bytes*8), or else a complete proof of pristineness.
Please make sure your program is valid before you post it.
- Output needs to be either truthy/falsey (either way around is fine), or else two distinct non-error values
- Errors can be runtime, compiler, interpreter etc.
code-golf decision-problem restricted-source pristine-programming
$endgroup$
|
show 1 more comment
$begingroup$
Write a program/function that takes two integers in the range $0$ to $255$ inclusive, and returns whether the binary forms of the numbers are exactly one bit different.
For example, $1$ and $0$ have binary forms 00000001 and 00000000, which are one bit apart. Similarly, $152$ and $24$ are 010011000 and 000011000, so they return true.
However, your code must be pristine, such that if any one bit in your program is flipped, it should throw an error. For example, if your program was the single byte a (01100001), then all the 8 possible modified programs:
á ! A q i e c `
must throw an error. Make sure you are modifying by bytes (e.g. the á up there is actually representing the byte $225$, not the actual two byte character á).
Test cases:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Rules:
- Provide a testing framework that can verify that your program is properly pristine, since there will be a lot of possible programs (number of bytes*8), or else a complete proof of pristineness.
Please make sure your program is valid before you post it.
- Output needs to be either truthy/falsey (either way around is fine), or else two distinct non-error values
- Errors can be runtime, compiler, interpreter etc.
code-golf decision-problem restricted-source pristine-programming
$endgroup$
5
$begingroup$
If anyone's looking for a way to generate all possible variations of their solution, this Japt programme should (someone please double check) do the job: petershaggynoble.github.io/Japt-Interpreter/…
$endgroup$
– Shaggy
13 hours ago
3
$begingroup$
Here's one in Python as well: Try it online!
$endgroup$
– TFeld
13 hours ago
$begingroup$
Functions aren't allowed, since you mentioned program?
$endgroup$
– Kevin Cruijssen
12 hours ago
2
$begingroup$
@KevinCruijssen I've specified that function submissions are ok
$endgroup$
– Jo King
12 hours ago
$begingroup$
Not any character B. Only one which has a single bit changed compared to A.
$endgroup$
– Ven
9 hours ago
|
show 1 more comment
$begingroup$
Write a program/function that takes two integers in the range $0$ to $255$ inclusive, and returns whether the binary forms of the numbers are exactly one bit different.
For example, $1$ and $0$ have binary forms 00000001 and 00000000, which are one bit apart. Similarly, $152$ and $24$ are 010011000 and 000011000, so they return true.
However, your code must be pristine, such that if any one bit in your program is flipped, it should throw an error. For example, if your program was the single byte a (01100001), then all the 8 possible modified programs:
á ! A q i e c `
must throw an error. Make sure you are modifying by bytes (e.g. the á up there is actually representing the byte $225$, not the actual two byte character á).
Test cases:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Rules:
- Provide a testing framework that can verify that your program is properly pristine, since there will be a lot of possible programs (number of bytes*8), or else a complete proof of pristineness.
Please make sure your program is valid before you post it.
- Output needs to be either truthy/falsey (either way around is fine), or else two distinct non-error values
- Errors can be runtime, compiler, interpreter etc.
code-golf decision-problem restricted-source pristine-programming
$endgroup$
Write a program/function that takes two integers in the range $0$ to $255$ inclusive, and returns whether the binary forms of the numbers are exactly one bit different.
For example, $1$ and $0$ have binary forms 00000001 and 00000000, which are one bit apart. Similarly, $152$ and $24$ are 010011000 and 000011000, so they return true.
However, your code must be pristine, such that if any one bit in your program is flipped, it should throw an error. For example, if your program was the single byte a (01100001), then all the 8 possible modified programs:
á ! A q i e c `
must throw an error. Make sure you are modifying by bytes (e.g. the á up there is actually representing the byte $225$, not the actual two byte character á).
Test cases:
0,1 => Truthy
1,0 => Truthy
152,24 => Truthy
10,10 => Falsey
10,11 => Truthy
11,12 => Falsey
255,0 => Falsey
Rules:
- Provide a testing framework that can verify that your program is properly pristine, since there will be a lot of possible programs (number of bytes*8), or else a complete proof of pristineness.
Please make sure your program is valid before you post it.
- Output needs to be either truthy/falsey (either way around is fine), or else two distinct non-error values
- Errors can be runtime, compiler, interpreter etc.
code-golf decision-problem restricted-source pristine-programming
code-golf decision-problem restricted-source pristine-programming
edited 12 hours ago
Jo King
asked 16 hours ago
Jo KingJo King
26.6k364131
26.6k364131
5
$begingroup$
If anyone's looking for a way to generate all possible variations of their solution, this Japt programme should (someone please double check) do the job: petershaggynoble.github.io/Japt-Interpreter/…
$endgroup$
– Shaggy
13 hours ago
3
$begingroup$
Here's one in Python as well: Try it online!
$endgroup$
– TFeld
13 hours ago
$begingroup$
Functions aren't allowed, since you mentioned program?
$endgroup$
– Kevin Cruijssen
12 hours ago
2
$begingroup$
@KevinCruijssen I've specified that function submissions are ok
$endgroup$
– Jo King
12 hours ago
$begingroup$
Not any character B. Only one which has a single bit changed compared to A.
$endgroup$
– Ven
9 hours ago
|
show 1 more comment
5
$begingroup$
If anyone's looking for a way to generate all possible variations of their solution, this Japt programme should (someone please double check) do the job: petershaggynoble.github.io/Japt-Interpreter/…
$endgroup$
– Shaggy
13 hours ago
3
$begingroup$
Here's one in Python as well: Try it online!
$endgroup$
– TFeld
13 hours ago
$begingroup$
Functions aren't allowed, since you mentioned program?
$endgroup$
– Kevin Cruijssen
12 hours ago
2
$begingroup$
@KevinCruijssen I've specified that function submissions are ok
$endgroup$
– Jo King
12 hours ago
$begingroup$
Not any character B. Only one which has a single bit changed compared to A.
$endgroup$
– Ven
9 hours ago
5
5
$begingroup$
If anyone's looking for a way to generate all possible variations of their solution, this Japt programme should (someone please double check) do the job: petershaggynoble.github.io/Japt-Interpreter/…
$endgroup$
– Shaggy
13 hours ago
$begingroup$
If anyone's looking for a way to generate all possible variations of their solution, this Japt programme should (someone please double check) do the job: petershaggynoble.github.io/Japt-Interpreter/…
$endgroup$
– Shaggy
13 hours ago
3
3
$begingroup$
Here's one in Python as well: Try it online!
$endgroup$
– TFeld
13 hours ago
$begingroup$
Here's one in Python as well: Try it online!
$endgroup$
– TFeld
13 hours ago
$begingroup$
Functions aren't allowed, since you mentioned program?
$endgroup$
– Kevin Cruijssen
12 hours ago
$begingroup$
Functions aren't allowed, since you mentioned program?
$endgroup$
– Kevin Cruijssen
12 hours ago
2
2
$begingroup$
@KevinCruijssen I've specified that function submissions are ok
$endgroup$
– Jo King
12 hours ago
$begingroup$
@KevinCruijssen I've specified that function submissions are ok
$endgroup$
– Jo King
12 hours ago
$begingroup$
Not any character B. Only one which has a single bit changed compared to A.
$endgroup$
– Ven
9 hours ago
$begingroup$
Not any character B. Only one which has a single bit changed compared to A.
$endgroup$
– Ven
9 hours ago
|
show 1 more comment
10 Answers
10
active
oldest
votes
$begingroup$
Python 2, 35 bytes
lambda a,b:(a^b)&-(a^b)in[a^b or[]]
Try it online!
Uses the power-of-two check n&-n==n, eliminating the n==0 false positive.
For reference, these are the pairs of one-char binary operators that are one bit apart, making them hard to use:
+ /
- /
* +
% -
< |
< >
Fortunately, & and ^ are not among these.
Also note that == can become <=, and + can become the comment character #.
Python 2, 41 bytes
lambda a,b:bin(a^b).count(`+True`)is+True
Try it online!
Taking TFeld's lambda a,b:bin(a^b).count('1')==1 and making it pristine by changing the 1's to +True and == to is. Thanks to Jo King for 1 byte.
$endgroup$
add a comment |
$begingroup$
Python 2, 72 67 50 bytes
lambda a,b:sum(map(int,':b'.format(a^b)))is+True
Try it online!
-5 bytes, thanks to Jo King
Returns True/False for for truthy/falsey.
The program is basically the same as lambda a,b:bin(a^b).count('1')==1, but without numbers and other chars which work when bit-flipped.
Works by making sure that almost everything is a named function (which are all quite pristine)
The pristine test at the end flips a single bit (for every bit), and tries the function on an input. If that works (correct or not), that variation is printed. No printed programs = pristine function.
$endgroup$
add a comment |
$begingroup$
Java 8, 68 61 56 bytes
a->b->(a.bitCount(a^b)+"").equals(java.awt.Font.BOLD+"")
Try it online.
Explanation:
The shortest base function would be:
a->b->a.bitCount(a^b)==1
Try it online.
This is modified so there isn't a digit, =, nor one of the +/* operands in it for numeric calculations (so the + for String-concatenation is fine):
- The
java.awt.Font.BOLDis the shortest constant I could find which equals 1. - The
+""and.equalsare to compare byString.equals(String)instead ofint==int.
NOTE:Integer.equals(int)could be used here, but would be more bytes, since both the.bitCountandjava.awt.Font.BOLDare primitiveintinstead ofInteger-objects, so an additionalnew Integer(...)would be required to transform one of the two to anInteger-object, before we could use the.equals.
$endgroup$
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
1
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant withjava.awt.Font.BOLD, but yourObjects.equalsis a nice golf, thanks!
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,Objectsis part of thejava.util.import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :(
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
Would-~(a^a)work for 1?
$endgroup$
– Embodiment of Ignorance
4 hours ago
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 128 101 77 70 61 74 bytes
-27 bytes thanks to Ascii-Only
a=>b=>var d=Math.Log(a^b,(int)Math.E);return d.Equals((int)Math.Abs(d));
Try it online!
You have to be quite creative to get numbers in C# without using literals. Only uses ^ operator. Variables a,b are all more than 1 bit away from each other and everything else is a keyword/name.
$endgroup$
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor+/*=for mathematical or validating operations. ;)
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
O_o another -24. btw you no longer use+
$endgroup$
– ASCII-only
10 hours ago
|
show 7 more comments
$begingroup$
JavaScript (ES6 in strict mode), 57 bytes
y=>z=>eval(`(y^$e`)
Try it online! or Make sure that all modified programs are wrong
$endgroup$
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
2
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
add a comment |
$begingroup$
Julia 0.7, 20 bytes
(a,b)->ispow2(a⊻b)
Try it online!
Here is a pristine validator that tries running each modified anonymous function against some input, and neither passes successfully. Note that the code has a multi-byte unicode character, and some possible outputs from bit flipping are not even included, as those produce invalid UTF-8 strings.
$endgroup$
$begingroup$
xandyare one bit apart, so I believe this is a counter example.yandxare also 1 bit off9and6respectively.
$endgroup$
– Expired Data
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 37 bytes
a=>b=>a!=b&((a^b)&-(a^b)).Equals(a^b)
The a=>b=> part cannot be changed, or else the function is invalid.
In a!=b, the = cannot be changed since int cannot be converted to bool.
Try it online!
$endgroup$
add a comment |
$begingroup$
C (gcc), 56 bytes
d(a,b)return(sizeof((char)d))^__builtin_popcount(a^b);
Try it online!
Returns 0 if the pair differ by 1, non-zero otherwise. Slightly unusual for C, unless you consider it returning EXIT_SUCCESS if the pair differ by 1, any other value otherwise.
Uses sizeof((char)d)) to produce the constant 1 in a pristine way while also forcing the function name to be pristine.
It then XORs that 1 with the popcount of the XOR of the arguments. Luckily the ^ symbol is easy to keep pristine, as is the very long identifier __builtin_popcount.
Meanwhile, here is the script used to test the solution:
#!/bin/bash
SOURCE_FILE=$1
FOOT_FILE=$2
TMP_SRC=temp.c
LENGTH="$(wc -c <"$SOURCE_FILE")"
BITS=$((LENGTH*8))
cat "$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
if ./t.out; then
echo "Candidate solution..."
else
echo "Doesn't even work normally..."
exit
fi
else
echo "Doesn't even compile..."
exit
fi
for i in $(seq 1 $BITS); do
./flipbit "$i" <"$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
echo "Testing flipped bit $i:"
cat "$TMP_SRC"
./t.out >/dev/null 2>&1
STATUS=$?
if [ "$STATUS" -eq 0 ]; then
echo "It works!"
exit
elif [ "$STATUS" -eq 1 ]; then
echo "It doesn't work..."
exit
else
echo "It crashes"
fi
fi
done
Which uses the ./flipbit tool I wrote whose source is simply:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
int bittoflip = atoi(argv[1]) - 1;
int ch;
while ((ch = fgetc(stdin)) != EOF)
if (bittoflip < 8 && bittoflip >= 0)
putchar(ch ^ (1 << bittoflip));
else
putchar(ch);
bittoflip -= 8;
return 0;
The tricky bits were:
- Whitespace: All whitespace (including newlines) have pristine twins that will work similarly
- Comparison:
=doesn't work well, since it can be a comparison in every case it could appear. Similarly-doesn't work well. Thus^is used to assert equality with 1. - Variable names: f would clash with b, so had to use d as the function name instead.
$endgroup$
add a comment |
$begingroup$
R, 83 bytes
t(identical(sum(.<-as.double(intToBits(Reduce(bitwXor,scan())))),sum(T^el(.[-T]))))
Try it online!
Proof that this is pristine
Working around the fact that as.integer, as.double etc. are only a bit away from is.integer, is.double etc. was the hardest bit. In the end, using sum(T^el(.[-T]) as a way of both generating a one and checking that as.double has returned a >1 length vector was the best I could do. The wrapping t is to handle the fact that otherwise identical can become ide~tical.
$endgroup$
add a comment |
$begingroup$
Groovy, 47 bytes
a,b->a.bitCount(a^b).equals(java.awt.Font.BOLD)
Try it online!
Adapted version of Kevin Cruijssen's Java answer.
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
return StackExchange.using("mathjaxEditing", function ()
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
);
);
, "mathjax-editing");
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "200"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f182830%2fpristine-bit-checking%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
10 Answers
10
active
oldest
votes
10 Answers
10
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
Python 2, 35 bytes
lambda a,b:(a^b)&-(a^b)in[a^b or[]]
Try it online!
Uses the power-of-two check n&-n==n, eliminating the n==0 false positive.
For reference, these are the pairs of one-char binary operators that are one bit apart, making them hard to use:
+ /
- /
* +
% -
< |
< >
Fortunately, & and ^ are not among these.
Also note that == can become <=, and + can become the comment character #.
Python 2, 41 bytes
lambda a,b:bin(a^b).count(`+True`)is+True
Try it online!
Taking TFeld's lambda a,b:bin(a^b).count('1')==1 and making it pristine by changing the 1's to +True and == to is. Thanks to Jo King for 1 byte.
$endgroup$
add a comment |
$begingroup$
Python 2, 35 bytes
lambda a,b:(a^b)&-(a^b)in[a^b or[]]
Try it online!
Uses the power-of-two check n&-n==n, eliminating the n==0 false positive.
For reference, these are the pairs of one-char binary operators that are one bit apart, making them hard to use:
+ /
- /
* +
% -
< |
< >
Fortunately, & and ^ are not among these.
Also note that == can become <=, and + can become the comment character #.
Python 2, 41 bytes
lambda a,b:bin(a^b).count(`+True`)is+True
Try it online!
Taking TFeld's lambda a,b:bin(a^b).count('1')==1 and making it pristine by changing the 1's to +True and == to is. Thanks to Jo King for 1 byte.
$endgroup$
add a comment |
$begingroup$
Python 2, 35 bytes
lambda a,b:(a^b)&-(a^b)in[a^b or[]]
Try it online!
Uses the power-of-two check n&-n==n, eliminating the n==0 false positive.
For reference, these are the pairs of one-char binary operators that are one bit apart, making them hard to use:
+ /
- /
* +
% -
< |
< >
Fortunately, & and ^ are not among these.
Also note that == can become <=, and + can become the comment character #.
Python 2, 41 bytes
lambda a,b:bin(a^b).count(`+True`)is+True
Try it online!
Taking TFeld's lambda a,b:bin(a^b).count('1')==1 and making it pristine by changing the 1's to +True and == to is. Thanks to Jo King for 1 byte.
$endgroup$
Python 2, 35 bytes
lambda a,b:(a^b)&-(a^b)in[a^b or[]]
Try it online!
Uses the power-of-two check n&-n==n, eliminating the n==0 false positive.
For reference, these are the pairs of one-char binary operators that are one bit apart, making them hard to use:
+ /
- /
* +
% -
< |
< >
Fortunately, & and ^ are not among these.
Also note that == can become <=, and + can become the comment character #.
Python 2, 41 bytes
lambda a,b:bin(a^b).count(`+True`)is+True
Try it online!
Taking TFeld's lambda a,b:bin(a^b).count('1')==1 and making it pristine by changing the 1's to +True and == to is. Thanks to Jo King for 1 byte.
edited 10 hours ago
answered 12 hours ago
xnorxnor
93.6k18190450
93.6k18190450
add a comment |
add a comment |
$begingroup$
Python 2, 72 67 50 bytes
lambda a,b:sum(map(int,':b'.format(a^b)))is+True
Try it online!
-5 bytes, thanks to Jo King
Returns True/False for for truthy/falsey.
The program is basically the same as lambda a,b:bin(a^b).count('1')==1, but without numbers and other chars which work when bit-flipped.
Works by making sure that almost everything is a named function (which are all quite pristine)
The pristine test at the end flips a single bit (for every bit), and tries the function on an input. If that works (correct or not), that variation is printed. No printed programs = pristine function.
$endgroup$
add a comment |
$begingroup$
Python 2, 72 67 50 bytes
lambda a,b:sum(map(int,':b'.format(a^b)))is+True
Try it online!
-5 bytes, thanks to Jo King
Returns True/False for for truthy/falsey.
The program is basically the same as lambda a,b:bin(a^b).count('1')==1, but without numbers and other chars which work when bit-flipped.
Works by making sure that almost everything is a named function (which are all quite pristine)
The pristine test at the end flips a single bit (for every bit), and tries the function on an input. If that works (correct or not), that variation is printed. No printed programs = pristine function.
$endgroup$
add a comment |
$begingroup$
Python 2, 72 67 50 bytes
lambda a,b:sum(map(int,':b'.format(a^b)))is+True
Try it online!
-5 bytes, thanks to Jo King
Returns True/False for for truthy/falsey.
The program is basically the same as lambda a,b:bin(a^b).count('1')==1, but without numbers and other chars which work when bit-flipped.
Works by making sure that almost everything is a named function (which are all quite pristine)
The pristine test at the end flips a single bit (for every bit), and tries the function on an input. If that works (correct or not), that variation is printed. No printed programs = pristine function.
$endgroup$
Python 2, 72 67 50 bytes
lambda a,b:sum(map(int,':b'.format(a^b)))is+True
Try it online!
-5 bytes, thanks to Jo King
Returns True/False for for truthy/falsey.
The program is basically the same as lambda a,b:bin(a^b).count('1')==1, but without numbers and other chars which work when bit-flipped.
Works by making sure that almost everything is a named function (which are all quite pristine)
The pristine test at the end flips a single bit (for every bit), and tries the function on an input. If that works (correct or not), that variation is printed. No printed programs = pristine function.
edited 12 hours ago
answered 14 hours ago
TFeldTFeld
16.5k21451
16.5k21451
add a comment |
add a comment |
$begingroup$
Java 8, 68 61 56 bytes
a->b->(a.bitCount(a^b)+"").equals(java.awt.Font.BOLD+"")
Try it online.
Explanation:
The shortest base function would be:
a->b->a.bitCount(a^b)==1
Try it online.
This is modified so there isn't a digit, =, nor one of the +/* operands in it for numeric calculations (so the + for String-concatenation is fine):
- The
java.awt.Font.BOLDis the shortest constant I could find which equals 1. - The
+""and.equalsare to compare byString.equals(String)instead ofint==int.
NOTE:Integer.equals(int)could be used here, but would be more bytes, since both the.bitCountandjava.awt.Font.BOLDare primitiveintinstead ofInteger-objects, so an additionalnew Integer(...)would be required to transform one of the two to anInteger-object, before we could use the.equals.
$endgroup$
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
1
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant withjava.awt.Font.BOLD, but yourObjects.equalsis a nice golf, thanks!
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,Objectsis part of thejava.util.import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :(
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
Would-~(a^a)work for 1?
$endgroup$
– Embodiment of Ignorance
4 hours ago
add a comment |
$begingroup$
Java 8, 68 61 56 bytes
a->b->(a.bitCount(a^b)+"").equals(java.awt.Font.BOLD+"")
Try it online.
Explanation:
The shortest base function would be:
a->b->a.bitCount(a^b)==1
Try it online.
This is modified so there isn't a digit, =, nor one of the +/* operands in it for numeric calculations (so the + for String-concatenation is fine):
- The
java.awt.Font.BOLDis the shortest constant I could find which equals 1. - The
+""and.equalsare to compare byString.equals(String)instead ofint==int.
NOTE:Integer.equals(int)could be used here, but would be more bytes, since both the.bitCountandjava.awt.Font.BOLDare primitiveintinstead ofInteger-objects, so an additionalnew Integer(...)would be required to transform one of the two to anInteger-object, before we could use the.equals.
$endgroup$
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
1
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant withjava.awt.Font.BOLD, but yourObjects.equalsis a nice golf, thanks!
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,Objectsis part of thejava.util.import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :(
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
Would-~(a^a)work for 1?
$endgroup$
– Embodiment of Ignorance
4 hours ago
add a comment |
$begingroup$
Java 8, 68 61 56 bytes
a->b->(a.bitCount(a^b)+"").equals(java.awt.Font.BOLD+"")
Try it online.
Explanation:
The shortest base function would be:
a->b->a.bitCount(a^b)==1
Try it online.
This is modified so there isn't a digit, =, nor one of the +/* operands in it for numeric calculations (so the + for String-concatenation is fine):
- The
java.awt.Font.BOLDis the shortest constant I could find which equals 1. - The
+""and.equalsare to compare byString.equals(String)instead ofint==int.
NOTE:Integer.equals(int)could be used here, but would be more bytes, since both the.bitCountandjava.awt.Font.BOLDare primitiveintinstead ofInteger-objects, so an additionalnew Integer(...)would be required to transform one of the two to anInteger-object, before we could use the.equals.
$endgroup$
Java 8, 68 61 56 bytes
a->b->(a.bitCount(a^b)+"").equals(java.awt.Font.BOLD+"")
Try it online.
Explanation:
The shortest base function would be:
a->b->a.bitCount(a^b)==1
Try it online.
This is modified so there isn't a digit, =, nor one of the +/* operands in it for numeric calculations (so the + for String-concatenation is fine):
- The
java.awt.Font.BOLDis the shortest constant I could find which equals 1. - The
+""and.equalsare to compare byString.equals(String)instead ofint==int.
NOTE:Integer.equals(int)could be used here, but would be more bytes, since both the.bitCountandjava.awt.Font.BOLDare primitiveintinstead ofInteger-objects, so an additionalnew Integer(...)would be required to transform one of the two to anInteger-object, before we could use the.equals.
edited 11 hours ago
answered 11 hours ago
Kevin CruijssenKevin Cruijssen
42.4k570217
42.4k570217
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
1
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant withjava.awt.Font.BOLD, but yourObjects.equalsis a nice golf, thanks!
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,Objectsis part of thejava.util.import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :(
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
Would-~(a^a)work for 1?
$endgroup$
– Embodiment of Ignorance
4 hours ago
add a comment |
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
1
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant withjava.awt.Font.BOLD, but yourObjects.equalsis a nice golf, thanks!
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,Objectsis part of thejava.util.import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :(
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
Would-~(a^a)work for 1?
$endgroup$
– Embodiment of Ignorance
4 hours ago
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
(int)Math.log(Math.E) is 21 bytes
$endgroup$
– Expired Data
11 hours ago
1
1
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
59 bytes
$endgroup$
– Expired Data
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant with
java.awt.Font.BOLD, but your Objects.equals is a nice golf, thanks!$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Thanks, actually just found a shorter constant with
java.awt.Font.BOLD, but your Objects.equals is a nice golf, thanks!$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,
Objects is part of the java.util. import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :($endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ExpiredData Actually,
Objects is part of the java.util. import, so I have to add that to the byte-count I'm afraid, making it 69 bytes.. :($endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
Would
-~(a^a) work for 1?$endgroup$
– Embodiment of Ignorance
4 hours ago
$begingroup$
Would
-~(a^a) work for 1?$endgroup$
– Embodiment of Ignorance
4 hours ago
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 128 101 77 70 61 74 bytes
-27 bytes thanks to Ascii-Only
a=>b=>var d=Math.Log(a^b,(int)Math.E);return d.Equals((int)Math.Abs(d));
Try it online!
You have to be quite creative to get numbers in C# without using literals. Only uses ^ operator. Variables a,b are all more than 1 bit away from each other and everything else is a keyword/name.
$endgroup$
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor+/*=for mathematical or validating operations. ;)
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
O_o another -24. btw you no longer use+
$endgroup$
– ASCII-only
10 hours ago
|
show 7 more comments
$begingroup$
C# (Visual C# Interactive Compiler), 128 101 77 70 61 74 bytes
-27 bytes thanks to Ascii-Only
a=>b=>var d=Math.Log(a^b,(int)Math.E);return d.Equals((int)Math.Abs(d));
Try it online!
You have to be quite creative to get numbers in C# without using literals. Only uses ^ operator. Variables a,b are all more than 1 bit away from each other and everything else is a keyword/name.
$endgroup$
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor+/*=for mathematical or validating operations. ;)
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
O_o another -24. btw you no longer use+
$endgroup$
– ASCII-only
10 hours ago
|
show 7 more comments
$begingroup$
C# (Visual C# Interactive Compiler), 128 101 77 70 61 74 bytes
-27 bytes thanks to Ascii-Only
a=>b=>var d=Math.Log(a^b,(int)Math.E);return d.Equals((int)Math.Abs(d));
Try it online!
You have to be quite creative to get numbers in C# without using literals. Only uses ^ operator. Variables a,b are all more than 1 bit away from each other and everything else is a keyword/name.
$endgroup$
C# (Visual C# Interactive Compiler), 128 101 77 70 61 74 bytes
-27 bytes thanks to Ascii-Only
a=>b=>var d=Math.Log(a^b,(int)Math.E);return d.Equals((int)Math.Abs(d));
Try it online!
You have to be quite creative to get numbers in C# without using literals. Only uses ^ operator. Variables a,b are all more than 1 bit away from each other and everything else is a keyword/name.
edited 7 hours ago
answered 12 hours ago
Expired DataExpired Data
55314
55314
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor+/*=for mathematical or validating operations. ;)
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
O_o another -24. btw you no longer use+
$endgroup$
– ASCII-only
10 hours ago
|
show 7 more comments
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor+/*=for mathematical or validating operations. ;)
$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
1
$begingroup$
O_o another -24. btw you no longer use+
$endgroup$
– ASCII-only
10 hours ago
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
you don't need to count bits - checking if it's a power of 2 between 1 and 128 inclusive is enough
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor
+/*= for mathematical or validating operations. ;)$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@ASCII-only Good luck checking that in a reasonable number of bytes when we can't use integers nor
+/*= for mathematical or validating operations. ;)$endgroup$
– Kevin Cruijssen
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
@KevinCruijssen C# has enums too :(. damnit
$endgroup$
– ASCII-only
11 hours ago
1
1
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
$begingroup$
101?
$endgroup$
– ASCII-only
11 hours ago
1
1
$begingroup$
O_o another -24. btw you no longer use
+$endgroup$
– ASCII-only
10 hours ago
$begingroup$
O_o another -24. btw you no longer use
+$endgroup$
– ASCII-only
10 hours ago
|
show 7 more comments
$begingroup$
JavaScript (ES6 in strict mode), 57 bytes
y=>z=>eval(`(y^$e`)
Try it online! or Make sure that all modified programs are wrong
$endgroup$
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
2
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
add a comment |
$begingroup$
JavaScript (ES6 in strict mode), 57 bytes
y=>z=>eval(`(y^$e`)
Try it online! or Make sure that all modified programs are wrong
$endgroup$
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
2
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
add a comment |
$begingroup$
JavaScript (ES6 in strict mode), 57 bytes
y=>z=>eval(`(y^$e`)
Try it online! or Make sure that all modified programs are wrong
$endgroup$
JavaScript (ES6 in strict mode), 57 bytes
y=>z=>eval(`(y^$e`)
Try it online! or Make sure that all modified programs are wrong
edited 6 hours ago
answered 9 hours ago
ArnauldArnauld
80.6k797334
80.6k797334
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
2
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
add a comment |
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
2
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
$begingroup$
Oh my gosh I didnt realize I clicked a code golf link and saw this answer out of context and almost had a heart attack. Like, OMG NO
$endgroup$
– Marie
9 hours ago
2
2
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
$begingroup$
@Marie Caution! You can only stare at this code with certified golf glasses. Otherwise, it may burn your retina. :p
$endgroup$
– Arnauld
8 hours ago
add a comment |
$begingroup$
Julia 0.7, 20 bytes
(a,b)->ispow2(a⊻b)
Try it online!
Here is a pristine validator that tries running each modified anonymous function against some input, and neither passes successfully. Note that the code has a multi-byte unicode character, and some possible outputs from bit flipping are not even included, as those produce invalid UTF-8 strings.
$endgroup$
$begingroup$
xandyare one bit apart, so I believe this is a counter example.yandxare also 1 bit off9and6respectively.
$endgroup$
– Expired Data
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
add a comment |
$begingroup$
Julia 0.7, 20 bytes
(a,b)->ispow2(a⊻b)
Try it online!
Here is a pristine validator that tries running each modified anonymous function against some input, and neither passes successfully. Note that the code has a multi-byte unicode character, and some possible outputs from bit flipping are not even included, as those produce invalid UTF-8 strings.
$endgroup$
$begingroup$
xandyare one bit apart, so I believe this is a counter example.yandxare also 1 bit off9and6respectively.
$endgroup$
– Expired Data
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
add a comment |
$begingroup$
Julia 0.7, 20 bytes
(a,b)->ispow2(a⊻b)
Try it online!
Here is a pristine validator that tries running each modified anonymous function against some input, and neither passes successfully. Note that the code has a multi-byte unicode character, and some possible outputs from bit flipping are not even included, as those produce invalid UTF-8 strings.
$endgroup$
Julia 0.7, 20 bytes
(a,b)->ispow2(a⊻b)
Try it online!
Here is a pristine validator that tries running each modified anonymous function against some input, and neither passes successfully. Note that the code has a multi-byte unicode character, and some possible outputs from bit flipping are not even included, as those produce invalid UTF-8 strings.
edited 7 hours ago
answered 8 hours ago
Kirill L.Kirill L.
6,0481527
6,0481527
$begingroup$
xandyare one bit apart, so I believe this is a counter example.yandxare also 1 bit off9and6respectively.
$endgroup$
– Expired Data
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
add a comment |
$begingroup$
xandyare one bit apart, so I believe this is a counter example.yandxare also 1 bit off9and6respectively.
$endgroup$
– Expired Data
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
$begingroup$
x and y are one bit apart, so I believe this is a counter example. y and x are also 1 bit off 9 and 6 respectively.$endgroup$
– Expired Data
8 hours ago
$begingroup$
x and y are one bit apart, so I believe this is a counter example. y and x are also 1 bit off 9 and 6 respectively.$endgroup$
– Expired Data
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
$begingroup$
Damn, while thinking about complex things, I absolutely missed the simplest one. Hopefully, changing the variables will fix it.
$endgroup$
– Kirill L.
8 hours ago
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 37 bytes
a=>b=>a!=b&((a^b)&-(a^b)).Equals(a^b)
The a=>b=> part cannot be changed, or else the function is invalid.
In a!=b, the = cannot be changed since int cannot be converted to bool.
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 37 bytes
a=>b=>a!=b&((a^b)&-(a^b)).Equals(a^b)
The a=>b=> part cannot be changed, or else the function is invalid.
In a!=b, the = cannot be changed since int cannot be converted to bool.
Try it online!
$endgroup$
add a comment |
$begingroup$
C# (Visual C# Interactive Compiler), 37 bytes
a=>b=>a!=b&((a^b)&-(a^b)).Equals(a^b)
The a=>b=> part cannot be changed, or else the function is invalid.
In a!=b, the = cannot be changed since int cannot be converted to bool.
Try it online!
$endgroup$
C# (Visual C# Interactive Compiler), 37 bytes
a=>b=>a!=b&((a^b)&-(a^b)).Equals(a^b)
The a=>b=> part cannot be changed, or else the function is invalid.
In a!=b, the = cannot be changed since int cannot be converted to bool.
Try it online!
answered 2 hours ago
Embodiment of IgnoranceEmbodiment of Ignorance
2,856127
2,856127
add a comment |
add a comment |
$begingroup$
C (gcc), 56 bytes
d(a,b)return(sizeof((char)d))^__builtin_popcount(a^b);
Try it online!
Returns 0 if the pair differ by 1, non-zero otherwise. Slightly unusual for C, unless you consider it returning EXIT_SUCCESS if the pair differ by 1, any other value otherwise.
Uses sizeof((char)d)) to produce the constant 1 in a pristine way while also forcing the function name to be pristine.
It then XORs that 1 with the popcount of the XOR of the arguments. Luckily the ^ symbol is easy to keep pristine, as is the very long identifier __builtin_popcount.
Meanwhile, here is the script used to test the solution:
#!/bin/bash
SOURCE_FILE=$1
FOOT_FILE=$2
TMP_SRC=temp.c
LENGTH="$(wc -c <"$SOURCE_FILE")"
BITS=$((LENGTH*8))
cat "$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
if ./t.out; then
echo "Candidate solution..."
else
echo "Doesn't even work normally..."
exit
fi
else
echo "Doesn't even compile..."
exit
fi
for i in $(seq 1 $BITS); do
./flipbit "$i" <"$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
echo "Testing flipped bit $i:"
cat "$TMP_SRC"
./t.out >/dev/null 2>&1
STATUS=$?
if [ "$STATUS" -eq 0 ]; then
echo "It works!"
exit
elif [ "$STATUS" -eq 1 ]; then
echo "It doesn't work..."
exit
else
echo "It crashes"
fi
fi
done
Which uses the ./flipbit tool I wrote whose source is simply:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
int bittoflip = atoi(argv[1]) - 1;
int ch;
while ((ch = fgetc(stdin)) != EOF)
if (bittoflip < 8 && bittoflip >= 0)
putchar(ch ^ (1 << bittoflip));
else
putchar(ch);
bittoflip -= 8;
return 0;
The tricky bits were:
- Whitespace: All whitespace (including newlines) have pristine twins that will work similarly
- Comparison:
=doesn't work well, since it can be a comparison in every case it could appear. Similarly-doesn't work well. Thus^is used to assert equality with 1. - Variable names: f would clash with b, so had to use d as the function name instead.
$endgroup$
add a comment |
$begingroup$
C (gcc), 56 bytes
d(a,b)return(sizeof((char)d))^__builtin_popcount(a^b);
Try it online!
Returns 0 if the pair differ by 1, non-zero otherwise. Slightly unusual for C, unless you consider it returning EXIT_SUCCESS if the pair differ by 1, any other value otherwise.
Uses sizeof((char)d)) to produce the constant 1 in a pristine way while also forcing the function name to be pristine.
It then XORs that 1 with the popcount of the XOR of the arguments. Luckily the ^ symbol is easy to keep pristine, as is the very long identifier __builtin_popcount.
Meanwhile, here is the script used to test the solution:
#!/bin/bash
SOURCE_FILE=$1
FOOT_FILE=$2
TMP_SRC=temp.c
LENGTH="$(wc -c <"$SOURCE_FILE")"
BITS=$((LENGTH*8))
cat "$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
if ./t.out; then
echo "Candidate solution..."
else
echo "Doesn't even work normally..."
exit
fi
else
echo "Doesn't even compile..."
exit
fi
for i in $(seq 1 $BITS); do
./flipbit "$i" <"$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
echo "Testing flipped bit $i:"
cat "$TMP_SRC"
./t.out >/dev/null 2>&1
STATUS=$?
if [ "$STATUS" -eq 0 ]; then
echo "It works!"
exit
elif [ "$STATUS" -eq 1 ]; then
echo "It doesn't work..."
exit
else
echo "It crashes"
fi
fi
done
Which uses the ./flipbit tool I wrote whose source is simply:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
int bittoflip = atoi(argv[1]) - 1;
int ch;
while ((ch = fgetc(stdin)) != EOF)
if (bittoflip < 8 && bittoflip >= 0)
putchar(ch ^ (1 << bittoflip));
else
putchar(ch);
bittoflip -= 8;
return 0;
The tricky bits were:
- Whitespace: All whitespace (including newlines) have pristine twins that will work similarly
- Comparison:
=doesn't work well, since it can be a comparison in every case it could appear. Similarly-doesn't work well. Thus^is used to assert equality with 1. - Variable names: f would clash with b, so had to use d as the function name instead.
$endgroup$
add a comment |
$begingroup$
C (gcc), 56 bytes
d(a,b)return(sizeof((char)d))^__builtin_popcount(a^b);
Try it online!
Returns 0 if the pair differ by 1, non-zero otherwise. Slightly unusual for C, unless you consider it returning EXIT_SUCCESS if the pair differ by 1, any other value otherwise.
Uses sizeof((char)d)) to produce the constant 1 in a pristine way while also forcing the function name to be pristine.
It then XORs that 1 with the popcount of the XOR of the arguments. Luckily the ^ symbol is easy to keep pristine, as is the very long identifier __builtin_popcount.
Meanwhile, here is the script used to test the solution:
#!/bin/bash
SOURCE_FILE=$1
FOOT_FILE=$2
TMP_SRC=temp.c
LENGTH="$(wc -c <"$SOURCE_FILE")"
BITS=$((LENGTH*8))
cat "$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
if ./t.out; then
echo "Candidate solution..."
else
echo "Doesn't even work normally..."
exit
fi
else
echo "Doesn't even compile..."
exit
fi
for i in $(seq 1 $BITS); do
./flipbit "$i" <"$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
echo "Testing flipped bit $i:"
cat "$TMP_SRC"
./t.out >/dev/null 2>&1
STATUS=$?
if [ "$STATUS" -eq 0 ]; then
echo "It works!"
exit
elif [ "$STATUS" -eq 1 ]; then
echo "It doesn't work..."
exit
else
echo "It crashes"
fi
fi
done
Which uses the ./flipbit tool I wrote whose source is simply:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
int bittoflip = atoi(argv[1]) - 1;
int ch;
while ((ch = fgetc(stdin)) != EOF)
if (bittoflip < 8 && bittoflip >= 0)
putchar(ch ^ (1 << bittoflip));
else
putchar(ch);
bittoflip -= 8;
return 0;
The tricky bits were:
- Whitespace: All whitespace (including newlines) have pristine twins that will work similarly
- Comparison:
=doesn't work well, since it can be a comparison in every case it could appear. Similarly-doesn't work well. Thus^is used to assert equality with 1. - Variable names: f would clash with b, so had to use d as the function name instead.
$endgroup$
C (gcc), 56 bytes
d(a,b)return(sizeof((char)d))^__builtin_popcount(a^b);
Try it online!
Returns 0 if the pair differ by 1, non-zero otherwise. Slightly unusual for C, unless you consider it returning EXIT_SUCCESS if the pair differ by 1, any other value otherwise.
Uses sizeof((char)d)) to produce the constant 1 in a pristine way while also forcing the function name to be pristine.
It then XORs that 1 with the popcount of the XOR of the arguments. Luckily the ^ symbol is easy to keep pristine, as is the very long identifier __builtin_popcount.
Meanwhile, here is the script used to test the solution:
#!/bin/bash
SOURCE_FILE=$1
FOOT_FILE=$2
TMP_SRC=temp.c
LENGTH="$(wc -c <"$SOURCE_FILE")"
BITS=$((LENGTH*8))
cat "$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
if ./t.out; then
echo "Candidate solution..."
else
echo "Doesn't even work normally..."
exit
fi
else
echo "Doesn't even compile..."
exit
fi
for i in $(seq 1 $BITS); do
./flipbit "$i" <"$SOURCE_FILE" >"$TMP_SRC"
cat "$FOOT_FILE" >>"$TMP_SRC"
if gcc -w $TMP_SRC -o t.out >/dev/null 2>&1; then
echo "Testing flipped bit $i:"
cat "$TMP_SRC"
./t.out >/dev/null 2>&1
STATUS=$?
if [ "$STATUS" -eq 0 ]; then
echo "It works!"
exit
elif [ "$STATUS" -eq 1 ]; then
echo "It doesn't work..."
exit
else
echo "It crashes"
fi
fi
done
Which uses the ./flipbit tool I wrote whose source is simply:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
int bittoflip = atoi(argv[1]) - 1;
int ch;
while ((ch = fgetc(stdin)) != EOF)
if (bittoflip < 8 && bittoflip >= 0)
putchar(ch ^ (1 << bittoflip));
else
putchar(ch);
bittoflip -= 8;
return 0;
The tricky bits were:
- Whitespace: All whitespace (including newlines) have pristine twins that will work similarly
- Comparison:
=doesn't work well, since it can be a comparison in every case it could appear. Similarly-doesn't work well. Thus^is used to assert equality with 1. - Variable names: f would clash with b, so had to use d as the function name instead.
answered 1 hour ago
LambdaBetaLambdaBeta
2,159418
2,159418
add a comment |
add a comment |
$begingroup$
R, 83 bytes
t(identical(sum(.<-as.double(intToBits(Reduce(bitwXor,scan())))),sum(T^el(.[-T]))))
Try it online!
Proof that this is pristine
Working around the fact that as.integer, as.double etc. are only a bit away from is.integer, is.double etc. was the hardest bit. In the end, using sum(T^el(.[-T]) as a way of both generating a one and checking that as.double has returned a >1 length vector was the best I could do. The wrapping t is to handle the fact that otherwise identical can become ide~tical.
$endgroup$
add a comment |
$begingroup$
R, 83 bytes
t(identical(sum(.<-as.double(intToBits(Reduce(bitwXor,scan())))),sum(T^el(.[-T]))))
Try it online!
Proof that this is pristine
Working around the fact that as.integer, as.double etc. are only a bit away from is.integer, is.double etc. was the hardest bit. In the end, using sum(T^el(.[-T]) as a way of both generating a one and checking that as.double has returned a >1 length vector was the best I could do. The wrapping t is to handle the fact that otherwise identical can become ide~tical.
$endgroup$
add a comment |
$begingroup$
R, 83 bytes
t(identical(sum(.<-as.double(intToBits(Reduce(bitwXor,scan())))),sum(T^el(.[-T]))))
Try it online!
Proof that this is pristine
Working around the fact that as.integer, as.double etc. are only a bit away from is.integer, is.double etc. was the hardest bit. In the end, using sum(T^el(.[-T]) as a way of both generating a one and checking that as.double has returned a >1 length vector was the best I could do. The wrapping t is to handle the fact that otherwise identical can become ide~tical.
$endgroup$
R, 83 bytes
t(identical(sum(.<-as.double(intToBits(Reduce(bitwXor,scan())))),sum(T^el(.[-T]))))
Try it online!
Proof that this is pristine
Working around the fact that as.integer, as.double etc. are only a bit away from is.integer, is.double etc. was the hardest bit. In the end, using sum(T^el(.[-T]) as a way of both generating a one and checking that as.double has returned a >1 length vector was the best I could do. The wrapping t is to handle the fact that otherwise identical can become ide~tical.
answered 1 hour ago
Nick KennedyNick Kennedy
1,35649
1,35649
add a comment |
add a comment |
$begingroup$
Groovy, 47 bytes
a,b->a.bitCount(a^b).equals(java.awt.Font.BOLD)
Try it online!
Adapted version of Kevin Cruijssen's Java answer.
$endgroup$
add a comment |
$begingroup$
Groovy, 47 bytes
a,b->a.bitCount(a^b).equals(java.awt.Font.BOLD)
Try it online!
Adapted version of Kevin Cruijssen's Java answer.
$endgroup$
add a comment |
$begingroup$
Groovy, 47 bytes
a,b->a.bitCount(a^b).equals(java.awt.Font.BOLD)
Try it online!
Adapted version of Kevin Cruijssen's Java answer.
$endgroup$
Groovy, 47 bytes
a,b->a.bitCount(a^b).equals(java.awt.Font.BOLD)
Try it online!
Adapted version of Kevin Cruijssen's Java answer.
answered 6 hours ago
Expired DataExpired Data
55314
55314
add a comment |
add a comment |
If this is an answer to a challenge…
…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.
…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.
More generally…
…Please make sure to answer the question and provide sufficient detail.
…Avoid asking for help, clarification or responding to other answers (use comments instead).
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f182830%2fpristine-bit-checking%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
5
$begingroup$
If anyone's looking for a way to generate all possible variations of their solution, this Japt programme should (someone please double check) do the job: petershaggynoble.github.io/Japt-Interpreter/…
$endgroup$
– Shaggy
13 hours ago
3
$begingroup$
Here's one in Python as well: Try it online!
$endgroup$
– TFeld
13 hours ago
$begingroup$
Functions aren't allowed, since you mentioned program?
$endgroup$
– Kevin Cruijssen
12 hours ago
2
$begingroup$
@KevinCruijssen I've specified that function submissions are ok
$endgroup$
– Jo King
12 hours ago
$begingroup$
Not any character B. Only one which has a single bit changed compared to A.
$endgroup$
– Ven
9 hours ago