Schreiben Sie Code, der eine Zeichenfolge als Eingabe annimmt und einen Wahrheits- oder False-Wert ausgibt, je nachdem, ob die Zeichenfolge diesen Regeln folgt oder nicht:
Wenn Sie jedes Zeichen übereinander stapeln, in eine Binärdatei konvertieren und jede Spalte summieren, sollten alle Summen identisch sein. Sie können davon ausgehen, dass die Eingabezeichenfolge nur druckbare ASCII-Zeichen enthält (Codepunkte 32 - 126).
Als Beispiel:
Die Eingabe O5vy_+~
sollte einen Wahrheitswert zurückgeben, da ihre binäre Darstellung wie folgt lautet:
1001111 | O
0110101 | 5
1110110 | v
1111001 | y
1011111 | _
0101011 | +
1111110 | ~
-------
5555555 <- Sum of bits in each column. Should give a truthy value.
Die Eingabe PPCG
sollte einen falschen Wert zurückgeben, da die binäre Darstellung wie folgt lautet:
1010000 | P
1010000 | P
1000011 | C
1000111 | G
-------
4020122 <- Should give a falsey value
Die Wendung ist: Ihr Code sollte einen Wahrheitswert zurückgeben, wenn er als Eingabe für Ihre Funktion / Ihr Programm verwendet wird. Dh der Code muss den gleichen Regeln wie oben entsprechen (Ihr Code kann Zeichen enthalten, die nicht ASCII 32-126 sind).
Ihr Programm / Ihre Funktion muss nur druckbares ASCII als Eingabe verarbeiten. Wenn Ihr Code etwas anderes enthält, 8-Bit-, 16-Bit-Codierung, Unicode, einen benutzerdefinierten Zeichensatz (oder etwas anderes), sollte die binäre Darstellung derselben Regeln entsprechen, aber Ihr Code muss nicht damit umgehen als Eingabe.
Dies ist Codegolf , daher gelten die Standardregeln.
quelle
Antworten:
JavaScript (ES6),
123122120110 ByteUnten ist ein Hexdump mit Bitsummen.
Demo
Code-Snippet anzeigen
quelle
MATL ,
109 BytesDie Eingabe ist eine Zeichenfolge, die in einfache Anführungszeichen eingeschlossen ist. Wenn die Eingabe einzelne Qoutes enthält, können Sie diese durch Duplizieren umgehen.
Die Ausgabe ist
3
so wahr und nichts (leere Ausgabe) so falsch.Probieren Sie es online!
Der Code in Binär ist wie folgt:
Erläuterung
quelle
Jelly ,
11 bis10 BytesProbieren Sie es online! Oder sehen Sie sich die Tests und die Selbsteingabe an (der Code ist allesamt druckbares ASCII, das die gleichen Werte in Jellys Codepage aufweist , wie unten gezeigt).
Wie?
quelle
Jelly,
1110 bytesUses no no-ops or comments.
Try it online!
Binary breakdown
How it works
quelle
OBUSE
because it sounds likeABUSE
.Mathematica, 88 bytes
Contains many unprintable characters between the quotes. Has 49 of each bit.
Here's the hexdump:
quelle
Octave,
5352 bytesMaking a complete rewrite helped me golf the code 5 bytes, but I had to add more no-ops, making it a net-save of only 1 byte.
I can't add a TIO-link, since none of the online interpreters have implemented the communication toolbox necessary for
de2bi
. Changing it todec2bin
instead would cost 4 bytes (2 for working code, and two no-ops).I found no way to avoid any of the 27 no-ops. All function names and parentheses are between either below 64, or higher than 96, meaning all "necessary" characters have a 1 in the 6th position (from the right, 2^5). I had a solution with only 23 no-ops, but the code itself was longer. The actual code is 25 bytes, and has the following column sum when counting the bits of the binary equivalent:
There are 22 bits in the 6th position from the right (2^5), and only 6 bits in the 4th position from the right (2^3). That means, we have to add at least 16 bytes, to get the 6 up to 22. Now, the comment character
%
adds a bit to the 6th position, increasing it to 23. All printable ASCII-characters needs at least one of the two top bits to be1
. Therefore, adding 17 bytes will give us at least 27 bits in each of the two "top spots" (2^6 and 2^5). Now, we have 27 bits in the top two spots, and 22 in the rest. In order to get to an equilibrium, we have to add 10 bytes, to get to an even 32 bits in each position.An explanation of the new code (52 bytes):
A vector containing only 1s (true) is evaluated to true in Octave, and a vector containing at least one zero is evaluated to false in Octave.
An explanation of the old code (53 bytes):
A vector containing only 1s (true) is evaluated to true in Octave, and a vector containing at least one zero is evaluated to false in Octave.
quelle
JavaScript (ES6),
139111107 bytesContains
816361 of each bit.quelle
Scala, 149 bytes
Usage:
Hexdump:
Ungolfed:
Explanation:
quelle
J, 45 bytes
Try it online! Includes test cases for most submissions submitted, along with the source code.
quelle
Haskell, 118 bytes
Try it online! Usage:
_Z "some string"
returns eitherTrue
orFalse
.There are some unprintable chars in the comment on the last line, so here is a string of the program using escaped chars:
Each bit occurs 68 times.
The shortest code I came up with was 82 bytes:
However the sums of the bits for this code are
[33,28,41,48,20,79,46]
, so79 - 20 = 59
no-ops plus 2 bytes for starting a comment would additionally be needed, totalling in 143 bytes.While rearranging the program I found that using upper case letters as variable names helps to level the sums because they don't have the bit in the 6th position set. Because Haskell does not allow variable names to start with an upper case letter they need to be prepended with
_
, which also does not set the 6th bit.In doing so I ended up with the above solution which has 97 bytes before adding the no-ops and the bist sum to
[50,47,56,56,48,68,60]
, so(68 - 47) = 21
, so only 21 bytes need to be added in the comment.quelle
PHP,
959391 bytesI am so happy that PHP function names are case insensitive!
where the
*
must be replaced with ASCII 151 (0x97). (PHP would complain about any control character in the code - apart from\r
and\n
, but I need something with bit 4 set, so I added 128.)+1 byte for pure printable ASCII: Use
_7
instead.Run with
echo '<input>' | php -nR '<code>'
or test it online. Output is1
for truthy, empty for falsy.quelle
Python 2, 117 bytes
All "spaces" are tabs to reduce number of 0x20 bits.
Contains 66 of each bit. (There is no
'%07b'
as explained in this issue.)Hex dump:
quelle