Napisz kod, który pobiera ciąg jako dane wejściowe i wyprowadza wartość true lub falsey w zależności od tego, czy ciąg spełnia następujące zasady:
Jeśli ustawisz jeden znak jeden na drugim, przekonwertuj na binarny i zsumuje każdą kolumnę, wówczas wszystkie sumy powinny być identyczne. Możesz założyć, że ciąg wejściowy zawiera tylko drukowalne znaki ASCII (punkty kodowe 32–126).
Jako przykład:
Dane wejściowe O5vy_+~
powinny zwracać prawdziwą wartość, ponieważ ich reprezentacja binarna to:
1001111 | O
0110101 | 5
1110110 | v
1111001 | y
1011111 | _
0101011 | +
1111110 | ~
-------
5555555 <- Sum of bits in each column. Should give a truthy value.
Dane wejściowe PPCG
powinny zwracać wartość falsey, ponieważ jej reprezentacja binarna to:
1010000 | P
1010000 | P
1000011 | C
1000111 | G
-------
4020122 <- Should give a falsey value
Rzecz w tym, że: Twój kod powinien zwrócić prawdziwą wartość, jeśli zostanie użyty jako dane wejściowe do twojej funkcji / programu. Oznacza to, że kod musi być zgodny z tymi samymi regułami, co powyżej (twój kod może zawierać znaki, które nie są ASCII 32-126).
Twój program / funkcja musi jedynie obsługiwać ASCII do wydruku jako dane wejściowe. Jeśli kod zawiera coś innego, kodowanie 8-bitowe, 16-bitowe, Unicode, niestandardowy zestaw znaków (lub coś innego), to jego binarna reprezentacja powinna być zgodna z tymi samymi regułami, ale kod nie musi się z tym obchodzić jako dane wejściowe.
To jest golf golfowy , więc obowiązują standardowe zasady.
źródło
Odpowiedzi:
JavaScript (ES6),
123122120110 bajtówPoniżej znajduje się zrzut heksowy z sumami bitów.
Próbny
Pokaż fragment kodu
źródło
MATL ,
109 bajtówDane wejściowe są łańcuchem zamkniętym pojedynczymi cudzysłowami (jeśli dane wejściowe zawierają pojedyncze kwanty, unikaj ich przez duplikowanie).
Wyjście jest
3
tak prawdziwe i nic (puste wyjście) jak fałsz.Wypróbuj online!
Kod binarny wygląda następująco:
Wyjaśnienie
źródło
Galaretka ,
1110 bajtówWypróbuj online! Lub zobacz testy i samodzielne wprowadzanie (cały kod to ASCII do wydruku, które mają takie same wartości na stronie kodowej Jelly, jak pokazano poniżej).
W jaki sposób?
źródło
Galaretka ,
1110 bajtówNie używa żadnych operacji ani komentarzy.
Wypróbuj online!
Podział binarny
Jak to działa
źródło
OBUSE
ponieważ brzmi jakABUSE
.Mathematica, 88 bajtów
Zawiera wiele niedrukowalnych znaków między cytatami. Ma 49 każdego bitu.
Oto zrzut heksowy:
źródło
Oktawa,
5352 bajtyDokonanie kompletnego przepisania pomogło mi w golfa w kodzie 5 bajtów, ale musiałem dodać więcej no-ops, dzięki czemu zaoszczędziłem tylko 1 bajt.
Nie mogę dodać łącza TIO, ponieważ żaden z tłumaczy internetowych nie wdrożył niezbędnego zestawu narzędzi komunikacji
de2bi
. Zmiana go nadec2bin
zamiast tego kosztowałaby 4 bajty (2 dla działającego kodu i dwa no-ops).Nie znalazłem sposobu na uniknięcie żadnego z 27 zakazów. Wszystkie nazwy funkcji i nawiasy znajdują się między 64 lub powyżej 96, co oznacza, że wszystkie „niezbędne” znaki mają 1 na 6. pozycji (od prawej 2 ^ 5). Miałem rozwiązanie z 23 brakami operacji, ale sam kod był dłuższy. Rzeczywisty kod ma 25 bajtów i ma następującą sumę kolumny przy zliczaniu bitów binarnego odpowiednika:
22 bity znajdują się na 6. pozycji z prawej strony (2 ^ 5), a tylko 6 bitów na 4. pozycji z prawej strony (2 ^ 3). Oznacza to, że musimy dodać co najmniej 16 bajtów, aby uzyskać liczbę 6 do 22. Teraz znak komentarza
%
dodaje nieco do 6. pozycji, zwiększając ją do 23. Wszystkie drukowane znaki ASCII potrzebują co najmniej jednego z dwóch najlepsze bity1
. Dlatego dodanie 17 bajtów da nam co najmniej 27 bitów w każdym z dwóch „górnych punktów” (2 ^ 6 i 2 ^ 5). Teraz mamy 27 bitów w dwóch najwyższych punktach, a 22 w pozostałych. Aby osiągnąć równowagę, musimy dodać 10 bajtów, aby uzyskać nawet 32 bity w każdej pozycji.Objaśnienie nowego kodu (52 bajty):
Wektor zawierający tylko 1s (prawda) jest oceniany na true w oktawie, a wektor zawierający co najmniej jedno zero jest oceniany na fałsz w oktawie.
Wyjaśnienie starego kodu (53 bajty):
Wektor zawierający tylko 1s (prawda) jest oceniany na true w oktawie, a wektor zawierający co najmniej jedno zero jest oceniany na fałsz w oktawie.
źródło
JavaScript (ES6),
139111107 bajtówZawiera
816361 każdego bitu.źródło
Scala, 149 bajtów
Stosowanie:
Hexdump:
Nie golfowany:
Wyjaśnienie:
źródło
J , 45 bajtów
Wypróbuj online! Obejmuje przypadki testowe dla większości przesłanych zgłoszeń wraz z kodem źródłowym.
źródło
Haskell , 118 bajtów
Wypróbuj online! Użycie:
_Z "some string"
zwraca alboTrue
alboFalse
.W komentarzu do ostatniego wiersza jest kilka znaków niedrukowalnych, więc oto ciąg programu używającego znaków ucieczki:
Każdy bit występuje 68 razy.
Najkrótszy kod, jaki wymyśliłem, to 82 bajty:
Jednak sumy bitów dla tego kodu są
[33,28,41,48,20,79,46]
, więc79 - 20 = 59
dodatkowe operacje i 2 bajty na początek komentarza byłyby dodatkowo potrzebne, łącznie w 143 bajtach.Podczas przestawiania programu odkryłem, że użycie wielkich liter jako nazw zmiennych pomaga wyrównać sumy, ponieważ nie mają one bitu na 6. pozycji. Ponieważ Haskell nie pozwala, aby nazwy zmiennych zaczynały się od dużej litery, należy je poprzedzić
_
, co również nie ustawia szóstego bitu.W ten sposób skończyłem z powyższym rozwiązaniem, które ma 97 bajtów przed dodaniem no-ops i sumy bist do
[50,47,56,56,48,68,60]
, więc(68 - 47) = 21
więc w komentarzu należy dodać tylko 21 bajtów.źródło
PHP,
959391 bajtówCieszę się, że nazwy funkcji PHP nie rozróżniają wielkości liter!
gdzie
*
należy zastąpić ASCII 151 (0x97). (PHP narzekałoby na dowolny znak kontrolny w kodzie - oprócz\r
i\n
, ale potrzebuję czegoś z ustawionym bitem 4, więc dodałem 128.)+1 bajt dla czystego ASCII do wydruku: użyj
_7
zamiast tego.Uruchom go
echo '<input>' | php -nR '<code>'
lub przetestuj online . Wyjście jest1
zgodne z prawdą, puste dla fałszu.źródło
Python 2, 117 bajtów
Wszystkie „spacje” to tabulatory zmniejszające liczbę 0x20 bitów.
Zawiera 66 każdego bitu. (Nie ma,
'%07b'
jak wyjaśniono w tym numerze ).Zrzut szesnastkowy:
źródło