Tantangan ini terinspirasi oleh Matematika adalah fakta. Pemrograman tidak .
Notasi matematika untuk faktorial, atau fakta adalah tanda seru !
. Tanda seru juga merupakan simbol umum untuk not
banyak bahasa pemrograman.
Tantangan:
Ambil string, berisi angka, dan karakter: + !
sebagai input dan output sebagai berikut:
Segala sesuatu di depan tanda seru harus dievaluasi sebagai ekspresi matematika, demikian 2+2
juga halnya 4
.
Segala sesuatu setelah tanda seru harus ditambahkan sebagai aksesori untuk apa pun yang ada di depannya, jadi: 2+2!5
harus memberi 45
, karena 2+2=4
, dan 5
merupakan aksesori. 2+2!5+5
harus memberi 410
.
Karena !
juga berarti not
, apa pun yang bukan aksesori setelah fakta tidak boleh ditambahkan. Jadi, 2+2!!5
harus memberi 4
, karena 5
bukan aksesori. Sekarang, not(not(true))==true
jadi 2+2!!!5
harus memberi 45
. 2+2!!5!5+5
harus memberi:, 410
karena 2+2=4
, kemudian diikuti oleh faktorial dan !5!5+5
. Yang pertama 5
bukan fakta, tetapi 5+5
setelah tanda seru lain, dan karena itu fakta, lagi.
Klarifikasi:
- Tanda seru tidak akan berdekatan dengan tanda
+
di kedua sisi. - Tidak akan ada yang memimpin
+
untuk angka (itu5
, tidak+5
). - Anda dapat memasukkan nol di depan jika itu adalah hasil dari ekspresi di depan yang pertama
!
. Keduanya4
dan04
diterima sebagai input:0+0!4
Ringkasan eksekutif: mengevaluasi setiap jumlah (memperlakukan !
sebagai pemisah). Kemudian buang semua angka yang muncul setelah angka genap !
(dihitung dari awal string). Lalu hapus semua !
.
Kasus uji:
!
<- Empty string
5
5
12!
12
!87
87
!!5
<- Empty string
5+5!2+2
104
5+5!!2+2
10
1!2!3!4!5!6!7!8!9
12468
10+10!!2+2!!3+3!4+4
208
2!!3!5
25
2!!3!5!7
25
10!!!!!!!5
105
Ini adalah kode-golf sehingga kode terpendek dalam byte (dalam setiap bahasa) menang! Penjelasan sangat dianjurkan!
25
(lihat test case tambahan). Yang lebih penting2!!3!5!7
masih akan memberi25
, karena ada jumlah genap!
kiri7
(jadi Anda tidak hanya menghitung run tepat di depan nomor, tetapi semua!
kiri itu).Row
?Jawaban:
Retina ,
353129 byteDisimpan 4 byte dengan mengambil beberapa inspirasi dari produk ETH .
Terima kasih kepada Leo karena telah menyimpan 2 byte lagi.
Cobalah online!
sumber
JavaScript (ES6),
5856 byteDisimpan dua byte berkat Martin Ender .
Mungkin ditingkatkan entah bagaimana ...
sumber
replace
.1+1!5
. Saya pikir Anda lupaeval
sedikit sebelum!
.Jelly , 16 byte
Cobalah online!
Penjelasan
Pengamatan utama di sini adalah bahwa kita dapat menjalankan langkah "out of order"; alih-alih mengevaluasi jumlah kemudian mengabaikan yang tidak kita sukai, kita dapat mengabaikan jumlah dalam posisi yang tidak valid, lalu mengevaluasi sisanya.
Mengevaluasi jumlah seperti
"10+10"
akan mengevaluasinya ke angka, misalnya20
, kemudian mengevaluasinya menjadi string"20"
,. Mengulangi proses itu tidak memiliki efek tambahan (ini idempoten). Dengan demikian, kami secara efektif mengevaluasi setiap elemen string, kecuali string nol, yang tetap tidak dievaluasi karena memiliki panjang nol.sumber
µ
di suatu tempat (danµ
tidak bekerja di dalam satu lingkaran, yang berarti bahwa Anda akan memerlukan sesuatu bahkan lebih verbose). Saya berhasil membuatnya bekerja, sepertiṣ”!µḢW;m2$ȧVṾ$$€
, tetapi tidak lebih pendek (dan memiliki tumpukan tanda-tanda dolar yang cenderung terjadi ketika Anda mendorong Jelly ke tepi kemampuannya untuk bersarang di struktur kontrol.)Jelly , 18 byte
Cobalah online!
Bagaimana?
sumber
0+0
di tengah input (di tempat di mana tidak dibuang); menghasilkan string nol, meskipun harus menghasilkan angka 0.CJam , 20 byte
Cobalah online! (Suite tes yang dipisahkan dengan linefeed.)
sumber
Ruby ,
5856 + 1 =5957 byteMenggunakan
-p
bendera. -2 byte dari Tutleman .Cobalah online! (Baris kode tambahan ditambahkan sehingga akan mengambil semua jalur input dan mencetak output di jalur yang berbeda.)
sumber
eval$1
, bukan?Batch,
192184 byteHarus menangani string kosong tidak nyaman.
sumber
Pip , 18 byte
Saya pikir ini adalah yang terpendek yang didapat ... meskipun saya mengatakan itu sekitar tiga iterasi yang lalu juga.
Mengambil input sebagai argumen baris perintah. Cobalah online!
Penjelasan
sumber
R, 95 byte
Mungkin ada beberapa ruang untuk perbaikan tetapi saat ini adalah yang terbaik yang bisa saya lakukan.
sumber