Tantangan
Cetak karakter berikut:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
Tangkapannya adalah Anda tidak boleh menggunakan salah satu dari mereka dalam kode Anda.
Anda dapat mencetaknya dalam urutan sewenang-wenang, dengan atau tanpa baris awal atau akhir, tetapi Anda tidak dapat mencetak karakter lain.
Aturan
- Anda tidak boleh menggunakan karakter apa pun dari set yang disebutkan di atas
- Anda dapat menggunakan karakter lain
- Tidak selingkuh
- Celah standar dilarang
- Ini adalah kode-golf , jawaban terpendek menang.
Klarifikasi
- Jika bahasa Anda menggunakan rangkaian karakter yang berbeda, Anda tidak boleh menggunakan titik kode dalam rangkaian karakter yang sesuai dengan karakter alfanumerik.
- Mengembalikan string dari suatu fungsi dianggap sebagai bentuk output yang valid.
- Anda dapat mengembalikan array char.
code-golf
string
kolmogorov-complexity
restricted-source
dkudriavtsev
sumber
sumber
Jawaban:
V ,
87 byte1 byte disimpan berkat @DJMcMayhem dengan meletakkan semuanya dalam satu pernyataan regex
Cobalah online!
Output:
Catatan:
×
ini tidakx
atauX
, itu adalah0xd7
Hexdump:
Penjelasan
Sekarang hasilnya terlihat seperti:
Kita harus menghapus semua karakter non-alfanumerik dan
_
(karena tidak termasuk dalam\W
), jadi mari kita lakukan itu menggunakan regexsumber
Ó×ü_
(yang setara dengan:s/\W\|_//g
)Oktaf ,
52 4640 byteIni mengevaluasi ke
Penjelasan
Di sini kita menggunakan fakta bahwa karakter secara implisit dikonversi ke bilangan bulat ketika operasi aritmatika suka
+-
atau fungsi rentang:
diterapkan. Ketika digabungkan dengan string kosong ([...,'']
), angka-angka lagi dikonversi ke karakter.Cobalah online!
sumber
+1
karena menjadi bahasa non-esoterik pertama dalam sebuah tantangan yang sangat cocok untuk esolang.+1
, bukan untuk menggunakan Oktaf (itu cukup lurus ke depan), tetapi untuk bermain golf ini dengan sangat baik, dan menggunakan_
sebagai variabel! Saya tidak tahu itu mungkin ... Bagus!brainfuck ,
77767572 byteCobalah online!
Bagaimana itu bekerja
Penerjemah mulai dengan rekaman 0 sel.
Ini menetapkan sel pertama ke 8 , meninggalkan rekaman dalam keadaan berikut.
Ini menambah sel kedua satu kali, sel ketiga 6 kali, sel keempat 4 kali, mengurangi sel kelima sekali, kemudian kembali ke awal rekaman dan mengurangi sel pertama. Setelah 8 iterasi, rekaman itu terlihat seperti berikut.
Kami maju ke sel kedua dan menambahkannya dua kali, bersiap-siap untuk mencetak digit.
Ini mencetak sel ketiga, menambahkannya, lalu kembali ke sel kedua dan menurunkannya. Setelah 10 iterasi, kami sudah mencetak
0123456789
dan rekaman itu seperti berikut.Saatnya mempersiapkan kaset untuk surat-surat! Kita mulai dengan memajukan dua sel.
Ini menambah sel kelima satu kali, sel keenam dua kali, sel ketujuh tiga kali, kemudian kembali ke sel keempat dan menurunkannya. Setelah 32 iterasi, rekaman itu terlihat seperti berikut.
Sebagai langkah terakhir sebelum mencetak surat, kami naik ke sel kelima dan menambahkannya dua kali.
Akhirnya, kita naik ke sel ke enam untuk menambah dan mencetaknya, melakukan hal yang sama untuk sel ketujuh, lalu kembali ke sel kelima dan menurunkannya. Setelah 26 iterasi, kami sudah mencetak
Aa...Zz
.sumber
Ruby, 42 byte
Fungsi yang mengembalikan array char. Program yang hanya menghasilkan karakter adalah 49 byte:
Ini hanya menggunakan karakter ascii di kedua sisi rentang yang relevan untuk menentukan rentang. Misalnya,
?/...?:
berarti karakter antara garis miring ke depan dan titik dua, tidak termasuk bagian akhir. Untuk menghilangkan permulaan, kita kurangi array yang berisi tiga karakter awal.sumber
6502 bahasa mesin,
747068 byteHex dump (6502 program pada umumnya tidak dapat dipindahkan; kode di sini disimpan mulai dari lokasi $ 0603):
Anda dapat melihat bahwa ini tidak menggunakan byte yang dilarang: $ 41 hingga $ 5a, $ 61 hingga $ 7a, atau $ 30 hingga $ 39.
Ini adalah fungsi tanpa argumen yang, ketika dipanggil, mengembalikan pointer ke array karakter "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" di bagian atas tumpukan, sesuai dengan konvensi pemanggilan standar 6502.
Sebagai penjelasan, berikut ini adalah pembongkaran:
Kode bahasa mesin memodifikasi sendiri. Untuk manipulasi tumpukan, saya perlu menggunakan PHA dan PLA untuk mendorong dan mengeluarkan akumulator, tetapi instruksi ini memiliki opcodes $ 48 dan $ 68, yang dilarang (mereka adalah kode ASCII untuk huruf 'H' dan 'h'). Jadi, untuk PHA, saya mengambil angka $ 24, melakukan aritmatika bergeser ke kiri (ASL), dan menyimpan $ 48 yang dihasilkan di empat tempat dalam kode di mana ia perlu dijalankan. Kemudian, untuk PLA, saya menggunakan bitwise OR pada $ 48 di akumulator untuk menghitung $ 68, dan menyimpannya di dua tempat dalam kode di mana diperlukan.
Ada beberapa instruksi selain PHA dan PLA yang juga tidak bisa saya gunakan karena opcode mereka sama dengan huruf atau digit ASCII, tetapi saya menemukan solusi langsung untuk yang lain.
Array karakter yang diinginkan dihitung dan disimpan mulai dari lokasi 0 (tidak masalah di mana ia disimpan karena kita hanya perlu memastikan bahwa pointer ke itu dikembalikan ke atas tumpukan).
Anda dapat mencobanya di assembler dan emulator 6502 milik Nick Morgan . Ini screenshotnya; kotak monitor di bagian bawah menunjukkan string keluaran (di lokasi $ 00 hingga $ 3D) setelah program dijalankan.
sumber
Haskell ,
75 72 63 5856 byteCobalah online! Panggil dengan
__
. Keluaran:Berkat xnor yang menyarankan
__
dan_'
sebagai nama variabel dua byte, bukan(!)
atau serupa, menghemat 9 byte. Saya terutama suka bagaimana_'
memecah sintaks. Dan terima kasih lagi kepada xnor untuk menggeneralisasi rentang, menghemat 4 byte lagi.Edit: Saya menemukan bahwa karakter Unicode diperbolehkan sebagai pengidentifikasi di Haskell, jadi misalnya
ä
,ö
, ... juga dapat digunakan sebagai dua pengidentifikasi byte. Karena ada satu pengenal tiga byte yang tersisa dalam program, saya menggantinyaä
, menghemat 2 byte lagi.Penjelasan:
__
dan_'
merupakan nama variabel yang valid. Dari spesifikasi bahasa :Jadi kodenya setara dengan
Dalam daftar pemahaman
a
terikat ke'/'
danb
ke':'
("/:"
sama dengan['/',':']
, sehingga pencocokan pola berhasil). Maka rentang[a..]
membangun string semua karakter yang lebih besar sama'/'
:Untuk setiap karakter
x
dalam string ini, lalu diperiksa apakah'/'<x
danx<':'
, menghasilkan karakter0123456789
. Kemudiana
danb
terikat ke@
dan[
, menghasilkan karakterABCDEFGHIJKLMNOPQRSTUVWXYZ
dan sebagainya.sumber
__
dan_'
sebagai variabel.Underscore is treated as a lower-case letter
aturannya._'_=[__|[_',__']<-["`{","@[","/:"],__<-[_'..],_'<__,__<__']
(dalam variabel normalz=[x|[a,b]<-["`{","@[","/:"],x<-[a..],a<x,x<b]
).__
alih-alih_'_
meskipun__
digunakan sebagai pengidentifikasi dalam pemahaman daftar.Perl (5.10 atau 5.12),
3029 byteProgram ini sebagian besar terdiri dari karakter yang tidak patut dicetak, jadi inilah hexdump:
Program ini sangat sederhana: kami regexing (
=~
) sebuah garis bawah (_
; terima kasih @ Dennis untuk menunjukkan bahwa ini berfungsi) terhadap regex. Regex ditentukan sebagai ekspresi, bukan secara harfiah; khusus, kami mengambil komplemen bitwise (~
) dari sebuah string. Membalik komplemen bitwise untuk mendapatkan string yang mendasarinya, kita mendapatkan regex berikut yang sedang dijalankan:Dalam Perl versi 5.10 dan 5.12,
(?{…})
sintaks adalah sintaks eksperimental untuk memungkinkan regex menjalankan kode arbitrer saat runtime. Dalam hal ini, kami menggunakannya untuk menjalankan program Perl langsung untuk mencetak output yang diinginkan. (Versi yang lebih awal dari 5.10 tidak dapat digunakan karena tidak adasay
.)Versi modern Perl telah dinonaktifkan
(?{…})
secara default karena alasan keamanan, tetapi jika Anda memiliki versi Perl, Anda dapat menonaktifkan centang (dan dengan demikian menjalankan program ini) via-Mre=eval
sebagai argumen baris perintah (bersama dengan standar-M5.010
yang menentukan versi) dari bahasa yang akan diterapkan, dan yang tidak diperhitungkan terhadap bytecount).sumber
Sebenarnya
854 byteBagaimana itu bekerja:
Cetak tersirat di akhir program.
Sunting 1: Digantikan menempatkan alfabet dalam huruf kecil / besar dan kemudian kisaran angka (10) dengan hanya mendapatkan karakter dasar dicetak 62 itu.
Sunting 2: diubah ">" menjadi '> terima kasih kepada Mego :) menyimpan 1 byte.
Cobalah online!
sumber
'>
byte lebih pendek dari">"
.PHP, 69 byte
Kode ini bergaya menggunakan Windows-1252 di sini. Di bawah ini adalah xxd hexdump reversibel .
Cobalah online!
sumber
Java (OpenJDK 9) , 277 byte
Ya, Jawa, Anda membacanya dengan baik!
Cobalah online!
Ini mencetak rentang, tetapi terbalik, karena urutannya tidak penting.
Saya bermain dengan tidak adanya aturan "tidak ada input" untuk secara implisit mendefinisikan
char
mana yang diperlukan untuk membuat semuanya bekerja. Jika itu curang, tolong katakan begitu.Tidak disatukan & diuji
sumber
char
, kalau tidak itu akan menjadi sepotong kue. Dan agar adil, jawaban saya lebih pendek dari jawaban awal Anda. Lihatlah penjelasan saya untuk semua overhead yang harus saya lalui.Brainfuck,
8985 byteKarena Brainfuck mengabaikan karakter alfanumerik, ini hanya tantangan output konstan ... (Sunting: Lihat Solusi Dennis untuk versi yang lebih pendek 10 byte)
Cobalah online!
Kode ini adalah contoh yang baik dari loop terhitung dasar di brainfuck:
Perhatikan bahwa ini menggunakan pintasan pembungkus untuk menghasilkan angka, artinya penerjemah harus memiliki sel pembungkus 8-bit (seperti yang saya tautkan).
sumber
JavaScript (ES6), 983 byte
Ternyata di ES6 ada banyak karakter yang dapat Anda gunakan dalam nama variabel JavaScript ! Bekerja dengan baik setelah Anda menghabiskan enam variabel nama 1-2 byte dengan
$
dan_
.JavaScript, 1223 byte
Ini adalah jawaban saya sebelum saya belajar tentang hal di atas.
Saya berlari
console.log('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
melalui jjencode dan memutarkan hasilnya secara manual. Pasti ada lebih banyak optimasi yang bisa dilakukan.sumber
Befunge,
737259575553 byteCobalah online!
Ini adalah satu loop menghitung mundur dari
{
(yaitu satu karakter setelahz
). Pada iterasi pertama,"{"<
urutan mendorong dua salinan{
ke stack - satu menjadi penghitung loop awal, dan yang lainnya digunakan untuk mengurangi penghitung itu menggunakan urutan!!-
(dua membuat NOT1
, yang kemudian dikurangi). Pada iterasi berikutnya, penghitung lingkaran sudah ada di tumpukan, jadi hanya satu{
yang diperlukan untuk mengatur urutan penurunan.Sisa kode hanyalah ekspresi boolean panjang yang menghitung jika karakternya dalam jangkauan. Jika ya, cabang pada baris kedua terpecah untuk menuliskan nilainya. Jika tidak, cabang kanan membungkus untuk menguji apakah kita telah mencapai nol dan harus berakhir. Dua cabang bergabung di tengah untuk naik dan ulangi loop. Perhatikan bahwa semua perintah arah vertikal naik ke atas, karena kita tidak dapat menggunakan
v
, tapi itu tidak masalah karena penunjuk instruksi secara otomatis membungkus di bagian atas playfield.Berkat Mistah Figgins untuk awalnya datang dengan teknik yang lebih baik untuk kenaikan loop.
Tetapi terima kasih khusus kepada Jo King untuk pendekatan yang lebih baik menghitung mundur daripada naik, serta tata letak cabang yang lebih kompak.
sumber
v
karena ini adalah sumber terbatas, tetapi masih berfungsi dengan baik dengan a^
. Terima kasih.Jelly ,
1716 byteCobalah online!
Bagaimana itu bekerja
sumber
Brainfuck yang memodifikasi sendiri , 32 byte
Cobalah online!
xxd -r
-hexdump reversibel (mengandung unsintables):sumber
@/
dilakukan?`\x1a@\x1a/\n
ada karena codepoint mereka sangat berguna dalam bermain golf. Anda tidak dapat menghapusnya.+.
bukan.+
.C, 128 byte
Ya, C. Dan itu bahkan lebih pendek dari beberapa yang esoteris.
Panggil buffer yang
_
cukup besar dan kosongchar *
.Mungkin sedikit bergantung pada kompiler. Diuji menggunakan GCC; file disimpan dalam codepage 1252.
sumber
JavaScript (ES6),
812745657650536520416 byteSunting: Menggunakan pengkodean ISO8859-1, solusi ini adalah 416 byte, bukan 520 byte. Program lengkapnya adalah 432 byte, dengan mempertimbangkan tambahan 16 byte untuk
Ini adalah pengiriman fungsi, sebagai lawan dari program lengkap. Saya menghabiskan cukup lama bermain golf JJEncode (topi-tip untuk darrylyeo untuk itu), tetapi bukannya bermain golf
Saya bermain golf
di mana
Ø
diinisialisasi""
dalam overhead.Ditulis ulang dengan operator koma yang dikonversi ke baris baru:
Penjelasan
Script ini dimulai dengan menginisialisasi beberapa tipe bawaan dan memaksa mereka menjadi string. String yang bisa kita dapatkan tanpa menggunakan karakter alfanumerik adalah:
Dari string ini, dan digit yang diperlukan untuk referensi karakter individu, kita dapat memperoleh string
return
danconstructor
, yang dapat digunakan seperti:Konstruktor objek adalah
Object()
, dan konstruktornya adalahFunction()
, yang pada dasarnya dapat kita gunakaneval()
.Dalam hal ini, skrip yang disandikan untuk dieksekusi adalah
for
loop bersarang yang menggabungkan semua karakter alfanumerik ke string menggunakan titik kode mereka dan mengembalikannya.Untuk karakter alfabet dalam skrip yang disandikan yang tidak dapat diakses menggunakan built-in, JJEncode menggunakan oktal escapes untuk mewakili mereka, lalu menerjemahkan seluruh string dengan mengembalikannya dari fungsi dalam. Fungsi luar kemudian dapat dipanggil untuk mengeksekusi sumber.
Demo
sumber
Brain-Flak , 171 byte
Termasuk +3 untuk
-A
Cobalah online!
Mungkin ada cara untuk melakukan ini tanpa harus mengulangi add 1 "fungsi".
sumber
Julia 0,4 , 46 byte
Ini adalah fungsi generik yang mengembalikan array karakter.
Cobalah online!
Versi alternatif, 47 byte, hanya ASCII
Cobalah online!
sumber
J, 171 byte
Ow ... otakku sakit ... Coba online!
Ini agar Anda dapat melihat semuanya satu baris (meskipun tidak akan berjalan, dengan jeda baris.)
Hanya dijamin untuk bekerja dengan versi J
j805/j64/linux/release/commercial/www.jsoftware.com/2016-12-11T08:02:52
, dalam urutan itu. (Hanya 12 karakter pertama yang penting.)Penjelasan
Sebagian besar program dikhususkan untuk generasi konstan. Dengan konstanta yang diganti dengan nilai-nilai mereka, programnya terlihat seperti ini:
Dengan beberapa tanda kurung dihapus, dan beberapa nomor dibuat lebih bagus:
Ini terdiri dari sekelompok
,
dan,~
s, yang menambahkan dan menambahkan argumen. Berikut adalah nilai-nilai yang terpisah:":26
('.',~10{9!:14'')
'+/'
(":65 97 48)
','
(':',~12{9!:14'')
1
adalah26
sebagai string.9!:14''
menghasilkan string berikut di TIO:dengan
2
, kita memperoleh10
karakter th (i
darilinux
), dan menambahkan a.
ke akhir, menghasilkani.
.3
dan5
sudah jelas.4
adalah daftar angka65 97 48
sebagai string.6
mirip dengan2
, kecuali itu12
karakter th (u
darilinux
) dan menambahkan a:
sampai akhir, menghasilkanu:
.Ini, semuanya, menghasilkan
u:,65 97 48+/i.26
.".
mengevaluasi ini, memberi kami:(Catatan:
+/
adalah penambahan tabulasi.)Kemudian, dengan
62{.
, kita ambil62
karakter pertama dari ini, memberi kitaABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
.sumber
<:<.^^*_
yang menyimpan byte. Juga, saya mencoba membuat seluruh rentang dan menghapus simbol untuk mendapatkan':;<=>?@[\]^_`'-.~".(':',~(+:+:>.^*_){(*:>.^*_)!:(<:<.^^*_)''),":(#@}.@}.@}.@,~(+#\)],,~)(*:@#$])'+++++'
104 byte. Saya yakin itu bisa menjadi jauh lebih pendek05AB1E ,
181511 byte-4 Terima kasih kepada Adnan, karena jika ukuran input adalah 1, 05AB1E akan menggunakan 0 untuk b pada perintah pertama.
Cobalah online!
Saya mencoba begitu banyak pendekatan berbeda, tetapi poin-poin penting di sini yang menyulitkan:
sumber
You may print them in arbitrary order
kata tantangannya.•£•Ýç©á®þ«˜
juga berfungsi?Brainfuck, 55 byte
Keluaran:
Cobalah online!
Menginisialisasi rekaman ke 3 · 2 n , dan bekerja dari sana.
sumber
Perl 6 , 43 byte - tidak bersaing
Lambda yang mengembalikan daftar karakter.
Penjelasan:
Tergantung pada perbaikan bug pada penerjemah Rakudo Perl 6 yang hanya berkomitmen untuk repo git hari ini, dan belum menjadi bagian dari rilis Rakudo resmi. Bahkan, saya menemukan bug saat menjawab tantangan ini, dan berhasil diperbaiki dengan bantuan salah satu dev inti 6 Perl. Aturan situs ini, seperti yang saya pahami, tidak memungkinkan jawaban untuk bersaing dalam situasi seperti itu, jadi saya menandainya sebagai tidak bersaing.
sumber
PHP 7.0+, 110 byte
Tuhan memberkati string bitwise!
Ganti
\n
dengan baris * gaya NIX nyata.Itu ada dalam kode untuk menghindari masalah dengan baris baru, tetapi tidak dihitung dalam skor.
Ini melempar banyak peringatan, tetapi itu bisa ditekan dengan menambahkan
@
di depan setiap nyasar_
.Peringatan gratis , 113 byte
sumber
Bahasa mesin 65c02 + Apple] [ROM, 25 byte
Cetakan
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
.Harus mulai
$8000
.Membongkar
sumber
10, 15, 26, 32, 44, 96, 128, 162, 169, 175, 192, 202, 208, 224, 237, 249, 253
, yang memetakan ke karakter di↵.. ,`.¢©¯ÀÊÐàíùý
mana.
s adalah karakter yang tidak dapat dicetak. Itu validbash (di linux),
507493490485 byteini menyimpan array karakter dalam variabel global
__
itu perlu dijalankan pada mesin linux yang baru saja boot
/proc
, atau sesuatu seperti namespace pidpenjelasan:
untuk mencobanya kita dapat menambahkan
declare -p __
di akhir untuk menampilkan hasilnyasumber
/proc
. Sebenarnya/proc
tidak sepenuhnya diperlukan di Linux, meskipun Anda mungkin akan kesulitan menemukan distro modern tanpa itu.Javascript, 1273
13511610byteSolusi ini bekerja pada dasarnya dengan cara yang sama seperti dua jawaban yang lain di thread ini di sini dan di sini , di mana ia menggunakan surat dari
true
,false
,undefined
, dan[object Object]
string untuk membangun fungsi-fungsi yang dibutuhkan untuk menghasilkan surat-surat lainnya.Karena sejumlah besar huruf sudah dimasukkan ke dalam objek, saya mencoba menambahkan semua huruf sangat kecil yang tersisa dan angka-angka ke objek, dan kemudian diterapkan
toUpperCase
ke semua nilai dalam objek untuk menghasilkan huruf majuskule yang hilang.Memperbarui:
Saya dapat meningkatkan cara nilai oktal sedang diatur, tetapi mereka masih mengambil 13 x 30 byte (atau masing-masing 30 byte setelah saya mengubah angka ke tombol yang berbeda), masing-masing sekarang mengikuti umum ini pola:
$.ž=\'\\'+$.一+$.七+$.二+'\';
.49 byte tambahan dapat dengan mudah diambil dengan mengubah tombol angka menjadi 2 byte karakter.
Pengajuan saat ini:
sumber
C (dentang) , 164 byte
Cobalah online!
Ini adalah fungsi rekursif yang mendapatkan karakter dengan mulai dengan nilai 1 (mengurangi dari diri dan penambahan), dan membuat semua angka lain dari itu.
Tidak Disatukan / Penjelasan:
sumber
CJam , 15 byte
Cobalah online!
Penjelasan
sumber
𝔼𝕊𝕄𝕚𝕟, 8 karakter / 19 byte
Coba di sini!
ᶐ
adalah alfabet huruf besar,ᶛ
adalah alfabet huruf kecil, dan⩥Ⅹă⬯
berkisar (⩥
) dari0
hingga10
(Ⅹ
, angka romawi unicode) dikurangi1
, bergabung dengan (ă
) tidak ada (⬯
).sumber