Intro
Setiap tahun, Dyalog Ltd. mengadakan kompetisi siswa. Tantangannya adalah untuk menulis kode APL yang baik . Ini adalah edisi kode golf- bahasa agnostik dari masalah kedelapan tahun ini.
Saya memiliki izin eksplisit untuk mengirimkan tantangan ini di sini dari penulis asli kompetisi. Jangan ragu untuk memverifikasi dengan mengikuti tautan yang disediakan dan menghubungi penulis.
Masalah
Diberikan daftar Boolean *, "matikan" semua Kebenaran setelah Kebenaran pertama.
Tidak Ada Kebenaran? Tidak masalah! Cukup kembalikan daftar yang tidak dimodifikasi.
Contohnya
[falsy,truthy,falsy,truthy,falsy,falsy,truthy]
→ [falsy,truthy,falsy,falsy,falsy,falsy,falsy]
[]
→ []
[falsy,falsy,falsy,falsy]
→ [falsy,falsy,falsy,falsy]
* Semua kebenaran Anda harus identik, dan semua kesalahan Anda harus identik. Ini termasuk output.
Jawaban:
Python 2 , 35 byte
Cobalah online! Input dan output adalah garis Benar / Salah.
Berdasarkan solusi Dennis . Mengubah variabel
True
menjadiFalse
setelahTrue
masukan ditemui. Dengan begitu, setiap masukan lebih lanjutTrue
akan dievaluasiFalse
dan dicetak seperti itu.Redefinisi adalah
True&=b<1
, yaituTrue = True & (b<1)
. Ketika inputb
adalahTrue
, maka(b<1)
adalah False (karenaTrue==1
), sehinggaTrue
menjadiFalse
.sumber
True, False = False, True
.APL , 2 byte
Mengevaluasi fungsi "memindai menggunakan kurang dari". Cobalah online!
Penjelasan
Dalam APL, operator
\
(pemindaian) mengurangi setiap awalan nonempty dari array dari kanan menggunakan fungsi yang disediakan. Sebagai contoh, mengingat array0 1 0
, ia menghitung0
(awalan panjang 1),0<1
(awalan panjang 2) dan0<(1<0)
(awalan panjang 2) dan menempatkan hasilnya ke array baru; kurung kaitkan ke kanan. Mengurangi dengan<
dari hasil yang tepat1
tepat ketika elemen terakhir dari array1
dan sisanya0
, jadi awalan yang sesuai dengan yang paling kiri1
dikurangi menjadi1
dan yang lainnya menjadi0
.sumber
Aceto ,
1917 bytes tidak bersaingVersi baru (17 byte):
Versi baru ini mengambil karakter satu per satu dan paling baik dijalankan dengan
-F
opsi. Ia bekerja serupa, tetapi tidak identik dengan solusi sebelumnya:Jawaban lama (19 byte):
(Non-bersaing karena saya harus memperbaiki dua bug pada penerjemah)
Ini adalah jawaban Aceto pertama yang menyoroti apa yang bisa dilakukan dengan relatif baik, menurut saya. "Daftar" adalah aliran input, dengan satu input per baris, "1" untuk true, dan "0" untuk false, dengan string kosong yang menandakan akhir daftar.
Program Aceto berjalan pada kurva Hilbert, mulai dari kiri bawah, dan berakhir di kanan bawah. Pertama, kita
r
menghasilkan string,d
meng-uplicate, dan meniadakan (!
) itu, mengubah string kosong menjadi True, yang lainnya menjadi False. Lalu ada mirror horizontal bersyarat (|
): Jika elemen teratas pada stack benar, mirror horizontal. Ini terjadi ketika string kosong. Jika kita melakukan mirroring, kita mendarat diX
, yang membunuh penerjemah.Kalau tidak, kita mengonversi salinan yang tersisa pada tumpukan ke
i
nteger dan melakukan mirror horizontal bersyarat lainnya: Kali ini, karena 1 benar dan 0 palsu, kita mirror jika kita melihat nilai sebenarnya (pertama). Jika kita tidak mirror (jadi kita melihat 0) kitap
mematahkan apa yang ada di stack (karena stack kosong, nol) dan melompat keO
rigin kurva, di mana kita mulai, memulai seluruh proses lagi.Kalau tidak, ketika kita melihat 1, kita mirror dan mendarat di
u
, yang membalikkan arah kita bergerak pada kurva Hilbert.1p
mencetak 1, dan sekarang kita melanjutkan hal yang samaO
kita akan pergi jika kita melihat 0, tetapi karena kita berada dalam "mode terbalik", asal kita berada di kanan bawah , jadi kita lompat ke sana.Sekarang kita punya
r
string lain, dan meniadakannya. Jika string kosong, dan karena itu elemen tumpukan atas adalah benar, tidak`
akan luput dari perintah berikutnya ( ), membuat kita berhenti.X
Jika tidak (jika string tidak kosong), kita jangan melarikan diri
X
dan mengabaikannya. Dalam hal ini, kita pergi ke kiri (<
),p
rintis 0 (karena tumpukan kosong), dan melompat kembali keO
rigin.sumber
Java8,
2419 BytesSemoga ini legal; Saya mendapat kesan input / output tidak harus mengevaluasi benar / salah dalam bahasa. Membutuhkan waktu selama input dan memberikannya sebagai output, dengan yang benar dan nol menjadi salah dalam representasi biner. Sebagai contoh, biner 00101 adalah 5 dan akan mengembalikan biner 00100 yaitu 4.
Lima byte berkat @puhlen
sumber
Long::highestOneBit
yang menghasilkan hasil yang identik dengan sintaks yang lebih pendekjava.lang
Paket ini diimpor secara default. Dari spec bahasa "Unit kompilasi secara otomatis memiliki akses ke semua tipe yang dideklarasikan dalam paketnya dan juga secara otomatis mengimpor semua tipe publik yang dideklarasikan dalam paket yang telah ditentukan java.lang."Retina , 6 byte
Cobalah online!
Input adalah daftar
0
s (untuk Salah) dan1
s (untuk Benar).Cocokkan semua
1
dan ganti masing-masing kecuali yang pertama (1>
) dengan a0
.sumber
V , 7 byte
Cobalah online!
Pengiriman V pertama saya! \Hai/
Bagaimana itu bekerja
sumber
r0
dengan<C-x>
untuk mengurangi yang dan menyimpan byte.Haskell , 25 byte
Fungsi anonim mengambil dan mengembalikan daftar
Bool
s.Gunakan sebagai
(foldr(\x l->x:map(x<)l)[])[False,True,False,False]
.Cobalah online!
Bagaimana itu bekerja
x
adalah elemen yang harus ditambahkan ke sublistl
.False
membandingkan kurang dariTrue
, sehinggamap(x<)l
akan membuat semuaTrue
s dil
dalamFalse
jikax
iniTrue
.sumber
Jelly , 4 byte
Cobalah online!
Berikut adalah algoritma yang agak berbeda dengan sebagian besar solusi bahasa golf lainnya (walaupun setelah saya mempostingnya, saya perhatikan bahwa solusi R juga menggunakan algoritma ini), dan mengikat dengan pemegang catatan Jelly saat ini.
Penjelasan
Selama semua elemen di sebelah kiri elemen adalah 0, jumlah kumulatif hingga elemen akan sama dengan elemen itu sendiri. Di sebelah kanan 1 pertama, keduanya berbeda (karena kami sekarang menambahkan total elemen yang tidak nol ke kiri). Jadi,
+\=
beri kami daftar yang berisi 1 (yaitu benar) hingga dan termasuk elemen kebenaran pertama. Akhirnya, logis DAN dengan daftar asli akan memberi kita 1 hanya untuk elemen kebenaran pertama.sumber
JavaScript (ES6),
3326 byteI / O dalam susunan 0s dan 1s.
sumber
05AB1E , 6 byte
Kode:
Penjelasan:
Menggunakan penyandian 05AB1E . Cobalah online!
sumber
1k>sƶ-_
lain, lebih buruk. Thelift
ide mungkin memiliki potensi sekalipun.Simulator mesin Turing , 39 byte
Cobalah online!
sumber
brainfuck , 55 byte
Cobalah online!
sumber
Jelly , 4 byte
Port jawaban 05AB1E saya.
Penjelasan (argumen α ):
Cobalah online!
sumber
R , 24 byte
Cobalah online!
Contoh:
Untuk
FALSE TRUE TRUE FALSE
cumsum(T<-scan(,F))==T
pengembalian inputTRUE TRUE FALSE FALSE
. F dalam pemindaian memastikan input logis.FALSE TRUE TRUE FALSE
danTRUE TRUE FALSE FALSE
adalahFALSE TRUE FALSE FALSE
. Satu&
melakukan perbandingan elementwise.sumber
Oktaf, 23 byte
Cobalah online!
Perbedaan pertama dari maks kumulatif daftar.
sumber
J , 3 byte
Mendefinisikan kata kerja monadik. Ini adalah port yang sepele dari jawaban APL saya . Cobalah online!
sumber
Python, 58 byte
Jika
x[i]
salah, hasilnya salah; jika tidak, ia memberikan apakah elemen adalah kejadian pertama dalam array itu sendiri atau tidak.sumber
PHP, 37 byte
sumber
Perl 5, 20 byte
Truthy is
1
dan falsey is''
(string kosong).Penjelasan:
map
loop atas elemen daftar itu@_
, argumen diteruskan ke subrutin, pengaturan setiap elemen menjadi $ _ secara lokal dan mengembalikan array nilai pengembalian yang dihitungnya dari setiap elemen.$_&&!$x++
output$_
jika$_
falsey dan!$x++
jika itu benar. (Perhatikan bahwa && adalah hubungan arus pendek, jadi!$x++
tidak dieksekusi sampai nilai kebenaran pertama tercapai).$x++
mengembalikan0
(yang merupakan kesalahan) pertama kali dijalankan dan kemudian bertambah setiap kali (dan tetap benar). Yang!
meniadakan$x++
, dan karenanya mengembalikan kebenaran saat pertama kali ditemui dan memalsukan sesudahnya.sumber
sub{...}
).Pyth - 9 byte
Coba di sini
sumber
m&!~|Z
.Python 2 ,
4536 byteInput dan output adalah satu Boolean ( Benar atau Salah ) per baris.
Cobalah online!
sumber
C #, 77 byte
Kompilasi ke a
Func<bool[], bool[]>
. Tidak ada yang pintar benar-benar, hanya solusi lurus ke depan.sumber
sed ,
1619 byte1518 byte sourcecode + 1 byte untuk -r flag (atau -E flag untuk BSD sed).Cobalah online!
Sunting: Terima kasih Riley karena menunjukkan kesalahan.
sumber
Jelly , 4 byte
Cobalah online!
Bagaimana?
Ini melakukan apa yang ditanyakan dalam arti harfiah:
sumber
c (dengan built-in gcc), 40
Pendekatan yang sedikit berbeda:
Ini mungkin dinyatakan tidak valid - dalam hal ini saya akan dengan senang hati menandainya sebagai tidak bersaing.
Input dan output "array" adalah bilangan bulat 32-bit yang tidak ditandatangani - ini membatasi ukuran daftar input menjadi persis 32 - ini mungkin merupakan diskualifikasi. Jika input kurang dari 32 bit, maka mungkin diisi dengan nol bit pada akhirnya.
Cobalah online .
sumber
Batch,
8573 byteMengambil input sebagai argumen baris perintah. Sebagai contoh:
1.bat 0 1 0 1 0 0 1
Versi sebelumnya
sumber
Brain-Flak , 230 byte
Saya akan menjelaskan segera tapi ibu saya memasakkan saya kentang gorengCobalah online!
Terima kasih khusus
Terima kasih khusus kepada Wheat Wizard dan Riley yang telah membantu saya mendapatkan satu ton kode!
sumber
Python 3,
696664605453 byteMengambil array
false
s dantrue
s. Ini adalah daftar pemahamanfalse
s kecuali jika nilai iterasi saat ini adalahtrue
dan itu adalah yang pertamatrue
dalam input.Ini sepertinya agak lama (dan ini lambda pertama saya), jadi jika Anda bisa menemukan cara untuk bermain golf, itu akan sangat dihargai!
sumber
0 for
0for
.Brain-Flak ,
146144 byteCobalah online!
sumber
Perl 5 , 12 byte
10 byte kode + 2 untuk
-pl
.Cobalah online!
sumber