To jest nić rabusia. W gwint policjanta jest tutaj .
Macierz węża to macierz kwadratowa, która ma następujący wzór:
3 na 3:
1 2 3
6 5 4
7 8 9
i 4 na 4:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
Twoim zadaniem jest napisanie kodu, który pobiera dane wejściowe n
i tworzy taką matrycę, w tym samym języku, co post gliniarza, oraz z kodem pasującym do wyrażenia regularnego gliny. Format wyjściowy kodu musi być zgodny z formatem wyjściowym kodu policjanta.
Pozostaw komentarz pod postem gliniarza, aby wskazać, że go złamałeś.
Kryterium wygranej:
Zwycięzcą zostanie użytkownik, który złamał najwięcej zgłoszeń. W przypadku remisu będzie wielu zwycięzców.
źródło
¦
działania zabija mnie za każdym razem, próbowałem tego wczoraj, aleṚ
raczej zamiastU
i zdecydowałem, żeḤ
to nie działa.F
był świetny pomysł,J
zamiastF
.J
... Próbowałem,LR
ale nie mogłem uzyskać mniej niż 11 bajtów05AB1E, Emigna
To był mój pierwszy raz, kiedy użyłem 05AB1E. Mam to z niewielką pomocą. To było zabawne. :)
Wypróbuj online
Wyjaśnienie:
Właściwie sam znalazłem ten podobny program, ale format wyjściowy jest inny:
Wypróbuj online
Zobacz historię edycji moich poprzednich dwóch prób.
źródło
not bool(reversed(str(bin(N))).index('1'))
... Myślę, że to najbardziej absurdalny sposób, w jaki widziałem, żeby ktoś robiłN%2
operację.Python 2, Dennis
To zabawny problem z golfem.
Weryfikacja wyrażenia regularnego
źródło
Ohm, Nick Clifford
Mój pierwszy raz próbuję Ohma.
Naprawdę fajny język, którego nie mogę się doczekać :)
Wyjaśnienie
Moja pierwsza próba, która nie działała jako dodanie tablicy i int, nie jest możliwa:
Moja druga próba, która nie pasowała do wyrażenia regularnego:
źródło
05AB1E, Emigna (2. przedłożenie)
Pierwsza praca z 05AB1E.
Wypróbuj online! | Weryfikacja wyrażenia regularnego
Wyjaśnienie
źródło
)
myślą, że to jedyny sposób na uzyskanie prawidłowego wyniku na stosie.)
gdy można użyć tylko 2 znaków niealfanumerycznych. Ta trudna część polegała na tym, żeby program tak ustrukturyzować, by używał tylko 2 symboli wieloznacznych i ustawiał je sekwencyjnie. Prawdopodobnie byłoby trochę trudniej bez innych rozwiązań, ale powinno być trochę^\w*..$
jest to możliwe.UV
musi być później+ˆ
. Nie mogę też wymyślić innego sposobu na zrobienie tego z tylko 2 symbolami wieloznacznymi na końcu. Można to jednak zrobić za pomocą 3 symboli wieloznacznych.CJam , Lynn
Wszystkie kanały są przeznaczone do celów kosmetycznych i można je usunąć bez wpływu na program.
Wypróbuj online!
Wyjaśnienie
Po usunięciu Lynna
{|}
z listy dozwolonych postaci musiałem spróbować czegoś nowego. Okazuje się, że nadal możemy konstruować dowolne ciągi i oceniać je jako kod.Najpierw musimy zdobyć pewną wartość na stosie. Jedynymi dostępnymi wbudowanymi funkcjami, które wypychają coś bez uprzedniego wyskakiwania czegoś innego (i bez czytania danych wejściowych) są
es
,ea
iet
. Jestem pewien, że możesz zacząć od tych wszystkich sposobów, ale poszedłem z tym,es
co przesuwa aktualny znacznik czasu. Ponieważ nie chciałem przyjmować żadnych założeń dotyczących jego rzeczywistej wartości, testuję jej pierwotność za pomocąmp
(co daje0
i1
) i testuję pierwotność tej wartości ponownie, aby upewnić się, że mam0
na stosie.1
Będzie bardziej przydatny, więc obliczamyexp(0)
zeme
i przekształcić go w liczbie całkowitej zi
. Wszystkie liczby zaczynają się od:Teraz mamy całą masę jednoargumentowych operatorów matematyki do współpracy:
Możemy również połączyć kilka wbudowanych funkcji, aby uzyskać bardziej rozbudowane funkcje
x
:Korzystając z nich, możemy uzyskać dowolną liczbę w
0 <= x < 128
(i wiele innych) w mniej niż 10 krokach od1
. Jestem pewien, że wystarczyłby znacznie mniejszy podzbiór tych poleceń. Napisałem mały program Mathematica, aby określić wszystkie te fragmenty (przepraszam, nie jest to zbyt czytelne):Dzięki temu możemy po prostu przesunąć dowolną listę kodów znaków, a następnie przekształcić każdy z nich w znak
c
. Po wypchnięciu całego kodu, który chcemy wykonać, naciskamy95
(]
). Ewaluujemy ten jeden,~
aby owinąć wszystkie pozostałe w ciąg, a następnie ewaluujemy ten ciąg~
.Rzeczywisty kod uruchamiany na końcu programu to ponownie:
Zobacz moje poprzednie rozwiązanie, aby uzyskać wyjaśnienie.
źródło
Python 3, TuukkaX
Przepraszamy, użyty regex był zbyt łatwy do trywializacji. No
0
,#
albo? Nie ma problemu!
Mogłem źle zinterpretować przykładowe wyjście, ale wciąż jest dość łatwe do poprawiania, ponieważ mam 45 wolnych znaków
źródło
R, MickyT
Przypadki testowe:
I potwierdzenie wyrażenia regularnego: https://regex101.com/r/OB8ZIM/1
Również miałem:
co daje ten sam wynik i pasuje do tego samego wyrażenia regularnego .
źródło
lets_make_a_snake
... Byłbym zaskoczony, gdyby takie było zamierzone rozwiązanie: Pfor
` i `if
`, ale o wiele lepiej grał w golfa niż mój.Röda , fergusq
Jest to anonimowa funkcja, która pasuje do tej PCRE regex:
^{(\|[^\/#\s]*){8}$
.Wypróbuj online!
źródło
Bash, @Marcos M.
Prettified:
Pierwszą część komendy wygeneruje
1 2 3 4
,9 10 11 12
oraz druga część generuje8 7 6 5
,16 15 14 13
. Zewnętrznysort -n
odpowiednio je wymieszają, tworząc wzór węża.Użyłem triku w /superuser//a/101760, aby wydrukować nieparzyste i parzyste linie. Dziękuję Marcos, naprawdę fajna.
źródło
JavaScript, Tom
źródło
Python 3, TuukkaX
Nieznaczna analiza wyrażenia regularnego policjanta pokazuje ustalony szablon:
gdzie
_
jest dowolna postać oprócz[ '"#]
i^
którakolwiek z[int()2/]
.Na
"*n)
końcu wyraźnie widaćeval("..."*n)
lubexec("..."*n)
trwa, więc musimy tylko upewnić się, że"..."
wydrukuje rząd j-ty.for i in range(j,
Jest zbyt blisko końca łańcucha, sugerując listowych bezif
. Więc musimy skonstruować i-tej kolumny przy użyciu tychi%n
,2*n
rzeczy.źródło
dc , Mitchell Spector
To był mój pierwszy udział w wyzwaniu dla gliniarzy i rabusiów, i miałem dużo zabawy. Wyrażenie wymagające dopasowania było proste,
^[^# !]{59}$
co w zasadzie zmieniło moją pracę w golfa, bez użycia tych 3 znaków. Początkowo miałem problemy ze spadkiem poniżej 60 bajtów, ale ostatecznie go złamałem.Wypróbuj online!
Wyjaśnienie:
Mój kod używa jednej pętli z N 2 iteracjami , utrzymując licznik zerowy (1D), i oblicza, jaka liczba musi zostać wydrukowana na podstawie odpowiedniego wiersza macierzy i współrzędnych kolumny (r, c).
Przykład tego, co mam na myśli, jeśli N = 4:
Wygląda na skomplikowane, ale krok pośredni jest pomocny. Dodatkowo próbowałem użyć 2 pętli od samego początku, ale skończyłem na limicie znaków wyrażenia regularnego. Generowanie liczb przy każdej iteracji (w oparciu o zero):
r % 2 = 0
(normalny rząd),n = (r * N) + c = counter
r % 2 = 1
(odwrócony wiersz),n = ((r + 1) * N) - c - 1 = counter + N - (2 * c) - 1
Lub wszystkie naraz, jako jedna numeracja:
n = counter + ((N - (2 * c) - 1) * (r % 2)); n++
źródło
~
do obliczenia indeksów wierszy i kolumn za jednym razem. Ale jedna z moich poprzednich prób obliczała je osobno, tak jak ty. Wielkie umysły myślą podobnie? :)~
na skrócenie kodu.?sN0[AP]sP[ddlN~_2*lN+1-r2%*+1+n32P1+dlN%0=PdvlN>L]dsLx
tio.run/nexus/…PowerShell, ConnorLSW
Pęknięcie
Zacząłem od mniejszego rozwiązania tego problemu i wstawiłem nazwy zmiennych, aby dopasować wyrażenie regularne. Podejrzewam, że próba znalezienia zastosowania dla jelita grubego była najtrudniejsza do oplotu.
Wyjaśnienie
źródło
$script
zmiennej, a niektóre naprawdę niechlujny pętle do klocka go obecnie,[array]::Reverse()
była prawidłowa chociaż, gratulacje - Myślę, że warto, aby wyrównać długości$i
i$MySnakeIndex
chociaż.CJam, Lynn
Coś takiego:
Cała biała spacja służy do ... „czytelności” ... i można ją pominąć, aby była zgodna z wyrażeniem regularnym Lynn.
Wypróbuj online!
Wyjaśnienie
Wyrażenie regularne wymaga rozwiązania problemu przy użyciu tylko:
{}
, które można wykorzystać do tworzenia bloków.|
, używane głównie do bitowego OR.~
, „eval” i bitowe NIE (także „zrzut tablicy”, ale nie zamierzam jej używać).Ponieważ mamy
~
, jeśli możemy konstruować dowolne ciągi, możemy uruchomić dowolny kod. Jednak na początku nie jest oczywiste, jak to zrobić.Pierwszą częścią układanki jest to, że bloki to nieocenione fragmenty kodu, które mogą zamieniać się w ciągi znaków
s
. Więc{abc}s
daje nam"{abc}"
. Następnie możemy użyćeu
do konwersji tych ciągów na wielkie litery.Zaletą tego jest to, że wielkie litery są zmiennymi wstępnie zainicjalizowanymi, dzięki czemu możemy uzyskać wiele stałych wartości, tworząc taki ciąg i sprawdzając go dwukrotnie (raz, aby zmienić ciąg z powrotem w blok, a raz, aby wykonać ten blok). Nie możemy uzyskać wszystkich liter, ponieważ niektóre, na przykład,
x
nie są poprawnymi poleceniami (więc CJam odmówi parsowania bloku zawierającego je). Nie możemy używaćf
tak, jak jest, ponieważ po nim musi następować inne polecenie, ale możemy użyć,fb
a następnie LUB dwóch wartości razem. Podobnie możemy użyćee
zamiaste
. Dzięki temu możemy uzyskać numery0
,-1
,3
, i10
do19
. Jest-1
to wygodne, ponieważ jeśli przekształcimy go w ciąg ("-1"
), to w znak ('-
), a następnie ewaluować, możemy uzyskać odjęcie lub ustawić różnicę. Jak powiedziałem, nie możemy dostać ), ale możemy wziąć wartość bezwzględną z .X
(za1
-1
z
Możemy również użyć,
s
aby uzyskać ciąg zawierający spację i użyć,c
aby przekształcić go w znak spacji :Jest to wygodne, ponieważ stamtąd możemy uzyskać wiele przydatnych poleceń w dolnym zakresie ASCII poprzez ORingowanie przestrzeni za pomocą różnych liczb. Aby uzyskać niektóre znaki powyżej punktu kodu
48
, używamy tego znaku'0
jako podstawy:To już wystarcza do skonstruowania dowolnych ciągów, ponieważ możemy uzyskać
'+
(dodawanie i łączenie ciągów) z następującego fragmentu:I mamy literał
1
dzięki czemu możemy po prostu przesuwać znaki spacji, zwiększać je do potrzebnej wartości, a następnie łączyć je wszystkie razem, ale to trochę nudne i kod stałby się ogromny.Zamiast tego, jakie generowane
[
i]
i evalled je tak, że wszystkie znaki wciskam pomiędzy owinięte są w ciąg automatycznie. To te dwie linie:I w końcu będziemy potrzebować
f
iw~
ciągu, który generujemy. Chociaż są to już prawidłowe znaki, nie mamy literałów łańcuchowych ani literałów znakowych, więc musielibyśmy je również wygenerować, a budowanie większych punktów kodu z przestrzeni jest nieco denerwujące. Zamiast tego skorzystałem z odejmowania zestawu tutaj, ale odejmując dwa bloki (aby się go pozbyć{}
):To prawie wszystko. Ewaluujemy
[
. Wypychamy wszystkie znaki, uzyskane przez różne obliczenia z kilku wbudowanych stałych|
,-
(poprzez eval) i+
(przez eval). Ewaluujemy]
. Spłaszczamy całą rzecz w ciąg, ponieważ w pewnym momencie dodałem kilka ciągów lub liczb do listy. Analizujemy nasz dowolny ciąg znaków za pomocą~
.The
ri...p
Są częścią rzeczywistego programu końcowego, ale ja ich ekstrakcji, ponieważ nie trzeba kodowanie.Wreszcie jest to program, który faktycznie uruchamiamy:
źródło
tinylisp , @DLosc
Wypróbuj online!
Definiuje funkcję,
f
która zwraca odpowiedź. Wyświetla także nazwy funkcji, które zdefiniowałem na standardowe wyjście, ale zakładam, że to nie ma znaczenia, ponieważ [wolno nam wybrać nasz strumień wyjściowy] przynajmniej dla golfa kodowego. Jeśli to wielka sprawa, myślę, że mogę ją ulepszyć, aby nie drukować. Jak to zrobiłem? Zacząłem od czegoś dość standardowego:Następnie zauważyłem, że można przekształcić definicje funkcji w następujący sposób:
staje się
I wywołania funkcji takie jak to:
staje się
Użyłem tego rekurencyjną Vima makro, przechowywaną w rejestrze
q
, aby wykonać drugi (Mamjk
odwzorowane na<Esc>
)f s(v(h(q(jkea))))jk@q
.Te dwie transformacje były wystarczające do wyeliminowania wszystkich przestrzeni.
źródło
Swift, @James Webster
Weryfikacja: https://regex101.com/r/7ukrM0/1
źródło
(…)(4)
nie musisz rzucać liczby całkowitej na CShort.PHP, @ JörgHülsermann
221 bajtów jest za długich (a więc węża), a brak białych znaków można łatwo obejść.
Prettified:
źródło
Galaretka, długość 12, @JathanathanAllan
Wypróbuj online!
Jak to działa
źródło
Galaretka , 12 bajtów, pęka przy drugiej odpowiedzi Jonathana Alllana
Wypróbuj online!
Wyjaśnienie
To prawie taka sama jak moja inna odpowiedź . Właśnie dokonałem dwóch zmian:
Najpierw zmieniłem
U
(„odwróć każdy element”) naṚ€
(„odwróć” „każdy element”). To samo w sobie nie pomaga, ponieważṚ
jest również zakazane.Następnie zmieniłem
Ṛ
(„rewers”) na;@/
(/
„fold przez”;
„konkatenację”@
„w kolejności odwrotnej do oryginalnej listy”). Pozwala to uniknąć wszystkich zbanowanych postaci, dając prawidłowe rozwiązanie.Zakładam, że następnym krokiem byłoby wprowadzenie zakazu szybkich manipulacji tablicami , oprócz atomów.
źródło
€
...€
w kategoriach/
. To jest po prostu bardziej szczegółowe niż to rozwiązanie.;@\ṫ0
, regex staje się długi.Galaretka, długość 13, @JonathanAllan
Wypróbuj online!
Jak to działa
źródło
m
?Galaretka, długość 14, @JathanathanAllan
Wypróbuj online!
źródło
Scala, @Soapy
Od jakiegoś czasu nie dotknąłem Scali, fajnie było wrócić do niej. Niestety, w tym rozwiązaniu brakuje wielu fajnych funkcji Scali.
Wypróbuj tutaj
Potwierdzenie Regex
źródło
QBasic (QB64), @DLosc
Zauważ, że ponieważ
.
nie pasuje\n
(U + 000A, LF), nowa linia tutaj to\r
(U + 000D, CR).Zweryfikować:
Główna trudność polega na tym, jak wstawić słowo po
;
. Na szczęście QB64 traktuje CR jako nową linię, podczas gdy regex Pythona nie, więc moglibyśmy pominąćREM\r
tu . Z pięciu dozwolonych smaków regex,"\r" =~ /./
!/./.test('\r')
(\n
,\r
,\u2028
,\u2029
są wszystkie separatory liniowe )re.match('.', '\r')
( tylko\n
uważa się za podział wiersza) )regexp.Match(".", "\r")
/./ =~ "\r"
Więc ten crack jest w porządku, o ile nie wspominamy o JavaScript ... 🤐
źródło
REM
natychmiast po wydaniu instrukcji bez separatora instrukcji. Moje oryginalne rozwiązanie nie używało komentarzy. Mam kolejną odmianę, którą wkrótce opublikuję. : DPython 3, kennytm
Weryfikacja wyrażenia regularnego
źródło
> <>, torcado
źródło
C, Yimin Rong
Program nie może zawierać liczb, ale możemy uzyskać liczby poprzez:
c
, powszechnie znany jako „argc”, czyli zawsze 2.+
i-
są dostępne, więc możemy utworzyć 0 za pomocąn-n
i utworzyć 1 za pomocąo=c;--o
.źródło
Ruby, @Value Ink
[(-=Z-~]*
oznacza „Mogę pisać wszystko, co lubię :)”źródło
Tinylisp @DLosc
Bardzo proste rozwiązanie i całkowicie niezoptymalizowane :)
Jak zadzwonić
(disp (f 4))
.(p m n)
oblicza m + n za pomocą odejmowanias
(m + n == m - ((1 - 1) - n))(j f g)
generuje(f f+1 f+2 ... g-1)
(r f g)
generuje(g-1 g-2 g-3 ... f)
(k m o f g n)
wygeneruj jeden wiersz macierzy węża, a następnie przeprowadź go ponownie do następnego wiersza, dopóki nie zostanie utworzonych n wierszy. Argumentym
,o
są podstawionej
/r
do wytworzenia zwiększenie lub zmniejszenie wierszy. Argumentyf
,g
działają indeksy wiedzieć, które rząd jesteśmy na.(f n)
połączenia,(k j r 1 1 n)
aby rozpocząć generowanie.źródło
(f 4)
-disp
implikowane.)PHP, @Ionut Botizan
W tej chwili nie mam lepszego pomysłu na złamanie oryginalnego rozwiązania.
Obsługuje n <= 15
Po raz pierwszy korzystam z getopt. Może nie jest to najlepszy pomysł na użycie opcji jako danych wejściowych.
zacznij od wiersza poleceń w ten sposób
Original Regex
Poziom 1:
Bardzo ładna kombinacja liter. Zapraszam do głosowania w wątku gliniarzy.
Blokuje mi takie funkcje jak - strrev - array_reverse - get_defined_vars
https://regex101.com/r/5rGTnw/2
Poziom 2:
https://regex101.com/r/XtVl9G/1
Rozwiązanie
Poziom 2:
źródło