Napisz funkcję, która otrzyma bufor b
(o długości 1–104857600 bajtów) i liczbę bitów n
(1 <= n <= 64), dzieląc bufor na części n
bitów. Prawym padem ostatni kawałek z 0
s do n
bitów.
na przykład
Biorąc pod uwagę bufor b = "f0oBaR"
lub równoważnie [102,48,111,66,97,82]
i n = 5
, wróć
[12, 24, 24, 6, 30, 16, 19, 1, 10, 8]
Wynika to z faktu, że powyższy bufor, reprezentowany jako plik binarny, wygląda następująco:
01100110 00110000 01101111 01000010 01100001 01010010
A po ponownym zgrupowaniu w 5s wygląda następująco:
01100 11000 11000 00110 11110 10000 10011 00001 01010 010[00]
Które po przeliczeniu z powrotem na dziesiętne daje odpowiedź.
Notatki
- Możesz użyć dowolnego typu danych, który najbardziej odpowiada Twojemu buforowi w twoim języku. W PHP prawdopodobnie użyjesz ciągu, w Węźle możesz chcieć użyć Bufora
- Jeśli używasz ciągu do reprezentowania bufora, załóż, że jest to ASCII dla konwersji char -> int
- Możesz użyć tablicy ints (0-255) do wprowadzania danych, jeśli wolisz
- Zwracana wartość musi być tablicą lub listą liczb całkowitych
Przypadki testowe
> b = "Hello World", n = 50
318401791769729, 412278856237056
> b = [1,2,3,4,5], n = 1
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1
> b = "codegolf", n = 32
1668244581, 1735355494
> b = "codegolf" n = 64
7165055918859578470
> b = "codegolf" n = 7
49, 91, 108, 70, 43, 29, 94, 108, 51, 0
> b = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel est eu velit lacinia iaculis. Nulla facilisi. Mauris vitae elit sapien. Nullam odio nulla, laoreet at lorem eu, elementum ultricies libero. Praesent orci elit, sodales consectetur magna eget, pulvinar eleifend mi. Ut euismod leo ut tortor ultrices blandit. Praesent dapibus tincidunt velit vitae viverra. Nam posuere dui quis ipsum iaculis, quis tristique nisl tincidunt. Aliquam ac ligula a diam congue tempus sit amet quis nisl. Nam lacinia ante vitae leo efficitur, eu tincidunt metus condimentum. Cras euismod quis quam vitae imperdiet. Ut at est turpis.", n = 16
19567, 29285, 27936, 26992, 29557, 27936, 25711, 27759, 29216, 29545, 29728, 24941, 25972, 11296, 25455, 28275, 25955, 29797, 29813, 29216, 24932, 26992, 26995, 25449, 28263, 8293, 27753, 29742, 8272, 25964, 27749, 28276, 25971, 29045, 25888, 30309, 27680, 25971, 29728, 25973, 8310, 25964, 26996, 8300, 24931, 26990, 26977, 8297, 24931, 30060, 26995, 11808, 20085, 27756, 24864, 26209, 25449, 27753, 29545, 11808, 19809, 30066, 26995, 8310, 26996, 24933, 8293, 27753, 29728, 29537, 28777, 25966, 11808, 20085, 27756, 24941, 8303, 25705, 28448, 28277, 27756, 24876, 8300, 24943, 29285, 25972, 8289, 29728, 27759, 29285, 27936, 25973, 11296, 25964, 25965, 25966, 29813, 27936, 30060, 29810, 26979, 26981, 29472, 27753, 25189, 29295, 11808, 20594, 24933, 29541, 28276, 8303, 29283, 26912, 25964, 26996, 11296, 29551, 25697, 27749, 29472, 25455, 28275, 25955, 29797, 29813, 29216, 28001, 26478, 24864, 25959, 25972, 11296, 28789, 27766, 26990, 24946, 8293, 27749, 26982, 25966, 25632, 28009, 11808, 21876, 8293, 30057, 29549, 28516, 8300, 25967, 8309, 29728, 29807, 29300, 28530, 8309, 27764, 29289, 25445, 29472, 25196, 24942, 25705, 29742, 8272, 29281, 25971, 25966, 29728, 25697, 28777, 25205, 29472, 29801, 28259, 26980, 30062, 29728, 30309, 27753, 29728, 30313, 29793, 25888, 30313, 30309, 29298, 24878, 8270, 24941, 8304, 28531, 30053, 29285, 8292, 30057, 8305, 30057, 29472, 26992, 29557, 27936, 26977, 25461, 27753, 29484, 8305, 30057, 29472, 29810, 26995, 29801, 29045, 25888, 28265, 29548, 8308, 26990, 25449, 25717, 28276, 11808, 16748, 26993, 30049, 27936, 24931, 8300, 26983, 30060, 24864, 24864, 25705, 24941, 8291, 28526, 26485, 25888, 29797, 28016, 30067, 8307, 26996, 8289, 28005, 29728, 29045, 26995, 8302, 26995, 27694, 8270, 24941, 8300, 24931, 26990, 26977, 8289, 28276, 25888, 30313, 29793, 25888, 27749, 28448, 25958, 26217, 25449, 29813, 29228, 8293, 29984, 29801, 28259, 26980, 30062, 29728, 28005, 29813, 29472, 25455, 28260, 26989, 25966, 29813, 27950, 8259, 29281, 29472, 25973, 26995, 28015, 25632, 29045, 26995, 8305, 30049, 27936, 30313, 29793, 25888, 26989, 28773, 29284, 26981, 29742, 8277, 29728, 24948, 8293, 29556, 8308, 30066, 28777, 29486
> b = [2,31,73,127,179,233], n = 8
2, 31, 73, 127, 179, 233
n
większych niż 8? Jeśli tak, to co z wartościamin
większymi niż 64, które są większe niż precyzja liczb całkowitych większości języków.char
jest liczbą całkowitą o długości jednego bajta.Odpowiedzi:
Pyth,
1817 bajtówDzięki @lirtosiast za bajt!
źródło
Galaretka, 13 bajtów
To przyjmuje dane wejściowe jako listę liczb całkowitych. Wypróbuj online!
Jak to działa
źródło
Julia, 117 bajtów
Jest to funkcja, która akceptuje tablicę liczb całkowitych i liczb całkowitych i zwraca tablicę liczb całkowitych. Jest to ćwiczenie polegające na nadużywaniu argumentów funkcyjnych.
Nie golfowany:
źródło
JavaScript (ES6), 120 bajtów
Rekurencyjne kręcenie bitami na tablicach liczb całkowitych. Nie golfowany:
źródło
"(s,n)=>(s.replace(/./g,x=>(256+x.charCodeAt()).toString(2).slice(1))+'0'.repeat(n-1)).match(eval(`/.{${n}}/g`)).map(x=>+`0b${x}`)".length
Python 3, 102 bajty
użyj iterującej sztuczki, aby zgrupować ciąg
s
: łańcuch wejściowy / buforn
: liczba bitów w każdej podzielonej porcjiWyniki
źródło
n
ma takie samo znaczenie jak pytanie:splits the buffer into chunks of n bits
Rubin, 114 bajtów
Nieco czystsze:
źródło
Perl 6,
9368 bajtówźródło
PHP,
262217189 bajtów(zaktualizowany o wskazówki od Ismael Miguel )
Sformatowane dla czytelności:
Przykład:
źródło
str_pad($s,8,'0',STR_PAD_LEFT)
możesz użyćstr_pad($s,8,0,0)
. Możesz usunąć cytatybindec
idecbin
zapisać 4 bajty. Aby zaoszczędzić więcej, możesz zapisaćarray_map
w zmiennej i przekazać ją zamiast tego. Proszę bardzo:function f($b,$n){$M=array_map;return$M(bindec,$M(function($x)use($n){return str_pad($x,$n,0);},str_split($M('',array_map(function($s){return str_pad($s,8,0,0);},$M(decbin,$b))),5)));}
(184 bajty).implode
się$M
zbyt chociaż.CJam, 30 bajtów
Wypróbuj online!
Jest to blok bez nazwy, który oczekuje bufora int i ilości porcji na stosie i pozostawia wynik na stosie.
Postanowiłem spróbować CJam. Zajęło mi to tylko 2 godziny ^ ^ To prawdopodobnie zbyt długo, sugestie są bardzo mile widziane!
Wyjaśnienie
źródło
2b8T
zamiast2b8 0
zapisywać bajt (zmiennaT
jest wstępnie zainicjalizowana0
). 2. Odrzucanie ostatniego fragmentu można wykonać za pomocąW<
(zmiennaW
jest inicjalizowana-1
) lub);
(wyjmij ostatni element i odrzuć go).JavaScript (ES6) 104
Iteracyjne krok po kroku
Edytuj 5 bajtów, zapisz thx @Neil
Mniej golfa
Test
źródło
x
każdym razem podwajać , dlaczego nie przesunąćx
odpowiednichi
bitów?c-g?[...s,t<<c]:s
może zaoszczędzić ci kilka bajtów.J, 24 bajty
Jest to funkcja anonimowa, która przyjmuje
n
za swój lewy argument ib
jako liczby za prawy argument.Test:
Wyjaśnienie:
źródło
Haskell,
112109 bajtówPrzykład użycia:
5 # [102,48,111,66,97,82]
->[12,24,24,6,30,16,19,1,10,8]
.Jak to działa
źródło
Java,
313306322 bajtówMam nadzieję, że to pobije PHP ... I nie. Głupie długie nazwy funkcji.
-7 podziękowania dla @quartata za pozbycie się publicznego +16, aby naprawić błąd, gdy podział był dokładny, dzięki @TheCoder za złapanie go
źródło
o[]=new int[b.length()*8/s+1]
- To przypisze niewłaściwy rozmiar If(b.length()*8)%s==0
Rubin , 66 bajtów
Wypróbuj online!
Pobiera bufor wejściowy jako ciąg, dzięki czemu kilka ciągów testowych zostało zbudowanych bezpośrednio w stopce, aby uniknąć niedrukowalności.
źródło
MATL , 9 bajtów
Wypróbuj online!
Pobiera dane wejściowe
b
jako ciąg rozdzielany przez''
lub jako tablicę wartości oddzielonych przecinkami[102, 48, 111]
, takich jakn
.źródło
Perl 5
-nl -MData::Dump=pp
, 96 bajtówWypróbuj online!
Wymaga
Data::Dump
modułu.Trwa
n
pierwszy wiersz wprowadzania, a następnie liczby w każdym wierszu.Dane wyjściowe do STDERR (pole debugowania w TIO).
Wydzielone i uporządkowane:
źródło
Powershell 146 bajtów
Weź bufor i przekonwertuj go na tablicę char, a następnie na tablicę liczb całkowitych. Dla każdego z nich przekonwertuj na binarny, wstaw w razie potrzeby wpisy z zerami i połącz jako jeden duży ciąg. Podziel ten ciąg na n znaków i upuść utworzone puste pola. Każdy element z podziału jest dopełniany (tylko ostatni element naprawdę go potrzebuje) i przekształcany z powrotem w liczbę całkowitą. Dane wyjściowe to tablica
źródło
Python 3.5 -
312292 bajtów:Chociaż może to być długie, to, według mojej wiedzy, jest to najkrótszy sposób na zaakceptowanie zarówno funkcji, jak i tablic bez błędów, i nadal jest w stanie zachować pewną dokładność w Pythonie 3.5.
źródło
Java,
253247 bajtówGrał w golfa
UnGolfed
źródło
c, 2
=>c,2
;((l=f.length())%n)>0
=>(l=f.length())%n>0
;Galaretka , 13 bajtów
Wypróbuj online!
Różni się od odpowiedzi Dennisa.
Uwaga: Dane wejściowe to w rzeczywistości lista liczb całkowitych nieujemnych, ale link TIO łagodzi ból i akceptuje taką listę lub ciąg znaków.
źródło
Stax , 12 bajtów
Uruchom i debuguj
Nie jest to funkcja określona w wyzwaniu, ale program, ponieważ stax nie obsługuje funkcji. Obsługuje wprowadzanie ciągów lub literałów tablicowych.
źródło
Python 2 , 101 bajtów
Wypróbuj online!
źródło
Dyalog APL , 36 bajtów
Wypróbuj online!
Prawdopodobnie można by to bardziej pograć w golfa.
źródło
Eliksir ,
6360 bajtówWypróbuj online!
Pobiera dane wejściowe jako plik binarny Elixir, wyświetla listę liczb całkowitych.
Ten kod wykorzystuje zrozumienie generatora ciągów
&1
bitów Elixir do wprowadzania danych binarnych na bloki bitowe o wielkości podanej jako argument&2
. Aby uwzględnić ewentualne resztki bitów na końcu, wypełniamy plik binarny&2 - 1
zerowymi bitami. Tutaj również pojawia się niechciana gadatliwość: Elixir narzeka, jeśli nie oświadczamy tego wprost&1
jako ciąg bitów, a także nie obsługuje wyrażeń wsize(...)
, stąd potrzeba dodatkowego przypisania zmiennej.Pisanka: w stopce, wymienić
IO.inspect
sięIO.puts
, a nasza funkcja magicznie „przekłada” Lorem ipsum z łaciny na chiński - Spróbuj online!źródło
Japt , 16 bajtów
Po długim dniu spotkań mam wrażenie, że zapomniałem, jak grać w golfa! Później bawię się tym w pociągu do domu, sprawdzę, czy mogę to poprawić.
Spróbuj
źródło
IEC 8859-1
? Czy to w ogóle legalne? Znalazłeś lukę? Czy nie sprecyzowali, że musi to być UTF-8? Ponieważ to 22 bajty UTF-8.1.
Każdy język może używać własnego kodowania / strony kodowej.2.
ISO-8859-1 jest dość standardowym kodowaniem stosowanym w wielu językach, a nie w szczególności dla Japt lub tego konkretnego rozwiązania.3.
Twój specyfikacja nie określa, że należy liczyć w UTF-8.4.
Gdyby tak było, byłbyś do tego mocno zniechęcony.PHP ,
135129124 bajtyWypróbuj online!
Zaimplementowany jako funkcja, bufor wejściowy jest tablicą liczb całkowitych i zwraca tablicę liczb wewnętrznych.
Wydajność
Sprawdź wszystkie przypadki testowe
źródło
APL (NARS), 471 znaków, 942 bajty
skomentowany kod i test:
źródło