Tulis fungsi terpendek untuk mengubah alamat IP menjadi representasi integernya dan output sebagai integer.
Untuk mengubah alamat IPv4 ke representasi integernya, perhitungan berikut diperlukan:
- Pisahkan alamat IP menjadi empat oktet.
(Octet1 * 16777216) + (Octet2 * 65536) + (Octet3 * 256) + (Octet4)
Input Sampel
192.168.1.1 10.10.104.36 8.8.8.8
Output Sampel
3232235777 168454180 134744072
code-golf
conversion
Kyle Rozendo
sumber
sumber
Jawaban:
PHP - 21 Karakter
sumber
MySQL - 20 Karakter
sumber
Ruby (tanpa builtin / eval) - 47
Uji:
sumber
C: 79 karakter
EDIT: dihapus C ++, tidak akan dikompilasi tanpa header; dengan GCC, the
printf
danstrtol
pemanggilan fungsi memicu fungsi bawaan, karenanya tajuk dapat dilewati. Terima kasih kepada @ugoren untuk tipsnya. Ini akan dikompilasi apa adanya tanpa opsi tambahan untukgcc
.EDIT2:
return
sebenarnya berlebihan :)sumber
Golfscript - 16 karakter
Sebagai program mandiri, ini bahkan lebih pendek yaitu 11.
Sangat mudah. Mengevaluasi string input (
~
) dan memasukkannya ke dalam array[]
. Karena.
s dalam string menduplikasi bagian atas tumpukan, kami hanya mengambil setiap istilah lain dalam array (2%
). Kami sekarang memiliki array yang pada dasarnya mewakili angka 256 basis, jadi kami menggunakan fungsi bawaan untuk melakukan konversi. (256base
).sumber
{:B;{\B*+}*}:base
(meskipun fungsi sebenarnya kelebihan beban untuk konversi dengan cara lain). Yang menarik untuk dicatat adalah bahwa konversi basis untuk string sama dengan array (karena string hanya array tanpa bersarang, tetapi dengan format output yang berbeda).base
untuk jawaban sayaBefunge - 2x11 = 22 karakter
Begitu dekat, Befunge akan menang suatu hari.
Penjelasan
Fitur pembeda terbesar dari Befunge adalah bahwa alih-alih menjadi seperangkat instruksi linier seperti kebanyakan bahasa; itu adalah kotak 2d instruksi karakter tunggal, di mana kontrol dapat mengalir ke segala arah.
Karakter-karakter ini mengubah arah kontrol ketika mereka dipukul, ini membuat loop utama.
Ini memasukkan angka dan mendorongnya ke tumpukan (
&
), mengeluarkan dua nilai teratas dari tumpukan, menambahkannya dan mendorongnya kembali ke tumpukan (+
), memasukkan satu karakter dan menempatkan nilai ascii pada tumpukan (~
), lalu mendorong 1 ke tumpukan dan menambahkannya (1+
).Penerjemah yang saya gunakan mengembalikan -1 untuk akhir input, beberapa mengembalikan 0 sehingga
1+
bagian dapat dihapus untuk mereka.The
#
menyebabkan karakter berikutnya akan dilewati, maka_
muncul nilai dari tumpukan dan jika itu adalah nol mengirimkan kontrol yang tepat, jika tidak mengirimkannya kiri. Jika nilainya nol.
muncul nilai dari stack dan output sebagai integer dan@
menghentikan program. Kalau tidak,v
kirim kontrol ke loop kembali.Ini hanya mengalikan nilai teratas tumpukan dengan 256 dan mengembalikan kontrol ke awal.
sumber
>v<^
yang sebenarnya adalah loop utama dalam program ini. Saya kira dalam hal ini kontrol tidak benar-benar melewati 3 ruang terakhir di bagian bawah, tapi saya merasa lebih mudah untuk hanya menghitung program Befunge sebagai persegi panjang terikat terkecil; dan jika Anda mencoba dan menghitung aliran kontrol Anda mendapat masalah dengan program modifikasi diri.Ruby (40)
->
sumber
to_i 16
sebagaihex
untuk menyimpan beberapa karakter.Ruby - 46 karakter
sumber
Golfscript - 21 karakter
sumber
Python
5645sumber
C ++ - banyak karakter
sumber
PowerShell
6661Variasi jawaban Joey:
sumber
AWK dalam ~ 47 karakter
Timer pertama di sini ... Um, tidak yakin bagaimana cara menghitung ini, tetapi tanpa 'gema' itu 47 karakter di AWK. (Bukan golf momok, tapi ada di lubang.)
Sehari penuh lebih awal untuk #tbt, jadi saya benar-benar bertemu jadwal !!! * 8-)
Hari spanduk.
sumber
{print $1*16777216+$2*65536+$3*256+$4}
. Tentu saja Anda harus memindahkan pemisah bidang ke dalam program, daripada menetapkannya sebagai bendera.Bash - 46
Daftar Isi
Anda akan menemukan 4 versi golf yang berbeda:
Versi baru! 2018-11-15 Lebih banyak bermain golf, 46 karakter
Penjelasan
$_
lebih banyak golf.${1//./ }
akan mengganti setiap titik.
dengan spasi.
printf
akan membuat sesuatu seperti192<<(_-=8)|168<<(_-=8)|1<<(_-=8)|1<<(_-=8)|
0
setelah terakhir OR|
dan_
ke 32 . bash akan membaca konstruk dari kiri ke kanan, jadi$((_-=8))
buat24
di shift pertama ,16
kedua, dan seterusnya.dalam aksi:
Untuk bersenang-senang: mencoba untuk mendapatkan
$_
konten, setelah ini:Dalam suatu fungsi:
atau ke dalam satu lingkaran: -> 60
bash (v4.1 +): 47
Pos pertama
Penjelasan:
${1//./ }
akan mengganti setiap titik.
dengan spasi.
set --
mengatur parameter posisi ($@=($1 $2 $3...)
)set -- ${1//./ }
akan membagi$1
oleh titik dan set$1
,$2
,$3
dan$4
apakah string containg3
titik (dan tidak ada spasi).dalam aksi:
atau dalam suatu fungsi:
atau ke dalam satu lingkaran: -> 61
dalam aksi:
Versi lain berbeda golf: 65
Sampel:
Dalam satu lingkaran (+14): 82
* atau sedikit lebih jelek: 70 *
di mana
printf
berikan beberapa string seperti|192<<24 |168<<16 |1<<8|1<<24 |0<<16 |0<<8
kita harus memotong pada akhirnya<<2...
.bermain golf dengan
mapfile
, lebih lama: 68atau dengan loop: 82
sumber
set --
bagian itu. Terima kasih.set -- foo bar
akan diisi$@
dengan foo as$1
dan bar as$2
.Windows PowerShell, 70
Pendekatan naif:
Dengan menggunakan System.Net.IPAddress: 76
Uji:
sumber
Befunge-93 - 36 karakter
sumber
Perl: DIY (untuk oneliners.) (40)
# Gunakan nilai dalam $ i
Fungsi DIY (65):
sumber
split'.'
daripadasplit/\./
split q{.}
menyiasati kebutuhan untuk melepaskan diri dari kutipan shell: /Haskell - 14 karakter
penggunaan di GHCi:
Satu-satunya masalah adalah Anda harus meletakkan spasi di kiri atau kanan titik, jika tidak angka akan ditafsirkan sebagai titik mengambang.
sumber
C # - 77 karakter
sumber
JavaScript (45 karakter)
Membutuhkan dukungan untuk
.reduce()
metode Array yang diperkenalkan dalam fungsi ES5 dan panah .sumber
Powershell,
4743 byteSkrip uji:
Keluaran:
sumber
C # - 120 Karakter
Golf kode pertama saya - lembut;)
sumber
D: 84 Karakter
sumber
Python 3.2 (69)
sumber
PHP (tanpa builtin / eval) - 54
sumber
<?php
, bukan hanya<
?Perl, 14 karakter:
sumber
Stax , 9 byte
Jalankan dan debug itu
sumber
05AB1E , 5 byte
Cobalah online!
sumber
Perl 6 , 16 byte
Cobalah online!
sumber
C (gcc)
-m32
/ POSIX, 33 byteCobalah online!
Pada platform big-endian, Anda bisa mendefinisikan makro dengan
-Df=inet_aton
untuk 13 byte .sumber