Napisz najkrótszą funkcję, aby przekonwertować adres IP na jego liczbę całkowitą i wyślij go jako liczbę całkowitą.
Aby zmienić adres IPv4 na jego reprezentację całkowitą, wymagane są następujące obliczenia:
- Podziel adres IP na cztery oktety.
(Octet1 * 16777216) + (Octet2 * 65536) + (Octet3 * 256) + (Octet4)
Przykładowe dane wejściowe
192.168.1.1 10.10.104.36 8.8.8.8
Przykładowe dane wyjściowe
3232235777 168454180 134744072
code-golf
conversion
Kyle Rozendo
źródło
źródło
Odpowiedzi:
PHP - 21 znaków
źródło
MySQL - 20 znaków
źródło
Ruby (bez wbudowanych / eval) - 47
Test:
źródło
C: 79 znaków
EDYCJA: usunięty C ++, nie skompilowałby się bez nagłówków; dzięki GCC wywołania funkcji
printf
istrtol
wyzwalają wbudowane funkcje, dlatego nagłówki można pominąć. Dziękujemy za @ugoren za wskazówki. Spowoduje to kompilację bez dodatkowych opcjigcc
.EDIT2:
return
jest właściwie zbędny :)źródło
Golfscript - 16 znaków
Jako samodzielny program jest jeszcze krótszy o 11.
Niezwykle proste. Ocenia wejściowy ciąg znaków (
~
) i umieszcza go w tablicy[]
. Ponieważ.
s w ciągu powielają górę stosu, bierzemy tylko co drugi termin w tablicy (2%
). Mamy teraz tablicę, która zasadniczo reprezentuje podstawową liczbę 256, więc do konwersji używamy wbudowanej funkcji. (256base
).źródło
{:B;{\B*+}*}:base
(chociaż prawdziwa funkcja jest przeciążona do konwersji w drugą stronę). Warto zauważyć, że podstawowa konwersja ciągów znaków jest taka sama, jak tablic (ponieważ ciągi są tylko tablicami bez zagnieżdżenia, ale z innym formatem wyjściowym).base
Befunge - 2x11 = 22 znaków
Tak blisko, Befunge pewnego dnia wygra.
Wyjaśnienie
Największą cechą wyróżniającą Befunge jest to, że zamiast być liniowym zestawem instrukcji, jak większość języków; jest siatką 2d instrukcji jednoznakowych, w których kontrola może płynąć w dowolnym kierunku.
Po trafieniu postacie te zmieniają kierunek kontroli, co tworzy główną pętlę.
Wprowadza liczbę i wypycha ją na stos (
&
), usuwa dwie górne wartości ze stosu, dodaje je i wypycha z powrotem na stos (+
), wprowadza pojedynczy znak i umieszcza swoją wartość ascii na stosie (~
), a następnie wypycha 1 na stos i dodaje je (1+
).Interpretator, którego używałem, zwraca -1 na końcu wejścia, niektóre zwracają 0, więc
1+
część można dla nich usunąć.#
Powoduje, że następny znak zostać pominięty, wtedy_
Zdejmuje wartość ze stosu i jeśli jest zerowa wysyła prawo kontroli, inaczej wysyła go w lewo. Jeśli wartość wynosiła zero,.
wyskakuje wartość ze stosu i wyprowadza ją jako liczbę całkowitą i@
zatrzymuje program. W przeciwnym raziev
przesyła kontrolę do pętli powrotnej.To po prostu zwielokrotnia najwyższą wartość stosu przez 256 i przywraca kontrolę do początku.
źródło
>v<^
która jest główną pętlą w tym programie. Wydaje mi się, że w tym przypadku kontrola nie przechodzi przez ostatnie 3 spacje na dole, ale najłatwiej jest po prostu policzyć programy Befunge jako najmniejszy prostokąt ograniczający; a jeśli spróbujesz policzyć przepływ sterowania, wpadniesz w kłopoty z samodopasowującymi się programami.Rubinowy (40)
->
źródło
to_i 16
jakhex
zaoszczędzić kilka znaków.Ruby - 46 znaków
źródło
Golfscript - 21 znaków
źródło
Python
5645źródło
C ++ - wiele znaków
źródło
PowerShell
6661Wariacja na odpowiedź Joeya:
źródło
AWK za ~ 47 znaków
Po raz pierwszy tutaj ... Nie wiem, jak to policzyć, ale bez echa mamy 47 znaków w AWK. (Niezupełnie bogey golf, ale jest w dołku.)
Cały dzień wcześnie też na #tbt, więc właściwie spełniłem harmonogram !!! * 8-)
Dzień baneru.
źródło
{print $1*16777216+$2*65536+$3*256+$4}
. Oczywiście musisz przenieść separator pól do programu, zamiast określać go jako flagę.Bash - 46
Spis treści
Znajdziesz 4 różne wersje gry w golfa:
Nowa wersja! 15.11.2018 Więcej golfa, 46 char
Wyjaśnienie
$_
więcej golfa.${1//./ }
zastąpi każdą kropkę.
spacjami.
printf
wyrenderuje coś takiego192<<(_-=8)|168<<(_-=8)|1<<(_-=8)|1<<(_-=8)|
0
po ostatnim OR|
i_
na 32 . bash odczyta konstrukt od lewej do prawej, więc$((_-=8))
wykonaj24
na 1. zmianie ,16
na drugiej itd.w akcji:
Dla zabawy: próba uzyskania
$_
treści, po tym:W funkcji:
lub w pętli: -> 60
bash (v4.1 +): 47
Pierwszy post
Wyjaśnienie:
${1//./ }
zastąpi każdą kropkę.
spacjami.
set --
ustaw parametry pozycyjne ($@=($1 $2 $3...)
)set -- ${1//./ }
będzie podzielona$1
przez kropek i zestawu$1
,$2
,$3
a$4
jeżeli ciąg zawierajacego3
kropek (bez spacji).w akcji:
lub w funkcji:
lub w pętli: -> 61
w akcji:
Inna wersja inaczej golfowana: 65
Próba:
W pętli (+14): 82
* lub trochę bardziej brzydka: 70 *
gdzie
printf
dajcie sznurek,|192<<24 |168<<16 |1<<8|1<<24 |0<<16 |0<<8
jakbyśmy musieli w końcu przeciąć<<2...
.grał w golfa
mapfile
, dłużej: 68lub z pętlą: 82
źródło
set --
częścią. dzięki.set -- foo bar
propaguje$@
z foo jak$1
i bar jak$2
.Windows PowerShell, 70
Podejście naiwne:
Korzystając z System.Net.IPAddress: 76
Test:
źródło
Befunge-93 - 36 znaków
źródło
Perl: DIY (dla onelinerów.) (40)
# Użyj wartości w $ i
Funkcja majsterkowania (65):
źródło
split'.'
zamiastsplit/\./
split q{.}
obejść potrzebę unikania cudzysłowów: /Haskell - 14 znaków
użycie w GHCi:
Jedynym problemem jest to, że musisz umieścić spacje po lewej lub prawej stronie kropki, w przeciwnym razie liczby będą interpretowane jako zmiennoprzecinkowe.
źródło
C # - 77 znaków
źródło
JavaScript (45 znaków)
Wymaga obsługi
.reduce()
metody Array wprowadzonej w ES5 i funkcji strzałek .źródło
PowerShell,
4743 bajtówSkrypt testowy:
Wynik:
źródło
05AB1E , 5 bajtów
Wypróbuj online!
źródło
C # - 120 znaków
Mój pierwszy golf golfowy - bądź delikatny;)
źródło
D: 84 znaków
źródło
Python 3.2 (69)
źródło
PHP (no builtins/eval) - 54
źródło
<?php
, not just<
?Perl, 14 characters:
źródło
Stax, 9 bytes
Run and debug it
źródło
Perl 6, 16 bytes
Try it online!
źródło
C (gcc)
-m32
/ POSIX, 33 bytesTry it online!
On a big-endian platform, you could simply define a macro with
-Df=inet_aton
for 13 bytes.źródło