Uwaga: pierwsza połowa tego wyzwania pochodzi z poprzedniego wyzwania Martina Endera, Visualize Bit Weaving .
Ezoteryczny język programowania zło ma interesującą operację na wartościach bajtów, które nazywa „tkaniem”.
Zasadniczo jest to permutacja ośmiu bitów bajtu (nie ma znaczenia, od którego końca zaczniemy liczyć, ponieważ wzór jest symetryczny):
- Bit 0 jest przenoszony na bit 2
- Bit 1 jest przenoszony na bit 0
- Bit 2 jest przenoszony na bit 4
- Bit 3 jest przenoszony na bit 1
- Bit 4 jest przenoszony na bit 6
- Bit 5 jest przenoszony na bit 3
- Bit 6 jest przenoszony na bit 7
- Bit 7 jest przenoszony na bit 5
Dla wygody oto trzy inne przedstawienia permutacji. Jako cykl:
(02467531)
Jako mapowanie:
57361402 -> 76543210 -> 64725031
I jako lista par mapowania:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Po 8
utkaniu bajt jest zasadniczo resetowany.
Na przykład, wyplatanie liczby 10011101
(która jest 157
w bazie 10) da 01110110
(która jest 118
w bazie 10).
Wejście
Dostępne są tylko 256
prawidłowe dane wejściowe, a mianowicie wszystkie liczby całkowite między 0
i 255
włącznie. Można to wziąć w dowolnej bazie, ale musi być spójna i musisz ją określić, jeśli wybrana baza nie jest dziesiątą.
Ty może nie zero-pad swoje wejścia.
Wynik
Powinieneś wyprowadzić wynik tkania bitów w dowolnej bazie, która również musi być spójna i określona, jeśli nie jest to baza dziesięć.
Państwo może zero-pad swoich wyjść.
Powiązane: Wizualizacja tkania bitów
źródło
Odpowiedzi:
Python 2.7,
44-> 36 bajtówźródło
|
zamiast+
i maskujesz po zmianie, możesz ogolić 8 bajtów, usuwając nawiasy.<strike></strike>
wokół starego wyniku bajtu, aby wskazać postęp :-)Zło, 3 postacie
Wypróbuj online!
Dane wejściowe są w bazie 256, (np. ASCII), np. Aby wprowadzić cyfrę 63, wprowadź ASCII 63, która jest
?
.Wyjaśnienie:
To tak, jakby oszukiwać.
źródło
CJam,
1512 bajtówDzięki FryAmTheEggman za oszczędność 3 bajtów.
Wejście w bazie 2. Wyjście również w bazie 2, wypełnione do 8 bitów zerami.
Sprawdź to tutaj.
Wyjaśnienie
źródło
MATL , 14 bajtów
Dane wejściowe są dziesiętne. Dane wyjściowe są binarne z zerowaniem.
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka, 11 bajtów
Tłumaczenie odpowiedzi Martina na CJam. Wypróbuj tutaj.
źródło
JavaScript (ES6), 30 bajtów
źródło
J, 12 bajtów
Używa wbudowanej
A.
permutacji z indeksem permutacji,6532
który odpowiada operacji tkania bitów.Stosowanie
Dane wejściowe to lista cyfr binarnych. Dane wyjściowe to wyściełana zerami lista 8 cyfr binarnych.
Wyjaśnienie
źródło
Siatkówka , 39 bajtów
Wejście i wyjście w bazie 2, wyjście jest lewe.
Wypróbuj online!
Wyjaśnienie
To tylko uzupełnia wejście zerami.
+
Wskazuje, że etap ten jest powtarzany aż łańcuch zatrzyma się zmienia. Dopasowuje początek łańcucha, o ile zawiera mniej niż 8 znaków, i wstawia znak0
w tej pozycji.Teraz rzeczywista permutacja. Proste rozwiązanie jest następujące:
Jest to jednak boleśnie długie i zbędne. Znalazłem inne sformułowanie permutacji, które jest znacznie łatwiejsze do wdrożenia w Retina (
X
reprezentuje zamianę sąsiednich bitów):Teraz jest to znacznie łatwiejsze do wdrożenia:
To po prostu dopasowuje dwie postacie i zamienia je. Ponieważ mecze się nie pokrywają, zamienia wszystkie cztery pary.
Teraz chcemy zrobić to samo ponownie, ale chcemy pominąć pierwszą postać. Najłatwiejszym sposobem jest wymaganie, aby dopasowanie nie zaczynało się od granicy słowa z
\B
.źródło
kod maszynowy x86, 20 bajtów
W hex:
Jest to procedura przyjmująca dane wejściowe i zwracające wyniki za pośrednictwem rejestru AL
Demontaż
źródło
C (niebezpieczne makro), 39 bajtów
C (funkcja), 41 bajtów
C (pełny program), 59 bajtów
(zwraca przez kod wyjścia, więc wywołaj za pomocą
echo "157" | ./weave;echo $?
)C (pełny program zgodny ze standardami), 86 bajtów
C (pełny program zgodny ze standardami bez ostrzeżeń kompilatora), 95 bajtów
C (zgodny z normami pełny program bez ostrzeżeń kompilatora, który może odczytać z argumentów lub standardowego wejścia i obejmuje sprawdzenie błędów / zakresu), 262 bajty
Awaria
Prawie to samo co wiele istniejących odpowiedzi: przesuń bit wszystkie bity na miejsce za pomocą
<<2
(*4
),<<1
(*2
),>>1
(/2
) i>>2
(/4
), a następnie|
wszystko razem.Reszta to nic innego jak różne smaki płyty kotłowej.
źródło
Mathematica, 34 bajty
Funkcja anonimowa. Pobiera listę cyfr binarnych i wyświetla wypełnioną listę 8 cyfr binarnych.
źródło
PowerShell v2 +, 34 bajty
Tłumaczenie @ LegionMammal978 za odpowiedź . Pełny program Pobiera dane wejściowe za pomocą argumentu wiersza poleceń jako liczbę binarną, dane wyjściowe jako tablicę binarną, uzupełnione zerami.
Ta
"{0:D8}"-f
część używa standardowych ciągów formatu numerycznego, aby dodać0
dane wejściowe$args
. Ponieważ-f
operator obsługuje przyjmowanie tablicy jako danych wejściowych i wyraźnie powiedzieliśmy, że należy użyć pierwszego elementu{0:
, nie musimy robić tego, co zwykle$args[0]
. Hermetyzujemy ten ciąg w parens, a następnie indeksujemy do niego[1,3,0,5,2,7,4,6]
za pomocą tkania. Powstała tablica pozostaje w potoku, a dane wyjściowe są niejawne.Przykłady
(wartość domyślna
.ToString()
dla tablicy ma separator jako`n
, więc dlatego dane wyjściowe są tutaj oddzielane znakiem nowej linii)źródło
Matlab,
494844 bajtówPobiera dane wejściowe jako ciąg wartości binarnych. Wyjście wyściełane. 4 bajty zapisane dzięki @Luis Mendo.
Wyjaśnienie:
źródło
V , 17 bajtów
Wypróbuj online!
To pobiera dane wejściowe i wyjściowe w postaci binarnej. Większość bajtów pochodzi z dopełniania jej zerami. Gdyby dopełnienie wejścia było dozwolone, moglibyśmy po prostu:
Dzięki rozwiązaniu Martina dla metody zamiany znaków, np .:
Wyjaśnienie:
źródło
05AB1E,
1412 bajtówWyjaśnienie
Dane wejściowe są w bazie 10.
Wyjście jest w bazie 2.
Pożycza sztuczkę permutacyjną z odpowiedzi CJam MartinEndera
Wypróbuj online
źródło
Pyth, 19 znaków
Wejście i wyjście są podstawą 2.
Daleko od eksperta w Pyth, ale ponieważ nikt jeszcze nie odpowiedział na to pytanie, dałem mu szansę.
Wyjaśnienie:
źródło
Labirynt ,
2726 bajtówWejście i wyjście w bazie 2. Wyjście jest wyściełane.
Wypróbuj online!
źródło
UGL , 50 bajtów
Wypróbuj online!
Kilkakrotnie div-mod przez 2, a następnie
%
zamień i@
rzuć, aby uzyskać je we właściwej kolejności.Wejście w bazie dziesięć, wyjście w bazie dwa.
źródło
vi, 27 bajtów
Gdzie
<ESC>
reprezentuje postać Escape. Wejścia / wyjścia są binarne, dane wyjściowe są wypełnione. 24 bajty w vimie:źródło
<ESC>
potrzebuje backticks wokół tego. Edytowałbym, ale nie mogę wymyślić jeszcze 4 bajtów do zmiany ...Właściwie 27 bajtów
Wypróbuj online!
Ten program wprowadza i wyprowadza dane jako ciąg binarny (dane wyjściowe są uzupełnione zerami do 8 bitów).
Wyjaśnienie:
źródło
JavaScript, 98 bajtów
Dane wejściowe są traktowane jako base-2 jako ciąg, dane wyjściowe są również base-2 jako ciąg
źródło