pengantar
Ini mungkin terdengar aneh, tapi kami tidak punya satu tantangan bagi menghitung dari 1
ke n
, inklusif.
Ini bukan hal yang sama. Itu adalah tantangan (tertutup) yang tidak dijelaskan dengan baik.
Ini bukan hal yang sama. Yang itu tentang menghitung tanpa batas.
Tantangan
Menulis sebuah program atau fungsi yang mencetak setiap bilangan bulat dari 1
ke n
inklusif.
Aturan
- Anda bisa mendapatkan
n
cara apa pun. - Anda dapat mengasumsikan bahwa
n
akan selalu menjadi bilangan bulat positif. - Anda bisa mendapatkan
n
basis apa pun, tetapi Anda harus selalu output dalam desimal. - Output harus dipisahkan oleh karakter apa pun (atau pola) yang tidak ada di
0123456789
. Karakter memimpin atau trailing non-desimal diizinkan (misalnya saat menggunakan array seperti[1, 2, 3, 4, 5, 6]
). - Celah standar ditolak.
- Kami ingin menemukan pendekatan terpendek dalam setiap bahasa, bukan bahasa terpendek, jadi saya tidak akan menerima jawaban apa pun.
- Anda harus memperbarui jawaban Anda setelah pengeditan ini, jawaban yang diposting sebelum pengeditan terakhir harus mematuhi aturan perubahan tentang celah standar (saya tidak ingin menyangkal mereka, tetapi saya tidak ingin membuat masyarakat mengaum, jadi Saya menyangkal mereka).
- Anda dapat menggunakan versi bahasa (atau bahasa) pasca-kencan apa pun. Anda tidak dapat menggunakan bahasa apa pun atau versi bahasa yang dibuat hanya untuk tantangan ini.
Bonus
20%
- Program Anda harus dapat menghitung setidaknya hingga
18446744073709551615
(2^64-1
). Misalnya, jika tipe data baru adalah satu-satunya cara untuk mendukung bilangan bulat besar, Anda harus membuatnya. Jika bahasa Anda tidak memiliki cara apa pun untuk mendukung bilangan bulat besar hingga 2 ^ 64-1, batas atas bahasa tersebut harus didukung.
EDIT : Saya telah mengubah batas dari 2^64
ke 2^64-1
untuk memungkinkan lebih banyak jawaban.
EDIT : Saya menjadikan aturan 2 ^ 64-1 sebagai bonus, karena belum banyak minat pada tantangan ini. Jika jawaban Anda mendukung 2 ^ 64-1, Anda sekarang dapat mengeditnya untuk memasukkan bonus. Anda juga dapat memposting jawaban yang tidak mendukungnya, jika lebih pendek.
n
apa pun." Apakah itu berarti kita dapat mengasumsikann
disimpan dalam variabel?n
cara apa pun. Anda dapat menyimpannya dalam suatu variabel, tetapi itu tidak harus di-hardcode.Jawaban:
MarioLANG , 29 byte
Cobalah online!
Saya tahu kode saya sangat sedih atau marah:
Selamat MarioLANG, 46 byte
Cobalah online!
Pendekatan yang lebih bahagia:
MarioLANG non-emosional, 41 byte
Cobalah online!
sumber
:!
)=#
, atau>(
, atau(-[
, dll. Juga, tidak tahu mengapa, tetapi tampaknya ada daftar halaman emotikon Wikipedia , yang tidak mengandung:!
atau salah satu yang saya sebutkan.Pyth, 1 byte
Badan harus minimal 30 karakter; Anda memasukkan 14.
sumber
Cjam, 5 byte
Cobalah online!
Ini adalah blok tanpa nama yang mengharapkan
n
pada tumpukan dan meninggalkan daftar dengan kisaran[1...n]
di atasnya.Bekerja dengan hanya membangun rentang dengan
,
dan kemudian menambah setiap elemen rentang dengan:)
membuat rentang berbasis satu.sumber
:)
Mathematica, 5 byte
Cukup sederhana.
sumber
Hexagony, 19
Atau dalam format segi enam yang diperluas:
Terima kasih banyak untuk Martin karena pada dasarnya membuat program ini, saya hanya memasukkannya agar sesuai dengan segi 3 panjang sisi.
Cobalah online!
Saya tidak memiliki program Hexagony yang fantastis dari Timwi, jadi penjelasan ini tidak akan sangat berwarna. Sebaliknya, Anda bisa membaca gumpalan besar teks. Bukankah itu bagus?
Bagaimanapun, IP dimulai di sudut kiri atas, di
$
, bergerak ke arah Timur jika Anda membayangkan program ini ditempatkan dengan North menghadap ke atas pada peta. The$
menyebabkan kita melewatkan instruksi berikutnya, yang akan@
, yang akan mengakhiri program. Sebagai gantinya, kami mengeksekusi?
yang menetapkan tepi memori saat ini menjadi nomor input. Sekarang kita mencapai ujung barisan, yang membawa kita ke barisan tengah segi enam, masih bergerak ke arah Timur.Sebagian besar sisa program adalah loop. Kita mulai dengan
.
yang merupakan no-op. Selanjutnya kita menemukan garpu di ... eh ... segi enam ...<
instruksi menyebabkan IP berputar 60 derajat ke kanan jika tepi memori saat ini positif, jika tidak kita putar 60 derajat ke kiri. Karena kami bergerak ke arah Timur, kami akhirnya menuju ke Selatan atau Timur Laut. Karena input lebih besar dari nol (dan karenanya positif) kami selalu memulai dengan pergi ke Tenggara.Selanjutnya kita tekan
>
yang mengarahkan kita ke arah Timur; operator ini hanya memotong jika Anda menekan bagian garpu. Lalu kami menekan'
yang mengubah tepi memori apa yang kita lihat. Lalu kami menekan)
yang menambah nilai tepi memori saat ini. Karena semua tepi memori mulai dari 0, pertama kali kita melakukan ini, kita mendapatkan nilai 1. Selanjutnya kita melompat ke baris kedua ke atas dan menjalankan!
yang mencetak nomor kita. Kemudian kita pindah ke sisi lain dengan{
dan menyimpan nilai ASCII dari M dikalikan dengan 10 ditambah 8 (778). Lalu kita melompat kembali ke baris kedua ke terakhir dari segi enam, dan tekan tombol/
. Ini mengakibatkan kami pindah ke Barat Laut. Kami melewati.
di baris tengah, dan keluar di;
di kanan bawah. Ini mencetak tepi memori saat ini mod 256 sebagai ASCII. Ini kebetulan merupakan baris baru. Kita menekan'
yang membawa kita kembali ke tepi pertama yang memiliki nilai yang kita baca. Kita memukul/
yang membuat kita bergerak ke arah timur lagi. Lalu kami menekan(
yang menurunkan nilai.=
menyebabkan kita menghadapi arah yang benar lagi untuk lompatan tepi memori di masa depan.Sekarang, karena nilainya positif (kecuali nol) kita kembali ke bagian bawah segi enam. Di sini kita menekan
.
lalu kita melompati;
sehingga tidak ada yang terjadi, dan kita kembali ke awal perulangan. Ketika nilainya nol kita kembali ke awal program, di mana hal yang sama terjadi lagi tetapi?
gagal menemukan nomor lain, dan kita mengambil jalur percabangan lainnya. Jalur itu relatif sederhana: kami menekan{
yang mengubah tepi memori, tetapi kami tidak peduli lagi, lalu kami menekan@
yang mengakhiri program.sumber
MATL, 1 byte
Contoh output:
Cobalah online di sini
sumber
GNU Coreutils, 6 byte
pisahkan jawaban untuk bash murni, lihat di bawah ...
sumber
R, 13 byte
Badan harus minimal 30 karakter.
sumber
Javascript
182177160154139138132 byte (valid)1 byte disimpan berkat @ShaunH
Presisi arbiter untuk penyelamatan!
Karena javascript hanya dapat menghitung hingga 2 ^ 53-1 (Terima kasih kepada @ MartinBüttner karena menunjukkannya), saya perlu membuat presisi arbiter untuk melakukan ini. Ini menyimpan data dalam sebuah array, dan setiap "centang" itu menambahkan 1 ke elemen terakhir, kemudian pergi melalui array, dan jika sesuatu melebihi 9, itu menetapkan elemen itu ke 0, dan menambahkan 1 ke yang di sebelah kiri.
Coba di sini! Catatan: tekan F12, untuk benar-benar melihat hasilnya, karena saya tidak ingin membuat Anda menunggu kotak teks.
BTW .: Saya adalah satu-satunya, yang tidak tahu, operator ternary sangat berguna dalam codegolf?
lebih panjang dari
dengan 1 byte.
Javascript, 28 byte (tidak valid - tidak dapat dihitung hingga 64 )
sumber
&&
bisa bermanfaat juga, hanya harus berhati-hati tentang kohersi.condition&&action()
e?c.unshift(1):0
untuke&&c.unshift(1)
menyimpan byteJava 8, 43/69/94 byte
Dicoret 44 masih tetap 44 - tunggu, saya tidak mencoretnya, saya hanya menggantinya :(Jika saya dapat mengembalikan
LongStream
: (43 bytes
)Ini adalah lambda untuk a
Function<Long,LongStream>
. Secara teknis, saya harus menggunakanrangeClosed
bukanrange
, karena saya memotong satu dari input maksimum saya dengan cara ini, tetapirangeClosed
lebih lama dari iturange
.Jika saya harus mencetak dalam fungsi: (
69 bytes
)Ini adalah lambda untuk a
Consumer<Long>
. Secara teknis saya menyalahgunakanpeek
, karena ini adalah operasi perantara , yang berarti lambda ini secara teknis mengembalikanLongStream
seperti contoh pertama; Saya harus menggunakanforEach
sebagai gantinya. Sekali lagi, golf bukan kode yang bagus.Sayangnya, karena
long
range adalah integer 64-bit yang ditandatangani , ia tidak mencapai yang diminta2^64-1
, tetapi hanya2^63-1
.Namun , Java SE 8 menyediakan fungsionalitas untuk mengobati
long
s seakan mereka unsigned, dengan memanggil metode tertentu diLong
kelas secara eksplisit. Sayangnya, karena Java masih Java, ini agak bertele-tele, meskipun lebih pendek dari versi BigInteger yang digantikannya. (94 bytes
)Ini adalah
Consumer<Long>
, seperti sebelumnya.Dan terlalu lama untuk menghindari gulir.
sumber
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
adalah bahwa menggunakanint
(atau bahkanlong
) untuk iterator tidak cukup besar.long
dengan cara yang tidak ditandatangani, jadi menggunakan itu lebih pendek dariBigInteger
pendekatan. (Itu tidak akan terjadi seandainya kita harus menerapkan perlakuan lama tanpa tanda tangan kita sendiri seperti yang Anda harus lakukan sebelum J8.)05AB1E, 1 byte
Kode:
Cobalah online!.
Pendekatan yang lebih menarik:
Penjelasan:
Cobalah online! .
sumber
MATLAB, 7 bytes
Fungsi anonim tanpa nama:
Jalankan sebagai:
Uji di sini!
If a full program is required, 17 bytes:
Test it here!
sumber
Haskell, 10 bytes
Usage example:
f 4
->[1,2,3,4]
.sumber
n
, you must taken
.n
isn't hardcoded here - it's a function argument. Haskell syntax can be strange to people used to C-like syntax.MarioLANG, 19 bytes
Try it online!
Vertical programs are usually more golfable for simple loops in MarioLANG. I'm not sure what the interpreter does when encountering
[
inside an elevator, but it seems to terminate the program when the current cell is 0. That's probably a useful trick in general.Explanation
MarioLANG is a Brainfuck-like language (with an infinite memory tape of arbitrary-precision integers) where the instruction pointer resembles Mario walking and jumping around.
Mario starts in the top left corner and falls downward.
;
reads an integer from STDIN and places it in the current memory cell. Now note that=
is a ground cell for Mario to walk on, the"
and#
form an elevator (with#
being the start) and!
makes mario stop on the elevator so that he doesn't walk off right away. The>
and<
set his movement direction. We can see that this gives a simple loop, containing the following code:Now normally
[
would conditionally make Mario skip the next depending on whether the current cell is zero or not. That is, as long as the counter is non-zero this does nothing. However, it seems that when Mario encounters a[
while riding an elevator and the current cell is0
, the program simply terminates immediately with an error, which means we don't even need to find a way to redirect him correctly.sumber
[
, which is actually even more convenient.Joe - 2 or 6
While you can use the inclusive variant of the range function..
..that's boring! Let's instead take the cumulative sum (
\/+
) of a table of ones of shape n (1~T
).sumber
Pyth -
32 bytes1 bytes saved thanks to @DenkerAffe.
Without using the builtin.
Try it online.
sumber
hM
if you wanna get real fancy :)-.-
Pyke, 1 byte
Try it here!
Or 2 bytes without the builtin
Try it here!
Try it here!
Try it here!
sumber
dc, 15
Input read from stdin. This counts down from
n
, pushing a copy of each numbers to the stack. The stack is then output as one with thef
command, so the numbers get printed in the correct ascending order.Because all the numbers are pushed to the stack, this is highly likely to run out of memory before getting anywhere near 2^64. If this is a problem, then we can do this instead:
dc, 18
sumber
dc
, likebc
, uses arbitrary precision math by default, and thus such boundaries are irrelevant for this language.ArnoldC, 415 bytes
The only thing of interest is to use n-x (where n is the goal and x the incremented variable) to test the end of the while loop instead of having a dedicated variable, so I end up having n-x and n-(n-x) = x in each loop run
Note: I can only count to 2^31-1. Well I guess the Terminators are not a real danger after all.
sumber
Piet, 64 Codels
With codelsize 20:
Npiet trace images
First loop:
Remaining trace for
n=2
:Notes
Belum ada jawaban Piet? Biarkan saya memperbaikinya dengan program Piet pertama saya! Ini mungkin bisa lebih pendek dengan gulungan yang lebih baik dan manipulasi pointer ...
Batas yang didukung atas tergantung pada implementasi penerjemah. Secara teori dimungkinkan untuk mendukung jumlah besar yang sewenang-wenang dengan juru bahasa yang tepat.
Delimeter adalah
ETX
(Ascii3
), namun ini tidak dapat ditampilkan dengan benar dalam jawaban ini jadi saya hanya akan mengabaikannya. Ini bekerja di konsol:Keluaran
Jejak npiet untuk
n=2
sumber
ETX
karakter (Ascii3
) membagi output, karakter ETX tidak dapat ditampilkan di situs ini.JavaScript (ES6),
7776635958 BytesMengambil input
n
sebagai string, harus mendukung hingga 9007199254740991999999999Dijelaskan:
sumber
2^64-1
baik-baik saja saya telah mengubah spec.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
ke[a]+b
GNU bc, 23
Input read from stdin.
bc
handles arbitrary precision numbers by default, so the 2^64 max is no problem.sumber
Actually, 1 byte
Boring builtin is boring. Requires a 64-bit version of Python 3 to get all the way up to
2**64
.Try it online! (due to memory and output length restrictions, the online interpreter can't go very high).
Here's a 5-byte version that doesn't require 64-bit Python 3 and is a little nicer on memory usage:
Try it online! (see above caveats)
sumber
Fuzzy-Octo-Guacamole, 7 bytes
Explanation:
sumber
X
works instead ofo;
, for 7 bytes.n
:
prints the full stack.X
is new.^!$[_;]
.$
is range.Oration, 31 bytes (non competing)
sumber
literally,
in front of every statement? (Question 2: Pre-dates or post-dates if it's yours? both are acceptable unless you made this for this challenge, in which case it's a loophole)QBASIC, 43 bytes
sumber
INPUT e;a
orINPUT a
is enough? I don't see you re-usinge
.1 TO
?:
between statements instead of a return and a line number? QB4.5 lets me do this:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix, 17 bytes
Try it here
Cubix is a 2D language created by @ETHProductions where the commands are wrapped onto a cube. This program wraps onto a cube with an edge length of 2 as follows.
I
gets the integer input0
push 0 to the stack-
subtract top items of stack!
if truthy jump the next command@
terminate;
pop the subtraction result from the stack)
increment top of stackw
move ip to the right and carry on. This causes it to drop to the next lineO
output the top of stack as a numberN
push linefeed (10) to the stacko
output a linefeedw
move ip to the right and carry on. This causes it to drop to the next face!
because TOS truthy, jump the@
terminate;
pop the linefeed from the stackU
uturn to the left onto the-
subtraction and resume from theresumber
Python 2,
37333233 bytesPresumably works up to
2**64
and beyond.Shot down four bytes thanks to @dieter, and another thanks to @orlp. But apparently, as @Sp3000 found out,
range()
might have issues with higher values, so the function was changed toxrange()
. Note: evenxrange()
might have issues, at least in 2.7.10.sumber
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
and beyond." - doubt it in Python 2, but it might withxrange
(edit: evenxrange
might have issues, at least in 2.7.10)-~
work? Edit: I figured it out. Also, nice trick!Zsh, 12 bytes
This works because variables are expanded before the braces.
sumber
2^64-1
is fine now.2^63 - 1
V, 11 Bytes
Since this contains nasty UTF-8 and unprintables, here is a reversible hexdump:
V is an unfinished language I wrote, but this is working as of commit 19. This answer was a little more verbose than I'd like, but that's mostly because V has no knowledge of integers, only strings. So it's a decent answer! This will work up to 2^64, but it will probably take a very long time.
To make my explanation easier to read/write, I will work with this "Human readable form", which is actually how you would type this in vim.
Explanation:
If loopholes are allowed, here's a shorter version that prints 1 to n, but also prints a 0 (8 bytes):
And in readable form:
This is shorter because the
<A-q>
at the end is implicit, so we don't need it if we don't have to delete the last line.sumber