Tugasnya adalah untuk menampilkan n karakter tabel ASCII .
Anda dapat menulis fungsi (atau program yang menggunakan argumen sebagai parameter, STDIN juga diizinkan) yang menggunakan parameter n , yang akan menjadi indeks karakter terakhir untuk dicetak.
Tugasnya cukup sederhana, jadi sebagai contoh berikut ini kemungkinan implementasi dengan Python 2.7:
(lambda n:map(chr, range(n)))(256)
Seperti yang saya katakan itu tugas sederhana. Jadi ini kode-golf dan kode terpendek menang!
EDIT
Seperti beberapa dari Anda menunjukkan kode ini tidak mencetak hasilnya. Ini hanya contoh karena saya mungkin kesulitan menjelaskan masalah dalam bahasa Inggris ;-).
EDIT2
Jangan ragu untuk mengirim jawaban dalam bahasa pemrograman apa pun, bahkan jika itu bukan kode terpendek. Mungkin ada beberapa implementasi menarik di luar sana!
EDIT3
Memperbaiki contoh sehingga mencetak hasilnya.
for x in range(input()):print chr(x)
Sebenarnya akan mencetak karakter, jika Anda ingin mengedit contoh Anda.[i for i in range(n)]
sangat mirip denganrange(n)
Jawaban:
CJam, 4 byte
Program lengkap yang bertuliskan STDIN (bidang input pada penerjemah online ).
Ini hanya dijalankan
range(chr(int(input())))
, mengambil keuntungan dari fakta yang,
memberikan pengembalian array karakter jika argumennya adalah karakter.Saya sebut dibs on
c,
(2 byte), kalau-kalau asumsi input sudah di stack ternyata diizinkan.sumber
n
, karena beberapa lusin karakter ASCII pertama adalah karakter yang tidak dapat dicetak. Fakta menyenangkan: program ini juga menampilkan tabel Unicode, misalnya n = 9999brainfuck -
169146142 byteKeterbatasan:
Bukan jawaban terpendek di sini, tapi hei, brainfuck! Ini akan menjadi tantangan brainfuck yang benar-benar bagus, kecuali kenyataan bahwa itu membutuhkan input yang dapat dibaca manusia tanpa menjamin jumlah digit. Saya bisa meminta masukan untuk memiliki angka nol di depan untuk membuatnya menjadi 3 karakter, tetapi apa yang menyenangkan itu? : D Salah satu masalah utama dengan mengambil input dengan cara ini adalah bahwa hanya percabangan atau perulangan struktur brainfuck yang memeriksa apakah sel saat ini nol atau tidak. Ketika input dapat berisi angka nol, itu dapat menyebabkan kode Anda mengambil cabang yang seharusnya tidak diambil. Untuk mengatasi masalah ini, saya menyimpan setiap digit input ditambah 1 , kemudian kurangi kelebihannya di detik terakhir yang mungkin. Dengan begitu, saya selalu tahu di mana nol saya berada.
Saya memang mengatakan bahwa ini akan menjadi tantangan brainfuck yang hebat tanpa harus mengurai input. Mengapa demikian? Baiklah, mari kita berpura-pura bahwa kita tidak mengambil input numerik. Kami akan mengatakan tantangannya adalah "Diberikan byte input, output semua karakter ASCII di bawah byte itu". Inilah jawaban saya:
brainfuck - 8 byte
Ini perbedaan! Program sebenarnya menggunakan 135 instruksi untuk mengumpulkan input (lebih dari 95% dari program!), Hanya karena itu adalah manusia yang mengetiknya. Menyimpan nomor sebagai byte dan memberikan yang bagi saya, dan hanya dibutuhkan satu.
(Fakta menyenangkan: Jika Anda memahami program hipotetis, maka selamat! Anda memahami brainfuck secara keseluruhan. Seluruh bahasa hanya memiliki delapan perintah, dan program itu kebetulan menggunakan masing-masing tepat satu kali.)
Penjelasan
sumber
>[-]<[->.+<]
Setel sel di sebelah sel saat ini ke 0, lalu hitung mundur sel saat ini sambil meningkatkan sel di sebelahnya dan secara bersamaan mencetak nilainya.>[-]<
bagian karena saya sudah di sebelah sel kosong. :)Pyth , 4 byte
Pada dasarnya terjemahan program Python 3:
sumber
Befunge 93 -
2321Befunge 93 -
1513 (oleh Ingo Bürk)Yang ini mencetak daftar secara terbalik, tetapi OP hanya mengatakan kita perlu mencetak
n
karakter pertama , bukan harus berurutan.Mungkin tidak bisa golf lebih jauh tanpa beralih ke Befunge98 (untuk operator ";", lihat jawaban @ Kasran )
Coba di sini:
Tampilkan cuplikan kode
sumber
&> #- #1:# :#,_@
(hanya mencetaknya secara terbalik)Java,
151128776256 bytePertama-tama coba kode-golf.
Pemakaian:
Terima kasih kepada @Shujal, @flawr, @Ingo Bürk dan @Loovjo untuk pengurangan byte yang serius.
sumber
int i,n=new Scanner(...
dan mengubah loop menjadifor(;++i<n;)
. Juga, Anda tidak perlu memintaCharacter.toString
. Anda bisa memberi makan System.out nilai char dan itu akan dengan senang hati mengeluarkannya.a
input Anda. Dan saya pikir Anda dapat mempersingkatfor
loop dengan menyalahgunakan tempat kenaikan sebagai loop body:for(;++i<n;System.out.print((char)i));
(tapi Anda mungkin harus mengubah inisialisasi atau nilai akhir dengan + - 1)++i<n+1
harus sama dengan++i<=n
. Perhatikan=
di sana! Itu hanya menghemat satu byte. Ini bekerja untuk saya.void f(int n){int i=0;for(;++i<=n;System.out.print((char)i));}
yang 62 byte. Setidaknya saya tidak melihat lebih banyak ke golf sekarang. :)APL, 5
Contoh penggunaan:
sumber
JavaScript, ES6 -
525856534442 byteRekatkan ini ke konsol Firefox. Jalankan sebagai
f(NUM)
.Harus membuatnya lebih lama karena yang pertama tidak menerima input dengan benar.Turun 3, terima kasih edc65! Turun ke 44 berkat Swivel!
sumber
f=n=>String.fromCharCode(...Array(n).keys())
Haskell,
1723 byteTidak yakin apakah mungkin untuk melakukan yang lebih baik tanpa impor.
Edit
Solusi pertama saya sebenarnya tidak mencetak hasilnya, jadi ijinkan 6 karakter lagi untuk itu:
Juga, tidak lebih pendek (25 karakter dengan pencetakan, 19 tanpa), tetapi pendekatan alternatif yang menarik (meskipun membutuhkan 'Data.List'):
sumber
(`take`['\0'..])
menghemat satu byte.Utilitas umum Bash + BSD, 9 byte
GNU dc, 20 byte
sumber
C,
31302827Karena putch tidak standar, inilah versi yang sepenuhnya sesuai:
Harus dipanggil dari main:
EDIT: Ditingkatkan dengan mengambil keuntungan dari nilai pengembalian putchar
EDIT 2: Dikurangi oleh karakter lain melalui rekursi
sumber
Perl, 17 byte
sumber
print chr for 0..$ARGV[0]
shift
alih-alih$ARGV[0]
menyimpan 2 byte.say
. Juga, jumlah karakter lebih pendek jika Anda melakukannya sebagai satu-liner dengan-n
.echo "90" | perl -nE'say chr for 0..$_'
akan dihitung sebagai18
karakter.17
untuksay chr for 0..$_
plus1
untukn
.say
tidak akan bekerja dengan setiap versi perl.CJam, 3
Saya menganggap argumen itu sebagai elemen tumpukan teratas.
Contoh penggunaan:
sumber
Ruby, 30 karakter
sumber
awk - 27
Untuk memberikan parameter pada stdin jalankan seperti:
Hanya untuk bersenang-senang: "think positive version" dimulai dengan yang pasti
yes
:NR-1
diperlukan untuk mencetak(char)0
untukNR==1
. :-(Dan mengapa kita tidak memiliki
no
perintah? Itu agak kejam!sumber
alias no='yes no'
J - 5 byte
{.
adalah Head,a.
adalah Alphabet (daftar semua karakter) dan&
Obligasi mereka, menghasilkan kata kerja monadik yang disebut seperti:Catatan : Tampaknya ini tidak berfungsi secara interaktif: Jconsole dan jQt tampaknya mengatur terjemahan, mengeluarkan karakter kotak daripada beberapa karakter kontrol. Dalam skrip atau dari baris perintah, itu berfungsi meskipun:
sumber
{.&a. 127
, bukan?char
atau setara.gs2, 2 byte
Ini harus bersaing, saya pikir! Itu akan bekerja bahkan pada hari-hari awal GS2. Coba di sini.
sumber
Brainfuck, 44 byte
Mengharapkan string desimal tanpa baris baru.
Cobalah online.
Membaca bilangan bulat dalam kisaran
[0, max_cell_size]
di brainfuck tidak sulit. Saya mendorong Anda untuk menciptakan metode bersih sendiri. Saya menganggap ini sebagai latihan tingkat pemula. (Operasi kebalikan dari mencetak nilai numerik sel lebih terlibat, dan dapat dianggap sebagai tugas tingkat menengah.)Berikut adalah versi 58-byte yang dapat menangani
256
implementasi 8-bit:sumber
Golfscript - 5
Terima kasih kepada @Dennis
sumber
~,""+
lebih pendek dan dengan benar memproses input dari STDIN.;"65"
, karena input dari STDIN akan selalu berupa string.Lua -
4341 Bytessumber
a=""for i=1,arg[1]do print(a.char(i))end
for i=1,arg[1]do print(("").char(i))end
Jalan Menengah 98, 22
Agak menyedihkan bahwa ini sangat lama.
sumber
Python 3.4 - 36 bytes / 43 bytes
255 input ()
Cara kerjanya adalah:
Yang kedua hanya menghilangkan ruang yang memisahkan masing-masing karakter dengan imbalan 7 byte.
sumber
map
mengembalikan daftar, jadi Anda bisa melakukannyaf=lambda i:map(chr,range(i))
Pascal 87
Pascal 73
Membangun dan bekerja dengan baik dari http://www.onlinecompiler.net/pascal
sumber
var c,n:byte;begin read(n);for c:=0to n do write(chr(c))end.
pastebin.com/aFLVTuvhx86 ASM (Linux) (banyak banyak byte kecuali Anda mengompilasinya)
Ditulis sebagai fungsi, anggap parameter dilewatkan dalam AX (Saya lupa nomor untuk read syscall) Juga tidak menyimpan [SP] atau BX.
sumber
Perl - 29
sumber
Ruby, 23
Penjelasan
*
) meminta#to_ary
Range untuk mencetak setiap karakter pada barisnya sendiri.sumber
Julia: 20 karakter (REPL)
Ini dekat dengan contoh pertanyaan: hanya menghasilkan karakter dan biarkan REPL untuk melakukan apa pun yang mereka inginkan.
Julia: 33 karakter
Mencetak setiap karakter dalam baris terpisah.
sumber
M (MUMPS) - 21
R n F i=1:1:n W $C(i)
Dalam bentuk yang diperluas:
READ n FOR i=1:1:n WRITE $CHAR(i)
sumber
T-SQL:
6863Sebagai lingkaran cetak
T-SQL:
9586Sebagai kueri
Sunting: Membuat perubahan dan perbaikan yang ditunjukkan oleh Muqo. Terima kasih. Perbaikan dan golf disarankan oleh @ t-clausen.dk
sumber
GOTO
label with. Untuk permintaan, mungkin tentukanmsdb.sys.objects
untuk menjamin objek yang cukup. Juga, itu tidak menghasilkan CHAR (0). Namun, sebagai hiburan Anda bisaORDER BY @
.BrainFuck -
140112 BytesCoba Di Sini!
Disimpan 28 byte dengan mengubah
[<<<->>>->+<]>[<<<->>>->+<]>[<<<->>>-]
ke[<<<->->->-]
.Apa yang dilakukannya
sumber
Tong , 4 byte (SBCS)
TIO
Input dorong, output tabel ASCII.
sumber