Czytanie książki jest łatwe, ale wydrukowanie książki może być nieco trudne. Podczas drukowania broszury drukarka musi ułożyć strony w określony sposób, aby można je było czytać od lewej do prawej. Aby to zrobić, należy użyć wzoru podobnego do poniższego
n, 1, 2, n-1, n-2, 3, 4, n-3, n-4, 5, 6, n-5, n-6, 7, 8, n-7, n-8, 9, 10, n-9, n-10, 11, 12, n-11…
Przypadki testowe
4-stronicowa broszura: 4, 1, 2, 3
8-stronicowa broszura: 8,1,2,7,6,3,4,5
12-stronicowa broszura: 12,1,2,11,10,3,4,9,8,5,6,7
16-stronicowa broszura: 16,1,2,15,14,3,4,13,12,5,6,11,10,7,8,9
20-stronicowa broszura: 20,1,2,19,18,3,4,17,16,5,6,15,14,7,8,13,12,9,10,11
Zadanie
Twoim zadaniem jest, biorąc pod uwagę liczbę całkowitą n
będącą wielokrotnością 4, wyświetlanie tablicy liczb, których można użyć do wydrukowania książki n
stron.
Uwaga: Dopóki dane wyjściowe generują poprawne liczby, niezależnie od tego, czy są rozdzielone spacjami, przecinkami, łącznikami lub nawiasami, można zastosować dowolną metodę uzyskania rozwiązania
To jest pytanie w golfa kodu, więc odpowiedzi będą oceniane w bajtach, przy najmniejszej liczbie wygranych bajtów.
Odpowiedzi:
05AB1E ,
987 bajtówWypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6),
4945 bajtówZapisano 4 bajty przy pomocy @RickHitchcock
Próbny
Pokaż fragment kodu
Nierekurencyjne, 51 bajtów
Próbny
Pokaż fragment kodu
źródło
f=(n,a=1)=>n<a+3?[]:[n,a,a+1,n-1,...f(n-2,a+2)]
n<a
jest wystarczający, więc zaoszczędzono 4 bajty. Dzięki!Python 2,
999388585655 bajtówWypróbuj online!
-6 bajtów poprzez usunięcie niepotrzebnego wcięcia, dzięki Oliver Ni
-5 bajtów, zmieniając warunki warunkowe, dzięki Luis Mendo
-30 bajtów dzięki optymalizacji instrukcji drukowania, dzięki Arnold Palmer
-2 bajty poprzez umieszczenie pętli w jednej linii, dzięki nedla2004
-1 bajt, wykonując czarodziejstwo, dzięki Mr. Xcoder
źródło
lambda
(chociaż może być na tyle inny, że uzasadnia osobną odpowiedź).f-i+1,i,i+1,f-i
w każdej pętli zamiast warunkowo drukować ostatnią wartość. Pozwoliło to również na usunięcie inicjałuprint f,
.Python 2 , 46 bajtów
Wypróbuj online!
Generuje zasięg
[1..n]
i wyskakuje z przodu iz tyłu w powtarzającym się wzorzeback, front, front, back, ...
Python 2 , 49 bajtów
Wypróbuj online!
Generuje pierwsze 4 elementy, następnie rekurencyjnie kontynuuje, przy czym górna wartość
n
zmniejsza się o 2, a dolna wartośćk
wzrasta o 2.Python 2 , 49 bajtów
Wypróbuj online!
Bezpośrednio generuje
i
„wartość listy”, używając-i%4/2
jako wartości logicznej określającej, czy przyjąć niższą czy wyższą wartość.źródło
Python 3 ,
686362 bajty−5 bajtów dzięki @notjagan (usuwanie spacji i używanie
[*...]
zamiastlist()
).-1 bajt dzięki @ovs (
*1
zamiast[:]
) .Wypróbuj online!
źródło
r*1
zamiastr[:]
-1 bajtów`MATL ,
191710 bajtówWypróbuj online!
Wyjaśnienie
źródło
Galaretka ,
1211 bajtówPoprawiono do 11 bajtów, „Metody kombinatoryczne”:
Wypróbuj online!
W jaki sposób?
Wykorzystuje to obliczenia permutacji i system liczb czynnikowych:
Nieulepszony 12 bajtów, „Wzory dziewiarskie”:
Wypróbuj online!
W jaki sposób?
To proste podejście, tworzy dwa pasma, przeplata je, a następnie przycina luźne końce:
źródło
Oktawa ,
4336 bajtówPort tej odpowiedzi w C (gcc) można znaleźć tutaj .
Wyjaśnienie
k=1:2:n/2
: Generuje sekwencję liniową od 1 don/2
w krokach po 2. Zauważ, że jest ona natychmiast używana w następnym kroku.[n-k+1;k;k+1;n-k]
: Tworzy macierz 4-rzędową, tak że pierwszy rząd tworzy sekwencjęn, n-2, n-4...
don-(n/2)+2
, drugi rząd1, 3, 5...
don/2 - 1
, trzeci rząd to drugi rząd dodany o 1, a czwarty rząd to pierwszy wiersz dodany o 1.[n-k+1;k;k+1;n-k](:)'
: Układa w stos wszystkie kolumny tej macierzy razem od lewej do prawej, tworząc wektor z pojedynczą kolumną, a my transponujemy go do wektora wiersza, aby ułatwić wyświetlanie. Układanie kolumn w ten sposób dokładnie tworzy pożądaną sekwencję.Zauważ, że jest to funkcja anonimowa, więc możesz przypisać ją do zmiennej przed użyciem lub możesz użyć wbudowanej
ans
zmiennej, która zostanie utworzona po utworzeniu funkcji.Wypróbuj online!
źródło
input
i trochę nadużyłem składni, przechowując podstawowy wektor przyrostowy podczas tworzenia pierwszego wiersza i biorąc dane wejściowen
z samego anonimowego wejścia funkcji, dzięki czemu mogę teraz dopasować go do jedno oświadczenie. Dzięki!R , 48 bajtów (poprawiony)
Dzięki @Giuseppe za -7 bajtów!
Sztuką jest to, że
x=1:n;x[order(x%%2)]
jest równoważneorder(1:n%%2)
.Wypróbuj online!
R , 55 bajtów (oryginalny)
Grał w golfa
Nie golfił z komentarzami
Czytaj
n
ze standardowego.Zdefiniuj
x
jako sekwencję stron od 1 don
.Porządkuj strony tak, aby nawet strony znajdowały się przed nierównymi stronami.
Ułóż strony w porządku malejącym w stosunku do środka obliczonej książki
n/2+.5
.Przykład z 8 stron:
Wypróbuj online!
źródło
(1:n)[order(1:n%%2)]
jest to to samo, coorder(1:n%%2)
Mathematica,
545345 bajtówWyjaśnienie
źródło
Python 2 ,
6463 bajty-1 bajt dzięki ovs!
Wypróbuj online!
źródło
n-i-1
może byćn+~i
Haskell, 42 bajty
Wypróbuj online!
Jeden bajt dłużej:
Haskell, 43 bajty
źródło
Java 8,
8472 bajtylub
-12 bajtów dzięki komentarzowi @TheLethalCoder do odpowiedzi w języku C #.
Stara odpowiedź (84 bajtów):
Wyjaśnienie:
Wypróbuj tutaj.
źródło
Perl 5 , 47 + 1 (-n) = 48 bajtów
Wypróbuj online!
źródło
Swift 3 , 74 bajty
Wypróbuj online!
Swift 3 , 60 bajtów
Z jakiegoś powodu to nie działa w żadnym środowisku online, które próbowałem do tej pory. Jeśli chcesz przetestować go umieścić
var g=
przed nim, i nazywają goprint(g(12))
w Xcode (Place zabaw) .Oto zdjęcie po uruchomieniu go na placu zabaw Xcode, wersja 8.3.1 (Running Swift 3.1):
źródło
QBIC , 25 bajtów
Chociaż wejście to% 4, rzeczywisty rytm jest oparty na 2.
Wyjaśnienie
źródło
C (gcc) , 66 bajtów
Port mojej odpowiedzi Octave na C (gcc):
Wypróbuj online!
źródło
cQuents , 21 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
R ,
6460 bajtówNiszczycielsko obezwładniony przez djhurio ! Jego odpowiedź jest dość elegancka, idź do góry.
Port odpowiedzi Octave rayryenga .
Wypróbuj online!
oryginalne rozwiązanie (64 bajty):
Funkcja rekurencyjna.
Wypróbuj online!
źródło
Bash + Perl + Groff + Psutils, 48 bajtów
Pokazuje wyjście na
stderr
. Dane wyjściowe zawierają niektóre śmieci.Przykład zastosowania:
źródło
Pyth ,
2120 bajtówPakiet testowy.
Jeśli dane wyjściowe w postaci listy zagnieżdżonej są dozwolone:
Pyth ,
2019 bajtówPakiet testowy.
Wyjaśnienie
źródło
Rubinowy , 40 bajtów
Wypróbuj online!
źródło
C #, 107 bajtów
Zachowaj dwa liczniki, jeden zaczynający się od 1, drugi od p. W każdej iteracji pętli napisz cztery elementy i po prostu zwiększ lub zmniejsz liczniki po każdym wpisie. Kiedy liczniki spotkają się na środku, zatrzymaj się.
źródło
p=>{var a=new int[p];for(int i=0,q=1;q<p;a[i++]=p--){a[i++]=p--;a[i++]=q++;a[i++]=q++;}return a;};
, przy czymSystem.Func<int, int[]> f =
nie mają dołączonego do bytecount. Możesz także dodać link do TIO, który jest bardzo przydatny, gdy próbujesz pozwolić innym na samodzielne wypróbowanie twojego kodu!q
się0
i wstępnie przyrost naq<p
->++q<p
a następnie usunąć drugi post przyrost aby zapisać bajt. Przenieś dwie końcowe instrukcje pętli do ostatniego etapu pętli for, abyś mógł usunąć nawiasy klamrowe.p=>{for(int q=0;++q<p;)System.Console.Write(p--+$",{q++},{q},{p--},");}
. TIO.Haskell , 58 bajtów
Wypróbuj online!
źródło
Pyth ,
272423 bajtów-3 bajty, drukując w całości zamiast na końcu.
-1 dzięki Mr. Xcoder
Wypróbuj online!
Lub w internetowym kompilatorze / executorze
To jest mój pierwszy prawdziwy program w Pyth, więc prawdopodobnie są lepsze metody, o których nie wiem.
Wyjaśnienie
źródło
FN
zV
na -1 bajtC ++ (gcc) ,
898468 bajtówJako nienazwana ogólna lambda.
n
jest # stronami (% 4 == 0) iC
jest parametrem odniesienia dla wyniku, podobnie jak pusty pojemnikvector<int>
(push_back
potrzebny jest tylko ).poprzednie rozwiązanie:
Wypróbuj online!
Nieznacznie nie golfista:
poprzednie rozwiązanie lekko pozbawione golfa :
Został dość prosto opracowany i istnieją pewne drobne optymalizacje arytmetyki.
Stosowanie:
Wariant wydruku, 77 bajtów przestarzały
Jeśli nalegasz na wydrukowanie wartości, istnieje następujące rozwiązanie:
Gdzie
o
jest pożądanystd::ostream
, jakstd::cout
Zastosowanie (jeśli przypisano 2. lambdę
g
):źródło
Common Lisp, 79 bajtów
Wypróbuj online!
źródło
Lua, 94 bajty
Do tego wyzwania wpadłem na 2 różne metody, z których każda ma 94 bajty.
Metoda 1:
Skomentowany kod:
Metoda 2:
Ta metoda jest podobna do pierwszej metody, jednak zamiast łańcucha zwracam zamiast łańcucha string.format ()
W obu metodach użyłem pojęcia n i zbliżam się do siebie
źródło
PHP, 51 + 1 bajtów
drukuje numery stron oddzielone znakiem podkreślenia z końcowym separatorem.
Uruchom jako potok z
-nR
lub spróbuj online .źródło
J , 22 bajty
Wypróbuj online!
Wyjaśnienie
źródło