Tempat:
Bagi mereka yang berada dalam jaringan, kemungkinan besar Anda telah mengirim ping ke atau dari beberapa perangkat untuk memastikan semuanya terhubung dengan benar. Cisco, sebuah perusahaan populer di jaringan [rujukan?] , Memiliki perintah untuk itu di iOS mereka yang terlihat seperti ini:
( Sumber gambar )
Tantangan Anda adalah membuat ulang sebagian dari gambar ini. Bagian yang kita lewati adalah baris pertama ( Type escape sequence to abort.
) seluruhnya, bersama dengan alamat IP dan waktu pulang-pergi.
Anda akan mulai dengan mengeluarkan yang berikut:
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
Anda kemudian akan mensimulasikan permintaan gema keluar. Setiap permintaan akan mulai dengan menunggu 2 detik dan kemudian menghasilkan respons. Respons gema yang berhasil diwakili oleh a!
, yang gagal oleh .
. Kami tidak akan benar-benar mengirim paket tetapi untuk mewakili kehilangan paket, program Anda harus secara acak memilih antara dua opsi dengan peluang yang tidak nol untuk masing-masing paket. Baris ini akan mulai kosong dan setiap centang akan menambahkan karakter lain.
Setelah gema kelima, garis persentase akan dikeluarkan dan program kemudian harus berakhir. Baris persentase akan dalam format
Success rate is $p percent ($s/5)
di mana $p
di regex 0|20|40|60|80|100
dan $s
jumlah gema yang sukses. Layar harus diperbarui setelah setiap periode tunggu dengan menggambar ulang negara baru atau menambahkan ke garis gema yang ada. Ini termasukSending
garis.
Contoh dijalankan: (Jumlah centang tidak boleh ditampilkan dan ada untuk memperjelas seperti apa tampilan pada setiap langkah waktu)
#Tick 0
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
#Tick 1
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
.
#Tick 2
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
.!
#Tick 3
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
.!.
#Tick 4
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
.!.!
#Tick 5
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
.!.!.
Success rate is 40 percent (2/5)
Memasukkan:
Tidak ada input yang dapat digunakan disediakan.
Keluaran:
Format apa pun yang masuk akal. Contoh hasil akhir terlihat seperti ini:
Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:
...!!
Success rate is 40 percent (2/5)
Aturan:
- Anda harus menambahkan ke garis gema atau menggambar ulang layar setelah setiap centang.
!
dan.
tidak harus memiliki kemungkinan yang sama, hanya keduanya mungkin.- Berjalan berturut-turut harus dapat menghasilkan hasil yang berbeda
- Gif atau webms dari output Anda akan menjadi keren. Tidak ada bonus atau apapun untuk itu.
- Standar Lubang terlarang
- Ini adalah kode-golf
Jawaban:
C (gcc) , 172 byte
Jadi, saya mencukur 6 byte kekalahan dari hal ini dengan beberapa tipuan yang cukup konyol. Kompilasi dengan
-DK=!sleep(2)-putchar(rand()%2?33:46)/46
. Tergantung padasleep()
fungsi yang didefinisikan dalam pustaka standar sistem. Tidak berulang atau berulang.Cobalah online!
Penjelasan
Solusi ini tergantung pada tiga detail implementasi / runtime yang penting. Pertama,
sleep()
jangan sampai terputus , misalnya melalui sinyal. Kedua, penambahan dan pengurangan diselesaikan secara berurutan dari kiri ke kanan. Ketiga, argumen untukprintf()
harus diselesaikan dari kanan ke kiri.Dengan itu, mari kita selidiki hal ini.
Argumen kompiler
Jadi, mulai dari kiri (yaitu seperti itu harus menyelesaikan), kita miliki
sleep()
.sleep()
mengembalikan jumlah detik yang tersisa saat kembali, jadi kami berharap pengguna (dan proses lainnya) ramah dan tidak mengganggu tidur kami. Kami mengambil pelengkap logis, dan karena dalam kasus kamisleep()
akan selalu kembali0
, hasilnya adalah1
. Lebih lanjut tentang pentingnya nanti.Selanjutnya, kita masuk
putchar()
.putchar()
mencetak karakter 1-byte tunggal, dan mengembalikan nilai byte. Jadi, kita mendapatkan nilai acak di dalamnya, menghitung modulo-2 untuk pemisahan 50-50 yang bagus (meskipun dengan entropi mengerikan), dan kemudian ternary-kondisikan ke dalam karakter yang kita inginkan -! (33)
dan. (46)
. Kemudian kami membagi nilai kembaliputchar()
dengan46
.Sekarang, pembagian itu akan kembali
0
untuk!
dan1
untuk.
- jadi kami mengambil 1 (dari!sleep()
) dan mengurangi hasil pembagian itu. Presto!Oke, ada sedikit masalah. Ketika Anda menulis sesuatu ke buffer di C (yaitu
stdout
), itu tidak harus menulis ke penerima segera. Bahkan, ketika saya menjalankan ini pada distro pilihan saya, saya menemukan bahwa itu hanya akan mencetak ping setelah program dihentikan. Namun, mengingat bahwa semua solusi lain dalam C membiarkan slide itu, dan bahwa mungkin ada setidaknya satu mesin di luar sana melakukan itu dan memenuhi semua prasyarat lainnya (dan orang selalu bisa "memperbaiki" itu di kernel .. .), Saya tidak akan mengacaukan skor saya denganfflush()
ingstdout
.sumber
APL (Dyalog Unicode) ,
147138 byteCobalah online!
Ini adalah fungsi langsung yang besar. Seperti jawaban lainnya, tautan TIO hanya akan ditampilkan setelah eksekusi selesai. Yang mengatakan, @ Adám telah menciptakan fungsi pembantu yang berguna sehingga cap waktu dapat divisualisasikan. Versi kode itu dapat ditemukan di sini .
Jawaban ini menggunakan
⎕IO←0
, yang menetapkan rigid I ndex O segalanya mulai dari 1 hingga 0.Terima kasih kepada @ngn untuk 9 byte yang disimpan (dan telah merusak penjelasan saya! Sekarang saya harus melakukannya lagi
(ლಠ益ಠ)ლ
)Bagaimana:
Fungsi menerima 1 argumen tetap, yaitu
⍵
di sebelah kanan.Seperti yang
⍵
kita miliki¨1↓¨,\?6⍴2
. Ungkapan ini secara acak memilih (?
) antara 0 dan 1 6 kali (6⍴2
menciptakan vektor 6 elemen dari 2's). Hasilnya digabungkan (,\
) untuk membentuk 6 elemen vektor dari 1 hingga 6 vektor elemen (misalnya:)1 0 1 0 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 0
. Elemen pertama dari masing-masing dijatuhkan (1↓¨
), dan kemudian setiap vektor yang dihasilkan dilewatkan sebagai⍵
(¨
), menjalankan fungsi 6 kali.{5=≢⍵⊣...:...}
adalah pernyataan kondisional. Jika⍵
memiliki 5 elemen (alias jika iterasi terakhir), ia akan mengeksekusi kode setelah penjaga (:
). The⊣
menjamin kondisi ini akan menjadi hal terakhir dievaluasi, sehingga program akan selalu mencetak string sebelum penjaga.{...⎕DL≢⎕←↑⌽'.!'[⍵]'Sending 5, 100-byte ICMP Echos, timeout is 2 seconds:'...}
menciptakan vektor dua elemen yang dibentuk oleh vektor yang diindeks'.!'[⍵]
, yang akan menampilkan keberhasilan dan kegagalan, dan string ping itu sendiri. Vektor itu kemudian dibalik (monadik⌽
) ke urutan yang benar, kemudian dicampur (monadik↑
) ke dalam matriks. Matriks itu kemudian di-output ke stdout (⎕←
), dan D e L ay (⎕DL
) ditambahkan. Argumen untuk⎕DL
adalah jumlah elemen dalam matriks (≢
), yaitu 2, menciptakan penundaan 2 detik antara panggilan fungsi.{...:⎕←('Success rate is',×∘20,'percent (','/5)',⍨⍕)+/⍵}
menciptakan string terakhir yang akan di-output. Ini akan menjumlahkan elemen argumen (+/⍵
) dan meneruskan hasilnya sebagai argumen ke fungsi diam-diam di dalam tanda kurung. Fungsi itu pertama-tama menambahkan (diad,
, diikuti oleh ) argumen⍨
stringified (⍕
) dengan string'/5)'
, kemudian menambahkannya ke string'percent ('
. Selanjutnya, itu akan menambahkan string yang dihasilkan hingga 20 kali argumen (×∘20
), dan kemudian menambahkannya ke sisa output, yang dikirim ke stdout via⎕←
.sumber
⎕DL 2⊣⎕←
... ->⎕DL≢⎕←
...Java (JDK) , 227 byte
Cobalah online!
Ping beraksi
Dijelaskan
sumber
C # (Visual C # Interactive Compiler) , 212 byte
Cobalah online!
sumber
Random
alih-alih menyimpannyavar r
. Inilah tautan ke saran sayaJavaScript + HTML, 203 + 9 = 212 byte
Cobalah
Jika
new Date
tidak cukup acak maka tambahkan 8 byte untuk digunakanMath.random()
sebagai gantinya (beberapa modifikasi lain telah dibuat untuk memungkinkannya untuk berjalan dengan baik dalam Cuplikan):Tampilkan cuplikan kode
sumber
PowerShell ,
166162158 byteCobalah online!
Sangat mirip dengan jawaban Python untuk TFeld. Pengaturan waktu tidak berfungsi pada TIO (TIO hanya menghasilkan pada saat penyelesaian program), tetapi bekerja secara lokal.
Baris pertama hanyalah sebuah string yang diletakkan di atas pipa. Garis tengah loop dari
0
ke4
, setiap iterasisleep
selama2
detik, kemudianwrite-host
dengan-no
baris baru. Kami sedang menulis baik a!
atau.
dipilihRandom
dan disimpan$x
. Kami kemudian meningkat$d
berdasarkan pada$x
.Baris terakhir adalah string (multiline) lain yang ditempatkan pada pipeline, dengan sedikit perhitungan di tengah untuk menghasilkan persentase.
-1 byte terima kasih kepada Veskah
-3 byte terima kasih untuk Ciaran_McCarthy
sumber
*20
bukan/5*100
?Python 3 ,
221220216209208201 byteCobalah online!
Pengaturan waktu tidak berfungsi di TIO, tetapi bekerja di konsol. (Output TIO pada akhir eksekusi)
-7 byte, terima kasih kepada Erik the Outgolfer
sumber
JavaScript,
322268267265 byteCobalah online!
JavaScript + HTML, 299 byte
Untuk memenuhi persyaratan pemformatan output
sumber
Bersihkan , 305 byte
Cobalah online!
sumber
Perl 6 , 154 byte
Cobalah online!
sumber
PHP , 161 byte
Cobalah online!
$ php fakeping.php
sumber
C (gcc) ,
176174 byteCobalah online!
Disimpan 2 byte berkat Rogem
Tidak Disatukan:
sumber
33
dan46
bukannya'!'
dan'.'
, masing-masing.05AB1E , 83 byte
Cobalah online!
sumber
Befunge-98 (PyFunge) , 164 byte
Cobalah online!
Sayangnya, saya hanya bisa mengujinya di TIO, di mana ia mengembalikan semuanya setelah sepuluh detik, tetapi harus berfungsi seperti yang diharapkan.
sumber