Wise adalah bahasa bitwise sederhana yang saya rancang beberapa waktu lalu. Hal ini didasarkan pada operasi bitwise Python . Ini memiliki beberapa operasi sebagian besar adalah sama atau sangat mirip dengan simbol yang setara dengan Python.
:
Gandakan bagian atas tumpukan?
Putar bagian atas tumpukan ke bawah!
Putar bagian bawah tumpukan ke atas[
]
lingkaran sementara bagian atas tumpukan tidak nol~
bukan bagian atas tumpukan (-(n+1)
)-
negasikan bagian atas tumpukan (-n
)>
bitshift bagian atas tumpukan satu kali ke kanan (n//2
)<
bithift bagian atas tumpukan sekali ke kiri (n*2
)^
xor dua item teratas dari tumpukan ( Sama seperti Python )|
atau dua item teratas dari tumpukan ( Sama seperti Python )&
dan dua item teratas dari tumpukan ( Sama seperti Python )
Membuat bilangan bulat di Wise cukup sederhana, Anda dapat membuat nol dengan ::^
dan menambahkannya dengan ~-
sehingga Anda membuat nol dan menambahnya beberapa kali. Namun jika kita menghapus -
hal - hal menjadi sedikit lebih menarik.
Kami masih dapat membuat setiap angka menggunakan operasi yang tersisa. Misalnya di sini adalah 3
~<<~
Ini bekerja karena ~
mengubah nol, string 0
bit tak terbatas , menjadi negatif, string tak terbatas 1
bit, masing-masing <
menambahkan 0
sedikit ke akhir, ketika kita selesai kita lakukan ~
yang mengubahnya masing-masing menjadi string 0
s diikuti oleh dua 1
s , atau seperti kebanyakan orang menyebutnya 3.
Tugas
Tulis sebuah program yang ketika diberi bilangan bulat positif akan menampilkan program Wise yang akan membuat angka n
tanpa -
sumbernya (sumber output, Anda dapat menggunakan -
sumber Anda sendiri). Anda dapat berasumsi bahwa sudah ada nol di atas tumpukan.
Ini adalah kode-golf bukan meta-golf sehingga Anda harus bertujuan untuk meminimalkan kode sumber yang menghasilkan belum tentu output.
Keluaran contoh
Daftar ini tidak lengkap mereka hanya mungkin keluaran
1 -> ~<~
2 -> ~<~<
3 -> ~<<~
4 -> ~<~<<
5 -> ~<~:<<|
6 -> ~<<~<
7 -> ~<<<~
8 -> ~<~<<<
9 -> ~<~:<<<|
10 -> ~<~:<<|<
11 -> ~<<~:><<<|
12 -> ~<<~<<
13 -> ~<<~:<<<|>
14 -> ~<<<~<
15 -> ~<<<<~
16 -> ~<~<<<<
sumber
positive integers
:
diterapkan pada tumpukan kosong mendorong a0
. Saya pikir ini harus ditentukan, karena tidak jelas bahwa duplikasi dari tumpukan kosong harus memberikan0
Jawaban:
Japt , 10 byte
Cobalah online!
Ide dasar: ambil representasi biner dari angka tersebut, dan petakan
0
ke<
dan1
ke~<~
. Output untuk 1-10:sumber
~~
JavaScript (ES6),
3433 byteBerfungsi untuk integer 32-bit.
sumber
Haskell , 38 byte
Saya merasa PPCG benar-benar meningkatkan Haskell saya. Membelai kucing putih.
f
mengambilInt
dan mengembalikan aString
.Cobalah online!
(Ngomong
<$f
-ngomong, itu maksud saya . Itu menghemat satu karakter\_->
.)Atau, panjang yang sama tetapi kurang jahat (
(l!!)
adalah fungsi anonim):Cobalah online!
Keduanya menggunakan representasi yang sama dengan jawaban JET @ETHproductions, meskipun terutama yang pertama mungkin memberikan beberapa redundan
<
di awal.Yang pertama menghitung semua kombinasi
n
"<"
dan"~<~"
string, kemudian indeks ke dalam daftar yang dihasilkan.Yang kedua secara rekursif menghitung daftar tak terbatas yang dibentuk dengan mulai dengan
""
dan kemudian membangun elemen baru dengan menambahkan"<"
dan"~<~"
merangkai ke setiap elemen yang sudah ada dalam daftar (sebenarnya itu sedikit lebih pendek untuk juga membiarkan""
bisa berubah menjadi"<"
.)sumber
<$f
kerjanya? Beberapa contoh functor aneh?Ruby ,
11811610910710591 byteDisimpan 2 byte berkat cyoce!
Cobalah online!
Ini adalah fungsi yang mengambil integer sebagai input dan mengembalikan string yang mewakili integer di Wise. Anda dapat menemukan versi tanpa ungolfed sini , yang menguji program ini pada semua bilangan bulat dari 1 hingga
Gagasan dasarnya adalah merekam "kumpulan" konstanta. Kemudian, dengan setiap "langkah", konstanta ditambahkan ke kumpulan untuk setiap fungsi yang mungkin. Saya telah memilih fungsi
~
,,<
dan>
, yang saya yakin cukup untuk mewakili setiap angka. (Setidaknya, setiap angka di bawah 10.000.)sumber
dup
sebagai ganticlone
iircdup
?map
tidak memodifikasi receivernya.Python2,
545251 byte.Terima kasih kepada Wheat Wizard untuk menghemat 2 byte, dan Ørjan Johansen untuk satu byte! Ini menggunakan ide yang sama dengan jawaban Japt ETHproduction, tetapi dengan string pengganti yang berbeda (yaitu menggunakan representasi biner)
sumber
[
]
sekitar generator bagian dalamjoin
.join
dapat menggunakan generator sebagai argumennya.'>~<~'*int(i)
mungkin menghemat satu byte.05AB1E , 11 byte
Cobalah online!
Mirip dengan jawaban Japt produk ETH.
Disimpan 4 byte berkat @Adnan!
sumber
'
). Anda juga dapat menggunakan pengindeksan, yang seharusnya memberi Anda 11 byte :).0
ke elemen nol dan1
ke elemen pertama (karena vektor secara otomatis). Berikut ini adalah contoh yang lebih jelas tentang cara kerjanya.Python 2 ,
123110 byteCobalah online!
Juga sebagai a
lambda
Cobalah online!
Bisa lebih pendek tapi ini solusinya. Dibutuhkan representasi biner dan mengubahnya menjadi kode.
sumber
Japt , 23 byte
Cobalah online!
sumber
Jelly,
1110 byteIni adalah versi porting dari jawaban Japt ETHproduk. Omong-omong tentang produk ETH, mereka menyelamatkan saya satu byte!
sumber
<
, yang dalam Wise menghasilkan 0~<~
saya