Bleiben Sie dran, denn in dieser Bewertung finden Sie den Fund, den Sie suchen.
Lösung:
Jelly, 18 Bytes + 0 Strafen = 18
79Ọv2;$ḅ⁹b2+4b4FẠ
Rückgabe: 1
wenn es keine gleich langen Bitstrings gibt 4 oder mehr in der 8-Bit-Wortrepräsentation der ASCII-Zeichenketteneingabe gibt, und 0
sonst.
Versuchen Sie es online! (Testreihe mit einigen zusätzlichen Fällen hinzugefügt)
Mit Jelly's Codepage gibt es keine Teilstrings der Länge 4 oder länger mit gleichen Bits:
7 0x37 00110111
9 0x39 00111001
Ọ 0xB5 10110101
v 0x76 01110110
2 0x32 00110010
; 0x3B 00111011
$ 0x24 00100100
ḅ 0xD4 11010100
⁹ 0x89 10001001
b 0x62 01100010
2 0x32 00110010
+ 0x2B 00101011
4 0x34 00110100
0x5C 01011100
b 0x62 01100010
4 0x34 00110100
F 0x46 01000110
Ạ 0xAB 10101011
Bei Lauflängen gleicher Bits von:
221323221211111312322133122121221111213121123132213111122211311332313211313211111112
Wie?
Tricks zur Vermeidung von Fehltritten sind:
-
Die Monade "von Zeichen in Ordinalzahlen umwandeln" zu vermeiden.
O
durch Konvertierung der Zahl79
in ein Zeichen mitỌ
gefolgt von einer "Auswertung des Jelly-Codes mit Eingabe",v
. -
zur Vermeidung einer direkten Umwandlung in Binärcode mit
B
(0x42
,1000010
) durch die einfache Zwei-Byte-Alternativeb2
unter Verwendung der generischen dyadischen Basiskonvertierung. -
um ein paar normale Auswahlmöglichkeiten für die Zählung der Läufe gleicher Bits zu vermeiden - die erste Wahl wäre "alle überlappenden Scheiben gegebener Länge",
ṡ
(0xF5
oder .11110101
). Eine zweite Möglichkeit wäre die Verwendung von "alle Unterlisten",Ẇ
(0xCF
oder11001111
).
Eine Abhilfe, die ich vor der jetzigen verwendet habe, bestand darin, die Inkremente (zwischen aufeinanderfolgenden Elementen) mitI
(wodurch Nullen und Einsen gleichgestellt werden) und nach jedem Vorkommen von drei Nullen in einer Reihe zu suchen. Zu diesem Zweck habe ich alle Nullen in Einsen umgewandelt, indem ich die Binomialfunktion mit2c
d.h.. 2Cx - wodurch die-1
s zu0
s die1
s werden2
s, und die0
s werden zu1
s; auf diese Weise kann der Code nach dem ersten Vorkommen der Teilliste suchen[1,1,1]
mitw111
.
Es wurde jedoch ein kürzerer Weg ersichtlich - die Aktion "alle überlappenden Slices gegebener Länge" zu imitieren,ṡ
zu imitieren, kann man eine 4-weise Überlappung mit einer Dyade reduzieren,
. Wenn dies mit Addition durchgeführt wird,4 +4
durchgeführt wird, zählt es die1
s, so dass dann jede0
oder4
der Indikator für die Rückgabe eines wahren Wertes. Das Problem hier ist, dass der nächste offensichtliche Schritt darin bestünde, den Modulo 4 davon zu nehmen, um die0
und4
Einträge gleichzustellen, während die anderen möglichen Werte (1
,2
, und3
) unverändert, aber+%4
hat%
drin, das den Bit-Wert 010111 hat 0000 100100. Um diesen Nachteil zu vermeiden, werden die Zahlen alle in die Basis umgerechnet 4 mitb4
(Umrechnung0
auf[0]
,1
auf .[1]
,2
zu[2]
,3
bis[3]
, und4
bis[1,0]
) und die gesamte Liste wird mitF
. Der letzte Test besteht einfach darin, zu prüfen, ob es irgendwelche0
s in der Liste gibt, was direkt mit der Monade erreicht werden kannẠ
.
79Ọv2;$ḅ⁹b2+4b4FẠ - Main link: printable ASCII character list
79 - 79
Ọ - character from ordinal : 'O'
v - evaluate as Jelly code : input -> 'O' converts the input to ordinals
$ - last two links as a monad
2 - 2
; - concatenate (why? see the note beneath the code block)
ḅ⁹ - convert from base 256 : gets an integer representing the byte string
b2 - convert to base 2 AKA binary
4 - 4-wise reduce with
+ - addition (sums all overlapping slices of length 4)
b4 - convert to base 4 (vectorises)
F - flatten into a single list
Ạ - any falsy?
Anmerkung: Der Grund für ein 2 mit der ordinalen Liste verkettet wird, ist, um mit den Randfällen umzugehen, in denen der einzige Lauf von 4 in der Eingabezeichenfolge in den führenden Nullen des allerersten Zeichens vorkommt - diese Zeichen sind: tab; Zeile-feed; und carriage-return. Ohne diese Zeichen werden bei der Konvertierung zur Basis 256 führende Nullen aus der (vollständig verketteten) binären Zeichenfolge entfernt; mit den führenden 2 werden die führenden Nullen vorhanden sein und eine zusätzliche Eins und Null davor. Da kein druckbares ASCII genau drei führende Nullen hat, besteht keine Notwendigkeit, diese zusätzlichen Bits vor dem Rest der Prüfung zu verwerfen.
Java 7, 812726673644634616599588 145 Bytes + 10*44 = 585
boolean
b(char[]b){String
g="";for(char
c:b)g+=g.format("%"+(1-1)+"8d",new
Integer(Integer.toString(c,2)));return!g.matches(".*(.)\1\1\1.*");}
Ich verwende Zeilenumbrüche anstelle von Leerzeichen, um die Strafe zu minimieren...
Versuchen Sie es online!
Binär
01100010011011110110111101101100011001010110000101101110000010100110001000101000011000110110100001100001011100100101101101011101011000100010100101111011010100110111010001110010011010010110111001100111000010100110011100111101001000100010001000111011011001100110111101110010001010000110001101101000011000010111001000001010011000110011101001100010001010010110011100101011001111010110011100101110011001100110111101110010011011010110000101110100001010000010001000100101001000100010101100101000001100010010110100110001001010010010101100100010001110000110010000100010001011000110111001100101011101110000101001001001011011100111010001100101011001110110010101110010001010000100100101101110011101000110010101100111011001010111001000101110011101000110111101010011011101000111001001101001011011100110011100101000011000110010110000110010001010010010100100101001001110110111001001100101011101000111010101110010011011100010000101100111001011100110110101100001011101000110001101101000011001010111001100101000001000100010111000101010001010000010111000101001010111000101110000110001010111000101110000110001010111000101110000110001001011100010101000100010001010010011101101111101
Alte Bitshifting-Lösung 141 Bytes + 10*101 = 1.151
boolean
b(char[]b){
int
o=0,p=0,i;
for(char
c:b){for(i=0;i<8;){if((c&(1<
Versuchen Sie es online!
Binär
011000100110111101101111011011000110010101100001011011100000101001100010001010000110001101101000011000010111001001011011010111010110001000101001011110110000101001101001011011100111010000001010011011110011110100110000001011000111000000111101001100000010110001101001001110110000101001100110011011110111001000101000011000110110100001100001011100100000101001100011001110100110001000101001011110110110011001101111011100100010100001101001001111010011000000111011011010010011110000111000001110110010100101111011011010010110011000101000001010000110001100100110001010000011000100111100001111000110100100101011001010110010100100101001001111000011000100101001011110110110111100111101001100000011101101110000001010110010101100111011011111010110010101101100011100110110010101111011011100000011110100110000001110110110111100101011001010110011101101111101011010010110011000101000001100110011110001101111011111000011001100111100011100000010100101110010011001010111010001110101011100100110111000001010001101100011110000110101001110110111110101111101011100100110010101110100011101010111001001101110000010100011010100111100001101100011101101111101
APL (Dyalog Classic), 26 + 1 × 10 = 36 Bytes
Notizen
Enthält einen 4er-Lauf von 1en. Erfordert ⎕IO←0
was auf vielen Systemen Standard ist. Beachten Sie, dass dies sein muss. auf einem Classic-Interpreter ausgeführt werden muss, damit Strings ein Byte pro Zeichen sind.
Einreichung
1≠⊃⌽⌈∊(×4¨⍳≢⍬⍬)⍷¨⊂11⎕DR⍞
Probieren Sie es online aus!
Binäre Quelle
00110001101011001001110010110010100101110101110010111001001010001101011100110100010111001010100010 1111 0010111011101010111010101100101001101110101010100010011011001100010011000110001100010001000101001010001101
Erläuterung
⍞
Aufforderung zur Eingabe einer Zeichenkette
11 ⎕DR
umwandeln in 1-bit Boolesche (1) D ata R eDarstellung
⊂
einschließen, damit wir mehrere Dinge auf sie anwenden können
(
...) ⍷¨
Binäre Indikatoren, mit denen jede der folgenden Sequenzen beginnt ...
×
Vorzeichen (bei binären Daten nicht möglich, aber als Abstandshalter zum Aufteilen von Läufen enthalten)
4 ¨
Expandieren (Kopieren) jeweils auf Länge vier
⍳
die ganzen Zahlen bis zu
≢
die Summe von
⍬⍬
die Liste, die aus zwei leeren numerischen Listen besteht
∊
auflisten (verflachen)
⌈
kumulatives Maximum
⌽
umkehren
⊃
wähle den ersten
1 ≠
ist eine anders als? (d.h. NICHT)
Durchgehen
Wir geben "48" für die nicht durchgelaufene Version ein ~ ∨/ ∊ (0 0 0 0)(1 1 1 1) ⍷¨ ⊂ 11 ⎕DR ⍞
:
11 ⎕DR ⍞
wandelt "48" in 0 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 um (d.h. Dez 52 56, Hex 34 38)
(0 0 0 0)(1 1 1 1) ⍷¨ ⊂
findet Anfänge von 0-Läufen und 1-Läufen; (0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
∨/ ∊
sieht nach, ob es eine Wahrheit gibt (d.h. irgendwelche Läufe); 1
~
verneint das; 0
Wir laden Sie ein, unsere Funktion zu unterstützen, indem Sie einen Kommentar anheften und bewerten. Wir heißen Sie willkommen.