Narysuj mi domino

35

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ć 0spacji i 1pipsów lub False/ 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 , więc wygrywa najkrótszy kod w bajtach w każdym języku.

ETHprodukcje
źródło
Więc dla danych wejściowych [2, 1]mogę wyprowadzić [[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]?
Dennis
@Dennis Correct.
ETHproductions
2
Czy separatorem między twarzami muszą być myślniki, czy też może być to inna spójna wartość?
Jo King,
@JoKing Powiem, że możesz użyć dowolnego spójnego znaku innego niż ten, którego już używasz.
ETHproductions
[0,5,21,29,31]są tu wszystkie ważne liczby, moi przyjaciele.
Magic Octopus Urn

Odpowiedzi:

14

Python 2 , 101 97 92 68 64 bajtów

lambda*a:[[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]]for n in a]

Wypróbuj online!

Kredyty

Neil
źródło
@ Mr.Xcoder Zaktualizowano ponownie.
Neil,
1
Formatowanie jest opcjonalne. Zwrócenie pary macierzy pozwala zaoszczędzić co najmniej 22 bajty.
Dennis,
1
68 bajtów bez formatowania (zauważ, że 0i Falsesą równe w Pythonie, więc powinno być OK).
Jonathan Allan
@JonathanAllan Bardzo sprytny, zaktualizowany.
Neil
64 bajty. Jeśli musisz zrobić lambda, lista jest prawdopodobnie krótsza.
całkowicie ludzki,
12

C (gcc) , 252 242 269 262 241 235 220 bajtów

Był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 238 228 bajtów. zamień +48 na * 79 + 32.

#define Q(P,R)(R>>P&1)+48
char a[11];i=0;f(char*c){char b=c[0];a[3]=a[7]='\n';a[5]=Q(0,b);a[1]=a[9]=Q(3,b);a[2]=a[8]=Q(2,b)|a[1];a[0]=a[10]=Q(1,b)|a[2];a[4]=a[6]=a[1]|Q(2,b)&Q(1,b);puts(a);if(i++<1){puts("---");f(c+1);}}

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ć.

Andrew Baumher
źródło
7
Witamy w PPCG!
Kudłaty
Cześć, witamy w PPCG! Możesz skrócić swój kod nieco dalej, 245 bajtów
Mr. Xcoder,
'\n'można zastąpić 10. (ponieważ w C typy danych char są również typami liczb całkowitych) Niektóre z nich charprawdopodobnie można zastąpić int. (lub całkowicie pominąć)
user202729
Do 184 bajtów tutaj, ale to wciąż więcej niż obecny c golf, więc.
Andrew Baumher,
173
Andrew Baumher,
10

Galaretka , 20 bajtów

“¤o.ƤẸʠṚ’B¬s5ŒBị@s€3

Wypróbuj online!

Alternatywna wersja, oryginalne wyjście, 33 32 31 bajtów

“¤o.ƤẸʠṚ’ṃ⁾ os5ŒBị@s€3K€€Zj€”|Y

Dzię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 konwertuje wartość zwracaną na binarną i przyjmuje logiczne NIE każdej cyfry, uzyskując tablicę

00001001000010110100101011110011101111101111100000

Następnie s5ŒBdzieli tę tablicę na części o długości 5 , a następnie odbija każdą część, zmieniając abcde w abcdedcba , uzyskując

000010000 001000100 001010100 101000101 101010101

111000111 111010111 111101111 111111111 000000000

Teraz ị@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€3dzieli każdą część o długości dziewięciu na trzy części o długości trzy.

Dennis
źródło
1
Nadal wygląda mi na magię, ale doceniam próbę wyjaśnienia. Przyznaję, że wina jest prawdopodobnie moja, ponieważ jestem po prostu deweloperem PHP
ArtisticPhoenix
3Korzysta 0z pestek, a nie 1tak jak wszystkich innych.
Jonathan Allan
“¤o.ƤẸʠṚ’powinno działać.
Jonathan Allan
@JonathanAllan Thanks! Nie jestem pewien, jak to się stało ...
Dennis,
8

Galaretka , 13 bajtów

⁽½ÑD<;ḂŒBs3µ€

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 ...

⁽½ÑD<;ḂŒBị⁾o Ks6Yµ€j“¶-----¶

Wypróbuj online!

użytkownik202729
źródło
Najwyraźniej moje podejście ⁽½ÑDprowadzi do mniejszej liczby bajtów niż odpowiedź “¤¦¢¬‘
EriktheOutgolfer
Czy nie byłoby lepiej zmienić kolejność funkcji, aby 13 bajtów (outgolfing Dennis) znalazło się na górze i było łatwiej widoczne?
Zacharý
@ Zacharý rozwiązanie tymczasowe. Naprawię to później.
user202729,
6

PHP 155 , 150 bajtów

function d($a){foreach($a as$n){$o="---";for($i=0;$x=2**$i,$i<9;++$i)$o.=([0,16,68,84,325,341,365,381,495,511])[$n]&$x?0:' ';echo chunk_split($o,3);}}

Jako dane wejściowe przyjmuje tablicę liczb całkowitych. Dla testów:

d([1,2]);

echo "=========\n";

d([0,1,2,3,4,5,6,7,8,9]);

Format wyjściowy:

---

 0 

---
  0

0  

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:

 1  |  2  |  4
 8  | 16  | 32
 64 | 128 | 256

A następnie tablica pamięci składająca się z pozycji bitów dla pipsów każdego domina skorelowanych przez numerowany indeks:

[0,16,68,84,325,341,365,381,495,511]

Aby wyjaśnić:

  • przykład 0: indeks 0 lub wartość 0byłoby pustym domino, co zawsze jest fałszem.
  • przykład 1: indeks 1lub wartość 16byłoby domino numer jeden w macierzy znajdującej się w środku 16.
  • przykład 2: indeks 2lub wartość 68będzie numerem dwa domino w macierzy, która jest w prawym górnym rogu 4i w lewym dolnym rogu 64 lub4|64
  • przykład 3: indeks 5lub wartość 341to domino numer pięć i to w macierzy1|4|16|64|256
  • przykład 4: indeks 9lub wartość 511był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 $xsię 2do mocy z$i

for($i=0;$x=2**$i,$i<9;++$i)

Potem robimy trochę bitowo I &podczas iteracji przez te miejsca. Na przykład sake użyje przykładu 2 z góry, a xzamiast tego użyję spacji dla zachowania przejrzystości:

  • iteracja 1, 68 & 1 ? 0 : 'x'której wynikiem jest'x'
  • iteracja 2, 68 & 2 ? 0 : 'x'której wynikiem jest'x'
  • iteracja 3, 68 & 4 ? 0 : 'x'której wynikiem jest0
  • iteracja 4, 68 & 8 ? 0 : 'x'której wynikiem jest'x'
  • iteracja 5, 68 & 16 ? 0 : 'x'której wynikiem jest'x'
  • iteracja 6, 68 & 32 ? 0 : 'x'której wynikiem jest'x'
  • iteracja 7, 68 & 64 ? 0 : 'x'której wynikiem jest0
  • iteracja 8, 68 & 128 ? 0 : 'x'której wynikiem jest'x'
  • iteracja 9, 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:

---
xx0
xxx
0xx

Daj mi znać, co myślisz.

Artystyczny Feniks
źródło
Możesz go jeszcze bardziej skrócić, używając operatora potęgowania **wprowadzonego w PHP 5.6 zamiast pow() php.net/manual/en/language.operators.arithmetic.php
Daniel
@Daniel - Dzięki zapisano 5 bajtów! Nie wiedziałem, że dodali, że zawsze próbuję użyć, ^ale to bitowe XOR ... lol
ArtisticPhoenix
Nie sądzę, abyś mógł wydrukować dodatkową ramkę.
12Me21
pokaż mi, gdzie nawet zdalnie wskazuje na to w PO.
ArtisticPhoenix
Wydaje mi się, że operacja byłaby krótsza $argv. Narzut funkcji w PHP wynosi zwykle 13 bajtów.
Tytus
6

Perl 5 , 107 76 70 + 1 ( -a) = 70 bajtów

Perl 5 , 70 bajtów

$,="
---
";say map{$_='351
7 7
153'=~s/\d/$_>$&||0/ger=~s/ /$_%2/er}<>

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. ||0Tworzy wyjście, gdy warunek jest fałszywy. W języku Perl wartość false oznacza, że ​​dane undefwyjściowe są równe null.

Xcali
źródło
4

JavaScript (ES6), 79 78 bajtów

Zaoszczędzono 1 bajt dzięki produktom @ETH

Pobiera dane wejściowe w składni curry (a)(b)i generuje pionowe domino ASCII.

a=>b=>(g=n=>`351
707
153`.replace(/./g,d=>' o'[(+d?n>d:n)&1]))(a)+`
---
`+g(b)

Próbny


Wersja pozioma, 80 79 bajtów

Zaoszczędzono 1 bajt dzięki produktom @ETH

Pobiera dane wejściowe jako tablicę 2 liczb całkowitych i wysyła poziome domino ASCII.

a=>`240|351
686|797
042|153`.replace(/\d/g,d=>' o'[(d<8?(x=a[d&1])>(d|1):x)&1])

Próbny

Arnauld
źródło
Fajnie, bardzo podobny do tego, co miałem. Zapisać bajt z jednej n>d|0lub(+d?n>d:n)&1
ETHproductions
4

APL (Dyalog) , 25 bajtów

2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨

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.

Erik the Outgolfer
źródło
przepisz dla -2 bajtów:2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
ngn
@ dzięki, to sprytne: p
Erik the Outgolfer
2

JavaScript (ES6), 87 bajtów

a=>b=>[(s=n=>[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]].map(c=>c.map(b=>+b)))(a),s(b)]

f=a=>b=>[(s=n=>[[n>3,n>5,n>1],[n>7,n%2,n>7],[n>1,n>5,n>3]].map(c=>c.map(b=>+b)))(a),s(b)]
<div oninput="o.innerText=JSON.stringify(f(a.value)(b.value))"><input id=a type=number min=1 max=9 value=1><input id=b type=number min=1 max=9 value=1><pre id=o>

Herman L.
źródło
Ładne DOMino ...
Esolanging Fruit
2

Haskell - 88 znaków

map$zipWith(zipWith($))[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]].repeat.repeat

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.

Geoff Reedy
źródło
Możesz użyć mapzamiast repeati zipWith: map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)Wypróbuj online!
Laikoni
Funkcja non-pointfree oszczędza dwa kolejne bajty: Wypróbuj online!
Laikoni
2

Pip , 32 27 24 21 bajtów

-3 bajty dzięki @DLosc

FcgP[Yc>_M3517c%2RVy]

Wypróbuj online!

Wyjaśnienie:

F                      For each
 c                       character $c
  g                      in the list of inputs:
   P                     Print
    [               ]      an array consisting of
                             an array of bits representing whether
      c>                       $c is greater than
        _M                       each of
          3517                     3, 5, 1, and 7
     Y                       (call this bit array $y),
              c%2            $c mod 2,
                 RV          and the reverse
                   y           of $y.
Esolanging Fruit
źródło
1
Gratulujemy wygrania nagrody Pip! Teraz, gdy okres nagród się skończył, mogę powiedzieć: zapisz 3 bajty, mapując na skalar 3517zamiast na listę [3 5o7]. ;)
DLosc
1

> <> , 57 + 3 = 60 bajtów

>{:3)$:5)$:1)$:7)$:2%$\ao \
\?%cl999)3$)5:$)1:$)7:/nnn<rp

Wypróbuj online . Wyjście w postaci domina pionowego z 1s dla kropek, 0 dla białych znaków i 9 dla separatorów:

001
000
100
999
111
111
111

Technicznie można to rozszerzyć do 12 wprowadzonych wartości.

Stara wersja:

> <> , 76 + 3 = 79 bajtów

>{:3)$:5)$:1)$a$:7)$:2%$:7)\&?o~?!n\
\?(*a3la"---"a)3$)5:$)1:$a$/$&:)9::<r~p

Wypróbuj online . Wyjście w postaci domina pionowego z 1s dla kropek i 0 dla białych znaków:

001
000
100
---
111
111
111
Jo King
źródło
1

Węgiel drzewny , 46 44 43 39 bajtów

EE²℅§@APQTUVW^_NE⪪E⁹§ o÷ιX²↔⁻⁴λ³⪫λ M⁵↑⁵

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

EE²℅§@APQTUVW^_N

Przeczytaj dwie liczby całkowite i zamapuj je w tabeli odnośników. Następnie zamapuj wynik. (To skutecznie przechwytuje wynik w trybie tymczasowym).

  E⁹                Loop `l` (!) from 0 to 8
            ⁻⁴λ     Subtract from 4
           ↔        Absolute value
         X²         Power of 2
       ÷ι           Divide into the looked-up value `i`
    § o             Convert to space or o
 ⪪             ³    Split into (3) groups of 3
E                   Map over each group
                ⪫λ  Join the 3 characters with spaces

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.

M⁵↑⁵

Przejdź w górę i narysuj linię podziału między twarzami.

Poprzednia 43-bajtowa wersja pozioma:

↶P³M⁷←FE²℅§@APQTUVW^_NF⁹«F¬﹪κ³⸿⸿§ o÷ιX²↔⁻⁴κ

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

Pracuj pionowo.

P³

Wydrukuj linię podziału.

M⁷←

Ustaw na początku pierwszej twarzy.

FE²℅§@APQTUVW^_N

Przeczytaj dwie liczby całkowite i zamapuj je w tabeli odnośników.

F⁹«

Przygotuj wyjście do 9 osekund.

F¬﹪κ³⸿⸿

Ale zaczynaj nową kolumnę co trzy osekundy.

§ o÷ιX²↔⁻⁴κ

Konwertuj dolne 5 bitów kodu ASCII na binarne, a następnie dubluj dane wyjściowe przez pozostałe 4 os.

Neil
źródło
Format wyjściowy jest raczej liberalny, co powinno zaoszczędzić kilka bajtów.
Dennis
1
Co to za czary
ArtisticPhoenix
@Dennis Właściwie oryginalny format wyjściowy jest najbardziej pomocny, ponieważ automatycznie pozwala mi narysować linię podziału.
Neil,
Boże, są dwa Neilowie.
Zacharý
2
@ Zacharý Właściwie według strony użytkownika jest ich osiem lub 40, jeśli uwzględnisz osoby, których imiona zawierają Neil ...
Neil
1

Galaretka , 16 bajtów

>⁽¤xb8¤;ḂŒḄs3
Ç€

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:

Ç€
 € for €ach input,
Ç  execute the previous line.

>⁽¤xb8¤;ḂŒḄs3
 ⁽¤xb8¤       the array [3, 5, 1, 7]
>             1 if the input is greater than each element, 0 otherwise
       ;Ḃ     append input % 2
         ŒḄ   bounce array
           s3 split into chunks of 3
ellie
źródło
0

APL + WIN, 49 47 bajtów

4⌽'|',⌽⍉6 3⍴,⍉(9⍴2)⊤(+\∊0 241 52 24 114,¨16)[⎕]

Edytowane 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ć:

1 1 1 | 0 0 1    0 0 0 | 1 0 1
0 1 0 | 0 1 0    0 0 0 | 0 1 0
1 1 1 | 1 0 0    0 0 0 | 1 0 1

dla danych wejściowych 7 3i0 5

Wyjaśnienie:

(+\∊0 241 52 24 114,¨16) create a vector of integers whose binaries
                         represent the dots on the domino faces

[1+⎕] take input integers as indices to select from above vector

⍉6 3⍴,⍉(9⍴2)⊤ convert selected integers to a 9x2 binary matrix and reshape
              to match the orientation of the domino faces

4⌽'|',⌽ rotate, concatenate centre line markers and rotate again to centre 
Graham
źródło
Dlaczego nie wykorzystać, ⎕IO←0aby zaoszczędzić sobie 1+?
Adám
@Adam Dlaczego nie - leniwy;)
Graham
0

Python 2 , 121 bajtów

lambda x,y,d="001155777702020202570044557777":[("%03d"%int(bin(int(o))[2:]),"---")[o=="3"]for o in d[x::10]+"3"+d[y::10]]

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 , 156 153 147 141 bajtów

x,y=input()
d="001155777702020202570044557777"
a=["%03d"%int(bin(int(o))[2:])for o in d[x::10]+d[y::10]]
for x in a[:3]+["---"]+a[3:]:print x

Wypró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.

ElPedro
źródło
153 bajty
NieDzejkob
0

Pyt , 220 154 bajtów

Druga próba (154 bajty)

46281ᴇ8264áĐ9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ⇹9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ5⑴9△*Ƈǰ⇹Ƈǰ64ȘƇǰ6↔ŕ↔ŕ↔

Wyjaśnienie:

46281ᴇ8264áĐ                                    Pattern matching for every cell but the middle
9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș                              Non-pip characters
←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ⇹     Make top cell
9ř3%¬Đ¬2⁵*⇹1ᴇ*+03Ș                              Non-pip characters
←Đ3Ș≥Đ6²⁺3**⇹¬2⁵*+⇹9ř5=⇹2%*9²2-*+⇹9ř9<*Ž⇹ŕ      Make bottom cell
5⑴9△*Ƈǰ⇹Ƈǰ64ȘƇǰ6↔ŕ↔ŕ↔                          Make boundary and combine



Pierwsza próba (220 bajtów):

2`↔←Đ4≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ6≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ2≥Đ6²⁺3**⇹¬5«+1ᴇ⇹3ȘĐ8≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ2%Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ8≥Đ6²⁺3**⇹¬5«+1ᴇ⇹3ȘĐ2≥Đ6²⁺3**⇹¬5«+2⁵⇹3ȘĐ6≥Đ6²⁺3**⇹¬5«+2⁵⇹3Ș4≥Đ6²⁺3**⇹¬5«+1ᴇ9△ĐĐĐĐ1ᴇ↔⁻łŕ↔ŕŕŕŕŕŕáƇǰ

Wyjaśnienie:

2                           Push 2 (this is how many 'cells' to make)
`     ... ł                 While the top of the stack is not zero, loop
↔                           Flip the stack (useless at the beginning, undoes the flip at the end of the loop)
←Đ4≥Đ6²⁺3**⇹¬5«+            Set top-left pip
2⁵⇹3Ș                       Space
Đ6≥Đ6²⁺3**⇹¬5«+             Set top-middle pip
2⁵⇹3Ș                       Space
Đ2≥Đ6²⁺3**⇹¬5«+             Set top-right pip
1ᴇ⇹3Ș                       New line
Đ8≥Đ6²⁺3**⇹¬5«+             Set middle-left pip
2⁵⇹3Ș                       Space
Đ2%Đ6²⁺3**⇹¬5«+             Set center pip
2⁵⇹3Ș                       Space
Đ8≥Đ6²⁺3**⇹¬5«+             Set middle-right pip
1ᴇ⇹3Ș                       New line
Đ2≥Đ6²⁺3**⇹¬5«+             Set bottom-left pip
2⁵⇹3Ș                       Space
Đ6≥Đ6²⁺3**⇹¬5«+             Set bottom-middle pip
2⁵⇹3Ș                       Space
4≥Đ6²⁺3**⇹¬5«+              Set bottom-right pip
1ᴇ                          New line
9△ĐĐĐĐ                      Add 5 dashes
1ᴇ                          New line
↔⁻ł                         Decrement counter (if >0, loop; otherwise, exit loop)
ŕ↔ŕŕŕŕŕŕ                    Remove all unnecessary items on the stack
áƇǰ                         Push stack to an array, get characters at unicode codepoints given by values in the array, join characters with empty string


Wypróbuj online!

mudkip201
źródło
0

05AB1E , 34 bajty

•ΩõIº•R2ô¹2÷è¹È-bDg5s-ú.∞3ô»TR„ o‡

Wypróbuj online!


Było to trudne, ponieważ 05AB1E ma złe wypełnienie.


Podstawowe wyjaśnienie:

  • Istnieją 4 znaczące wzorce, które są 2, 4, 6 i 8.
  • 3,5,7 i 9 to pozostałe wzory plus 1.
  • 1 nie ma znaczenia ze względu na symetrię, jeśli wejście jest parzyste, odejmij 1, aby przełączyć środkowy bit.
  • Przełączenie LSB umożliwia odwrócenie środkowego bitu z powodu dublowania.
Urna Magicznej Ośmiornicy
źródło
0

SmileBASIC, 92 69 bajtów

INPUT N,M
DEF Q?N>3;N>5;N>1?N>7;1AND N;N>7?N>1;N>5;N>3
END
Q?777N=M
Q

Przykład:

? 7,2
111
010
111
777
001
000
100

Tak się dzieje, gdy twoje zasady nie są wystarczająco rygorystyczne.

12Me21
źródło
0

FALSE, 116 80 78 70 69 66 63 61 59 58 bytes

[$3[>_$.\$]$p:!5p;!1p;!"
"7p;!%1&.."
"..."
"]$s:!"---
"s;!

still working on this...

12Me21
źródło
0

Chip, 142 135 bytes

! CvDvB
>v-]-x.
|Z-]-]e
|Z]xe|
|ZR(-'
|Zx.AD
|Zxx]x.
|Zx^-]e
|Z<,(-.
|Zx]xe|
|Zx-]-]e
|Zx-]-x'
|Z<C^D^B
|>x~s
|Zx.
|Zx<
|Zxb
|Z+^~f
`zd

Try 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 (or z) corresponds to one character of output, they are positioned to fire in order top to bottom. The capitalized A, B, C, and D correspond to the low four bits of the input (that's all we look at, so "34" == "CD" == "st" ...). The lowercase b, d, e, f correspond to various bits of the output.

Can make infinite-length dominoes too; try giving 0123456789 as input.

Phlarx
źródło
0

PHP, 116 bytes

while($i<6)echo strtr(sprintf("%03b",[_011557777,_202020267,_044557777][$i/2][$argv[$i%2+1]]),10,"o "),"|
"[$i++%2];

requires PHP 5.5 or later. Run with -nr or try it online.

Titus
źródło
0

C (gcc), 150 146 bytes

p(b){printf(" %c",33-b);}P(a){p(a<4),p(a<6),p(a<2),p(23),p(a<8),p(~a&1),p(a<8),p(23),p(a<2),p(a<6),p(a<4),p(23);}f(a,b){P(a),puts(" -----"),P(b);}

Try it online!

Jonathan Frech
źródło
@ceilingcat Thank you.
Jonathan Frech