challenge LL Golf Hole 1 - tinyurl.comを使ってURLを短縮する

tinyurl.com( http://tinyurl.com/ )のサービスを利用し、 http://ll.jus.or.jp/2008/info/xgihyo というURLを短縮しなさい。tinyurl.comのalias機能は使わないものとする。 なお、参考までに短縮したURLは http://tinyurl.com/5mngx8 となる。

余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてみよ。

※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env ruby

require 'rubygems'
require 'mechanize'

def tinyurl(url, _alias = nil)
    m = WWW::Mechanize.new
    res = m.get('http://tinyurl.com/')
    form = res.forms[1]
    form['url'] = url
    form['alias'] = _alias if _alias
    res = m.submit(form)
    regexp = Regexp.new('.*(http\:\//tinyurl.com/[a-z0-9-]+).*')
    match = regexp.match(res.body)
    return match[1] if match
end

if __FILE__ == $0 then
    puts tinyurl('http://ll.jus.or.jp/2008/info/xgihyo')
end

Posted feedbacks - Ruby

tinyurl.com( http://tinyurl.com/ )のサービスを利用し、 http://ll.jus.or.jp/2008/info/xgihyo というURLを短縮しなさい。tinyurl.comのalias機能は使わないものとする。 なお、参考までに短縮したURLは http://tinyurl.com/5mngx8 となる。

余力のあるものはこのプログラムを短くしてみたり、短くしてみたり、短くしてみよ。

※LL Future実行委員の高野光弘です。この出題は LL Future公式の出題であり、優れたものについてはLL Golfのセッションでご紹介させていただくかもしれません。ご理解の上、ご投稿ください。また、LL Futureのチケットは現在も発売中です。よろしければ、メインイベントの方にもぜひご参加ください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env ruby

require 'rubygems'
require 'mechanize'

def tinyurl(url, _alias = nil)
    m = WWW::Mechanize.new
    res = m.get('http://tinyurl.com/')
    form = res.forms[1]
    form['url'] = url
    form['alias'] = _alias if _alias
    res = m.submit(form)
    regexp = Regexp.new('.*(http\:\//tinyurl.com/[a-z0-9-]+).*')
    match = regexp.match(res.body)
    return match[1] if match
end

if __FILE__ == $0 then
    puts tinyurl('http://ll.jus.or.jp/2008/info/xgihyo')
end

TinyURL APIとな!?

1
ruby -ropen-uri -e "puts open('http://tinyurl.com/api-create.php?url=http://ll.jus.or.jp/2008/info/xgihyo').read"

readしなくても*で展開する方法もあります

1
ruby -ropen-uri -e'puts *open("http://url.ms/qJI")'

1バイトだけ短く。

1
ruby -rnet/http -e "puts Net::HTTP.get('tinyurl.com','api-create.php?url=http://ll.jus.or.jp/2008/info/xgihyo')"

実行はしないでください。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env ruby

require 'rubygems'
require 'mechanize'

$a = ('0'..'9').to_a + ('a'..'z').to_a

def num2str(n)
  s = ""
  while (n > 0)
    n,r = n.divmod 36
    s << $a[r]
  end
  return s.empty? ? "0": s
end

m = WWW::Mechanize.new
s = ""
#n = 539933837
n = 0
loop {
  begin
    s = "http://tinyurl.com/" + num2str(n)
    res = m.get(s)
    break if (res.uri.to_s == "http://ll.jus.or.jp/2008/info/xgihyo")
  rescue
  end
  n += 1
}

puts s

こそこそ・・・

1
2
3
#! /usr/bin/env ruby
require 'open-uri'
puts *open('http://tinyurl.com/api-create.php?url=http://ll.jus.or.jp/2008/info/xgihyo')

この仕組みは面白いですね :-)

Rubyでも書いてみました。

1
ruby -ropen-uri -e'eval open("http://ja.doukaku.org/comment/6891/download").read'

1
ruby -ropen-uri -e'eval open("http://tinyurl.com/5kzlfb").read'

一応gorubyの例として
1
goruby -ropen-uri -e'pr *op("http://tinyurl.com/api-create.php?url=http://ll.jus.or.jp/2008/info/xgihyo")'

普通に書いてみた

1
require'open-uri';puts open('http://tinyurl.com/create.php?url=http://ll.jus.or.jp/2008/info/xgihyo',&:read)[%r|http://tinyurl.com/\w+|]

Index

Feed

Other

Link

Pathtraq

loading...