Weź ciąg znaków s
zawierający drukowalne znaki ASCII jako dane wejściowe i wyślij jego „binarną podzieloną sumę”. Potrzebujesz wyjaśnienia?
Jak uzyskać binarną sumę podziału?
Wykorzystamy ciąg A4
jako przykład w poniższym objaśnieniu.
Konwertuj znaki na binarne, traktując każdą literę jako 7-bitowy znak ASCII
A -> ASCII 65 -> 1000001 4 -> ASCII 52 -> 0110100
Połącz liczby binarne w nową liczbę binarną
A4 -> 1000001 & 0110100 -> 10000010110100
Podziel nową liczbę dwójkową na części, gdzie nie
1
ma0
po lewej stronie żadnego . Nie należy dzielić kolejnych1
s.10000010110100 -> 100000, 10, 110, 100
Konwertuj te liczby binarne na dziesiętne
100000, 10, 110, 100 -> 32, 2, 6, 4
Weź sumę tych liczb:
32 + 2 + 6 + 4 = 44
Tak więc wyjście A4
powinno być takie 44
.
Przypadki testowe:
a
49
A4
44
codegolf
570
Hello, World!
795
code-golf
string
base-conversion
binary
Stewie Griffin
źródło
źródło
8372
rzeczywiście.Odpowiedzi:
Python 2 ,
868176 bajtów-5 bajtów dzięki Adnan
-5 bajtów dzięki xnor
Wypróbuj online!
for c in input():s=s*128+ord(c)
wykonać numerycznie konwersję ASCII, gdzie 7 razy w*128
lewo przesuwa sięs
(kroki 1 i 2)eval(('0'+new_bin).replace('01','0+0b1'))
do podziału i sumowania (kroki 3, 4 i 5)źródło
eval
! Wykonanie konwersji ASCII numerycznie oszczędza niektóre bajty.Galaretka , 13 bajtów
Wypróbuj online!
Jak to działa
źródło
MATL , 14 bajtów
Wypróbuj online!
Wyjaśnienie
Rozważ dane wejściowe
'A4'
jako przykład.źródło
05AB1E , 18 bajtów
Kod:
Wyjaśnienie:
Wykorzystuje kodowanie 05AB1E . Wypróbuj online!
źródło
05AB1E , 14 bajtów
Port mojej odpowiedzi Jelly , przy użyciu przesunięcia 128 od odpowiedzi Adnana 05ab1e (zamiast 256 w odpowiedzi Jelly, którą napisałem).
Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES6),
9792 bajtówEdycja: Zapisano 5 bajtów przy pewnej pomocy @ ConorO'Brien.
źródło
s=>eval([...s].map(e=>(e.charCodeAt()+128).toString(2).slice(1)).join``.replace(/1+0*/g,'+0b$&'))
Myślę, że możesz użyć mojej metody zastępowania, aby zapisać bajtJapt ,
1812 bajtówPobiera dane wejściowe jako pojedynczy ciąg.
Wypróbowałem również dodatek 128 lub 256 używany przez inne odpowiedzi, ale wypełnienie 0 było krótsze.
Ogolono całe 6 bajtów dzięki ETHproductions i Oliverowi .
Wypróbuj tutaj.
źródło
òÈ<YÃ
może byćò<
(ze spacją) iËn2Ãx
może byćxn2
. Możesz także użyćT
zamiast0
oszczędzać na przecinku. (Prosimy również dołączyć do nas na czacie Japt, jeśli masz pytania lub chciałbyś pomóc wT
podstęp, nie wiedziałem, że możesz (ab) użyć do tego zmiennych, to bardzo przydatne. Automatyczna funkcjaxn2
wygląda nieco dziwnie po kompilacji,x("n", 2)
więc myślę, że jeszcze trochę potrwa, zanim w pełni zrozumiem logikę, która się za nimi kryje. Z twoją pomocą rozwiązanie Japt jest teraz związane na pierwszym miejscu z odpowiedzią Jelly .n2
:Í
. To jeszcze nie uderzyło w TIO, ale możesz go użyć tutaj: ethproductions.github.io/japt/?v=1.4.5&code=Y1+k+VQ3w/…Galaretka ,
1615 bajtów-1 bajt dzięki Dennis (bez potrzeby spłaszczenie o 1, gdy pełny Spłaszczenie miałko - wymienić
;/
zF
)Wypróbuj online!
W jaki sposób?
źródło
;/
można zastąpićF
.PHP, 116 bajtów
Wersja online
PHP, 117 bajtów
Wypróbuj online!
PHP, 120 bajtów
Wypróbuj online!
lub
źródło
Pyt , 21 bajtów
To za długo...
Zestaw testowy.
źródło
[F #],
249245 bajtówWypróbuj online!
Uwaga: wersja na tio.run ma w nagłówku „otwarty System”, dodałem jego liczbę do powyższego kodu. Nie jestem pewien, jakie są reguły dotyczące importu.
Nie golfił
źródło
open System
jest taki sam jak C # s,using System;
to tak, musisz dołączyć to do liczby. Jeśli możesz to zrobić w F #, możesz w pełni zakwalifikować się do tego, do czegoSystem
służy. Na przykład w C #System.Console...
zamiastusing System;Console...
Perl 6 , 62 bajtów
źródło
.ords
zamiast.comb».ord
.[~]
często można użyć przedrostka.join
.comb
istnieje, co robi tom:g/…
./11*0*/
można skrócić do/1+0*/
. Wpadłem{sum map {:2($_)},comb /1+0*/,[~] .ords».fmt('%07b')}
J , 34 bajty
Wypróbuj online!
Wyjaśnienie
źródło
mathematica 193 bajtów
źródło
f=FromDigits;l=Flatten;
na początku, a następnie zastępując wszystkie wystąpienia tych dwóch funkcji znakamif
il
.J , 40 bajtów
stosowanie:
zwraca 44
źródło
Clojure, 150 bajtów
Miałem nadzieję, że konwersja z ASCII na bajty była krótsza. Rzeczywista bryła pętli jest dość krótka, służy
r
do kumulacji bieżącego wyniku iR
kumulacji wyniku całkowitego. Jeśli poprzedni bitp
jest,0
a bieżącyc
jest1
, dzielimy nowy fragment i gromadzimy goR
, w przeciwnym razie aktualizujemyr
i zachowujemyR
tak, jak było.źródło
Pyton 123 bajty
Zaktualizowano, dzięki Martinowi Enderowi.
źródło
lambda w:
byłoby wystarczające, aby twoja odpowiedź była ważna.lambda w:
.f=
, ponieważ zezwalamy na funkcje bez nazw (chyba że odwołujesz się do nazwy funkcji dla wywołań rekurencyjnych).K (oK) , 31 bajtów
Rozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Konwertuj na wartości ASCII, konwertuj na 7-bitowe pliki binarne, spłaszcz, znajdź, gdzie się różni, i względem oryginalnej listy, aby znaleźć, gdzie się
1
różnią. Wytnij te indeksy, przelicz z powrotem na dziesiętne i podsumuj:Premia
Zarządzałem również 31-bajtową wersją w K4 , ale ponieważ nie ma dla niej TIO, zamieszczam moje rozwiązanie OK.
źródło
APL (Dyalog) , 30 bajtów
Wypróbuj online!
W jaki sposób?
⎕UCS⍵
- Unicodify2⊥⍣¯1¨
- koduje każdy w formacie binarnym¯7↑¨
- i pad w lewo z zerami do 7 miejsc∊
- spłaszczyć1∘+⊆⊢
- podział przez siebie powiększony o jeden2⊥¨
- dekoduje każdy z pliku binarnego+/
- sumaźródło