Wikipedia: Triết học!


26

Như nhiều chuyên viên máy tính có thể biết hầu hết các trang (95% tôi nghĩ) trên wikipedia cuối cùng dẫn đến Triết học như thế này:

Nhấp vào liên kết không in nghiêng đầu tiên hoặc trong ngoặc đơn đến một bài viết bình thường khác: (không phải là Tệp: hoặc Đặc biệt:, nhưng những thứ như Wikipedia: đều ổn) và lặp lại trên đó cho đến khi bạn nhấn triết lý.

Kịch bản phải:

  • Lấy một trang đầu tiên làm đầu vào
  • In tên của mỗi bài viết
  • Và in bao nhiêu bài báo để đến Triết học, và nếu nó không nói như vậy.

Bạn bắt đầu với 1000 điểm và mất một điểm cho mỗi ký tự trong mã, Điểm thưởng cho:

Phát hiện các bài viết lặp và dừng: +50

Phát hiện các bài viết lặp và yêu cầu nếu người dùng nên đi đến liên kết tiếp theo của bài viết: +170

Cho phép mặc định trên kiểm tra trước dưới dạng đối số dòng lệnh hoặc tương tự: +140

Điểm số cao nhất chiến thắng.


7
+1, thử thách lớn! Phát hiện dấu ngoặc đơn này là khó: P
Doorknob

1
Tôi có cảm giác điều này có thể sử dụng một số định nghĩa tốt hơn, nhưng tôi không chắc chính xác như thế nào.
Iszi

3
Mất một điểm cho mỗi nhân vật gõ. Hừm. Tuyệt vời, tôi hiểu rồi, tôi sẽ chỉ sao chép-dán các ký tự! Không mất điểm!
Justin

5
Xin đừng thay đổi các quy tắc sau khi câu trả lời đã được đăng; điều đó khá thô lỗ và thường được tán thành trong cộng đồng ở đây ...
Doorknob

Câu trả lời:


8

Ruby, 1000 - 303 299 337 - 50 373 - 170 382 - 170 - 140 379 - 170 - 140 ký tự = 697 701 713 797 928 931

Tôi chắc chắn có nhiều cải tiến được thực hiện.

(Điều này đòi hỏi Nokogiri)

require'open-uri'
require'nokogiri'
x="/wiki/"+gets.chomp
r=[n=i=0]
until x=~/\/Philosophy/
d=Nokogiri.HTML open"http://en.wikipedia.org#{x}"
x=d.css('p a').select{|a|t=a.xpath('preceding::text()').map(&:text)*'';t.count('(')==t.count(')')&&a.attr('href')=~/^.wiki[^:]+$/}[i].attr'href'
i=0
puts r.index(x)?"#{$><<'i=';i=($*[0]||gets).to_i;''}": r.push(x)[-1][6..-1]
n+=1
end
p n

Chạy ví dụ:

c:\a\ruby>wikipedia_crawl_philosophy
Latin (note: this is my input)
Classical_antiquity
History
Umbrella_term
Terminology
Word
Linguistics
Science
Knowledge
Fact
Proof_(truth)
Argument
Logic
Reasoning
Consciousness
Quality_(philosophy)
Property_(philosophy)
Modern_philosophy
Philosophy
18

Ví dụ mẫu mà tôi đã phải đi đến một liên kết khác

c:\a\ruby>wikipedia_crawl_philosophy
Snow
Precipitation_(meteorology)
Meteorology
Atmospheric_physics
Synoptic_scale_meteorology
i=2 // I put the 0-indexed number of the link I wanted to go to (so, the third link)

Weather
Atmosphere
Gas
State_of_matter#The_four_fundamental_states
Physics
Natural_science
Sciences
Knowledge
Fact
Proof_(truth)
Argument
Logic
Reasoning
Consciousness
Quality_(philosophy)
Property_(philosophy)
Modern_philosophy
Philosophy
25

Thủ thuật tôi đã sử dụng:

  • Tôi đã sử dụng bộ chọn p ađể chỉ nhận các liên kết không in nghiêng, bởi vì tất cả các liên kết trong bài viết thực tế không in nghiêng luôn nằm trong các phần tử đoạn trong Wikipedia.

hmmm ... có lẽ tôi không nên cho phép bất kỳ ngoại trừ các thư viện đi kèm với ngôn ngữ ...
AlphaModder

@ user1825860 Đây thực sự không phải là một thư viện đi kèm với ngôn ngữ; nó là một viên ngọc quý Tôi chỉnh sửa câu trả lời của tôi. Nhưng thực sự, bạn muốn thực hiện thử thách đã khó này và buộc chúng tôi không sử dụng các thư viện phân tích cú pháp HTML? : P
Doorknob

Tôi không từ chối nhưng bạn mất điểm: P
AlphaModder

Bạn nên đọc lại bài đăng đầu tiên và chỉnh sửa cho phù hợp: P
AlphaModder

2
@ user1825860 Vui lòng không thay đổi quy tắc sau khi câu trả lời đã được đăng; điều đó khá thô lỗ ...
Doorknob

5

"BASH " - (Nếu không nhầm: 1000 - 397 + 170 + 140 = 913 điểm)
"BASH" - (Nếu không nhầm: 1000 - 386 + 170 + 140 = 924 điểm)

"BASH" - (Nếu không nhầm: 1000 - 381 + 170 + 140 = 929 điểm)

BASH được trích dẫn về mục đích vì đây là một hỗn hợp các công cụ được sử dụng trong các vỏ * nix nhưng được gói trong một tập lệnh bash.

Chỉnh sửa 1:

  • Loại bỏ http://như curlmặc định này.
  • Thay đổi href=trận đấu trên neo để f=như <a>không có bất kỳ khác thường thuộc tính kết thúc bằng f. (Đây là khả năng của các thẻ tùy chỉnh. Cho đến nay chưa thấy thẻ nào.)
  • Đặt thông báo thoát không được tìm thấy !Philthay vì NoPhil. Cái này là một chút kỳ quặc như Người ta cũng có thể nói ví dụ !, 0, N, !Phoặc tương đương.
  • Quirk hai: -son curlcó thể được gỡ bỏ để giảm thêm ba byte, nhưng điều đó sẽ mang lại một đầu ra lộn xộn. Không chắc chắn nếu đó là một vấn đề.
  • Cập nhật trợ giúp trên trang này.

Sử dụng các quirks, mã sẽ kết thúc ở mức 379 byte, 931 điểm.

Tôi cũng có thể triển khai hộp điều hướng kết hợp (hy vọng) @plannapus bằng cách thêm sáu byte (trừ sáu điểm).(p|ul).*?<(\1)

Chỉnh sửa 2:

Sử dụng ${#c[@]}để in độ phân tách thay vì $itruy cập.

Sử dụng quirks, mã sẽ kết thúc ở mức 374 byte, 936 điểm.


Tôi triệu tập Cthulhu và tìm giải pháp regrec + bash / shell / * nix.

Ăn cắp:

Thực hiện:

  • Phát hiện vòng lặp và hỏi nếu liên kết tiếp theo nên được thực hiện.
  • Tùy chọn chọn liên kết tiếp theo trên trùng lặp như tùy chọn.

Yêu cầu:

  • bash v.
  • grepvới -Psự hỗ trợ (PCRE).
  • sed
  • curl
  • cut

Sử dụng:

script PATH [OPTIONS]

Print separation of article from ``PATH'' to ``Philosophy'' on Wikipedia.
Degrees of separation, if found, is printed as last line. 
If not found last line yields ``!Phil''.

PATH    
     Absolute path to starting article, e.g: /wiki/Word 
OPTIONS
     y   Automatically select next link if already visited.
     n   (Or other) Quit if next link already visited.
BUGS
     1. On previous visit; "next link" is not checked. Thus if next link
     has already been visited we get eternal loop. Not sure if this
     disqualify +170 points.
     2. Sure there are.

Mã nội tuyến. Sao chép vào tập tin. chmod +x filename. Chạy bằng ./script /wiki/…vỏ bash.

u=($1);c=($1);while ! [[ "$u" =~ /Philosophy$ ]];do echo "$u";u=($(curl -s "en.wikipedia.org$u"|tr '\n' ' '|grep -Po '<p>.*?</p>'|sed 's/>[^<]*([^)]*)//g'|grep -o '<a [^>]*f="/wiki/[^":]*"'|cut -d\" -f2));for x in "${c[@]}";do if [ "$x" = "$u" ];then [ $2 ] &&s=$2||read -p "${u[0]}?" s;[ $s = y ] &&u[0]=${u[1]}||{ echo "!Phil";exit;} fi;done;c=("${c[@]}" "$u");done;echo ${#c[@]};

Mã mở rộng và giải thích:

u=($1); # Array of paths.
c=($1); # Array of visited paths.
# While $u != /Philosophy, ugly trick is to use $u instead of ${u[0]}.
while ! [[ "$u" =~ /Philosophy$ ]];do   
        echo "$u";      # Print current page.
        # curl   : prints retreived page to stdout. "-s" could be skipped.
        # tr     : replace all newline with space. This is a ®sanity thing when it comes to 
        #          twidling with html using regex.
        # grep 1 : match <p> tags. Using -P's ungreedy *?.
        # sed    : remove all occurences of "(" something ")".
        # grep 2 : match links where "href" attribute starts with /wiki/ and is not e.g. File:
        # cut    : match actual href value.
        # Result is added to array ``u''.
        u=($(curl -s "en.wikipedia.org$u" |
                tr '\n' ' ' | 
                grep -Po '<p>.*?</p>' | 
                sed 's/>[^<]*([^)]*)//g' | 
                grep -o '<a [^>]*f="/wiki/[^":]*"' | 
                cut -d\" -f2));

        # For previously visited pages as x.
        for x in "${c[@]}"; do 
                # If x equals to first page ...
                if [ "$x" = "$u" ]; then        
                        # Use option or ask.
                        [ $2 ] && s=$2 || read -p "${u[0]}?" s; 
                        # If response is "y" use next link, else exit with status.
                        [ $s = y ] && u[0]=${u[1]} || { 
                                echo "!Phil"; 
                                exit;
                        } 
                fi;
        done;
        # Append current link to "visited"
        c=("${c[@]}" "$u"); 
done;
# Print number of visited pages.
echo ${#c[@]}

Chết tiệt, bạn đánh tôi một điểm! : P Tôi sẽ phải chơi golf giải pháp của mình nhiều hơn
Doorknob

Ye;), nhưng không chắc đây là mã hợp lệ. Sử dụng các công cụ theo cách này.
Runium

5

JavaScript 726 (ký tự 444 [556] + 170)

Bây giờ tôi đánh giá cao rằng điều này có thể không hợp lệ như một bookmarklet, nhưng dù sao tôi cũng rất thích mày mò.

Cách sử dụng: Điều hướng đến trang bạn muốn bắt đầu và chạy phần sau trong bảng điều khiển:

(function(a){c=0,o="";$(u="html")[u](f=$('<iframe src="'+location+'?">').on("load",function(){$=f.contentWindow.$;p=f.contentDocument.title[s="split"](" - ")[0];c++;p=="Philosophy"?document.write("<pre>"+o+p+"\n"+c):(i=RegExp("^"+p+"$","m").test(o)?a||confirm("Loop, try next?")?2:0:1)&&(f.src=$("p>a").filter(function(){return(t=$(this).parent()[u]()[s](this.outerHTML)[0])[s]("(").length==t[s](")").length})[--i].href);o+=p+"\n"})[0])})(true)

Đối với JavaScript, đầu ra là như sau:

JavaScript
Interpreter (computing)
Computer science
Science
Knowledge
Fact
Proof (truth)
Argument
Logic
Reason
Consciousness
Quality (philosophy)
Property (philosophy)
Modern philosophy
Philosophy
15

Giải pháp này sẽ cho rằng bạn muốn chuyển đến liên kết tiếp theo trên một vòng lặp được phát hiện, nhưng nếu bạn thay đổi trueở cuối falsethì nó sẽ bật lên một hộp xác nhận thay vào đó (khá khó chịu ...) không chắc là nó có đủ điều kiện cho thưởng phụ hay không. Tôi sẽ cho là không.

Thụt lề:

(function(l){
    c=0,o='';
    $(u='html')[u](f=$('<iframe src="'+location+'?">').on('load',function(){ // Firefox needs the ? to properly load the frame
        $=f.contentWindow.$; // reference repeated calls as strings to save more bytes
        p=f.contentDocument.title[s='split'](' - ')[0]; // get the title

        c++;
        p=='Philosophy'?
            document.write('<pre>'+o+p+'\n'+c): // pre for nice formatting
            (i=RegExp('^'+p+'$','m').test(o)?
                l||confirm('Loop, try next?')?
                    2: // desired index + 1 so we can use as a boolean
                    0
                :
                1)&&
            (f.src=$('p>a').filter(function(){
                return (t=$(this).parent()[u]()[s](this.outerHTML)[0])[s]('(').length == t[s](')').length // shorter, but still not overly happy with this...
            })[--i].href);
            o+=p+'\n' // update output
    })[0])
})(true) // change this to show confirm box when loop detected

Vì vậy, ban đầu tôi đã bỏ lỡ phần về việc bỏ qua các vật phẩm trong parens, thêm vào đó làm cho nó trở nên dài dòng hơn, vì vậy tôi hy vọng chơi golf có chức năng lọc xuống (hoặc hy vọng thay thế hoàn toàn).

Hoạt động trong cả Chrome và Firefox (đã thử nghiệm trong Firefox 26)


2
Trông thật tuyệt, nhưng thất bại trong Firefox 20.
boothby

Thôi nào! Tôi chỉ thử nghiệm Chrome. Tôi sẽ xem xét nó!
Dom Hastings

@boothby Nên làm việc với Firefox ngay bây giờ ... Vẫn muốn làm việc trên các liên kết tôi đang chọn!
Dom Hastings

5

C # - 813 ký tự

Điểm: 1000-813 + 50 + 170 + 140 = 547 :(

Không có thư viện bên ngoài. Phát hiện vòng lặp .

Đối số đầu tiên là Điều nguồn, thứ hai là Điều mục tiêu.

Phiên bản chơi gôn:

class Program
{
    static void Main(string[] a)
    {
        Func<XmlDocument,IList<string>> G=delegate(XmlDocument xd){return xd.SelectNodes("//p//a[starts-with(@href,'/wiki/') and not(contains(@href,':'))]").Cast<XmlNode>().Select(n=>n.Attributes["href"].InnerText).ToList();};Action<string> W=delegate(string s){Console.WriteLine(s);};var h=new HashSet<string>();var c=new WebClient();var x=new XmlDocument();var t=c.DownloadString(@"http://wikipedia.org/wiki/"+a[0]);int i=0,C=0;
    GO:
        x.LoadXml(t);var ns=G(x);
    COL:
        var f=ns[i];if(f.Equals("/wiki/"+a[1],StringComparison.OrdinalIgnoreCase)){goto END;}if(h.Contains(f)){W("loop: "+f);i++;goto COL;}else{h.Add(f);i=0;C++;}W(f);t=c.DownloadString(@"http://wikipedia.org"+f);goto GO;
    END:
        W("Found in "+C);
    }
}

Phiên bản dễ hiểu:

class Program
{
    // arg[0] source article. arg[1] target article
    static void Main(string[] arg)
    {
        Func<XmlDocument, IList<string>> G = delegate(XmlDocument xd)
        {
            return xd.SelectNodes("//p//a[starts-with(@href,'/wiki/') and not(contains(@href,':'))]").Cast<XmlNode>().Select(n => n.Attributes["href"].InnerText).ToList();
        };
        Action<string> W = delegate(string s) { Console.WriteLine(s); };
        var h = new HashSet<string>(); var c = new WebClient(); var x = new XmlDocument();
        var allText = c.DownloadString(@"http://wikipedia.org/wiki/" + arg[0]);
        int i = 0; int C = 0;
    GO:
        x.LoadXml(allText);
        var ns = G(x);
    COL:
        var f = ns[i];
        if (f.Equals("/wiki/" + arg[1], StringComparison.OrdinalIgnoreCase))
        {
            goto END;
        }
        if (h.Contains(f))
        {
            W("loop: " + f); i++; goto COL;
        }
        else
        {
            h.Add(f); i = 0; C++;
        }
        W(f);
        allText = c.DownloadString(@"http://wikipedia.org" + f);
        goto GO;
    END:
        W("Found in " + C);
    }
}

Ví dụ chạy, từ "Bầu trời" đến "Triết lý":

C:\>wiki.exe Sky Philosophy

/wiki/Earth
/wiki/Geometric_albedo
/wiki/Phase_angle_(astronomy)
/wiki/Observational_astronomy
/wiki/Astronomy
/wiki/Natural_science
/wiki/Sciences
/wiki/Latin_language
/wiki/Classical_antiquity
/wiki/History
/wiki/Ancient_Greek
/wiki/Greek_language
/wiki/Modern_Greek
loop: /wiki/Greek_language
/wiki/Colloquialism
/wiki/Word
/wiki/Linguistics
/wiki/Science
loop: /wiki/Latin_language
/wiki/Knowledge
/wiki/Fact
/wiki/Latin
loop: /wiki/Classical_antiquity
/wiki/Italic_languages
/wiki/Indo-European_languages
/wiki/Language_family
/wiki/Language
/wiki/Human
/wiki/Extinct
/wiki/Biology
loop: /wiki/Natural_science
/wiki/Life
loop: /wiki/Earth
/wiki/Physical_body
/wiki/Physics
loop: /wiki/Greek_language
loop: /wiki/Natural_science
/wiki/Matter
/wiki/Rest_mass
/wiki/Center_of_momentum_frame
loop: /wiki/Physics
/wiki/Inertial_frame
loop: /wiki/Physics
/wiki/Frame_of_reference
loop: /wiki/Physics
/wiki/Coordinate_system
/wiki/Geometry
loop: /wiki/Ancient_Greek
/wiki/Mathematics
/wiki/Quantity
/wiki/Property_(philosophy)
/wiki/Modern_philosophy
Found in 41

C:\>

5

Scala (294 ký tự => 1000-294 + 140 = 846 điểm)

Giải pháp cập nhật tự động lấy liên kết tiếp theo nếu đã được sử dụng. Cảm ơn vì 140 điểm thưởng.

Logic: Nhặt liên kết "/ wiki" đầu tiên không có ":" trong đó (vì vậy nó bỏ qua các liên kết "Tệp:"). Rửa sạch và lặp lại với đệ quy trả về số đếm 1 mỗi lần. Tôi giữ một danh sách tất cả các kết quả đầu ra trước đó để chương trình không đi vào một vòng lặp vô hạn.

Biểu thức chính quy: Tôi có 2 dạng biểu thức chính quy.

  • "<p>.*?\"/wiki/([^:]*?)\".*?/p>"trong đó tìm thấy các liên kết trong các <p>thẻ
  • "p>.*?/wiki/([^:]*?)\""đó là một thẻ thử nghiệm hơn một chút đã được chứng minh là hoạt động nhưng cung cấp các kết quả khác nhau bởi vì đôi khi, nó chọn các liên kết từ thanh thông tin bên phải. Đây là những bài viết thường xuyên nên tôi tin rằng nó vẫn còn hiệu lực. Nếu nó bị phán quyết là không, OP (hoặc người khác) có thể để lại cho tôi một nhận xét và tôi có thể cập nhật giải pháp của mình lên một reg-ex tốt hơn.

Tôi sẽ sử dụng biểu thức chính quy thứ hai cho đến khi tôi tìm thấy một trường hợp thử nghiệm mà nó không hoạt động hoặc OP đề cập đến việc chọn liên kết từ thanh bên không được phép (theo tôi, các thanh thông tin vẫn là một phần của bản thân bài viết thực tế; tóm tắt nhiều hơn).


Nguồn tối thiểu:

object W extends App{print(x(Seq(args(0))));def x(s:Seq[Any]):Int={val? =s.last;println(?);?match{case "Philosophy"=>1;case _=>x(s:+"p>.*?/wiki/([^:]*?)\".*?/p>".r.findAllMatchIn(io.Source.fromURL("http://en.wikipedia.org/wiki/"+ ?).getLines.mkString).map(_ group 1).filter(!s.contains(_)).next)+1}}}

Nguồn có thể đọc:

object W extends App {
  print(x(Seq(args(0))))

  def x(s: Seq[Any]): Int = {
    val ? = s.last
    println(?)
    ? match {
      case "Philosophy" => 1
      case _ => x(s :+ "p>.*?/wiki/([^:]*?)\"".r.findAllMatchIn(io.Source.fromURL("http://en.wikipedia.org/wiki/" + ?).getLines.mkString).map(_ group 1).filter(!s.contains(_)).next) + 1
    }
  }
}

Đầu ra mẫu:

Đầu vào

Space_toilet

Đầu ra

Space_toilet
Weightlessness
G-force
Weight
Force
SI_unit
French_language
Second_language
Language_acquisition
Word
Linguistics
Science
Latin_language
Pontifical_Academy_for_Latin
Pope_Benedict_XVI
Pope_Benedict_(disambiguation)
Regnal_name#Catholic_Church
Monarch
State_(polity)
Community
Commutative_property
Mathematics
Quantity
Property_(philosophy)
Modern_philosophy
Philosophy
26

1
Scala không yêu cầu một đối tượng hoặc phương thức chính. Bạn có thể chạy nó với trình thông dịch là "scala <tên tệp> [args ..]". Sử dụng args(0)để có được đối số đầu tiên, loại bỏ các định nghĩa objectmainđịnh nghĩa của bạn và tôi nghĩ bạn cũng có thể loại bỏ đối số :Int. pastebin.com/YqywKcG8
KChaloux

Hóa ra bạn không thể loại bỏ : Int. Không nhận ra bạn đang thực hiện một cuộc gọi đệ quy. Ngoài ra, pastebin của tôi được lấy từ Nguồn có thể đọc cũ của bạn, nhưng các khái niệm tương tự cũng được áp dụng.
KChaloux

Tôi sẽ thử loại bỏ phương pháp chính. Và vâng, các cuộc gọi đệ quy làm cho tôi thêm vào :Intđó. Sau ngày hôm nay, tôi cũng sẽ thêm một hình thức dễ đọc của giải pháp 333 char mà tôi có. Cảm ơn những lời đề nghị @KChaloux
javatarz

1
Giống như tôi đã nói, tham chiếu đến object Q extends App { ... }là hoàn toàn không cần thiết nếu bạn chạy mã bằng trình thông dịch thay vì biên dịch bằng scalac. Chỉ cần chạy vớiscala <filename> [args..]
KChaloux

4

R, 379 ký tự; 1000-379 + 170 = 791 điểm

Phiên bản hỏi người dùng cách tiến hành khi phát hiện vòng lặp

library(XML);w="http://en.wikipedia.org";W="/wiki/";n=1;A=c(scan(,""));while(A[n]!="Philosophy"){a=paste0(w,W,A[n]);d=sapply(strsplit(grep(W,sapply(xpathApply(xmlParse(readLines(a)),"//p/a[@href]|//ul/li/a[@href]",xmlAttrs),`[`,'href'),v=T),"/"),`[`,3);B=d[-grep(":",d)];n=n+1;if(B[1]%in%A)if(readline("Loop!2nd link?")=="n")break;A[n]=head(B[!B%in%A],1);cat(A[n],"\n")};cat(n-1)

Với sự thụt lề và bình luận:

library(XML) #Uses package XML
w="http://en.wikipedia.org"
W="/wiki/"
n=1
A=c(scan(,"")) #Stdin + makes it a vector so we can store each iteration
while(A[n]!="Philosophy"){
    a=paste0(w,W,A[n])
    d=sapply(strsplit(grep(W,sapply( #The heart of the program
             xpathApply(xmlParse(readLines(a)),"//p/a[@href]|//ul/li/a[@href]",xmlAttrs),
             `[`,'href'),v=T),"/"),`[`,3)
    B=d[-grep(":",d)] #get rid of Templates, Files ,etc...
    n=n+1
    #Ask user if should proceed when loop encountered 
    #(any answer other than "n" is considered agreement):
    if(B[1]%in%A)if(readline("Loop!2nd link?")=="n")break
    A[n]=head(B[!B%in%A],1) #Take the first link that is not redundant
    cat(A[n],"\n")
    }
cat(n-1)

Chạy ví dụ:

> library(XML);w="http://en.wikipedia.org";W="/wiki/";n=1;A=c(scan(,""));while(A[n]!="Philosophy"){a=paste(w,W,A[n],sep="");d=sapply(strsplit(grep(W,sapply(xpathApply(xmlParse(readLines(a)),"//p/a[@href]|//ul/li/a[@href]",xmlAttrs),`[`,'href'),v=T),"/"),`[`,3);B=d[-grep(":",d)];n=n+1;if(B[1]%in%A)if(readline("Loop!2nd link?")=="n")break;A[n]=head(B[!B%in%A],1);cat(A[n],"\n")};cat(n-1)
1: Extended_ASCII
2: 
Read 1 item
Eight-bit 
Computer_architecture 
Computer_science 
Science 
Logic 
List_of_aestheticians 
Art 
Human_behavior 
Behavior 
Organism 
Biology 
Loop!2nd link?y
Mathematics 
Quantity 
Property_(philosophy) 
Modern_philosophy 
Philosophy 
16

R, 325 ký tự; ??? điểm

Phiên bản mà theo mặc định sẽ có liên kết không dự phòng đầu tiên (nghĩa là không lặp).

library(XML);w="http://en.wikipedia.org";W="/wiki/";n=1;A=c(scan(,""));while(A[n]!="Philosophy"){a=paste0(w,W,A[n]);d=sapply(strsplit(grep(W,sapply(xpathApply(xmlParse(readLines(a)),"//p/a[@href]|//ul/li/a[@href]",xmlAttrs),`[`,'href'),v=T),"/"),`[`,3);B=d[-grep(":",d)];n=n+1;A[n]=head(B[!B%in%A],1);cat(A[n],"\n")};cat(n-1)
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.