Là trang web này xuống hoặc chỉ là tôi?


13

Thử thách

Thách thức rất đơn giản, bằng cách sử dụng http://isup.me , xác định xem một trang web được nhập vào là lên hay xuống.

Nếu trang web hoạt động, bạn nên trả về giá trị trung thực và nếu trang web ngừng hoạt động, bạn nên trả lại giá trị falsey.

Quy tắc

Đầu vào sẽ là một địa chỉ web như stackexchange.comhoặc google.co.uk. Đầu vào sẽ không bao giờ có http://, https://v.v. khi bắt đầu chuỗi, nhưng có thể có www.hoặc codegolf.khi bắt đầu, v.v.

Bạn nên sử dụng trang web isup.me/URLcó URL là đầu vào.

Khi một trang web lên, nó sẽ trông như:

http://isup.me/codegolf.stackexchange.com

Nếu một trang web bị sập, nó sẽ trông như sau:

http://isup.me/does.not.exist

Công cụ rút ngắn URL không được phép ngoài isup.me.

Ví dụ đầu vào

Có thể lên (tùy thuộc vào hoàn cảnh hiện tại):

google.de
codegolf.stackexchange.com
worldbuilding.meta.stackexchange.com
tio.run
store.nascar.com
isup.me

Sẽ xuống

made.up.com
fake.com.us
why.why.why.delilah
store.antarcticrhubarbassociation.an

Chiến thắng

Mã ngắn nhất trong byte thắng.


21
Nhân tiện: "made.up.co.uk" thực sự đã lên.
GiantTree

8
Tôi vừa đăng ký fake.com.usđể gây rối với các trường hợp thử nghiệm của bạn!
YSC

14
Nhưng nếu isup.mexuống thì sao?
Okx

2
@Oks Bạn có chắc không chỉ bạn?
Pierre Arlaud

3
Trường hợp thử nghiệm đề nghị : isup.me. Nó trả về một kết quả khác với những gì, nói, google.comcó thể trả về.
Okx

Câu trả lời:


16

sh (+ curl + grep), 28 26 byte

curl -L isup.me/$1|grep ^I

Đầu ra thông qua trạng thái thoát (0 cho lên, 1 cho xuống). Tìm kiếm Iở đầu một dòng, khớp với khi tên miền lên (ngay cả đối với trường hợp đặc biệt của isup.me/isup.me ).


1
curl -L isup.me/$1|grep u!tiết kiệm 1 byte. Điều này giả định rằng! không phải là một ký tự hợp lệ trong tên miền.

Là sự 0thật trong sh?
Shaggy

1
0thực sự là sự thật trong sh, với tất cả các giá trị khác không phải là giả. Ngoài ra, IMO thật sự rất hay khi phiên bản sh quá ngắn, vì nó hoàn toàn là ngôn ngữ phù hợp cho nhiệm vụ này ngay cả khi không xem xét việc chơi golf.
Điểm_Under

Điều đó nói rằng điều này sẽ thất bại trên một cái gì đó như spthissitedoesntexist.invalid
Score_Under

1
Nó phù hợp trên máy của tôi. Nó khớp với bit này: <a href="http://spthissitedoesntexist.invalid" class="domain">spthissitedoesntexist.invalid</a>Cụ thể nó khớp với bên trong href.
Điểm_Under

5

Xếp chồng lên nhau , 44 byte

['http://isup.me/'\+[CS'!'eq sum 2=out]curl]

Hàm không đồng bộ xuất ra 0nếu trang web không hoạt động và bất kỳ số nào khác lớn hơn 0nếu nó lên.

Ví dụ a:

['http://isup.me/'\+['s u'split#'1-put]curl] @:isup

'Is google up?' put 'google.com' isup

Đầu ra (có thể): Is google up? 1


Bạn có thể thêm liên kết đến trang GH xếp chồng?
Hạ cấp

@Downgoat Xong.
Conor O'Brien

Nếu điều này đang kiểm tra sự xuất hiện của s u, lưu ý rằng điều này xảy ra trên bất kỳ đầu vào nào bắt đầu bằng u(cho dù lên hay xuống).
Anders Kaseorg

@AndersKaseorg Đã sửa, cảm ơn.
Conor O'Brien

Ví dụ tốt hơn: 'Is example.com up?' put 'example.com' isupđầu ra (không chỉ có thể nhưng chắc chắn):Is example.com up? 1
Erik the Outgolfer

4

REPL REPL - 131 108 106 93 79 55 53 64 63 byte

Lần thử đầu tiên tại sân golf Kotlin.
Mong đợi trang web trong một biến hoặc giá trị được đặt tên a.

Bây giờ với khoảng trắng giảm.
Ai nói "loo" là không đủ?
Đã sửa và ngắn hơn, không dựa vào http://isup.me nữa.
Không cần phải tự mở kết nối, chỉ cần lấy luồng dữ liệu (hoặc không)
Nhiệm vụ là sử dụng http://isup.me , phải không? Ngoài ra: <không phải là một ký tự hợp lệ trong một URL.
Bây giờ hoạt động với isup.metư cách là trang web

Bây giờ đọc trang web dưới dạng một dòng, bởi vì người ta không thể giả sử một biến để chứa trang web.

"m h" !in java.net.URL("http://isup.me/"+readLine()).readText()

Đọc một dòng chỉ chứa trang web.
Kiểm tra m hphần from heređược gửi khi trang web bị sập.

Trả về "true" hoặc "false" tương ứng.


Là một Lambda - 172 120 118 99 85 67 66 byte

{a:String->"m h" !in java.net.URL("http://isup.me/$a").readText()}

Có thể được gọi trực tiếp:

{ ... }("google.com")

tha thứ cho tôi nếu tôi sai, nhưng điều này không thể được chuyển đổi thành lambda khá dễ dàng sao?
Nick Clifford

@NickClifford chắc chắn, nhưng nó thực sự sẽ dài hơn do đối số và định nghĩa kiểu (15 ký tự vì suy luận kiểu không hoạt động ở đây)
GiantTree

3
Tôi không biết ngôn ngữ này, nhưng có vẻ như bạn đang kiểm tra xem liệu "loo" có trong văn bản trả lại hay không. Đây không phải là trường hợp văn bản này cũng trả về tên trang web (biến)? Và nếu có, điều đó có nghĩa là bạn nhận được phủ định sai cho các trang web như loo.com?
cole

@Cole bạn chắc chắn đúng, tôi hoàn toàn quên mất điều này (Tôi chỉ đang thử nghiệm Google và trang web giả mạo). Tôi sẽ cập nhật mã vào sáng hôm sau (hiện tại là 2 giờ sáng)
GiantTree

Điều này sẽ thất bại trên các trang web có lootên. electric.boogalookhông tồn tại nhưng chuỗi loosẽ ở đầu ra ở đó.
Điểm_Under

2

Python 2 hoặc 3 với Yêu cầu ( 70 69 68 byte)

from requests import*;lambda u:"u. "in get("http://isup.me/"+u).text

1 byte cạo: "u. "" u" Không, không tối ưu hóa hợp lệ.
1 byte cạo: __import__('requests').from requests import*;

Đây thực sự là một đoạn mã chỉ REPL và sau khi chạy dòng này, hàm sẽ được đặt tên _.


1
Lỗi cú pháp ở cuối (có thể là một đi lạc )).
Erik the Outgolfer

1
Thất bại cho đầu vào bắt đầu bằng u.
Erik the Outgolfer

1
Sử dụng from requests import*getngắn hơn 1 byte.
mbomb007

1
nó không chỉ REPL, nó được phép trả lời bằng các hàm không tên (lambdas in python)
Felipe Nardi Batista

Đây là một hàm không tên, nhưng toàn bộ tập lệnh không thể được sử dụng như một biểu thức (vì nó sử dụng import), vì vậy tôi nghĩ an toàn hơn nếu chỉ gọi nó là dòng REPL.
Điểm_Under

2

Python3 141 133 113 192 141 byte

Yêu cầu Selenium (bao gồm cả webdo) cho python.

Cảm ơn @cairdcoinheringaahing vì đã giảm 42 byte!
Cảm ơn @ V.Courtois đã chỉ ra cách khắc phục đơn giản!

from selenium import*
d=webdriver.Firefox();d.get("http://isup.me/"+input());print("up"in d.find_element_by_xpath("//*[@id='content']/p[1]"))

In 1nếu trang web đang hoạt động, in khác 0.

Phiên bản bị đánh cắp:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
urlToTest = "www.f.com"
driver = webdriver.Firefox()
driver.get("http://downforeveryoneorjustme.com/"+urlToTest)
res = driver.find_element_by_xpath("//*[@id='content']/p[1]")
print(1 if "up" in res.text else 0)

Họ nói isup.me vẫn ổn trong các bình luận; bạn có thể giành được một số byte :)
V. Courtois

1
-1 Đây là một đoạn. Các chương trình hoặc chức năng đầy đủ là bắt buộc và đầu vào không thể được giả sử trong một biến (chẳng hạn như t). Ngoài ra, bạn có thể chơi golf bản in tớiprint("up"in r.text)
caird coinheringaahing

@cairdcoinheringaahing Được rồi, sẽ thực hiện những thay đổi đó, cảm ơn bạn! Đây là câu trả lời thứ hai của tôi, vì vậy tôi không biết nên đăng đoạn trích hay chương trình chính thức. Vì vậy, tôi đã đăng cả hai.
Rahul Bharadwaj


2

Javascript (ES6), 74 66 byte

f=s=>fetch('//isup.me/'+s).then(r=>r.text()).then(t=>/u!/.test(t))

Cảm ơn @Shaggy, người đã chú ý đến tôi rằng một lời hứa đã được giải quyết được tính là đầu ra.

Vấn đề với giải pháp này là nó sẽ gây ra lỗi CORS trừ khi tôi kiểm tra nó trên một trang đã có isup.me. Nhưng hiện tại, điều đó được chuyển hướng đếndownforeveryoneorjustme.com

Phiên bản cũ hơn:

f = s => tìm nạp ('// isup.me/'+s).then(r=>r.text()).then(t=>alert(t.match(/u!/)))


1
Bạn có thể thoát khỏi alertvà chỉ cần trả lại Lời hứa. Xem ở đây . Tôi nghĩ bạn cũng có thể tiết kiệm được /u!/.test(t).
Shaggy

1

Bình thường , 24 byte

}" u"s'+"http://isup.me/

Quay trở lại Truenếu trang web lên, Falsenếu không. URL đầu vào phải được trích dẫn. Điều đó không thể được kiểm tra trên trình thông dịch trực tuyến vì 'bị vô hiệu hóa vì lý do an toàn; thay vào đó bạn sẽ cần một bản sao địa phương của Pyth .

Giải trình

                        Q    # Implicit input
       +"http://isup.me/     # Concatenate "http://isup.me/" with the input
      '                      # Open the URL
     s                       # Concatenate all the lines of the returned HTML page
}" u"                        # Test whether " u" is in the page or not

1
Thất bại cho đầu vào bắt đầu bằng u.
Erik the Outgolfer



1

PowerShell, 25 byte

!(irm isup.me/$args).html

Sử dụng thực tế là Invoke-RestMethodtrả về trang với một thuộc .htmltính chỉ khi thất bại. (không biết tại sao chính xác điều này xảy ra ...)

đảo ngược dòng để chuyển đổi thành bool, đầu ra Truecho một trang web trực tiếp hoặc Falsecho một trang web xuống.

PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "connorlsw.com"
True
PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "connorlsw.notawebsite"
False
PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "google.com"
True
PS C:\Users\sweeneyc\Desktop> .\Test-SiteUp.ps1 "isthisreallyasite.com"
False

@TessellatingHeckler irmtrả về bản rõ cho các trang không thể phân tích cú pháp, tôi sẽ thực hiện một kết hợp bản rõ để nó có thể hoạt động giống như iwr, bất kể tôi đoán nó có hoạt động không.
colsw

1

Halovi , 20 byte

oisup.me/⁰
\p
ye$hd0

Đầu ra p.nếu trang web bị sập, và e.nếu nó lên.

Giải trình:

oisup.me/⁰  ~# Open the concatination of "isup.me/" and arg0
\p          ~# Select first p element
ye$hd0      ~# Edit text with neovim and output result:
            ~#   Go one character before the end of the line and ..
            ~#   delete until beginning

1

Haskell (Lambdabot), 157 byte

import Data.ByteString.Lazy.Char8
import Network.HTTP.Simple
f s=httpLBS(parseRequest_$"http://isup.me/"++s)>>=print.not.isInfixOf"u!".unpack.getResponseBody

Thật không may, bạn không thể nhập Network.HTTP.Simplevào tio.run, cách dễ nhất để kiểm tra là chạy tập lệnh này (bạn sẽ cần stack):

#!/usr/bin/env stack
-- stack --install-ghc --resolver lts-8.19 runghc --package http-conduit

import Data.ByteString.Lazy.Char8
import Network.HTTP.Simple
import Data.List

main :: IO ()
main = mapM_ test [ "google.de", "made.up.com"]
  where test url = print ("testing "++url) >> f url

f :: String -> IO ()
f s=httpLBS(parseRequest_$"http://isup.me/"++s)
 >>=print.not.isInfixOf"u!".unpack.getResponseBody

0

Đi, 111 byte

Trong thời trang Go điển hình, phương pháp ngắn nhất là bóc nó ra.

import"os/exec"
func h(a string)bool{return exec.Command("sh","-c","curl -L isup.me/"+a+"|grep ^I").Run()!=nil}

Các triển khai khác tại đây: https://play.golang.org/p/8T5HSDQFmC


0

Clojure, 63 byte

#(clojure.string/includes?(slurp(str"http://isup.me/"%))"'s j")

Kiểm tra nếu HTML trả về bởi slurpcó chứa chuỗi "'s j"(như trong "Nó 'sj ust bạn"). Tôi có thể tìm thấy một chuỗi nhỏ hơn duy nhất cho trang, nhưng nó sẽ tiết kiệm cho tôi 2 byte. Nó cũng có khả năng làm cho nó ít chính xác hơn. "J" sẽ không xuất hiện trong phần đánh dấu ở bất cứ đâu ngoại trừ trong một kịch bản đó. Một chuỗi như "u." tuy nhiên có khả năng có thể xuất hiện trong URL, điều này sẽ phá vỡ nó.

(defn is-up? [site]
  (clojure.string/includes?
    (slurp (str "http://isup.me/" site))
    "'s j"))

0

Nim, 108 byte

import httpclient,strutils
echo newhttpclient().getcontent("//isup.me/"&stdin.readline.string).find("ks ")<0

Đáng tiếc đó strutilslà cần thiết cho contains.

Học Nim, lời khuyên đánh giá cao!


0

PHP 82 78 byte

<?=$i=$argv[1],+!preg_match("/!.*$i/",file_get_contents("http://isup.me/$i"));

Ví dụ i / o chạy:

$ php script.php google.com
> google.com1

Ví dụ 2

$ php script.php does.not.exist
> does.not.exist0

Hầu như là giải pháp ngắn nhất có thể. Đầu ra trống cũng là "một giá trị giả", vì vậy bạn có thể loại bỏ +. Và $argnthay vì $argv[1]bạn có thể sử dụng thêm 6 (trừ 1) byte.
Tít
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.