Tulis program yang berjalan tanpa batas yang melaporkan berapa banyak contoh dari dirinya sendiri yang sedang berjalan. Setiap instance dari program juga harus melaporkan urutan pembukaan dari semua instance yang sedang berjalan lainnya.
Contoh
Pengguna meluncurkan program untuk pertama kalinya - kami akan memanggil Instance 1. Instance 1 ini ditampilkan 1/1
, karena ini adalah instance pertama yang diluncurkan dari total 1 instance yang sedang berjalan.
Saat Instance 1 sedang berjalan, pengguna meluncurkan program yang kedua kalinya menjadi Instance 2. Instance 1 sekarang ditampilkan 1/2
, menjadi instance pertama dari total 2 instance yang sedang berjalan. Instance 2 ditampilkan 2/2
, karena ini adalah instance kedua dari total 2 instance yang sedang berjalan.
Katakanlah pengguna terus menelurkan lebih banyak contoh sampai ada 5 dari mereka. Dalam rangka peluncuran, output mereka: 1/5
2/5
3/5
4/5
5/5
.
Sekarang, katakanlah pengguna memutuskan untuk menghentikan Instance 3. Instance 4 kemudian menjadi Instance 3 baru dan Instance 5 Instance 4 baru, karena mereka masing-masing adalah contoh ketiga dan keempat yang telah diluncurkan dari apa yang sekarang total 4 contoh. Jadi perubahan output setiap instance adalah sebagai berikut:
1/5
→1/4
2/5
→2/4
3/5
→ (Dihentikan)4/5
→3/4
5/5
→4/4
Aturan
- Anda dapat menampilkan dua angka (nomor contoh, jumlah total) dalam format apa pun yang masuk akal.
- Setiap kali sebuah instance diluncurkan atau diakhiri, semua instance lain harus memperbarui output masing-masing dalam waktu 100 milidetik.
- Jika Anda memilih untuk memperbarui output dengan mencetak ke baris baru (atau format output "tambahan" lainnya, bukan pengganti), Anda harus mencetak hanya ketika jumlah instance berubah, dan tidak pada waktu lain.
- Ini golf kode. Program terpendek dalam byte menang.
- Dalam jawaban Anda, Anda disarankan untuk menentukan apa yang harus dilakukan pengguna untuk membuka lebih dari satu contoh, dan / atau merekam screencast untuk diperagakan.
Jawaban:
APL (Dyalog Unicode) , 39 byte SBCS
Fungsi awalan anonim. Panggil dengan menelurkan argumen dummy
⍬
(vektor numerik kosong), yaituf&⍬
. Kueri menjalankan utas saat ini⎕TNUMS
dan bunuh satu atau beberapa utas dengan⎕TKILL n
. Output thread berubah dalam [nomor sendiri, jumlah total] segera setelah mereka mendapatkan waktu prosesor, yaitu cukup banyak secara instan.Cobalah online!
{
...}
lambda anonim di mana⍵
argumen (awalnya⍬
, vektor numerik kosong)n[
...]
indeksn
(harus didefinisikan) dengan:⎕TNUMS~0
semua T hread Bil bers kecuali nomor0
(REPL)n←
simpan sebagain
⍋
permutasi yang akan mengurutkan naiksekarang kami memiliki urutan utas aktif
⍵≡
jika argumennya identik dengan itu ...:
kemudian:∇⍵
Ekor berulang pada argumen⋄
lain:⊢/n
nomor utas paling kanan⎕TID,
ini T hread ini ID (nomor benang) ditambahkan di bahwan⍳
menemukan ɩ ndices dari dua⎕←
cetak itu ke STDOUTn⊣
Buang yang mendukungn
∇
ulangi itusumber
Python 3,
694691 bytemain.py
s (kependekan dari server.py)
Kenapa begitu lama?
Sayangnya, fungsi ini tampaknya tidak dibangun ke dalam Python. Saya tergoda untuk menggunakan multi-pemrosesan, tetapi itu tampaknya tidak sesuai untuk apa yang kami lakukan (membiarkan pengguna membuka program dari mana saja).
Jadi, saya mengambil saran dari posting StackOverflow yang saya lihat (saya salah menempatkan tautan) dan saya mengimplementasikannya menggunakan
bottle
. (Saya terbuka untuk saran baru).Saya menggunakan perpustakaan Botol untuk menjalankan server mini http saya sendiri sehingga semua contoh yang berbeda dapat berkomunikasi satu sama lain. Saya kira saya bisa menggunakan soket, meskipun saya tidak yakin itu akan mengurangi jumlah byte.
Saya punya dua file terpisah,
s
danmain.py
.s
kekurangan server dan karena muncul dalam kode, saya pikir saya harus membuat nama sesingkat mungkin.API Komunikasi Server Web
Server web hanya menerima permintaan POST dan hanya menanggapi input di dalam tubuh POST.
Semua permintaan melalui
/
(ataulocalhost/
).Masukan yang valid:
*
dalam postingan akan meminta server untuk mengembalikan id baru untuk menetapkan klien.-<id>
dalam postingan akan menghapus id dari daftar aktif id, mengurangi semua id yang relevan dan jumlah total.Menutup program
Saya menerapkan multi-threading sehingga menutup program ini semudah menekan enter.
Membuka program
Jika Anda tidak memiliki pengaturan Python dengan benar di dalam variabel lingkungan Anda cukup buat
.bat
file dan letakkan di folder yang sama denganmain.py
dans
dengan kode berikut (jika Anda menginstal Python untuk semua pengguna, itu mungkin berada di lokasi yang berbeda):Kredit
Dari 694 hingga 691 byte Adám .
sumber
:8080/
?/
.sh + linux / alat unix, 128 byte
jika tidur mendukung angka floating point
jika tidak, 159 byte
atau tidur bisa diganti dengan
:
(tanpa op), tetapi itu akan membuat penantian aktif.sumber
Java 8, (199 + 301 =) 500 byte
M.jar: (program utama)
S.jar: (server untuk mengontrol aliran program)
Penjelasan kode:
Penjelasan umum:
Semua program akan menyimpan id mereka sendiri; jumlah total contoh yang tersisa; apakah pemindahan terjadi; dan program mana yang ditutup.
Server hanyalah kelas pembungkus untuk memulai dan menghentikan program. Ketika pengguna memasukkan
0
, itu akan memulai program baru. Ketika input yang digunakan bilangan bulat positif (mis2
), itu akan menutup program dengan id itu. (Catatan: S.jar memiliki M.jar sebagai perpustakaan untuk mengaksesnya.)Gif untuk melihatnya dalam aksi:
Pikiran untuk golf lebih lanjut:
Saya baru saja memperhatikan ketika menulis penjelasan bahwa saya hanya menggunakan
ObservableList
untuk itu add / remove-ListChangeListener
, dan tidak menggunakan kontennya sama sekali. Menghapus ini dan menggunakan jenis lain dari Pendengar statis mungkin lebih pendek.sumber