Wyciąć matrycę logiczną w blokach 4x2 i uczynić je jako znaki Braille'a U+2800
... U+28FF
.
[[0,1,0,0,1,0],
[1,0,0,0,0,0],
[1,0,0,0,1,0],
[1,1,1,1,0,0]]
⣎⣀⠅
Wpisz 0-s, jeśli wymiary nie są wielokrotnością 4 i 2.
[[0,1,0],
[1,0,0],
[1,1,1]]
⠮⠄
Obowiązują zwykłe zasady gry w golfa, elastyczne w formacie wejściowym. Dane wyjściowe powinny mieć strukturę macierzy lub wyglądać jak macierze, np. Lista ciągów; pojedynczy ciąg z nowymi liniami.
Wskazówka: chr(0x2800 + 128*b7 + 64*b6 + 32*b5 + 16*b4 + 8*b3 + 4*b2 + 2*b1 + b0)
to wzór punktowy
b0 b3
b1 b4
b2 b5
b6 b7
Większy test:
[[0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,0],
[0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1],
[0,1,1,0,0,1,1,1,0,0,0,1,1,1,1,0,0,1,1,0,0,0,1],
[1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1],
[1,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1,0],
[1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0],
[1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0],
[1,1,0,1,1,1,1,1,0,0,1,1,0,0,1,0,0,1,1,1,1,1,1],
[1,1,0,1,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,1,1,0],
[1,1,0,1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,0,1,1,0,0],
[1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0,1,1,0,0],
[1,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,0,0],
[0,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0],
[0,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,0,0],
[0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,1,1,1,0]]
⣰⠟⠻⣦⠀⠠⠾⡇⢠⡞⢛⡆
⣿⢠⣬⣥⠄⣀⠀⡇⢈⣻⣈⡀
⣿⠘⢹⡇⡞⠙⡇⣧⡉⢹⡏⠀
⠘⠷⠟⠁⠳⠾⠃⠘⠇⠾⠧⠀
Odpowiedzi:
Galaretka ,
3130 bajtówWypróbuj online!
W jaki sposób?
źródło
Ḅ
obsługuje „cyfry” większe niż 1? Zamiast dodawać 10240 (0x2800 - dwa bajty) do wyniku, można dodać 40 (0x28 - jeden bajt) do wektora cyfr binarnych. Nie wiem dużo o Jelly, więc nie jestem pewien, czy to naprawdę zadziała.Ḅ
rzeczywiście przekonwertowałby wiodącą cyfrę 40, jak sugerujesz, ale musielibyśmy dodać ją do każdej takiej listy (na głębokości 2), która, jak sądzę, wymagałaby więcej bajtów kodu (;@€€40Ḅ
).JavaScript ES7
210207201200198194185183 bajtów4 bajty zapisane dzięki ngn
3 bajty zapisane dzięki Łukaszowi
Jak to działa
Podzielę kod na części i będę mówić o nich osobno:
Tutaj deklarowana jest każda zmienna.
x
iy
jest pozycją „kursora” (lewa górna krawędź bieżącego znaku brajlowskiego). Współrzędna x zwiększa się o 2 z każdą iteracją i zatrzymuje się, gdy nie ma wiersza z indeksemy
(zwraca [x]undefined
jeśli nie istnieje, co zostaje przekształcone na false).W drugim rzędzie jest wiele lew.
(a[y] || [])[x]
zapewnia, że wyszukiwanie wartości w(x, y)
pozycji nie spowoduje błędu. Jest&&
to zwykły i operator, i sprawdza tylko prawą stronę wyrażenia, jeśli lewa była prawdziwa. Można to przetłumaczyć naNastępna część:
String.fromCharCode
po prostu konwertuje przekazaną liczbę na znak Unicode o tym samym kodzie znaków. Wyrażenie w nawiasach oblicza indeks znaku brajlowskiego:Przechodzi przez pozycję w
porządek, mnoży wartości w tych pozycjach przez 2 i , gdzie i jest indeksem i dodaje je razem. The
część deklaruje wywołaną funkcję lambda
g
, która podając współrzędnąx
iy
zwraca wartość na(x, y)
pozycji lub 0, jeśli pozycja leży poza granicami tablicy.Ta część sumuje ostatnie dwie pozycje z prawidłowymi wagami, używając funkcji zdefiniowanej nieco wcześniej.
Last but not least,
część ma 2 funkcje. Definiuje anonimową lambdę i zapewnia, że pętla for nie powoduje żadnych problemów (lambda z jedną linią, taka jak ta, nie może zawierać tylko jednej pętli for, ocena tego obchodzi).
źródło
||0
->|0
;~~(k/3)
->(k>2)
;*128
-><<7
(zamieniając+
-s na|
-s)Mathematica,
1261109790Rozwiązanie to wykorzystuje
ListCorrelate
się convolve jest (odwrotnie) na jądro matrycy , która jest zasadniczo przesuwnych mnożenie macierzy (lub produkt kropka). Zobacz objaśnienie wizualne tutaj . Wypełnianie odbywa się za pomocą0
czwartego argumentu. W poniższym przykładzie oczekujemy, że wynik będzie zgodny z powyższą wskazówką:Zauważ, że
ListConvolve
nie jest on krótszy, ponieważ byłby to trzeci argument-1
.Ponieważ dotyczy to jądra w każdej pozycji macierzy, musimy tylko wyodrębnić elementy w co czwartym rzędzie i drugiej kolumnie. Używamy skróty dla
Span
iPart
:[[;;;;4,;;;;2]]
.Pomocnie,
FromCharacterCode
może wziąć macierz kodów znaków i zwrócić listę ciągów znaków.To rozwiązanie zwraca listę ciągów, która jest jednym z dozwolonych formatów wyjściowych. Po prostu przygotuj się,
Column@
aby wynik „wyglądał jak matryca”.Możesz się tym pobawić w darmowym zeszycie Mathematica online. Idź tutaj , kliknij Utwórz nowy notatnik, poczekaj chwilę, wklej ten kod, a następnie naciśnij shift+enter.
Powinieneś zobaczyć to:
źródło
Dyalog APL,
13312211411210110098959493908886 bajtówZakłada
⎕IO←0
-
8912 bajtów dzięki @ Adám na czacie-2 bajty dzięki @ngn
Wypróbuj online!
Jak (dane wejściowe
⍵
)?A←4 2
, zapisz wektor4 2
w zmiennejA
(⍴⍵)÷
, wymiary⍵
podzielone przezA
⌈
, sufitC←
, przechowywane wC
A×
, pomnożone przezA
⍵↑⍨
, pasuje⍵
do tych wymiarówS←
, przechowywane wS
⍳⍴
, indeksyS
{0 0≡A|⍵}¨
,1
gdzie jest górna lewa komórka,0
wszędzie indziej(,b)/,⍳⍴b←
, prawdomówne indeksy{⎕UCS 10240+2⊥(∊S⌷⍨⍵+⍳¨A)[⍎¨⍕76531420]}¨
, zmień każdy element w brajlaC⍴
, zmień wymiary naC
źródło
+/(2*0 3 1,A,4+⍳3)×something
→2⊥something[⍎¨⍕76524130]
⎕IO←0
?⎕IO←0
:)⎕IO
) w APL. Bo⎕IO←1
oczywiście musisz dodać 1 do każdej cyfry 76524130.JavaScript, 136 bajtów
Dzięki ngn użycie przesunięć bitowych pozwala zaoszczędzić 4 bajty.
źródło
i/4|0
->i>>2
c*2**
też jest trochę przesunięty :)Szuflada Python 2 + ,
141125120116 bajtówZaoszczędzono 16 bajtów dzięki ngn i L3viathan
Zaoszczędzono 5 bajtów dzięki L3viathan
Zaoszczędzono 4 bajty dzięki ngn
Wypróbuj online!
tio nie ma zainstalowanej szuflady, więc nie działa
źródło
enumerate()
i rozumiesz listę.def b(d,c=l.Canvas()):print([c.set(j,i)for i,x in enumerate(d)for j,y in enumerate(x)if y]and c).frame()
and c
podstępu - zrozumienie może być samodzielnym stwierdzeniem, po którym następuje;print c.frame()
APL (Dyalog) ,
5754 bajtów *-3 dzięki OP. Monity o macierz boolowską. Drukuje matrycę znaków.
Wypróbuj online!
⎕,0
dodaj zero po prawej stronie (ignorowane, jeśli parzysta liczba kolumn)⊢
dają to (do rozdzielenia3
i⎕
)⍪∘0⍣3
trzy razy dodaj zera na dole (ponieważ⌺
upuszcza częściowe okna)0⍪⍣3
stos zer na górze trzy razy (ponieważ⌺
zaczyna się w lewym górnym rogu)⊢
wydajność, która (oddziela nawias i0
){
… W}⌺(2 2⍴4 2)
każdym 4-rzędowym 2-kolumnowym oknie z 4-rzędowym krokiem w pionie i 2 rzędami w poziomie:⊢⌿⍵
ostatni rząd (podświetlony pionowy spadek po prawej);[b6,b7]
(
…),
Prepend:3↑
weź trzy rzędy;[[b0,b3],[b1,b4],[b2,b5]]
⍉
transponować;[[b0,b1,b2],[b3,b4,b5]]
,
strzępy;[b0,b1,b2,b3,b4,b5]
teraz mamy
[b0,b1,b2,b3,b4,b5,b6,b7]
⌽
rewers;[b7,b6,b5,b4,b3,b2,b1,b0]
40,
prepend 40 (dla 40 × 29 = 10240);[40,b7,b6,b5,b4,b3,b2,b1,b0]
2⊥
oceniać jako base-2 (binarnie)⎕UCS
przekształcić w postać1↓
upuść pierwszy rząd (wszystkie zero z powodu⌺
wypełnienia)* W wersji Classic, licząc
⌺
jako⎕U233A
.źródło
0⍪⍣3⍪∘0⍣3⊢⎕,0
vs0⍪∘0⍣3⊢⎕,0
⍪∘0⍣3
i,0
są potrzebne tylko z powodu błędu w⌺
, a pierwszy z nich nie jest potrzebna dla przypadków testowych.0⍪⍣3⍪∘0⍣3⊢⍵,0
do0(⊖⍪)⍣6⊢⍵,0
.Python 3 ,
168165161 bajtówWypróbuj online!
źródło
[*zip(*m[:4])]
zamiast zamiast dzwonićlist
.Haskell , 145 bajtów
Wypróbuj online!
źródło
Python 3 , 169 bajtów
Wypróbuj online!
źródło
if y%4<1:a+=-~len(l)//2*[10240],
jaka+=(y%4<1)*[-~len(l)//2*[10240]]
i dopasowaćx=0;y+=1
na tej samej linii. Myślę, że to oszczędza bajt.Perl 5 , 164 bajtów
163 bajty kodu + 1 flaga
-p
Wypróbuj online!
Pobiera przecinek każdego wiersza oddzielony w jednym wierszu.
źródło
APL (Dyalog) , 53 bajty
Wypróbuj online!
źródło