Zainspirowany przez Utwórz ścianę binarną
Biorąc pod uwagę listę dodatnich liczb całkowitych, możemy zapisać je wszystkie nad sobą tak, na [2, 6, 9, 4]
przykład:
0010
0110
1001
0100
Możemy to sobie wyobrazić jako ścianę:
..#.
.##.
#..#
.#..
Jest to jednak bardzo słaby mur, który się zawalił! Każda 1
( #
) spada, aż uderzy w „ziemię” lub inną 1
( #
). W 0
s ( .
a) są obecne w miejscach pozostawionych przez przenoszonych 1
s.
Staje się to następujące:
....
....
.##.
####
Co przekłada się z powrotem na:
0000
0000
0110
1111
Który jako lista liczb jest [0, 0, 6, 15]
.
Kolejny przypadek testowy
[10, 17, 19, 23]
Staje się to:
01010
10001
10011
10111
który staje się:
00000
10011
10011
11111
tłumacząc z powrotem na:
[0, 19, 19, 31]
Wyzwanie
Biorąc pod uwagę listę dodatnich liczb całkowitych, zastosuj tę transformację do listy. Dane wejściowe / wyjściowe jako listy liczb całkowitych dodatnich w dowolnym rozsądnym formacie. Obowiązują standardowe luki.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
źródło
Odpowiedzi:
MATL , 4 bajty
Wypróbuj w MATL Online
Wyjaśnienie
źródło
Python , 68 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 50 bajtów
Objaśnienie: Załóżmy, że dwa rzędy ściany wyglądały tak:
Wynik musi być następujący:
Innymi słowy, pierwszy rząd staje się AND z dwóch rzędów, a drugi rząd staje się OR z dwóch rzędów. Należy to powtórzyć tyle razy, aby wszystkie bity spadły na dno.
źródło
Galaretka , 9 bajtów
Wypróbuj online!
źródło
Japt , 16 bajtów
Wypróbuj online! używając
-Q
flagi do sformatowania wyniku tablicy.Wyjaśnienie
źródło
mì2 z3 mn z mì2
null
zamiast spacji. Więc to nie działa. Inull
jest posortowany na prawo od1
s, w przeciwieństwie do spacji, które są posortowane na lewo.Mathematica, 64 bajty
jest
\[Transpose]
Konwertuje to dane wejściowe (listę liczb) na listę list cyfr, wstawia je do macierzy kwadratowej, transponuje, sortuje wiersze, tak aby „1” opadło na dół, transponuje z powrotem, a następnie przekształca z powrotem w liczby .
źródło
Python 3.5 , 60 bajtów
Wypróbuj online!
Przyjmuje dane wejściowe jak
f(2, 6, 9, 4)
. Zakłada, że dane wejściowe nie są puste. Używa dużo rozpakowywania krotki .źródło
Oktawa,
2925 bajtów4 bajty zapisane dzięki @Stewie
źródło
de2bi/bi2de
zapisuje 4 bajty w oktawie. Działa na octave-online.net.J , 13 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
<convert from binary> <transpose> <sort each row> <transpose> <convert to binary> M
, gdy dwie pierwsze funkcje są tylko odwrotnością dwóch ostatnich.05AB1E , 9 bajtów
Wypróbuj online!
Trochę inny algorytm niż Magic's.
źródło
ζ
, cholera. Usunąłem moją, weź moje +1.Dyalog APL,
242119 bajtówWypróbuj online! (zmodyfikowany, więc TryAPL akceptuje go jako prawidłowy)
W jaki sposób?
⎕
oceniane dane wejściowe (tablice są oddzielone spacjami)2⊥⍣¯1⊢
konwertuje każdy z argumentów na binarny (transponowany z pytania)↓
zamienia tablicę 2D w wektor wektorów{⍵[⍋⍵]}¨
sortuje każdy z elementów wektora↑
ponownie przekształca wektor wektorów w tablicę 2D2⊥
konwersja z pliku binarnego (ponieważ w pewnym sensie transponuje go, dochodzimy do prawidłowego wyniku)źródło
Dyalog APL (23 znaki)
Przykład
Dzięki Zacharýowi za poprawienie mnie w tym.
źródło
(⊥⍣¯1)⍵
z⊥⍣¯1⊢⍵
. Poza tym nie sądzę, żebyś potrzebował specyfikacji osi dla podziału (↓[1]
=>↓
).⊥⍣¯1
naprawdę musi być wbudowany). I dziękuję, że właściwie poprawiliście moją nazwę użytkownika.JavaScript,
127125 bajtówWypróbuj online
-2 bajty dzięki kwakowi krów
źródło
(1<<c)&e
może zostać2**c&e
Python 2, 142 bajty
... i wciąż gra w golfa ... mam nadzieję –– Każda pomoc doceniona!
Duża część tego służy do uzupełniania liczb zerami.
Bardziej czytelny:
Tworzy to tablicę reprezentacji ciągów binarnych, wypełnia ją, obraca o 90º zgodnie z ruchem wskazówek zegara, sortuje każdy rząd, obraca go o 90º do tyłu, a następnie tworzy liczby całkowite z każdego rzędu.
źródło