Główne zadanie
Twoim zadaniem jest wydrukować liczby całkowite w kolejności malejącej, zaczynając od 1, i zwiększając się, gdy ponownie uderzasz 1, aż do osiągnięcia podanej wartości wejściowej, a następnie drukuj resztę, aż trafisz ponownie 1. Przykład z wejściem 6
:
1
21
321
4321
54321
654321
Without newlines (valid output):
121321432154321654321
Uwaga dodatkowa: jest to A004736 w OEIS. Również pierwszy przykład (z nowymi wierszami) jest nieprawidłowym wyjściem, jak określono w regułach.
Wejście
Twój kod może przyjmować dowolny rodzaj danych wejściowych (graficzny, STDIN) w postaci liczby całkowitej lub liczby.
Wynik
Twój kod powinien wypisywać opisaną powyżej sekwencję, aż do osiągnięcia liczby wejściowej, a następnie zakończyć wyświetlanie, aż ponownie osiągnie 1. Wyjściem może być cokolwiek, dlatego liczby, ciągi, liczby całkowite lub wyjście graficzne. Wymagane jest wydrukowanie pojedynczej liczby (bez znaków nowej linii, jeśli jest to ciąg znaków). Twój wynik może być wprowadzany i generowany z dowolną liczbą znaków (np []
.).
Ponieważ było trochę nieporozumień, oto wzorzec wyrażenia regularnego, na którym możesz wypróbować swoje wyniki.
^(\D*(\d)+\D*)$
Zasady
- Wynik musi być pełną liczbą, nie może być podzielony na nic, nawet na nowe wiersze.
- Algorytm ten nie powinien sprawdzać pierwszym rzędzie N znajdującym się w jakikolwiek sposób (na przykład
21
w121321
), lecz dla pierwszego przykładu N, jak wartość liczby. - Pojedynczy znak nowej linii jest dozwolony.
- Obsługa negatywnych danych wejściowych jest w pełni twoim wyborem, liczby ujemne nie są przypadkami, które powinieneś przetestować.
Przypadki testowe
Input: 6
Output: 121321432154321654321
Input: 1
Output: 1
Input: 26
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321222120191817161514131211109876543212322212019181716151413121110987654321242322212019181716151413121110987654321252423222120191817161514131211109876543212625242322212019181716151413121110987654321
Input: 0
Output: 0, Empty, or Error
Input: 21
Output: 121321432154321654321765432187654321987654321109876543211110987654321121110987654321131211109876543211413121110987654321151413121110987654321161514131211109876543211716151413121110987654321181716151413121110987654321191817161514131211109876543212019181716151413121110987654321212019181716151413121110987654321
Dzięki @Emigna, użyłem jego algorytmu do obliczenia tych przypadków testowych.
Zwycięzca
Zwycięzca został wybrany! To była odpowiedź ErikGolfer z imponującymi 5 bajtami! Gratulacje!
The output must be a full number ...
Masz na myśli całą sekwencję, czy tylko różne podciągi (1, 2-1, 3-1 ...)? Twój pierwszy przykład nie pasuje do tego stwierdzenia.[1, 21, 321, 4321, 54321, 654321]
Co powiesz na ten?[1,2,1,3,2,1,4,3,2,1,5,4,3,2,1,6,5,4,3,2,1]
A może mówisz tylko o tablicach z jednym elementem[121321432154321654321]
?mickey321211mouse
. Naprawdę\D
części nie mają powodu, aby tam byćOdpowiedzi:
Galaretka , 5 bajtów
Wypróbuj online!
Formula nie moja.
Podejrzewam, że dzieje się tu zbyt wiele ...
[ODPOWIEDŹ AKCEPTOWANA] Dałbym jakieś 5 powtórzeń Dennisowi, ale to nie jest Wymiana Reputacji. Dennis pokazał mi
VV
zachowanie. Ku mojemu zaskoczeniu jest to mniej niż 05AB1E.źródło
05AB1E , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Przykładowe dane wejściowe 4
źródło
JavaScript (ES6), 37 bajtów
Próbny
Pokaż fragment kodu
Alternatywna metoda dla n <10, 34 bajtów (niekonkurująca)
W JavaScript ciągi są niezmienne. Dlatego nie można zmienić zawartości N-tego ciągu ciągu
s
, przypisując mu nową wartośćs[N]
.Jednak wyrażenie
++s[N]
jest poprawne i ocenia zgodnie z oczekiwaniami, nawet jeśli ciąg znaków pozostanie niezmieniony. Na przykład:I przez rozszerzenie:
źródło
V,
29282723191716 bajtów8 bajtów zapisanych dzięki @DJMcMayhem
3 bajty zapisane dzięki @ nmjcman101
Ukryte postacie:
C-x
to Ctrl + x.Wypróbuj online! pobiera dane wejściowe za pomocą argumentów wiersza polecenia
Hexdump:
Wyjaśnienie
Teraz wygląda to tak:
nieprzerwany...
GIF (nieaktualny)
(dla arg
6
)źródło
òy$jpkgJ
À
, nie będziesz miał 0 na górze, więc możesz usunąć x. Wtedy OCZYWIŚCIE aò
zamknie añ
, abyś mógł usunąć drugiñ
(czyli bajt, który zapisałeś). Link, ponieważ to nie miało sensuC #,
726965 bajtówJeśli dane wyjściowe można po prostu zwrócić, a nie zapisywać na konsoli
C #,
716864 bajtówDzięki @VisualMelon za oszczędność wielu bajtów
Przetestuj tutaj (Humorystycznie kompilator internetowy psuje się pod dowolną liczbą powyżej 420)
źródło
j=1
do pętli for i zapisać średnik. Można również zadeklarowaćj
takżei
, aby zapisaćint
.i++
Może być również przeniesiony doj=i
zadania, oszczędzając bajt. Należy również być w stanie wymienići<=n
zi<n
jeśli się goj=++i
zamiast i zacząći
na0
.for(int i=0,j;i<n;)
;) Nie ma również potrzeby korzystania{}
z wewnętrznej pętli for.Pure Bash, 34
Dwa poziomy rozszerzenia nawiasów klamrowych. Z wejściem
6
pierwszy poziom rozwija się do{1..1} {2..1} {3..1} {4..1} {5..1} {6..1}
. To następnie rozwija się do1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1
, który jest zgniatany razem do jednego ciągu za pomocąprintf %s
.eval
są wymagane na obu poziomach ekspansji - dla pierwszego poziomu, aby$1
parametr został rozwinięty pierwszy, a dla drugiego poziomu, aby rozwinął się po pierwszym poziomie.Wypróbuj online
źródło
Perl, 21 bajtów
Używa
-E
bez dodatkowych kosztów.Stosowanie
źródło
Pyth, 7 bajtów
Program, który pobiera liczbę całkowitą i wypisuje wynik.
Wypróbuj online!
Jak to działa
źródło
jk_hC.:S
dłuższą, ale fajną pracą!GeoGebra , 67 bajtów
Każda linia jest wprowadzana osobno do paska wprowadzania. Dane wejściowe są pobierane z pola wprowadzania.
Oto gif z wykonania:
Jak to działa
Wpisanie
1
niejawnie przypisujea
do1
, aInputBox
polecenie kojarzy pole wprowadzania za
. Następnie dla każdegoi
IN{1, 2, 3, ..., a}
, lista{i, i-1, i-2, ..., 1}
jest tworzona przy użyciuSequence
polecenia, a każdyj
w tym wykazie jest konwertowana na ciąg użyciuText
. Na koniecJoin
łączy wszystkie listy iSum
łączy wszystkie elementy w jeden wyświetlany obiekt tekstowy.źródło
Python 2, 51 bajtów
źródło
Siatkówka ,
2622 bajtówLiczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
Wyjaśnienie
Konwertuj dane wejściowe na jednoargumentowe.
W każdej pozycji wstaw prefiks aż do tego punktu, a także linię. Tworzy to jednoargumentowy zakres od
2
don+1
, jedna wartość na linię.Zastąp każdy
1
liczbą znaków po nim w tym samym wierszu. Włącza coś podobnego11111
do43210
.Usuń wszystkie linie i poprzedzające je zera.
źródło
GameMaker Language, 65 bajtów
źródło
APL, 10 bajtów
Na przykład:
Wyjaśnienie:
⍳
: uzyskaj liczby od 1 do N.⍳¨∘
: dla każdego z nich uzyskaj liczby od 1 do N.⌽∘
: odwróć tę listę⍕¨∘
: uzyskaj reprezentację znakową każdego elementu (aby nie wyświetlał liczb ze spacjami między nimi)∊
: spłaszcz wynikową tablicęźródło
∘
jest składem funkcji, podałem wyjaśnienie w kolejności, w której funkcje są faktycznie ocenianePython 2,
7168 bajtówZałożę się, że rozwiązanie rekurencyjne może być krótsze, ale trudno mi sformułować je w jedno.
Wypróbuj online
źródło
Właściwie 8 bajtów
Po raz pierwszy zamieszczam odpowiedź W rzeczywistości, więc prawdopodobnie można w nią grać w golfa.
Jak to działa
Wypróbuj online!
źródło
R♂R♂RΣεj
ma taką samą liczbę bajtów, ale łatwiej jest napisać wyjaśnienie.Brachylog , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 , 22 bajtów
Lambda, która zwraca ciąg.
( Wypróbuj online. )
Wyjaśnienie:
1..$_
: Zakres liczb całkowitych ...(1 2 3 4)
[,] 1..$_
: Zmniejsz („złóż”) nad przecinkiem ...(1 2 3 4)
[\,] 1..$_
: Z wynikami pośrednimi ( zmniejszenie trójkątne ) ...((1) (1 2) (1 2 3) (1 2 3 4))
[\R,] 1..$_
: Zastosuj meta-operator cofania do przecinku ...((1) (2 1) (3 2 1) (4 3 2 1))
[~] flat ...
: Usuń zagnieżdżanie listy i złóż operator konkatty łańcuchowej ...1213214321
źródło
Haskell, 35 bajtów
Przykład użycia:
f 6
->"121321432154321654321"
.Dla wszystkich liczb
x
w1 ... x
liściex,x-1, ... ,1
, zamień liczby na ciąg i połącz je w pojedynczy ciąg. Ponownie połącz te ciągi w jeden ciąg.źródło
C89, 54 bajty
56 -2 = 54 dzięki ErikGolfer!
źródło
(j=i++)
zamiast(j=i)
i usunąć ostatnii++
(nieprzetestowany).i,j;f(n){j=++i;while(j)printf("%d",j--);i-n?f(n):0;}
(52 bajty)Python 3,
87928374 bajtyKrótsza odpowiedź przy użyciu rekurencji:
Może nie najkrótszy, ale jest wykonany tylko ze zrozumieniem listy Pythona!
(Edytowane w celu dodania funkcji drukowania i usunięcia \ n)
(Edytowane, aby usunąć funkcję drukowania i zmienić n + 1, k + 1 na n, k + 2)
źródło
`i`
zamiaststr(i)
. I możesz użyć"".join(...)
zamiast"".join([...])
i,range(1,k,-1)
aby usunąć[...][::-1]
.n>0
może byćn
. I miałem na myślirange(n,0,-1)
. I użyjn and f(n-1)+...)or""
.Pyth, 8 bajtów
Wyjaśnienie
źródło
05AB1E , 6 bajtów
Wypróbuj online!
źródło
Mathematica, 36 bajtów
Zgłasza ostrzeżenia, które można bezpiecznie zignorować.
Wyjaśnienie
Wykorzystując dane wejściowe
5
jako przykład:Tworzy zakres
{1, 2, 3, 4, 5}
.Range
jest na liście, więc możemy dać mu listę dowolnych argumentów, a on automatycznie przejdzie przez ten argument. To daje nam kilka odwróconych list:Kolejny:
To łączy zagnieżdżoną listę z pustym ciągiem. Ponieważ zagnieżdżona lista nie zawiera żadnych ciągów, nie może tak naprawdę łączyć wartości (w tym miejscu generowane są ostrzeżenia), ale
""<>
ma efekt uboczny spłaszczania listy. To nam dajeTeraz pojawia się piękna funkcja Mathematica, która
Map
nie dba o strukturę, nad którą mapuje. Zwykle stosuje się go do listy, ale działa z dowolną głową.f /@ h[a, b, c]
po prostu dajeh[f[a], f[b], f[c]]
. W naszym przypadku głową jest,StringJoin
a wartości są liczbami całkowitymi.To po prostu zamienia liczby całkowite na ciągi. W tym momencie
StringJoin[...]
wie, co z nimi zrobić i łączy je wszystkie w jeden ciąg:źródło
GolfScript , 14 bajtów
Wypróbuj online!
Oczywiście zwykła metoda, ale jest to GolfScript.
Objaśnienie tego fragmentu kodu VAST :
Zauważ, że wyjście jest w postaci pojedynczej liczby. Wleczenie
\n
.źródło
R,
383344 bajtyPobiera dane wejściowe do STDIN i zapętla od 1 do n, tworząc sekwencję od i do 1 dla każdego kroku i drukując go.
Edit: zastąpiony
seq(i,1)
przezi:1
oszczędność 5 bajtów i pokazując, dlaczego nie powinno golf podczas spotkań.źródło
101
jeśli wejście jest0
.if((n=scan())>0)for(i in 1:n)cat(i:1,sep="")
Zrób sztuczkę.if(n<-scan())
powinno wystarczyć.MATL ,
1411 bajtówWypróbuj online!
Wyjaśnienie
źródło
not split up by anything
, nie sądzę, że drugi jest dozwolony.pieprzenie mózgu, 17 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
Python ,
635759 bajtówRozwiązanie rekurencyjne, które działa zarówno w Pythonie 2, jak i 3. To prawdopodobnie można jeszcze pograć w golfa. Zapraszamy do gry w golfa! Wypróbuj online!
Edycja: -6 bajtów dzięki Jonathanowi Allanowi. +2 bajty z podziękowaniami dla mbomb007 za wskazanie problemu z moją odpowiedzią.
Ungolfing
źródło
map
aby zaoszczędzić 6 bajtów:lambda n:n and f(n-1)+"".join(map(str,range(n,0,-1)))or""
PHP,
353433 bajtówZapisałem bajt, ponieważ przeliczyłem rachunki, dzięki Tytusowi! I kolejny!
Uruchom z wiersza poleceń za pomocą
-r
.Całkiem prosta odpowiedź, zapętla od 1 do naszego wejścia
n
, umieszczając numer na początku łańcucha i drukując go.źródło
while($i++<$argv[1])echo$s=$i.$s;
CJam, 13 bajtów
interpretator
źródło
ri{),:)W%}%