Wyzwanie
Biorąc pod uwagę dwie cyfry 0-9 jako dane wejściowe, wyślij domino (z zestawu podwójnych dziewięciu domino ) z taką liczbą pipsów (kropek) na dwóch twarzach. Dziesięć możliwych ścian wygląda następująco (oddzielone rurami):
| | o| o|o o|o o|o o o|o o o|o o o|o o o
| o | | o | | o | | o |o o|o o o
| |o |o |o o|o o|o o o|o o o|o o o|o o o
Lub na osobnych liniach:
-----
o
-----
o
o
-----
o
o
o
-----
o o
o o
-----
o o
o
o o
-----
o o o
o o o
-----
o o o
o
o o o
-----
o o o
o o
o o o
-----
o o o
o o o
o o o
Formaty wejściowe
Możesz przyjmować dane wejściowe w dowolnym rozsądnym formacie, w tym między innymi:
- Dwie oddzielne liczby całkowite, łańcuchy lub tablice singletonów;
- Pojedyncza liczba całkowita od 0 do 99;
- Tablica dwóch liczb całkowitych;
- Ciąg dwóch cyfr.
Formaty wyjściowe
- Dwie ściany mogą być wyrównane w poziomie, oddzielone rurami w ten sposób:
o|o o
| o
o |o o
- Lub mogą być wyrównane w pionie, oddzielone łącznikami tak:
o
o
-----
o o
o
o o
- Jeśli chcesz, możesz wyprowadzić ramkę wokół domina.
- Możesz także wybrać wyświetlanie listy linii, listy dwóch ścian lub ich kombinacji.
- Do pipsów możesz użyć dowolnego znaku innego niż biały znak (użyłem
o
). - Jeśli naprawdę chcesz, możesz użyć
0
spacji i1
pipsów lubFalse
/True
(lub odpowiednika twojego języka), jeśli wypisujesz tablicę. - Możesz usunąć spacje między kolumnami; jest to poprawny wynik dla 7, 7:
ooo|ooo
o | o
ooo|ooo
- Dowolną twarz można obrócić o 90 stopni. Jest to również prawidłowe wyjście dla 7, 7:
o o|o o o
o o o| o
o o|o o o
- Możesz mieć tyle / mało początkowych / końcowych białych znaków, ile chcesz, pod warunkiem, że główna część danych wyjściowych nadal spełnia inne ograniczenia.
- Każda twarz musi mieć 3 linie wysokości, nawet jeśli linie są puste. Dla 0, 1 nie można wyprowadzić tego:
-----
o
Ale może wyjście to:
-----
o
Podobnie, jeśli wypisujesz listę dwóch list linii, możesz to zrobić [["", "", ""], ["", " o", ""]]
, ale nie [[""], [" o "]]
.
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach w każdym języku.
[2, 1]
mogę wyprowadzić[[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]
?[0,5,21,29,31]
są tu wszystkie ważne liczby, moi przyjaciele.Odpowiedzi:
Python 2 ,
10197926864 bajtówWypróbuj online!
Kredyty
źródło
0
iFalse
są równe w Pythonie, więc powinno być OK).C (gcc) ,
252242269262241235220 bajtówByłem na przepełnieniu stosu dla gniazd w pythonie, kiedy to się pojawiło, powiedziałem dlaczego nie? pierwszy kod golfa, więc nie jestem do końca pewien, czy przestrzegałem zasad w 100% (a jeśli nie, a ktoś chce ukraść moje przysłowiowe ciasteczko i to naprawić, niech tak będzie). Z „o” i „”
255 245 272 265 244 238228 bajtów. zamień +48 na * 79 + 32.Wypróbuj online!
Jak to działa:
używam przesunięcia bitowego i bitowego, aby sprawdzić, czy miejsce powinno być czyste, czy pip, a następnie przesunąć 0 lub 1 do poprawnej wartości ASCII. miesza się na 4 i 5, więc potrzebowali naprawy. faktycznie dodał kilka bajtów. był w stanie usunąć kilka bajtów, usuwając maskę i po prostu używając 1 (doh)
Specjalne podziękowania dla pana Xcodera za 7 bajtów mniej, usuwając nadmiar #define
Zmiany: usunięto zestaw pamięci -21 bajtów. zmieniono logikę bitów dla 6, 4, 2, aby zależeć odpowiednio od 8 | 4 i 2, 8 | 4, 8 | 4 | 2. -6 bajtów. usunęliśmy dodatkowe znaki nowego wiersza, używając putów zamiast printf, co również jest krótsze. skrócił tablicę do 11, usuwając dodatkowe przypisanie. -15 bajtów. Teraz myślę, że to najlepsze, co mogę zrobić.
źródło
'\n'
można zastąpić10
. (ponieważ w C typy danych char są również typami liczb całkowitych) Niektóre z nichchar
prawdopodobnie można zastąpićint
. (lub całkowicie pominąć)Galaretka , 20 bajtów
Wypróbuj online!
Alternatywna wersja, oryginalne wyjście,
333231 bajtówDzięki @ user202729 za grę w golfa na 1 bajcie!
Wypróbuj online!
Jak to działa
Po pierwsze
“¤o.ƤẸʠṚ’
- literał całkowity w bazie bijective 250 - ustawia wartość zwracaną na 1086123479729183 .Następnie
B¬
konwertuje wartość zwracaną na binarną i przyjmuje logiczne NIE każdej cyfry, uzyskując tablicęNastępnie
s5ŒB
dzieli tę tablicę na części o długości 5 , a następnie odbija każdą część, zmieniając abcde w abcdedcba , uzyskującTeraz
ị@
pobiera j- ty i k- ty element tej tablicy, gdzie j, k jest pierwszym argumentem programu. Zauważ, że indeksowanie jest oparte na 1 i modułowe, więc element zerowy jest również dziesiąty.Na koniec
s€3
dzieli każdą część o długości dziewięciu na trzy części o długości trzy.źródło
3
Korzysta0
z pestek, a nie1
tak jak wszystkich innych.“¤o.ƤẸʠṚ’
powinno działać.Galaretka , 13 bajtów
Wypróbuj online!
Łącząc pomysł Dennisa na użycie
ŒB
(odbicia) w tej odpowiedzi i obserwację Xcali w tej odpowiedzi, aby uzyskać 13 bajtów.Galareta , 28 bajtów
(z ładnym nadrukiem)
Dopiero teraz wiem, że literał łańcuchowy Jelly jest automatycznie kończony ...
Wypróbuj online!
źródło
⁽½ÑD
prowadzi do mniejszej liczby bajtów niż odpowiedź“¤¦¢¬‘
PHP
155, 150 bajtówJako dane wejściowe przyjmuje tablicę liczb całkowitych. Dla testów:
Format wyjściowy:
Sprawdź to żywo tutaj
Moje rozwiązanie
Do mojego rozwiązania użyłem macierzy składającej się z liczb bitowych (potęgi 2). Można to wizualizować w następujący sposób:
A następnie tablica pamięci składająca się z pozycji bitów dla pipsów każdego domina skorelowanych przez numerowany indeks:
Aby wyjaśnić:
0
lub wartość0
byłoby pustym domino, co zawsze jest fałszem.1
lub wartość16
byłoby domino numer jeden w macierzy znajdującej się w środku16
.2
lub wartość68
będzie numerem dwa domino w macierzy, która jest w prawym górnym rogu4
i w lewym dolnym rogu64
lub4|64
5
lub wartość341
to domino numer pięć i to w macierzy1|4|16|64|256
9
lub wartość511
byłaby domino numer dziewięć, a w macierzy jest to kombinacja wszystkich bitów.Gdy zostanie ustalone, że jest to dość prosta sprawa pętli do 9 pozycjach w macierzy, ustawiając
$x
się2
do mocy z$i
Potem robimy trochę bitowo I
&
podczas iteracji przez te miejsca. Na przykład sake użyje przykładu 2 z góry, ax
zamiast tego użyję spacji dla zachowania przejrzystości:68 & 1 ? 0 : 'x'
której wynikiem jest'x'
68 & 2 ? 0 : 'x'
której wynikiem jest'x'
68 & 4 ? 0 : 'x'
której wynikiem jest0
68 & 8 ? 0 : 'x'
której wynikiem jest'x'
68 & 16 ? 0 : 'x'
której wynikiem jest'x'
68 & 32 ? 0 : 'x'
której wynikiem jest'x'
68 & 64 ? 0 : 'x'
której wynikiem jest0
68 & 128 ? 0 : 'x'
której wynikiem jest'x'
68 & 256 ? 0 : 'x'
której wynikiem jest'x'
Po zakończeniu pętli kończymy z tym sznurkiem
"xx0xxx0xx"
.Następnie dodać obramowanie
"---xx0xxx0xx"
do niego (I rzeczywiście zacząć od granicy, ale co tam) .I w końcu chunk_split () to na 3 dla:
Daj mi znać, co myślisz.
źródło
**
wprowadzonego w PHP 5.6 zamiastpow()
php.net/manual/en/language.operators.arithmetic.php^
ale to bitowe XOR ... lol$argv
. Narzut funkcji w PHP wynosi zwykle 13 bajtów.Perl 5 ,
107 7670+ 1 (= 70 bajtów-a
)Perl 5 , 70 bajtów
Wypróbuj online!
Używa 0 dla białych znaków i 1 dla pipsów. Dość prosta metoda: zauważ, że gdy cyfra idzie w górę, gdy pip jest „włączony”, nigdy nie gaśnie, z wyjątkiem tego, który jest w środku. W środkowej pozycji jest włączony dla wszystkich liczb nieparzystych. Dlatego dla każdej pozycji wystarczy sprawdzić, czy cyfra jest większa niż ostatnia cyfra, dla której jest wyłączona.
||0
Tworzy wyjście, gdy warunek jest fałszywy. W języku Perl wartość false oznacza, że daneundef
wyjściowe są równe null.źródło
JavaScript (ES6),
7978 bajtówZaoszczędzono 1 bajt dzięki produktom @ETH
Pobiera dane wejściowe w składni curry
(a)(b)
i generuje pionowe domino ASCII.Próbny
Pokaż fragment kodu
Wersja pozioma,
8079 bajtówZaoszczędzono 1 bajt dzięki produktom @ETH
Pobiera dane wejściowe jako tablicę 2 liczb całkowitych i wysyła poziome domino ASCII.
Próbny
Pokaż fragment kodu
źródło
n>d|0
lub(+d?n>d:n)&1
APL (Dyalog) , 25 bajtów
Wypróbuj online!
-2 dzięki ngn .
Format wyjściowy jest nieco dziwny: ta funkcja zwraca tablicę zawierającą dwie tablice kształt-3,3, każda zawierająca 0 i 1.
źródło
2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
C (gcc) , 115 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 87 bajtów
źródło
Haskell - 88 znaków
Pobiera listę dwóch liczb wskazujących twarze, zwraca listę listy bool. Nie tak krótko, ale uważam to rozwiązanie za interesujące.
źródło
map
zamiastrepeat
izipWith
:map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)
Wypróbuj online!Pip ,
32272421 bajtów-3 bajty dzięki @DLosc
Wypróbuj online!
Wyjaśnienie:
źródło
3517
zamiast na listę[3 5o7]
. ;)> <> , 57 + 3 = 60 bajtów
Wypróbuj online . Wyjście w postaci domina pionowego z 1s dla kropek, 0 dla białych znaków i 9 dla separatorów:
Technicznie można to rozszerzyć do 12 wprowadzonych wartości.
Stara wersja:
> <> , 76 + 3 = 79 bajtów
Wypróbuj online . Wyjście w postaci domina pionowego z 1s dla kropek i 0 dla białych znaków:
źródło
Węgiel drzewny ,
46444339 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Przeczytaj dwie liczby całkowite i zamapuj je w tabeli odnośników. Następnie zamapuj wynik. (To skutecznie przechwytuje wynik w trybie tymczasowym).
Wyniki są następnie domyślnie drukowane na osobnych liniach, z dodatkową pustą linią między każdą twarzą, ponieważ wyniki są zagnieżdżone.
Przejdź w górę i narysuj linię podziału między twarzami.
Poprzednia 43-bajtowa wersja pozioma:
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Pracuj pionowo.
Wydrukuj linię podziału.
Ustaw na początku pierwszej twarzy.
Przeczytaj dwie liczby całkowite i zamapuj je w tabeli odnośników.
Przygotuj wyjście do 9
o
sekund.Ale zaczynaj nową kolumnę co trzy
o
sekundy.Konwertuj dolne 5 bitów kodu ASCII na binarne, a następnie dubluj dane wyjściowe przez pozostałe 4
o
s.źródło
Galaretka , 16 bajtów
Wypróbuj online!
Wykorzystano strategię Neila i podstawową dekompresję do wygenerowania wartości; wyprowadza jako tablicę binarną. Pobiera listę jako dane wejściowe.
Wyjaśnienie:
źródło
APL + WIN,
4947 bajtówEdytowane zgodnie z komentarzem Adama, dzięki, aby uruchomić z zerowym początkiem indeksu.
Monituje o wprowadzenie ekranu jako wektor liczb całkowitych po jednym dla każdej twarzy.
Dane wyjściowe mają postać:
dla danych wejściowych
7 3
i0 5
Wyjaśnienie:
źródło
⎕IO←0
aby zaoszczędzić sobie1+
?Python 2 , 121 bajtów
Wypróbuj online!
Zmniejszono do 121 przy użyciu lambda po powrocie i ponownym przeczytaniu zasad. Teraz wyświetla listę linii.
Poprzednia wersja z ładnie sformatowanym wyjściem:
Python 2 ,
156153147141 bajtówWypróbuj online!
-3 dzięki dzięki @NieDzejkob
Pobiera dane wejściowe jako 2 liczby całkowite i dane wyjściowe w formacie pionowym z 0 = spacja i 1 = kropka.
źródło
Pyt ,
220154 bajtówDruga próba (154 bajty)
Wyjaśnienie:
Pierwsza próba (220 bajtów):
Wyjaśnienie:
Wypróbuj online!
źródło
05AB1E , 34 bajty
Wypróbuj online!
Było to trudne, ponieważ 05AB1E ma złe wypełnienie.
Podstawowe wyjaśnienie:
źródło
SmileBASIC,
9269 bajtówPrzykład:
Tak się dzieje, gdy twoje zasady nie są wystarczająco rygorystyczne.
źródło
FALSE,
116807870696663615958 bytesstill working on this...
źródło
Chip,
142135 bytesTry it online!
Input is a string of digits. Uses zeroes as the pips. Draws the pips for one number, reads next input byte. If no next byte, terminate, else draw the divider and go to start.
Each
Z
(orz
) corresponds to one character of output, they are positioned to fire in order top to bottom. The capitalizedA
,B
,C
, andD
correspond to the low four bits of the input (that's all we look at, so"34" == "CD" == "st" ...
). The lowercaseb
,d
,e
,f
correspond to various bits of the output.Can make infinite-length dominoes too; try giving
0123456789
as input.źródło
PHP, 116 bytes
requires PHP 5.5 or later. Run with
-nr
or try it online.źródło
C (gcc),
150146 bytesTry it online!
źródło