Biorąc pod uwagę dowolną 16-bitową liczbę całkowitą bez znaku, zamień jego liczbę dziesiętną (tj. Base-10) na siatkę 4x4 ASCII jego bitów, z najbardziej znaczącym bitem (MSB) w lewym górnym rogu, najmniej znaczącym bitem (LSB) na w prawym dolnym rogu, czytaj dalej, a następnie w dół (jak tekst w języku angielskim).
Przykłady
Wejście: 4242
+---+---+---+---+
| | | | # |
+---+---+---+---+
| | | | |
+---+---+---+---+
| # | | | # |
+---+---+---+---+
| | | # | |
+---+---+---+---+
Dane wejściowe: 33825
+---+---+---+---+
| # | | | |
+---+---+---+---+
| | # | | |
+---+---+---+---+
| | | # | |
+---+---+---+---+
| | | | # |
+---+---+---+---+
Specyficzne wymagania
Dane wejściowe muszą być dziesiętne (podstawa-10), jednak można je przekonwertować na pliki binarne w dowolny sposób (w tym za pomocą wbudowanych języków, jeśli są dostępne).
Format tabeli wyjściowej musi być dokładnie zgodny . Oznacza to, że musisz użyć określonych znaków ASCII (
-
,+
i|
) dla linii siatki tabeli, jak pokazano, wnętrze każdej komórki ma 3 znaki, a prawdziwe bity są reprezentowane przez,#
a fałsz jest reprezentowany przez spację ().
Wiodące lub końcowe białe znaki są niedozwolone. Wymagana jest ostateczna nowa linia .
Kolejność bitów musi być zgodna z opisanymi przykładami.
Dodatki
- Dane wejściowe muszą być liczbą dziesiętną w wierszu poleceń, standardowej lub użytkownika, ale nie mogą być zapisane na stałe w kodzie źródłowym.
Niech wygra najczystszy najkrótszy kod! :-)
źródło
Odpowiedzi:
J, 26 bajtów
Czasownik anonimowy. Na szczęście J jest bardzo dobry w rysowaniu ramek. Wypróbujmy to:
Jak wspomnieli niektórzy komentatorzy, sposób, w jaki J rysuje ramki, zależy od systemu: na niektórych platformach kod ten będzie działał w ustawieniach domyślnych, ale na innych, pola będą rysowane przy użyciu znaków do rysowania linii Unicode. (Polecenia
9!:6
i9!:7
pozwalają na zapytania i ustawić znaki wyciągnąć pudełkowane wartości z, odpowiednio).źródło
JavaScript (ES6), 102
... lub 96 używając
return
zamiastconsole.log
.Przetestuj poniższy fragment kodu w przeglądarce zgodnej z EcmaScript 6.
źródło
Befunge -93, 196
218bajtówAby uruchomić program ...
Show
.Input
polu.Run
. (Lub zmieńSlow
na coś w rodzaju 5 milisekund, a następnie kliknijShow
.)Wyjście dla 4242:
Wyjście dla 33825:
Wyjaśnienie
O Boże, w co się wpakowałem? Cóż, proszę bardzo! (Nieistotny kod zostaje zastąpiony przez
.
s.)Część 1: Uzyskaj dane wejściowe (zapisz w 0,0) i oblicz 32768 (zapisz w 1,0).
Część 2: Wydrukuj „+ --- + --- + --- + ---”.
Część 3: Wydrukuj „+” i nowy wiersz i sprawdź, czy (1,0) ma wartość 0 (tzn. Gotowe). Jeśli tak, zakończ. W przeciwnym razie kontynuuj.
Część 4: Otrzymuj binarne cyfry danych wejściowych, aktualizując (0,0) i (1,0) w miarę postępów. Wydrukuj właściwe rzeczy. Korzystam z zachowań Befunge.
Część 5: Wydrukuj nowy wiersz i wróć do części, która drukuje „+ --- + --- + --- + --- +”. Używana jest sztuczka polegająca na obejściu.
Ta-da!
źródło
Julia,
156143 bajtówNie golfowany:
Wypróbuj online
źródło
Python 2,
157153151146 bajtówDzięki Morgan Thrapp za uratowanie 4 bajtów i Jonathan Frech za uratowanie 5.
Stosowanie
źródło
'+---'*4
zmienną, i dwa kolejne, jeśli tak zrobiszj=''.join
int(input())
zeinput()
i zapisać pięć bajtów.Rubin,
118114dzięki za @ w0lf za uratowanie niektórych znaków.
źródło
?
notacji (np .:?|
zamiast'|'
). Działa to na wszystko oprócz przestrzeni.?\s
działa dla przestrzeni, ale w rzeczywistości nie jest to tutaj pomocne.GNU sed + dc, 116
Wynik obejmuje +1 za
-r
flagi, abysed
:Wyjście testowe:
Alternatywnie:
Pure sed, 146
Możesz pomyśleć, że oszustwo polega na użyciu
sed
rozszerzenia GNU do ewaluacjidc
polecenia. W takim przypadku możemy to zrobić nieco inaczej, zgodnie z tą meta-odpowiedzią . Oczywiście pytanie wyraźnie stwierdza, że dane wejściowe muszą znajdować się w bazie 10, ale tutaj próbuję twierdzić, że możemy przesłonić to w przypadkused
odpowiedzi i użyć zamiast niej jedności (baza 1).Wyjście testowe
Użycie
printf
do wygenerowania niezbędnego ciągu jednoargumentowego:źródło
C ++ 11,
193191190176172 bajtówMoje pierwsze rozwiązanie na codegolf w historii, więc nie obwiniaj mnie.
Nie golfił
Poprzednia wersja
źródło
using namespace std
w kodzie produkcyjnym. I tutaj też nie jest to przydatne.0x
.using namespace std
oszczędza kilka bajtów, ponieważ nie muszę przedrostkacout
anicin
zstd::
. Nawet używanie po prostuusing std::cout;
nie pomoże.C++
nie obsługuje auto int.Pyth, 37 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
CJam,
4341 bajtówZdecydowanie do gry w golfa, ale myślę, że to początek. Generuje górny wiersz, a następnie dla każdego 4 bitów tworzy wiersz parzysty i kopiuje poprzedni wiersz nieparzysty.
Wypróbuj online .
źródło
Python 2,
122121120 bajtów-1 bajt dzięki zgrabnej
4**8+
sztuczce @ xnor . Główne drukowanie odbywa się przez zapętlenie 9 razy, wybranie odpowiedniego wiersza dla nieparzystych / parzystych.źródło
bin(4**8+input())[3:]
oszczędza bajtformat
Python 2, 94
Chodzi o wzięcie wzoru
oprócz z
%s
zamiast pustych miejsc i wykonywania krotek. Krotka wyglądaJest on tworzony przez zdejmowanie cyfr z wejścia w postaci binarnej i dodawanie odpowiedniego symbolu z przodu krotki. Wyrażenie z jawną krotką dało jednakową długość.
Dzięki Sp3000 za 2 bajty.
źródło
PowerShell,
203188182 bajtówEdytuj - zapisano 15 bajtów, zmieniając kolejność
|
rysowania, dzięki czemu możemy zrzucić.TrimEnd("|")
dane wyjściowe i zamiast tego przekształcić pętlę for w blok subkodu, który tworzy tablicęEdit2 - zapisano kolejne 6 bajtów, eliminując potrzebę zapisywania w
$o
zmiennej i wysyłania-join''
bezpośrednio z .Ooooooooof.
Rysowanie w PowerShell jest trudne . Praca z cyframi binarnymi w PowerShell jest trudna .
Używa wbudowanych
[convert]
liczb wejściowych do reprezentacji ciągu w formacie binarnym, a następnie ponownie rzutuje na[int64]
, abyśmy mogli ponownie wywołać.ToString()
w celu dodania / uzupełnienia odpowiedniej liczby zer. (Zauważ, że utworzenie tablicy ciągów i połączenie ich@(,"0"*16)-join''
jest o 1 znak krótsze niż ciąg literalny"0000000000000000"
)Następnie wykonaj proste
1..16|%{...}
sprawdzanie pętli dla każdej cyfry, aby zbudować naszą tablicę wyjściową, a następnie w końcu z-join''
powrotem razem.Poprzedni, 188
Poprzednio, 203
źródło
JavaScript (ES6),
216207 bajtówDefiniuje anonimową funkcję.
Dzięki ETHproductions za wskazówki!
źródło
.join` | `
2. Możesz także użyć ciągu szablonu do interpolacji wartości:i=>`,${"0".repeat....join`,`},`.replace...
3 Możesz znaleźć więcej porad ES6 w tym wątku .i=>`,${("0".repeat(16)+i.toString(2)).slice(-16).split``.map((v,l,a)=>l%4?"":"| "+a.slice(l,l+4).map(v=>' #'[v]).join` | `+" |").filter(v=>v).join`,`},`.replace(/,/g,`<line break>+---+---+---+---+<line break>`).slice(1)
("0".repeat(16)+i.toString(2)).slice(-16)
->(65536|i).toString(2).slice(1)
CJam, 62 bajty
Wypróbuj online .
źródło
Pyth, 50 bajtów
Wyjaśnienie będzie musiało poczekać do następnego razu, publikuję to na swoim telefonie!
źródło
Ruby, 102
Algorytm
Wydrukuj poziomy rozdzielacz
Pętla 20 razy (19..0)
Jeśli liczba pętli nie dzieli się przez 5, zamień na liczbę z zakresu 16..0, mnożąc przez 4/5. Wydrukuj spację (ascii 32) lub
#
(ascii 32 + 3 = 35) poprzedzone przez|
spacją i po niej.Jeśli liczba pętli dzieli się przez 5, wypisz końcówkę |, nową linię i dzielnik poziomy identyczne z pierwszym.
źródło
Perl, 103 bajty
Dużo ciąg powtórzeń zrobić siatkę
x
s, konwersja do wejścia binarne, a następnies///
zx
s do#
lub$"
() w zależności od flagi na określonej pozycji (
$x
).źródło
PHP, 159 bajtów
bingrid16.php
:Stosowanie:
Nic szczególnego, po prostu brutalne wymuszenie renderowania.
Próbowałem pod innym kątem, używając tablic zamiast pętli, ale było dłuższe przy 224 bajtach:
źródło
Perl 5 ,
8584 bajtów8483 bajty kodu +-p
flaga-1 bajt po Dom przypomniał mi o użyciu nowej linii
Wypróbuj online!
źródło
$/
!c99 263 bajtów
grał w golfa:
bez golfa:
Po prostu lubiłem prezentować nieco zmieniający się wariant i czułem, że po raz pierwszy jest odpowiedni (nawet kosztuje mnie kilka bajtów, ale C nie może tego wyzwania w bajtach nawet z szansą, więc nie obchodzi mnie), aby użyć argc / argv
źródło
Ruby, 95
Nod na Mhmd, aby uzyskać zwięzłą konwersję ciągów, ale chciałem spróbować użyć metod ciągów zamiast metod numerycznych.
źródło
Ruby, 93
Nieco krótsza wersja wykorzystująca tylko operacje numeryczne.
źródło
C # 227 bajtów
Gra w golfa:
Akapit:
Po raz pierwszy próbuję czegoś takiego, wskazówki będą mile widziane!
źródło
wc
poleceniaPython 3,
145144 bajtówInline:
Z nowymi liniami:
Edycja: Zbiorniki @manatwork za zapisanie 1 bajtu
źródło
r=0,1,2,3
jest 1 znak krótszy niż generowanie gor=range(4)
.Kotlin , 192 bajty
Upiększony
Test
źródło
05AB1E , 45 bajtów
Wypróbuj online!
źródło