Terinspirasi oleh...
Jaringan - Bagaimana cara mengetahui berapa banyak alamat IP yang ada dalam rentang tertentu?
Tulis sebuah program atau fungsi yang mengambil dua string sebagai input, masing-masing menjadi alamat IPv4 yang dinyatakan dalam notasi bertitik standar dan menghasilkan atau mengembalikan jumlah alamat IP yang dicakup oleh rentang ini, termasuk dua input alamat IP.
- Anda tidak boleh menggunakan kode eksternal, pustaka atau layanan apa pun yang dirancang untuk mengurai alamat IP. (Fungsi pustaka string standar lainnya dapat diterima.)
- Semua 2 ^ 32 alamat IP sama. Tidak ada perbedaan yang dibuat untuk siaran, kelas E, dll.
- Aturan kode-golf normal berlaku.
Sebagai contoh:
"0.0.0.0","255.255.255.255" returns 4294967296.
"255.255.255.255","0.0.0.0" also returns 4294967296.
"1.2.3.4","1.2.3.4" returns 1.
"56.57.58.59","60.61.62.63" returns 67372037.
"1","2" is invalid input. Your code may do anything you like.
Jawaban:
GolfScript, 20 byte
Cobalah online.
Uji kasus
Bagaimana itu bekerja
sumber
$
untuk menghindariabs
.~]
juga sangat pintar.Python 2 - 106
Lihat di sini .
Contoh Input
Contoh Output
sumber
def a():return reduce(lambda c,d:c*256+d,map(int,raw_input().split(".")))
jauh lebih pendeka=lambda:
bukannyadef a():return
menyimpan 6 karakterCJam - 15
Cobalah di http://cjam.aditsu.net/
Terima kasih Dennis, wow, saya tidak tahu bagaimana mendapatkan yang terbaik dari bahasa saya sendiri: hlm
sumber
:i
(b
tampaknya dilemparkan ke integer) dan satu dengan menggunakan{r...}2*
bukannyaqS/{...}/
Bash murni, 66 byte
Catatan:
p
yang meneruskan alamat IP desimal bertitik, dan menampilkan representasi hex dari alamat itu:${1//./ }
adalah ekspansi parameter yang menggantikan.
denganalamat IP yang diteruskan ke
p()
printf
besar cukup jelas. Karena hanya ada satu penspesifikasi format%02x
dan empat arg tersisa, penspesifikasi format digunakan kembali untuk setiap arg yang tersisa, secara efektif menggabungkan 2 digit hex dari masing-masing 4 oktet bersamaan$[]
menyebabkan ekspansi aritmatika. Kami melakukan pengurangan dasar, dan menetapkan ke variabelr
${r/-}
adalah perluasan parameter untuk menghapus-
karakter yang mungkin - efektif abs ()Keluaran:
sumber
printf
danecho
. Apakah itu bagian daribash
?Python 2.7 -
96919087Membuat fungsi.
Pemakaian:
Sunting: Dihapus tidak perlu
int()
darif
fungsi. Terima kasih kepada isaacgSunting2: Dihapus
LF
di akhir file (terima kasih ke @Rusher) dan dihapusmap()
dengan biayareduce()
inisialisasi (terima kasih ke @ njzk2)sumber
,0
parameter ke fungsi pengurangan Anda)GolfScript, 27 byte
Contoh:
sumber
/
alih-alih%~
.CoffeeScript -
94,92,79, 72Tidak golf :
JavaScript Setara :
Cobalah online .
sumber
I=(a)->n=0;a.split(".").forEach((x)->n<<=8;n+=parseInt x);n>>>0 R=(a,b)->1+Math.abs I(b)-I a
Math.abs
, tetapi saya tidak dapat menemukan sesuatu yang lebih pendek.(z>0)*z||-z
adalah yang terbaik yang saya punya (panjang yang sama, dan perlu input char tunggal). Apakah Anda memiliki sesuatu yang lebih pintar dari itu?dc, 61 karakter
Saya pikir ini sangat menakjubkan bahwa ini dapat diselesaikan dengan dc sama sekali karena tidak memiliki kemampuan untuk mengurai string. Kuncinya adalah bahwa 192.168.123.185 berjalan sebagai stack
dan
dXIr^*
menggeser titik desimal ke kanan sebanyak digit pecahan seperti yang ada dan bahkan bekerja untuk 0,100.Kurangi karakter jika Anda membiarkan input sudah ada di tumpukan.
sumber
Powershell -
1121089278 byteIni adalah kali pertama saya bermain golf. Tidak ada gunanya:
Golf (Tua):
Golf (baru)
Tidak Disatukan:
Pemakaian
Simpan sebagai file (dalam hal ini getipamount.ps1) lalu panggil dari konsol
sumber
C # dengan LINQ - 139 byte
(Dari 140 setelah menerapkan saran Bob.)
Tidak disatukan ....
https://dotnetfiddle.net/XPTDlt
sumber
a.b.c.d
sama dengan(a << 24) | (b << 16) | (c << 8) | (d << 0)
setara dengan(((a << 8) << 8) << 8) + ((b << 8) << 8) + (c << 8) + d)
. Pada dasarnya, setiap iterasi agregasi mengambil jumlah yang ada dan menggesernya menjadi satu oktet, kemudian menambahkan oktet berikutnya.c*256
alih-alih(c<<8)
.e-f
dengane<f?f-e:e-f
dan menjatuhkanMath.Abs()
Perl, 43 byte
Menghitung shebang sebagai dua byte.
Penggunaan sampel:
Catatan
vec eval,0,32
adalah drop-in untukip2long
. Perl memungkinkan karakter literal diekspresikan sebagai awalan ordinal mereka denganv
, misalnyav0
dapat digunakan untuk karakter null. Ini juga bisa dirantai bersama, misalnyav65.66.67.68
→ABCD
. Ketika tiga atau lebih nilai hadir, nilai awalv
tidak perlu. Thevec
menafsirkan fungsi string sebagai array integer, setiap sel memiliki jumlah tertentu bit (di sini, 32).unpack N,eval
akan bekerja sama juga.sumber
JavaScript ES6 - 68 byte
Cobalah dengan konsol (tekan F12) dari Firefox.
sumber
alert
atauconsole.log
. Output konsol murah.console.log
dan output langsung. Ini kode-golf, ini bukan tentang melakukan kode bersih.Python 2.7, 104 byte
sumber
Perl, 72 byte
Pemakaian:
Ini sudah lebih lama dari program Perl primo , jadi tidak terlalu menarik.
Perl, 119 byte, untuk format alamat IP yang usang
Pemakaian:
Program ini menerima format usang untuk alamat IP! Ini termasuk alamat dengan 1, 2, atau 3 bagian, atau dengan bagian heksadesimal atau oktal. Mengutip inet_addr (3) halaman manual ,
Sebagian besar program tidak lagi menerima format usang ini, tetapi
ping 0177.1
masih berfungsi di OpenBSD 5.5.sumber
PHP,
138110 bytesumber
explode('.',"$a.$b")
dengansplit('\.',"$a.$b")
.Mathematica 9, 108 byte
Tidak Disatukan:
sumber
PHP, 46 Bytes
Cobalah online!
ip2long
sumber
C # - 135
Diformat dengan benar
https://dotnetfiddle.net/Q0jkdA
sumber
Ruby, 93 byte
Keluaran
sumber
J, 25 byte
Mengambil string IP titik-titik sebagai argumen kiri dan kanan.
Dijelaskan:
Contoh:
sumber
Faktor, 73 byte
Terjemahan dari jawaban CoffeeScript.
sumber
Javascript ES6, 81 karakter
Uji:
PS: Saya akan mencoba mengoptimalkannya nanti.
sumber
Lua, 153 Bytes
Sayang sekali lua tidak memiliki fungsi split, saya harus mendefinisikan milik saya!
Tidak disatukan
sumber
Jelly , 12 byte, tantangan tanggal bahasa
Cobalah online!
Penjelasan
Jumlah elemen dalam rentang inklusif adalah perbedaan absolut dari titik akhir mereka, ditambah 1.
sumber
Aksioma, 385 byte
ungolf itu dan uji
sumber