Latar Belakang
Terinspirasi oleh pertanyaan Unix.SE ini (dan tentu saja jawaban saya sendiri ).
Ketika alamat IP ditentukan untuk antarmuka, sering diberikan dalam bentuk desimal bertitik:
a.b.c.d e.f.g.h
di mana a.b.c.d
alamat aktual dan e.f.g.h
netmask.
Netmask, ketika direpresentasikan dalam biner, pada dasarnya adalah sekelompok 1
bit diikuti oleh sekelompok 0
bit. Ketika netmask adalah AND AND terhadap alamat IP yang diberikan, hasilnya akan menjadi bagian jaringan dari alamat, atau hanya alamat jaringan . Ini akan diprogram ke dalam tabel rute host sehingga tuan rumah tahu untuk mengirim apa pun yang ditujukan untuk jaringan ini dari antarmuka ini.
Alamat broadcast untuk jaringan diturunkan dengan mengambil alamat jaringan (dari atas) dan mengatur semua bit host menjadi 1. Alamat broadcast digunakan untuk mengirim ke semua alamat dalam jaringan yang diberikan.
Tantangan
Diberikan alamat IP titik-desimal dan netmask yang valid sebagai input, berikan alamat jaringan dan alamat siaran sebagai output, juga dalam format titik-desimal.
- Input harus berupa alamat dan mask sebagai dua string dalam format desimal bertitik. Anda dapat melewatkan ini sebagai 2 string terpisah, sebagai daftar atau larik elemen string 2 atau string tunggal dengan alamat dan mask dipisahkan oleh beberapa pemisah yang masuk akal.
- Format output tunduk pada batasan yang sama dengan format input.
Contohnya
Input Output
192.168.0.1 255.255.255.0 192.168.0.0 192.168.0.255
192.168.0.0 255.255.255.0 192.168.0.0 192.168.0.255
192.168.0.255 255.255.255.0 192.168.0.0 192.168.0.255
100.200.100.200 255.255.255.255 100.200.100.200 100.200.100.200
1.2.3.4 0.0.0.0 0.0.0.0 255.255.255.255
10.25.30.40 255.252.0.0 10.24.0.0 10.27.255.255
sumber
252
di dalamnya.10.24.0.0 10.27.255.255
?Jawaban:
JavaScript (ES6), 92 byte
Penjelasan
Uji
Tampilkan cuplikan kode
sumber
MATL , 47 byte
Jawaban ini menggunakan versi bahasa saat ini (4.0.0) .
Contoh
Penjelasan
sumber
Pyth,
4442 byteCobalah online. Suite uji.
Harapkan input sebagai array, seperti
["10.25.30.40", "255.252.0.0"]
.sumber
PHP, 126 byte
Dengan input $ n:
Hexdump:
Dan versi yang lebih mudah dibaca:
preg_filter
membutuhkan satu pernyataan dalam pola penggantian ketika menggunakane
bendera, jadi saya 'menambahkan' hasil perhitungan ke nilai 5 dan lebih tinggi dari $ a, karena itu tidak pernah digunakan kembali.sumber
Perl,
9085 bytetermasuk +6 untuk
-pF/\D/
Pemakaian:
Lebih mudah dibaca:
The
-F/\D/
membagi input non-digit dan menyimpannya dalam@F
.sumber
Faktor, 103 byte
Bagus.
Tidak Disatukan:
sumber
PHP , 74 byte
Sebagai standalone, input melalui baris perintah:
Cobalah online!
Atau sebagai fungsi, 80 byte :
Cobalah online!
Tidak disatukan
PHP memiliki built-in yang bagus (meskipun dengan nama fungsi panjang) untuk menangani IPv4 putus-putus-string ke biner dan kembali.
Keluaran
sumber