Wprowadzenie
Może to zabrzmieć dziwnie, ale nie mamy JEDENEGO wyzwania do liczenia od 1
do n
włącznie.
To nie to samo. To jest (zamknięte), nie do końca wyjaśnione wyzwanie.
To nie to samo. Ten polega na liczeniu w nieskończoność.
Wyzwanie
Napisz program lub funkcję, która wypisze każdą liczbę całkowitą od 1
do n
włącznie.
Zasady
- Możesz uzyskać
n
dowolny sposób. - Możesz założyć, że
n
zawsze będzie dodatnią liczbą całkowitą. - Możesz dostać się
n
do dowolnej bazy, ale zawsze powinieneś generować dane dziesiętne. - Dane wyjściowe muszą być oddzielone dowolnym znakiem (lub wzorem) spoza
0123456789
. Dopuszczalne są nie dziesiętne znaki wiodące lub końcowe (na przykład przy użyciu tablic takich jak[1, 2, 3, 4, 5, 6]
). - Standardowe luki są odrzucane.
- Chcemy znaleźć najkrótsze podejście w każdym języku, a nie najkrótszy, więc nie przyjmę żadnej odpowiedzi.
- Musisz zaktualizować swoje odpowiedzi po tej edycji, odpowiedzi opublikowane przed ostatnią edycją muszą być zgodne z regułą zmiany dotyczącą standardowych luk (nie chciałem ich zaprzeczać, ale nie chciałem, aby społeczność ryczała, więc Zaprzeczyłem im).
- Możesz użyć dowolnej wersji językowej (lub języka) po randce. Nie możesz użyć żadnego języka ani wersji językowej stworzonej tylko dla tego wyzwania.
Bonusy
20%
- Twój program musi być w stanie policzyć co najmniej do
18446744073709551615
(2^64-1
). Na przykład, jeśli nowy typ danych jest jedynym sposobem obsługi dużych liczb całkowitych, musisz go skonstruować. Jeśli twój język nie ma możliwości obsługi dużych liczb całkowitych do 2 ^ 64-1, zamiast tego musi być obsługiwany górny limit tego konkretnego języka.
EDYCJA : Zmieniłem limit z 2^64
na, 2^64-1
aby umożliwić więcej odpowiedzi.
EDYCJA : Zrobiłem premię 2 ^ 64-1, ponieważ nie było dużego zainteresowania tym wyzwaniem. Jeśli twoja odpowiedź obsługuje 2 ^ 64-1, możesz ją teraz edytować, aby uwzględnić premię. Możesz także opublikować odpowiedź, która jej nie obsługuje, jeśli jest krótsza.
n
dowolny sposób”. Czy to oznacza, że możemy założyć, że jesteśmyn
zapisani w zmiennej?n
dowolny sposób. Możesz zapisać go w zmiennej, ale nie może być zakodowana na stałe.Odpowiedzi:
MarioLANG , 29 bajtów
Wypróbuj online!
Wiem, że mój kod jest niestety bardzo smutny lub zły:
Happy MarioLANG, 46 bajtów
Wypróbuj online!
Szczęśliwsze podejście:
MarioLANG bez emocji, 41 bajtów
Wypróbuj online!
źródło
:!
;)=#
, lub>(
, lub(-[
, itd. Ponadto, nie wiem dlaczego, ale tam jest najwyraźniej Lista emotikonów strona Wikipedii , która nie zawiera:!
ani którykolwiek z wymienionych przeze mnie.Pyth, 1 bajt
Treść musi mieć co najmniej 30 znaków; wszedłeś 14.
źródło
Cjam, 5 bajtów
Wypróbuj online!
Jest to nienazwany blok, który oczekuje
n
na stosie i pozostawia listę z zakresem[1...n]
na nim.Działa po prostu budując zakres,
,
a następnie zwiększając każdy element zakresu,:)
aby zakres był oparty na jednym.źródło
:)
Mathematica, 5 bajtów
Wystarczająco proste.
źródło
Sześciokąt, 19
Lub w rozszerzonym formacie sześciokąta:
Ogromne podziękowania dla Martina za to, że w zasadzie wymyśliłem ten program, właśnie grałem w golfa, aby zmieścić się w sześciokącie o długości boku 3.
Wypróbuj online!
Nie mam fantastycznych programów związanych z Hexagony firmy Timwi, więc to wyjaśnienie nie będzie bardzo kolorowe. Zamiast tego możesz przeczytać ogromną kroplę tekstu. Czy to nie miłe?
W każdym razie adres IP zaczyna się w lewym górnym rogu, w kierunku na
$
wschód, jeśli wyobrażasz sobie, że ten program został umieszczony na mapie północą skierowaną do góry.$
Powoduje nam pominąć następną instrukcję, która byłaby@
, co byłoby zakończyć program. Zamiast tego wykonujemy,?
który ustawia bieżącą krawędź pamięci jako liczbę wejściową. Teraz docieramy do końca rzędu, który prowadzi nas do środkowego rzędu sześciokąta, wciąż przesuwając się na wschód.Większość reszty programu to pętla. Zaczynamy od tego,
.
co jest opcją. Następnie napotykamy rozwidlenie w ... uh ... sześciokącie ...<
instrukcja powoduje, że IP obraca się o 60 stopni w prawo, jeśli bieżąca krawędź pamięci jest dodatnia, w przeciwnym razie obracamy o 60 stopni w lewo. Ponieważ zmierzamy na wschód, albo kończy się na tym, że kierujemy się na południe lub na północny wschód. Ponieważ wartość wejściowa jest większa od zera (a zatem dodatnia), zawsze zaczynamy od przejścia na południowy wschód.Następnie trafiamy na coś,
>
co przekierowuje nas na wschód; operatorzy ci rozwidlają się tylko po uderzeniu w część widelca. Następnie uderzamy,'
co zmienia krawędź pamięci, na którą patrzymy. Następnie wciskamy,)
która zwiększa wartość aktualnego zbocza pamięci. Ponieważ wszystkie krawędzie pamięci zaczynają się od 0, po raz pierwszy to robimy, otrzymujemy wartość 1. Następnie przeskakujemy do drugiej do górnej linii i wykonujemy,!
która wypisuje naszą liczbę. Następnie przechodzimy do innej krawędzi{
i przechowujemy wartość ASCII M pomnożoną przez 10 plus 8 (778). Następnie przeskakujemy z powrotem do drugiej do ostatniej linii sześciokąta i uderzamy w/
. To powoduje, że przenosimy się na północny zachód. Mijamy.
środkowy rząd i wychodzimy na;
w prawym dolnym rogu. Spowoduje to wydrukowanie aktualnego modu krawędzi pamięci 256 jako ASCII. To bywa nowa linia. Trafiamy,'
co zabiera nas z powrotem do pierwszej krawędzi, która ma wartość, którą odczytujemy. Trafiamy,/
co powoduje, że znów możemy iść na wschód. Następnie trafiamy,(
która zmniejsza wartość.=
powoduje, że znów kierujemy się w dobrym kierunku, aby skoczyć na skraj pamięci w przyszłości.Teraz, ponieważ wartość jest dodatnia (chyba że zero), wracamy na dół sześciokąta. Tutaj uderzamy
.
, przeskakujemy,;
więc nic się nie dzieje i wracamy do początku pętli. Gdy wartość wynosi zero, wracamy do początku programu, w którym to samo dzieje się ponownie, ale?
nie można znaleźć innej liczby, i wybieramy inną ścieżkę rozgałęzienia. Ta ścieżka jest stosunkowo prosta: uderzamy,{
co zmienia krawędź pamięci, ale już nas to nie obchodzi, a następnie uderzamy,@
co kończy program.źródło
MATL, 1 bajt
Przykładowe dane wyjściowe:
Wypróbuj online tutaj
źródło
GNU Coreutils, 6 bajtów
podzielona odpowiedź na czysty bash, patrz poniżej ...
źródło
R, 13 bajtów
Treść musi mieć co najmniej 30 znaków.
źródło
JavaScript
182177160154139138132 bajtów (prawidłowy)1 bajt zapisany dzięki @ShaunH
Arbitralna precyzja na ratunek!
Ponieważ javascript może liczyć tylko do 2 ^ 53-1 (podziękowania dla @ MartinBüttner za wskazanie tego), musiałem stworzyć arbitralną precyzję, aby to zrobić. Przechowuje dane w tablicy, a każde „tik” dodaje 1 do ostatniego elementu, a następnie przechodzi przez tablicę, a jeśli coś przekracza 9, ustawia ten element na 0 i dodaje 1 do lewej.
Wypróbuj tutaj! Uwaga: naciśnij klawisz F12, aby zobaczyć wynik, ponieważ nie chciałem, abyś czekał na pola tekstowe.
BTW .: Byłem jedynym, który nie wiedział, że trójskładnikowi operatorzy są tak przydatni w codegolf?
jest dłuższy niż
o 1 bajt.
JavaScript, 28 bajtów (nieprawidłowy - nie można policzyć do 2 64 )
źródło
&&
może być przydatne, musisz uważać na koherencję.condition&&action()
e?c.unshift(1):0
nae&&c.unshift(1)
oszczędność bajtJava 8, 43/69/94 bajtów
Przekreślony 44 jest nadal zwykłym 44 - czekaj, nie przekreśliłem go, właśnie go zastąpiłem :(Jeśli mogę zwrócić
LongStream
: (43 bytes
)To jest lambda dla
Function<Long,LongStream>
. Technicznie rzecz biorąc, powinienem użyćrangeClosed
zamiastrange
, ponieważ odcinam jeden z moich maksymalnych nakładów w ten sposób, alerangeClosed
jest on dłuższy niżrange
.Jeśli muszę wydrukować w funkcji: (
69 bytes
)To jest lambda dla
Consumer<Long>
. Technicznie nadużywampeek
, ponieważ jest to operacja pośrednia , co oznacza, że ta lambda technicznie zwracaLongStream
podobny do pierwszego przykładu; PowinienemforEach
zamiast tego używać . Znowu golf to niezły kod.Niestety, od
long
„s zasięg jest podpisana 64-bitową liczbą całkowitą, to nie osiąga żądane2^64-1
, ale po prostu2^63-1
.Jednak Java SE 8 zapewnia funkcjonalność do traktowania
long
s, jakby były niepodpisane, poprzezLong
jawne wywoływanie określonych metod w klasie. Niestety, ponieważ Java jest nadal Javą, jest ona dość długa, choć krótsza niż wersja BigInteger, którą zastępuje. (94 bytes
)Jest to
Consumer<Long>
, jak poprzednio.I po prostu za długo, aby uniknąć przewijania.
źródło
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
że użycie iteratoraint
(lub nawetlong
) nie jest wystarczająco duże.long
w sposób niepodpisany, więc korzystanie z nich jest krótsze niżBigInteger
podejście. (Nie byłoby tak, gdybyśmy musieli wdrożyć własne, niepodpisane, długie leczenie, tak jak musieliście to zrobić przed J8.)05AB1E , 1 bajt
Kod:
Wypróbuj online! .
Bardziej interesujące podejście:
Wyjaśnienie:
Wypróbuj online! .
źródło
MATLAB, 7 bajtów
Anonimowa anonimowa funkcja:
Uruchom jako:
Sprawdź to tutaj!
Jeśli wymagany jest pełny program, 17 bajtów:
Sprawdź to tutaj!
źródło
Haskell, 10 bajtów
Przykład użycia:
f 4
->[1,2,3,4]
.źródło
n
, musisz wziąćn
.n
nie jest tutaj zakodowany na stałe - jest to argument funkcji. Składnia Haskell może być dziwna dla osób przyzwyczajonych do składni podobnej do C.MarioLANG , 19 bajtów
Wypróbuj online!
Programy pionowe są zwykle bardziej grywalne dla prostych pętli w MarioLANG. Nie jestem pewien, co robi tłumacz podczas spotkania
[
w windzie, ale wydaje się, że kończy działanie programu, gdy bieżąca komórka wynosi 0. To prawdopodobnie użyteczna sztuczka w ogóle.Wyjaśnienie
MarioLANG jest językiem przypominającym Brainfuck (z nieskończoną taśmą liczb całkowitych o dowolnej precyzji), gdzie wskaźnik instrukcji przypomina Mario spacerującego i skaczącego.
Mario zaczyna w lewym górnym rogu i spada w dół.
;
odczytuje liczbę całkowitą ze STDIN i umieszcza ją w bieżącej komórce pamięci. Zauważ teraz, że=
jest to komórka naziemna, po której Mario może chodzić,"
i#
formuje windę (z#
początkiem) i!
sprawia, że Mario zatrzymuje się na windzie, aby nie od razu odszedł. I>
i<
ustawić jego kierunek ruchu. Widzimy, że daje to prostą pętlę, zawierającą następujący kod:Teraz normalnie
[
warunkowo sprawi, że Mario pominie następny, w zależności od tego, czy bieżąca komórka ma zero, czy nie. Oznacza to, że dopóki licznik jest niezerowy, nic nie robi. Wygląda jednak na to, że kiedy Mario napotyka na[
chwilę jazdę windą, a obecna komórka jest0
, program po prostu natychmiast kończy się z błędem, co oznacza, że nie musimy nawet znaleźć sposobu, aby go poprawnie przekierować.źródło
[
, co w rzeczywistości jest jeszcze wygodniejsze.Joe - 2 lub 6
Podczas gdy możesz skorzystać z opcjonalnego wariantu funkcji zakresu.
..to jest nudne! Zamiast tego weźmy sumę sumaryczną (
\/+
) tabeli o kształcie n (1~T
).źródło
Pyth -
32 bajty1 bajt zapisany dzięki @DenkerAffe.
Bez użycia wbudowanego.
Wypróbuj online .
źródło
hM
jeśli chcesz się naprawdę zachwycić :)-.-
Pyke, 1 bajt
Wypróbuj tutaj!
Lub 2 bajty bez wbudowanego
Wypróbuj tutaj!
Wypróbuj tutaj!
Wypróbuj tutaj!
źródło
dc, 15
Wejście odczytane ze standardowego wejścia. To odlicza od
n
, wypychając kopię każdej liczby na stos. Stos jest następnie wyprowadzany jako jeden zf
poleceniem, więc liczby są drukowane we właściwej kolejności rosnącej.Ponieważ wszystkie liczby są wypychane na stos, najprawdopodobniej zabraknie pamięci, zanim zbliży się do 2 ^ 64. Jeśli jest to problem, możemy to zrobić zamiast tego:
dc, 18
źródło
dc
, likebc
, domyślnie używa matematycznej matematyki precyzyjnej, a zatem takie granice nie mają znaczenia dla tego języka.ArnoldC, 415 bajtów
Jedyną interesującą rzeczą jest użycie nx (gdzie n jest celem, a x zmienną przyrostową) do przetestowania końca pętli while zamiast posiadania dedykowanej zmiennej, więc w końcu mam nx i n- (nx) = x w każdym przebiegu pętli
Uwaga : mogę policzyć tylko do 2 ^ 31-1. Cóż, myślę, że Terminatory wcale nie są prawdziwym zagrożeniem.
źródło
Piet, 64 kodeków
Z kodem wielkości 20:
Obrazy śledzenia Npiet
Pierwsza pętla:
Pozostały ślad dla
n=2
:Notatki
Brak odpowiedzi Piet? Pozwól mi to naprawić w moim pierwszym programie Piet! Może to być prawdopodobnie krótsze przy lepszych rolkach i mniejszej manipulacji wskaźnikiem ...
Górny obsługiwany limit zależy od implementacji interpretera. Teoretycznie byłoby możliwe wspieranie dowolnie dużych liczb za pomocą właściwego tłumacza.
Ogranicznikiem jest
ETX
(Ascii3
), jednak nie można go poprawnie wyświetlić w tej odpowiedzi, więc po prostu je pominę. Działa w konsoli:Wydajność
Ślad Npiet dla
n=2
źródło
ETX
znak (Ascii3
) dzielący wyjścia, jednak znak ETX nie może być wyświetlany na tej stronie.JavaScript (ES6),
7776635958 bajtówPobiera dane wejściowe
n
jako ciąg, powinien obsługiwać do 9007199254740991999999999Wyjaśnił:
źródło
2^64-1
jest w porządku, zmieniłem specyfikację.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
na[a]+b
GNU bc, 23
Wejście odczytane ze standardowego wejścia.
bc
domyślnie obsługuje dowolne liczby precyzji, więc 2 ^ 64 max nie stanowi problemu.źródło
Właściwie 1 bajt
Nudne wbudowane jest nudne. Wymaga 64-bitowej wersji Python 3, aby uzyskać dostęp do pełnej wersji
2**64
.Wypróbuj online!(z powodu ograniczeń pamięci i długości wyjściowej interpreter online nie może być bardzo wysoki).
Oto 5-bajtowa wersja, która nie wymaga 64-bitowego języka Python 3 i jest nieco przyjemniejsza w użyciu pamięci:
Wypróbuj online! (patrz wyżej zastrzeżenia)
źródło
Fuzzy-Octo-Guacamole, 7 bajtów
Wyjaśnienie:
źródło
X
działa zamiasto;
na 7 bajtów.n
:
Drukuje pełny stos.X
jest nowe.^!$[_;]
.$
jest zasięg.Oracja, 31 bajtów (nie konkuruje)
źródło
literally,
przed każdą instrukcją? (Pytanie 2: Przed datą lub po dacie, jeśli jest ona twoja? Obie są dopuszczalne, chyba żeQBASIC, 43 bajty
źródło
INPUT e;a
czyINPUT a
wystarczy? Nie widzę, żebyś ponownie używałe
.1 TO
?:
między instrukcjami zamiast zwrotu i numeru wiersza? QB4.5 pozwala mi to zrobić:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix , 17 bajtów
Wypróbuj tutaj
Cubix to język 2D stworzony przez @ETHProductions, w którym polecenia są zawijane w kostkę. Ten program jest zawijany na sześcianie o długości krawędzi 2 w następujący sposób.
I
pobiera liczbę całkowitą0
pchnij 0 na stos-
odejmij najlepsze elementy stosu!
jeśli tak naprawdę przeskocz następne polecenie@
kończy się;
wyskoczy wynik odejmowania ze stosu)
zwiększanie stosuw
przesuń ip w prawo i kontynuuj. Powoduje to, że spada do następnej liniiO
wypisuje górę stosu jako liczbęN
pchnij linefeed (10) na stoso
wyprowadza wysuw liniiw
przesuń ip w prawo i kontynuuj. To powoduje, że opada na następną twarz!
ponieważ TOS to prawda, przeskocz@
terminację;
wysuń linijkę ze stosuU
skręć w lewo na-
odejmowanie i stamtąd wznówźródło
Python 2,
37333233 bajtówPrzypuszczalnie działa nawet
2**64
dalej.Zestrzelono cztery bajty dzięki @dieter , a kolejne dzięki @orlp . Ale najwyraźniej, jak się okazało @ Sp3000,
range()
mogą występować problemy z wyższymi wartościami, więc funkcja została zmieniona naxrange()
. Uwaga: nawetxrange()
mogą mieć problemy, przynajmniej w 2.7.10 .źródło
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
dalej.” - wątp w to w Pythonie 2, ale może miećxrange
(edytuj:xrange
może nawet mieć problemy, przynajmniej w 2.7.10)-~
działa Edycja : Zrozumiałem. Również niezła sztuczka!Zsh, 12 bajtów
Działa to, ponieważ zmienne są rozwijane przed nawiasami klamrowymi.
źródło
2^64-1
jest teraz w porządku.2^63 - 1
V, 11 bajtów
Ponieważ zawiera nieprzyjemny UTF-8 i nie można go drukować, oto odwracalny zrzut heksowy:
V jest niedokończonym językiem, który napisałem, ale działa od 19-go zatwierdzenia . Ta odpowiedź była nieco bardziej szczegółowa, niż bym chciał, ale głównie dlatego, że V nie zna liczb całkowitych, tylko ciągi znaków. To przyzwoita odpowiedź! To będzie pracować do 2 ^ 64, ale to prawdopodobnie będzie trwać bardzo dużo czasu.
Aby moje wyjaśnienie było łatwiejsze do odczytania / napisania, będę pracować z tą „formą czytelną dla człowieka”, a właściwie tak napisałbyś w vimie.
Wyjaśnienie:
Jeśli luki są dozwolone, oto krótsza wersja, która drukuje 1 do n, ale także drukuje 0 (8 bajtów):
I w czytelnej formie:
Jest to krótsze, ponieważ
<A-q>
na końcu jest niejawne, więc nie potrzebujemy go, jeśli nie musimy usuwać ostatniego wiersza.źródło