To jest wątek gliny. W gwint rabuś jest tutaj .
Napisz kod, który pobiera dane wejściowe n
i tworzy „macierz węża” n-po-n.
Matryca węża to matryca zgodna z tym wzorem:
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
Dokładny format wyjściowy jest opcjonalny. Możesz na przykład uzyskać wynik [[1 2 3],[6 5 4],[7 8 9]]
lub coś podobnego.
Musisz podać nazwę języka i wyrażenie, które w pełni odpowiada Twojemu kodowi. Możesz wybrać stopień szczegółowości wyrażenia regularnego. W skrajności możesz napisać wyrażenie pasujące do każdego możliwego ciągu, w którym to przypadku bardzo łatwo będzie złamać kod. Musisz także podać dane wyjściowe n=4
, aby złodzieje znali dokładnie ten format, który wybrałeś.
Możesz użyć jednego ze smaków wyrażeń regularnych , które są dostępne na regex101.com , lub smaku Ruby.
- PCRE (PHP)
- JavaScript
- Pyton
- Golang
- Rubin
Musisz określić, którego używasz.
Uwagi:
- Musisz wesprzeć każdą dość dużą
n
. Możesz założyć, że nie przepełni typu danych lub pamięci. Jeśli domyślnym typem danych są 8-bitowe liczby całkowite ze znakiem, możesz założyćn<=11
, jeśli jest to 8-bitowe liczby całkowite bez znaku, możesz założyćn<=15
. - Rabusie muszą pasować do formatu wyjściowego przesłania, z wyjątkiem spacji wiodących / końcowych i znaków nowej linii, ponieważ formatowanie SE mogło zostać usunięte.
Kryterium wygranej:
Zwycięzcą zostanie zgłoszenie bez udziału dowodu z najkrótszym wyrażeniem regularnym, mierzonym liczbą znaków.
Jeśli Twój post pozostawał nieprzerobiony przez 7 dni, możesz opublikować zamierzone rozwiązanie i oznaczyć zgłoszenie jako bezpieczne.
źródło
.
.Odpowiedzi:
05AB1E , Cracked by mbomb007
Mam nadzieję, że fajnie będzie je złamać i nie będzie to zbyt oczywiste.
Regex (PCRE):
Wyjście n = 4:
Oryginalne rozwiązanie
źródło
\w
nie. Możesz spróbować na regex101.{0,2}
na.?.?
-
ostatnią pozycję w nawiasach klamrowych ([+*\/%-]
), abyś nie musiał przed nią uciekać.Python 2 , długość 62, pęknięty
Regex (PCRE)
Próbka wyjściowa
źródło
Galaretka , długość 6, popękana
Regex (PCRE)
Próbka wyjściowa
źródło
G
prawidłowe sformatowanie wyniku. Jestem blisko rozwiązania reszty, ale po prostu nie mogę wymyślić, jak odwrócić każdy inny element w szeregu za pomocą Jelly ...R, długość 14 Pęknięty przez plannapa
Mam nadzieję, że mam poprawne wyrażenie regularne. Co ja próbuje powiedzieć to 77 znaków z wyjątkiem
<space>
,#
,;
i[
. Testowałem to tutajRegex
Wyjściowa próbka n = 4
źródło
05AB1E , Cracked by Value Ink
Podnieśmy poprzeczkę :)
Mam nadzieję, że fajna łamigłówka.
Regex (PCRE)
Wyjście n = 4
źródło
> <> , długość 49, Pęknięty przez Aarona
Regex (JavaScript)
Wyjściowa próbka (n = 4)
Formatowanie jest trochę dziwne, ale sprawdzanie długości liczb znacznie by ją wydłużyło. Być może poszedł trochę za burtę w wyrażeniu regularnym, nie jestem pewien!
Edycja: Również zapomniałem wspomnieć, używam początkowego stosu (flaga -v) do wprowadzania danych, a nie zwykłego wprowadzania ryb. Przepraszam!
Kod oryginalny:
Aaron's jest o wiele prostszy! Złożoność mojego oryginalnego kodu opiera się na pomyśle używania
n[r]
co n-tej liczby do odwracania tego segmentu (wiersza), a następnie drukowania wszystkich liczb jednocześnie na końcuźródło
..
jest krótszy niż.{2}
;)Och , pęknięty
Również moje pierwsze wyzwanie dla gliniarzy i złodziei, więc powiedz mi, czy występują problemy z tym wzorem (zwłaszcza, że jest to dość nieznany język).
Regex (PCRE)
Wyjście (n = 4)
źródło
.*
w wyrażeniu regularnym, może to być cokolwiek. Więc jeśli język ma komentarze, mogą napisać dowolny program, po którym następuje komentarz.PHP, 221 bajtów ( pęknięty )
Mam nadzieję, że to wystarczająco trudne.
Regex (PCRE): 16 bajtów
Bez spacji, bez komentarzy, bez użycia base64_decode. Baw się dobrze.
Wydajność
Kod oryginalny
źródło
base64_decode
ponieważ wyrażenie regularne go nie zabrania.6
, które mogą blokowaćbase64_decode
.C # net46 (Cracked)
( http://ideone.com/ działa)
Regex PCRE o smaku długości 58 testowany przy regex101
Tylko metoda jest regexowana. Metoda zwraca tablicę 2d int [,] (int [4,4]) dla wejścia n = 4. Jeśli wydrukowane wygląda tak:
To mój pierwszy wpis w coś takiego. Daj mi znać, jeśli zrobiłem coś złego. Na pewno nie próbuję wygrać wyrażeniem regularnym, po prostu jestem ciekawy, jak dobrze poradziłem sobie w zapobieganiu pękaniu :)
Oryginalny kod:
źródło
QBasic, długość wyrażenia regularnego 10 ( pęknięty )
Regex
Powinien działać w dowolnym smaku regex, ale nazwiemy go smakiem Python.
UWAGA: Moje rozwiązanie używa niesformatowanego QBasic; po sformatowaniu kod nie pasuje do wyrażenia regularnego z powodu dodanych spacji. (Ale można powiedzieć, że jest to jedyna zmiana, która czyni różnicę.
([A-Z]+ ?. ?)+
Nadal działa na wersji sformatowany).Do celów testowych użyłem QB64 z wyłączonym formatowaniem kodu (w Opcje> Układ kodu). Jeśli nie chcesz czegoś pobierać, możesz także uruchomić QBasic online na archive.org (ale tam nie możesz wyłączyć formatowania).
Próbka wyjściowa
źródło
\w+\W
można je podzielić na\w*
i\w\W
. (\w*
jest albonull
(trywialny), albo\w+
(łatwo wpasowuje się w symbol)).
nie może być znakiem słowa. Może to być mała litera lub cyfra. W rzeczywistości może to być nawet wielka litera, w przypadku gdy ostatnim znakiem programu jest jeden.Python 3, 55 bajtów (pęknięty)
Smak PCRE / Python / Golang.
(Przypominamy, że wymagane jest pełne dopasowanie . Załóż
^
i$
podczas testowania.)Przykładowe dane wyjściowe:
Oryginalne rozwiązanie:
Powinny zostać przycięte 4 bajty: s
źródło
)
drugą częścią wyrażenia regularnego(
znajduje się w klasie postaci rozpoczynającej sięprint
i kończącej przed{48}
. Trochę mi to zajęło, żeby to zobaczyć. ;) (W tym względzie wcześniejsze pary nawiasów również znajdują się w klasie znaków.)dc , Regex length 12 Cracked by seshoumara!
To wyrażenie regularne jest na tyle proste, że nie sądzę, że smak wyrażeń regularnych ma znaczenie - powinien działać ogólnie. (Zwróć uwagę na spację po # w wyrażeniu regularnym.)
Przetestowałem wszystkie cztery smaki na stronie regex101.com (PCRE / PHP, JavaScript, Python i Golang), a także wersję Ruby na rubular.com. Program dc pasuje do wyrażenia regularnego we wszystkich pięciu wersjach wyrażenia regularnego.
Program dc pobiera dane wejściowe na standardowe wejście, a dane wyjściowe na standardowe wyjścia.
Przykładowe dane wyjściowe dla wejścia 4 (na końcu każdego wiersza znajduje się spacja):
Oryginalny kod (dodany po pęknięciu)
To zostało złamane przez @seshoumara . Oto mój zamierzony kod:
Wyjaśnienie:
Suma u góry stosu jest teraz kolejną liczbą, którą chcemy wydrukować:
Łatwo zauważyć, że jest to poprawne, jeśli numer wiersza jest parzysty, ponieważ wtedy suma to tylko ja.
W przypadku wierszy nieparzystych zwróć uwagę, że i = d * (i / d) + (i% d) = d * (numer wiersza) + numer kolumny. Wynika z tego, że suma i + d-2 * (numer kolumny) -1 to d * (numer wiersza) + numer kolumny + d - 2 * (numer kolumny) - 1 = d * (numer wiersza + 1) - numer kolumny - 1, czyli liczbę, którą chcemy wstawić we wskazanym wierszu i kolumnie, aby mieć pewność, że liczymy wstecz w wierszach nieparzystych.
Wracając do wyjaśnienia teraz:
źródło
#
i `` zostały pominięte, aby krótsze rozwiązanie nie mogło wykorzystywać komentarzy do osiągnięcia 59 bajtów? Jeśli tak, nie ma takiej potrzeby, ponieważ w DC istnieje wiele sposobów dodawania poleceń, które niczego nie zmieniają, np. powtarzanieq
poleceń na końcu skryptu.32P
jest krótsze niż i[ ]n
tak.Bash, długość wyrażenia regularnego 38, pęknięty ( @kennytm )
Wejście:
Wynik:
źródło
PHP
Mam nadzieję, że to będzie zabawne! :RE
Wyjście (n = 4)
Poziom 1: PCRE (długość = 17) ( pęknięty przez Jörga Hülsermanna )
{
więc ... żadnych anonimowych funkcji!v
więc ... nieeval()
!;
więc ... to musi być jedno stwierdzenie!<
więc ... nie maHeredoc
wielu bloków PHP!@ JörgHülsermann miał ciekawe podejście, ale nie o to mi chodziło :). Dlatego wprowadzam nowy poziom trudności (obiecuję, że mam kod, który to pasuje i nie tylko się z tobą bawię):
Poziom 2: PCRE (długość = 23) ( pęknięty przez Jörga Hülsermanna )
_~|&A-Z
! :)Baw się dobrze!
ORYGINALNE ROZWIĄZANIE
Zatem zakazanie
$
oznaczania oznaczało, że zmienne nie były dostępne w zwykły sposób, ale to nie znaczy, że nie można ich w ogóle użyć! Nadal możesz używaćextract()/compact()
do importowania / eksportowania zmiennych do bieżącego zakresu. :)Jest jednak gotcha:
compact('x')['x']++
nie działałby, ponieważ zmienne w PHP są przekazywane przez wartość ... z jednym wyjątkiem! ObiektyReszta jest łatwa.
0
i1
są łatwo generowane przez konwersjęfalse
itrue
abyint
przez poprzedzenie ich ze+
znakiemand
aor
ponieważ&
i|
są zabronione@
v
można wygenerować za pomocąchr(ord('u') + 1)
, co przekłada się na@chr(ord(u) + true)
użycie powyższych obejśćchr(ord('a') - 2)
co przekłada się nachr(ord(a) - true - true)
callable
typ PHP , który może być ciągiem zawierającym nazwę funkcji. Możesz więc połączyć niezdefiniowane stałe i ciągi pojedynczych znaków wygenerowane przez,ord()
aby zbudować nazwę funkcji i wywołać ją w następujący sposób:array_reverse()
staje się(a.rray.chr(ord(a)-true-true).re.chr(ord(u)+true).erse)()
(array
jest konstrukcją języka, dlatego dzieli się na niezdefiniowane stałea
irray
)if ($n = $argv[1] and $i = 0) while ($n > $i++ and do_some and other_stuff or exit)
Logika w czytelnym dla człowieka kodzie byłaby następująca:
I nieprzyjazna wersja, która pasuje do wyrażenia regularnego:
<?php if (@extract([x=>(object)[s=>[],i=>+false]])and@define(n,compact(arg.chr(ord(u)+true))[arg.chr(ord(u)+true)][+true]?:+true)and@define(un,chr(ord(a)-true-true))and@define(s,(a.rray.un.chunk)(range(+true,pow(n,true+true)),n)))while((@compact(x)[x]->s[]=s[@compact(x)[x]->i++])and(@compact(x)[x]->s[]=(a.rray.un.re.chr(ord(u)+true).erse)(s[@compact(x)[x]->i++]))and(n>@compact(x)[x]->i)or(@die((json.un.encode)((a.rray.un.filter)(@compact(x)[x]->s)))))?>
źródło
V
. Baw się dobrze! :)(array_re.chr(ord(u)+true).erse)()
! :) (... a przynajmniej mogłeś, kiedy_
pozwolono)Ruby [pęknięty]
Pierwsze wyzwanie gliniarzy i złodziei. Mam nadzieję, że nie uczyniłem tego zbyt łatwym.
EDYCJA: zastąpiona
\g<1>
przez,(?1)
ponieważ są one ewidentnie równoważne w PCRE.Regex (PCRE)
Wyjście (n = 4)
(Zwraca tablicę tablic. To lambda, BTW, ale może to rozdaje za dużo?)
źródło
JavaScript (pęknięty)
Po raz pierwszy wykonuję wyzwanie dla gliniarzy i rabusiów, mając nadzieję, że zrobi to dobrze.
Regex (JavaScript)
Wydajność
Tablica równa:
źródło
$
na końcu wyrażenia regularnego, jeśli sam kod kończy się na końcu wyrażenia regularnego. W przeciwnym razie mógłbym na przykład zrobić,x=>x.toString().toString().toString().toString()
a potem cokolwiek chcę..*
początku byłoby to naprawdę łatwe. Może to być dowolny program, po którym następuje komentarz. Zasadniczo nie uwzględniaj.*
w wyrażeniu regularnym.Swift, regex 25 (Cracked)
Racja, zobaczmy, czy mam to na uwadze. To jest mój pierwszy post z gliniarzy i rabusiów, więc daj mi znać, czy się popsułem!
Regex
Użyłem smaku javascript na regex101.com
Przykładowe dane wyjściowe
Kod oryginalny
źródło
n
danych wejściowych, ale wymaga zakodowanej zmiennej . Jeśli to prawda, obawiam się, że nie jest to zgodne z meta konsensusem.C - regex długości 42 znaków - pęknięty
Wyrażenia regularne JavaScript używane w regex101 .
Zgadywanie będzie trywialne ...
Dane wyjściowe są rozdzielane tabulatorami
\n
po każdym wierszu.Moje rozwiązanie, tutaj liczby całkowite 0 - 2 uzyskano za pośrednictwem
t-t
,t/t
orazt
:źródło
r
w wyrażeniu regularnym.Galaretka , długość 14 spękana
pęknięty przez Dennisa
Wyrażenie regularne Pythona.
Dodano
m
ponownie po tym, jak pozwoliłem mu się ześlizgnąć./
(zmniejsz szybko);od
P
(produktu) do`
(monada z diada szybko);m
(indeksowanie modulo);v
(eval diada);od
Ḋ
(dequeue) doṫ
(tail); i€
(dla każdego szybkiego)Dla danych wyjściowych z
4
kopalni:... ponieważ sformatowałem listę list jako siatkę za pomocą
G
.źródło
PowerShell, 23 bajty
Cracked By Matt
Oryginalne rozwiązanie:
Pobiera dane wejściowe jako argument i dane wyjściowe na standardowe wyjście
Mam nadzieję, że ten wyrażenie regularne jest w porządku, nie spodziewam się, że będzie to zbyt trudne do złamania, ponieważ nie zaciemniłem go zbyt wiele, a wyrażenie regularne daje kilka dobrych punktów początkowych do uzupełnienia luk, jest jedna rzecz w pierwszym segmencie co jest bardzo rzadkie w golfie kodowym, co może kogoś złapać, myślę, że wymagany jest nie chciwy mecz, aby uczynić to nieco trudniejszym.
Mimo to pierwsi gliniarze rzucają wyzwanie.
źródło
[Array]::Reverse()
zamiast$array[9..0]
i$script:r
zmiennych, które są w większości niepotrzebne.Röda 0.12 , długość 19 (Pęknięty przez @KritixiLithos)
PCRE:
Przykładowe dane wyjściowe (n = 4):
Oryginalny kod:
Wypróbuj online!
źródło
PHP 7 (bezpieczny)
Kod oryginalny
Drugie podejście
Regex (PCRE): 29 bajtów
Bez spacji, bez komentarzy, bez użycia base64_decode.
Wiele funkcji jest niedozwolonych! podkreślać
Wyjście n = 11
Wyjście n = 4
Wyjście n = 3
źródło
MATL , długość 12 (bezpieczny)
Regex
Używa smaku Python:
Przykładowe dane wyjściowe
Dla
n=4
:Rozwiązanie
Aby zobaczyć, jak to działa, rozważ dane wejściowe
n=4
.źródło
Galaretka , długość 17 (bezpieczna)
Wyrażenie regularne Pythona.
Zacieśniając węzeł, zakazuje to kilku bardziej przydatnych rzeczy, dla twojej pomocy są tutaj zakazane bajty:
prawie jedna trzecia z nich!
Dla danych wyjściowych z
4
kopalni:... ponieważ sformatowałem listę list jako siatkę za pomocą
G
.Rozwiązanie:
Wypróbuj online! / regex101
Główną sztuczką jest tutaj indeksowanie do uporządkowanej leksykograficznie listy permutacji liczb naturalnych do n 2 (używając,
œ?
aby uniknąć budowania listy długości n 2 ! ) I podzielenie wyniku na kawałki o długości n . Wyżej wymieniony indeks znajduje się poprzez utworzenie jego reprezentacji w systemie liczb silni, który jest formalny, ponieważ „nieskomplikowany” wąż jest tworzony przez permutację elementów w określony sposób (można to łatwo przekonwertować na liczbę za pomocąÆ¡
).Rozwiązanie, które przedstawiam, używa
Ŀ
do odniesienia poprzednich linków jako monad (zastępującychÑ
iÇ
), ale$
zamiast tego można zastosować wiele z rzędu, aby „wstawić” te funkcje pomocnicze. Korzysta równieżr
od tego czasuḶ
iR
jest zbanowany.źródło
Pip , długość wyrażenia regularnego 3 (bezpieczny)
Rozwiązaniem jest pełny program, który przyjmuje n jako argument wiersza poleceń. Nie używa żadnych flag wiersza poleceń.
Regex (dowolny smak)
Próbka wyjściowa
Moje rozwiązanie
Wypróbuj online!
Strategia
Oto kod, który chcielibyśmy napisać:
To jest:
a
wy
i
od 0 doa-1
i
jest nieparzysty, odwróć y, dodaji*a
do każdego elementu, połącz spację z każdym elementem i wydrukujTrudności
Wiele poleceń i zmiennych w Pip używa liter, ale niektóre ważne nie:
,
i\,
)+
,-
,*
,%
,++
):
){}
)Jak obejść te ograniczenia:
EN
umerat można zastosować zamiast,
; potrzebujemy tylko ciągu znaków z żądaną liczbą znaków i musimy wyodrębnić pierwszy element każdej podlisty w strukturze podobnej do[[0 "H"] [1 "i"]]
.F
pętlami.y
zmiennej za pomocąY
operatora ank.X
to mnożenie łańcucha, aPU
sh (lubPB
„push-back”) połączy łańcuch z innym ciągiem w miejscu. Aby wziąć długość łańcucha, możemy goEN
zapisać i wyodrębnić odpowiednią liczbę z wynikowej listy._
.Specyfika
Elementy składowe naszego programu:
Zasięg
To jest
map-unpack(_, enumerate(repeat(space, a)))
w pseudokodzie. Rozpakowywanie map przypomina Pythonaitertools.starmap
: biorąc pod uwagę listę list, wywołuje funkcję na elementach każdej podlisty._
zwraca swój pierwszy argument, więc_MU
pobiera tylko pierwszy element każdej podlisty. Na przykład, jeśli a = 3:... który jest taki sam jak
,a
.Zakres obejmujący
Nie jestem pewien, czy można to zrobić
inclusive-range(1, a)
w pojedynczym wyrażeniu, ale na szczęście potrzebujemy go tylko raz, abyśmy mogli zbudować go wy
zmiennej w trzech krokach.W pseudokodzie
yank(enumerate(repeat(space, a).push-back(space)))
:Następnie
POy
wyskakuje pierwszy elementy
i odrzuca go, pozostawiając[[1 " "] [2 " "] [3 " "]]
.Wreszcie,
Oznacza to
yank(map-unpack(_, y))
: wyodrębnij pierwszy element każdej podlisty i przeciągnij wynikową listę z powrotem doy
.y
jest teraz[1 2 3]
.Długość
W Pseudokod,
pop(dequeue(enumerate(a.push-back(space))))
. Trudność polega na tym, że wyliczenie daje nam tylko liczbylen(a)-1
, ale chcemylen(a)
. Najpierw wciskamy spacjęa
, wydłużając ją o jeden znak, a następnie bierzemylen-1
nowy ciąg.Matematyka
Teraz, gdy mamy sposób na określenie długości ciągów, możemy używać ciągów do mnożenia i dodawania liczb:
Pierwszy robi,
sXaXb
aby utworzyć ciąga*b
spacji, a następnie przyjmuje jego długość; drugi robisXaPBsXb
wypychanie ciągub
spacji do ciągua
spacji, a następnie przyjmuje jego długość.Ładne jest to, że wszyscy operatorzy używamy tutaj (
PU
,PO
,PB
,DQ
,EN
,X
) może być używany z_
do wyrażenia forma lambda. Możemy więc odwzorować przekształcenia matematyczne na obejmujący zakres, który zbudowaliśmy wcześniej.Musimy również sprawdzić
i%2
wewnątrz pętli, ale to łatwo zrobić z bitowego I:iBA1
.Umieścić je razem
Pełny kod z dodanymi białymi znakami:
źródło
-S
?a*b
jest_V_VRVENCGaRLbPU1
,,a
jest_MUENZGa
,aJ" "
jestaJ_VRVk
ia@i
jest czymś podobnym_V_VRVaZCGi
, chociaż nie mogę jeszcze do końca ustalić pierwszeństwa bez nawiasów. Ponadto niejasny pomysł, że mogę uzyskać permutacje zakresu (utworzone jak powyżej, używając odpowiednika,(a*a)
) i użyć tego, aby wybrać poprawną permutację dla każdego wiersza.CJam, PCRE, długość 8, pęknięty
Przykładowe dane wyjściowe dla 4:
źródło
CJam, PCRE, długość 9, pęknięty
Przykładowe dane wyjściowe dla 4:
Teraz
{|}
są również zakazane.źródło
me
imq
do przybliżenia liczby, więc była bardzo długa (~ 20 000 bajtów).Mathematica, długość wyrażenia regularnego 11, niekonkurujący , pęknięty
Smak PCRE:
Poprawnym rozwiązaniem będzie funkcja, która przyjmuje liczbę całkowitą i zwraca dane wyjściowe jako zagnieżdżoną listę, taką jak:
źródło
Tinylisp , regex length 3 ( cracked )
Możesz przetestować kod Tinylisp w Wypróbuj online!
Regex (dowolny smak)
Czas iść na hardkor.
Wydajność
Rozwiązanie definiuje funkcję, która przyjmuje pojedynczy argument liczby całkowitej i zwraca taką listę (dla n = 4):
Mój oryginalny kod wykorzystuje ten sam podstawowy pomysł, który wymyślił Brian McCutchon, budując listy i sprawdzając je. Oto w jednej linii:
Raz użyłem pełnej metody konstruowania i ewaluacji, aby zdefiniować makro,
d'
które sprawia, że definicje są podobned
, ale bierze swoje argumenty w listę: więc zamiast tego(d x 42)
możesz to zrobić(d'(x 42))
. Potem wystarczyło przepisać dowolne listy w definicjach, które mogą wymagać białych znaków:(q(a b))
->(c a(q(b)))
->(c(h(q(a)))(q(b)))
.źródło
Python3, długość 162 (Cracked!)
Regex:
^([^"' #]){24}"(?1){11}i%n(?1){4}2\*n-(?1){4}i%n(?1){10}i\/n(\)\/\/1)(?1){5}(?2)(?1){3}2\*\(i%n\)(?1){4}[int()2\/]{16}for i in range\(j,(?1){4}\]\)(?1){6}\"\*n\)$
Okej, wiem, to dość długie. Na szczęście nie zostanie złamany w ciągu tygodnia ...: „D.
Myślę, że nigdzie się nie pomyliłem, co pozwoliłoby na luki w odpowiedziach.
Format wyjściowy
Oryginalny kod:
n=int(input());j=0;exec("print([int(i%n+1+(2*n-(2*(i%n)+1))*((((i/n)//1+1)/2)//1)+(2*(i%n)+1)*int(int(i/n)/2))for i in range(j,j+n)]);j+=n;"*n)
źródło