Kroki ortodontyczne


26

Nawigacja w matrycy 2D jest powszechnym problemem. Widzieliśmy to wiele razy i zobaczymy ponownie. Pomóżmy więc nam w przyszłości i opracujmy najkrótsze rozwiązania w celu wygenerowania wszystkich ośmiu możliwych kroków w matrycy 2D.

Wyzwanie

Twój kod musi generować następujące 8 par -1,0,1 w dowolnej kolejności:

(0,1)
(0,-1)
(1,0)
(-1,0)
(1,1)
(1,-1)
(-1,1)
(-1,-1)

Zasady

  1. Brak danych wejściowych.
  2. Kolejność wyjściowa nie jest istotna
  3. Dane wyjściowe są elastyczne. Pary liczb po prostu muszą być rozróżnialne
  4. To jest , więc wygrywa najkrótsza odpowiedź w bajtach

2
@MartinEnder Miałem 99% pewności, ale też nie znalazłem. Umieściłem to w piaskownicy na kilka dni, ale nikt nie skomentował duplikatu.
Dead Possum

4
Ze względu na elastyczność produkcji okazuje się, że jest interesujący smak złożoności Kołmogorowa. W przypadku niektórych języków jest to trudniejsze niż zrobienie czegoś lepszego niż zwykłe kodowanie danych wyjściowych. Czy ten tag należy dodać?
ngm

1
@ Adám Tak, używaj czegokolwiek, dopóki pary liczb są rozróżnialne
Dead Possum

1
@ Adám Ale co z (1 + 0i)?
Dead Possum

8
To dokładny duplikat 8 sąsiadujących ze sobą pól , jednego z pierwszych golfów z kodem, jaki kiedykolwiek zrobiłem.
isaacg

Odpowiedzi:


19

Oktawa , 24 bajty

dec2base([0:3,5:8],3)-49

Wypróbuj online!

Nie widziałem jeszcze takiego podejścia.

Tworzy listę liczb całkowitych [0, 1, 2, 3, 5, 6, 7, 8]i konwertuje ją na trójskładnikową, zwracając tablicę znaków:

00
01
02
10
12
20
21
22

Odejmowanie 49(wartość ASCII dla 1) od wszystkich znaków daje tablicę numeryczną:

-1  -1
-1   0
-1   1
 0  -1
 0   1
 1  -1
 1   0
 1   1

9

T-SQL, 80 78 bajtów

SELECT-1n INTO t;INSERT t VALUES(0),(1)SELECT*FROM t,t z WHERE t.n<>0OR z.n<>0

Tworzy (trwałą) tabelę t zawierającą (-1,0,1)i wykonuje samozłączenie z WHEREklauzulą ​​wykluczającą 0,0wiersz. Tabela t nie jest czyszczona przez mój kod, musisz sam ją upuścić.

Niestety prawie dwa razy dłużej niż nudne rozwiązanie ( 44 bajty ), ponieważ SQL pozwala na zwroty w ciągach:

PRINT'0,1
0,-1
1,0
-1,0
1,1
1,-1
-1,1
-1,-1'

Nie znam tak dobrze T-SQL: czy możesz po prostu użyć WHERE t.n OR z.n? (Możesz w niektórych, ale nie we wszystkich dialektach SQL).
msh210

@ msh210 Dobry pomysł, próbowałem, ale wydaje się, że nie działa na MS SQL Server. An expression of non-boolean type specified in a context where a condition is expected
Pojawia się

1
Możesz usunąć spacje wokół *
Razvan Socol



7

Galaretka , 8 7 6 bajtów

3p_2ẸƇ

Wypróbuj online!

Moja pierwsza w historii odpowiedź na galaretkę! Ogromne podziękowania dla Dennisa za ostatni kawałek układanki.

Zobaczmy, czy mogę to wyjaśnić ... lol.

3p_2ẸƇ   Main program, takes no input.
3p       Product with Range 3, yields [[1,1], [1,2], [1,3], [2,1], [2,2], ...]
  _2     Decrement twice, vectorizes, yields [[-1,-1], [-1,0], [-1,1], [0,-1], ...]
    ẸƇ   Comb, removes those that contain only falsey values, the [0,0]
         Implicit output

-1 bajt dzięki Erikowi; -1 bajt dzięki Mr Xcoder i Dennis


1
Zmień odpowiedź w oparciu o to podejście:3p3_2ẸƇ
Pan Xcoder

@ Mr.Xcoder Możesz upuścić drugi 3.
Dennis

@Dennis Och, rzeczywiście. W takim przypadku AdM może aktualizować 6-bajtowy :)
Mr. Xcoder

7

R , 26 24 bajtów

Kredyty dla @JDoe za zapisanie dwóch kolejnych bajtów przy bezpośrednim podejściu:

paste(-1:1,-3:5%/%3)[-5]

Wypróbuj online!

Oryginalny asnwer:

outer(-1:1,-1:1,paste)[-5]

Wypróbuj online!

Lub na 27 bajtów

sapply(-1:1,paste,-1:1)[-5]

Wypróbuj online!

Lub dla 34 bajtów z czynnikami:

(gl(3,3,,-1:1):gl(3,1,9,-1:1))[-5]

Wypróbuj online!

To ostatnie rozwiązanie może być najbardziej golfowe, jeśli wyjście może wynosić od 1 do 3 zamiast od -1 do 1.

Zobacz drugą odpowiedź R dla alternatywnych rozwiązań z expand.gridlub z cbind.


hmm, fajne użycie elastycznego formatu wyjściowego!
Giuseppe

2
Ten jest lepszy od mojego ze względu na to, jak ostatecznie jest bezużyteczny :)
ngm

@Giuseppe Początkowo próbowałem, cco nie miało sensu w matrycy, więc przełączyłem się pastena oryginalny format wyjściowy ...
JayCe

24 bajty zpaste
J.Doe

1
@ J.Doe you rock!
JayCe,

6

Japt , 13 12 11 bajtów

Zapisano bajt dzięki @Shaggy

9ó8_ìJõ é)Å

Wypróbuj online! Używa -Rflagi, aby umieścić każdy element we własnej linii.

Wyjaśnienie

9ó8_ìJõ é)Å
9ó8             Create the range [9, 9+8). [9, 10, ..., 16]
   _            Map each item in this range through this function:
     Jõ é)        Generate the range [-1...1] and rotate to get [1, -1, 0].
    ì             Convert the item to an array of base-3 digits,
                  mapping [0,1,2] to [1,-1,0]. [[-1, 1, 1], [-1, 1,-1], [-1, 1, 0],
                                                [-1,-1, 1], [-1,-1,-1], [-1,-1, 0],
                                                [-1, 0, 1], [-1, 0,-1]]
          Å       Remove the first item (gets rid of the leading -1).

6

Japt -Q , 15 13 bajtów

Jestem pewien, że jest krótsza droga, ale podobało mi się to podejście.

##ü80ì3 mÉ ò
##ü80        // Take 14425280
     ì3      // and turn it into an array of base-3 numbers.
        mÉ   // Subtract one from each digit
           ò // and then split them pairwise.

Ogolił dwa bajty dzięki Kudłatemu .

Wypróbuj online!


6

Haskell , 22 bajty

_:l=mapM(:[1,-1])[0,0]

Wypróbuj online!

Laikoni zapisał 1 bajt.


_:l=mapM(:[1,-1])[0,0]zapisuje bajt. ( Na podstawie odpowiedzi Isaacga na wcześniejsze wyzwanie).
Laikoni

@Laikoni Rozważyłem to i pomyślałem, że uczyni to krótkim fragmentem (tyle było odpowiedzi na stare wyzwanie). Ale łącząc ten meta post z regułą, że funkcje mogą być definiowane pośrednio, więc wydaje się to być w porządku. Dzieki za sugestie.
xnor


5

05AB1E , 8 7 bajtów

2Ý<ãʒĀZ

Wypróbuj online!

Wyjaśnienie

2Ý<     # Range of 2 decremented, yields [-1, 0, 1]
   ã    # Cartesian product of the list with itself
    ʒ   # Filter by ...
     ĀZ # Maximum of the truthified values, yields 0 only if both values are 0.

-1 bajt dzięki Emignie!


Dang, pobiłeś mnie do tego. Miałem taki sam start ( 2Ý<ã), ale zastanawiałem się, jak usunąć środkowy element listy par. Nie myślałem o sortowaniu według wartości bezwzględnej i usunięciu pierwszego .. +1 ode mnie.
Kevin Cruijssen

2
Użyj, ʒĀZaby uratować 1
Emigna

@Emigna Dzięki za zrozumienie różnicy między zwykłą a wersją 05AB1IE legalnego polecenia :-)
Kaldo

5

MATL , 12 bajtów

9:q4X-3YA49-

Wypróbuj online!

Ponieważ jest to miesiąc MATL, oto port MATL odpowiedzi Octave @ Stewie. Sekwencja [0 1 2 3 5 6 7 8] jest generowana jako ustawiona różnica między [0 ... 8] a 4.


5

Java 8, 83 42 bajty

v->"1,1 1,0 1,-1 0,1 0,-1 -1,1 -1,0 -1,-1"

-41 bajtów dzięki @AdmBorkBork poprzez stałe kodowanie ..

Wypróbuj online.


Wersja niekodowana jako odniesienie ( 83 72 70 68 bajtów ):

v->{for(int i=9;i-->1;)System.out.println(~i%3+1+","+(~(i/3)%3+1));}

-11 bajtów dzięki @ OlivierGrégoire .
-2 bajty tworzą port odpowiedzi JavaScript (ES6) @ETHproductions .

Wypróbuj online.


Non-sztywno odpowiedź w ciągu 72 bajtów: v->{for(int i=9;i-->0;)if(i!=4)System.out.println((i/3-1)+","+(i%3-1));}.
Olivier Grégoire

@ OlivierGrégoire Dzięki, dodano (i grał w golfa o 2 kolejne bajty).
Kevin Cruijssen

4

R , 27 bajtów

expand.grid(-1:1,-1:1)[-5,]

Wypróbuj online!

30 i 35 bajtów:

cbind(-1:1,rep(-1:1,e=3))[-5,]
expand.grid(rep(list(-1:1),2))[-5,]

Niektóre funky wyglądające, podoba mi się: D Dobra robota
Dead Possum

expand.grid(-1:1,-1:1)[-5,]ma 27 bajtów.
Giuseppe




4

Łuska , 7 6 bajtów

Istnieje wiele różnych sposobów (pozbywanie się skomplikowanej / kosztownej części [0,0]), 7 bajtów to najkrótszy czas, jaki mogłem wymyślić, dzięki Leo za wskazanie zastosowania konwersji dziesiętnej ( d) jako filtra:

fdπ2ṡ1

Wypróbuj online!

Wyjaśnienie

fdπ2ṡ1  -- constant function (expects no arguments)
    ṡ1  -- symmetric range [-n..n]: [-1,0,1]
  π2    -- cartesian power of 2: [[-1,-1],[-1,0],[0,-1],[-1,1],[0,0],[1,-1],[0,1],[1,0],[1,1]]
f       -- filter only elements that are truthy when
 d      -- | decimal conversion (interpret as polynomial and evaluate at x=10)
        -- : [[-1,-1],[-1,0],[0,-1],[-1,1],[1,-1],[0,1],[1,0],[1,1]]

Alternatywnie, 7 bajtów

tπ2ṙ1ṡ1

Wypróbuj online!

Wyjaśnienie

tπ2ṙ1ṡ1  -- constant function (expects no arguments)
     ṡ1  -- symmetric range [-n..n]: [-1,0,1]
   ṙ1    -- rotate by 1: [0,1,-1]
 π2      -- cartesian power of 2: [[0,0],[0,1],[1,0],[0,-1],[1,1],[-1,0],[1,-1],[-1,1],[-1,-1]]
t        -- tail: [[0,1],[1,0],[0,-1],[1,1],[-1,0],[1,-1],[-1,1],[-1,-1]]

1
Kolejna 7 bajtowa alternatywa tπ2↑3İZ.
Laikoni

2
Możesz zapisać jeden bajt, filtrując listy na podstawie ich konwersji dziesiętnej Wypróbuj online!
Lew

3

PowerShell , 41 bajtów

(1..-1|%{$i=$_;1..-1|%{"$i,$_"}})-ne'0,0'

Wypróbuj online!

Pętla podwójna w całym zakresie 1..-1, z końcówkami -not ena końcu, aby wyciągnąć zewnętrzne 0,0wejście. Każdy z nich jest osobno w przygotowaniu i domyślnie Write-outputpo zakończeniu programu daje nam nowe linie za darmo.


Niestety, wyjściowy ciąg znaków barebones jest o dwa bajty krótszy:

'1,1
1,0
1,-1
0,1
0,-1
-1,1
-1,0
-1,-1'

Ale to jest nudne.




3

CJam , 13 bajtów

3,:(2m*{2b},`

Wypróbuj online!

Wyjaśnienie

3,    e# Range [0,3):       [0 1 2]
:(    e# Decrement each:    [-1 0 1]
2m*   e# Cartesian square:  [[-1 -1] [-1 0] [-1 1] [0 -1] [0 0] [0 1] [1 -1] [1 0] [1 1]]
{     e# Filter by
 2b   e#   conversion to binary:
},    e#                    [[-1 -1] [-1 0] [-1 1] [0 -1] [0 1] [1 -1] [1 0] [1 1]]
`     e# Stringify:         "[[-1 -1] [-1 0] [-1 1] [0 -1] [0 1] [1 -1] [1 0] [1 1]]"

3

Befunge-93 , 24 bajty

11#v91090~9~19~<
9.._@#,

Wypróbuj online!

Wydaje mi się, że w tym wyzwaniu brakuje odpowiedzi z języków 2D, nawet jeśli większość nie porusza się po przekątnej. Powoduje to wyprowadzenie liczb oddzielonych spacjami, każda para oddzielona tabulatorami.



3

Brachylog , 8 bajtów

Ċ{ṡᵐ≜}ᶠb

Wypróbuj online!

Wyjaśnienie

Ċ           Couple: take a list of two elements [A,B]
 {   }ᶠ     Find all…
    ≜         …possible values of…
  ṡᵐ          …signs of A and B
       b    Behead: remove the first one which is [0,0]

3

MATL , 12 bajtów

3:qq2Z^[]5Y(

Wypróbuj w MATL Online!

Moja pierwsza poważna odpowiedź MATL! Wielkie dzięki Luis Mendo , Sanchises i DJMcMayhem za pomoc.

Jak to działa

3: qq2Z ^ [] 5Y (- Pełny program. Wyjścia do STDOUT.
3: - Zasięg 3. Wciśnij [1 2 3] na stos.
  qq - Zmniejszenie o 2. Wydajności [-1 0 1].
    2Z ^ - potęga kartezjańska 2.
         5Y (- Zamień wiersz o indeksie 5 na ...
       [] - Pusty wektor.


3

Bash , 30 bajtów

echo "
"{-1..1},{-1..1}|grep 1

Wypróbuj online!

Drukuje końcowe spacje w każdym wierszu, ale w ostatnim. (Dzięki @Neil - pierwotnie wydrukowano spację wiodącą, ale spacja końcowa jest lepsza zgodnie z ich komentarzem)


Wydaje mi się, że możesz wydrukować spację końcową na wszystkich wierszach oprócz ostatniej jako alternatywy.
Neil,

2

Partia, 77 bajtów

@for %%x in (-1 0 1)do @for %%y in (-1 0 1)do @if not %%x%%y==00 echo %%x %%y

63 bajty, jeśli dozwolony jest niestandardowy separator:

@for %%x in (-1/-1 -1/0 -1/1 0/-1 0/1 1/-1 1/0 1/1)do @echo %%x

2

Pyth, 11 9 bajtów

t^+U2_1 2

Wypróbuj tutaj

Wyjaśnienie

t^+U2_1 2
  +U2_1     [0, 1, -1]
 ^      2   Product with itself.
t           Exclude the first.

Równie dobrze moglibyśmy użyć t*J+U2_1J, ale to nie jest krótsze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.