सभी की पसंदीदा प्रोग्रामिंग भाषा, R के लिए नौकरी की तरह लगता है!
library(XML)
tables <- readHTMLTable('http://www.uesp.net/wiki/Skyrim:Ingredients',
stringsAsFactors=FALSE)
potions <- tables[[1]]
twoway <- data.frame(t(combn(potions$Name,2)))
threeway <- data.frame(t(combn(potions$Name,3)))
बीएएम!
> head(twoway)
X1 X2
1 Abecean Longfin Bear Claws
2 Abecean Longfin Bee
3 Abecean Longfin Beehive Husk
4 Abecean Longfin Bleeding Crown
5 Abecean Longfin Blisterwort
6 Abecean Longfin Blue Butterfly Wing
> head(threeway)
X1 X2 X3
1 Abecean Longfin Bear Claws Bee
2 Abecean Longfin Bear Claws Beehive Husk
3 Abecean Longfin Bear Claws Bleeding Crown
4 Abecean Longfin Bear Claws Blisterwort
5 Abecean Longfin Bear Claws Blue Butterfly Wing
6 Abecean Longfin Bear Claws Blue Dartwing
csv फ़ाइलें के रूप में टेबल को बचाने के लिए write.csv
आदेश का उपयोग करें।
/संपादित करें: यह समझाने के लिए कि मैं क्या कर रहा हूं: XML पैकेज में readHTMLTable फ़ंक्शन शामिल है, जो किसी भी वेबसाइट से सभी HTML टेबल को डेटा.फ्रेम के रूप में खींचता है और उन्हें एक सूची के रूप में सहेजता है। इस सूची में पहली तालिका वह है जिसे हम चाहते हैं। combn फ़ंक्शन पोशन नामों के सभी 2-तरफा, 3-तरफा, और एन रास्ता combinations पाता है, और परिणाम को मैट्रिक्स के रूप में देता है। मैं इस मैट्रिक्स को स्थानांतरित करने के लिए टी फ़ंक्शन का उपयोग करता हूं, इसलिए प्रत्येक संयोजन एक पंक्ति है, और उसके बाद इसे डेटा फ्रेम में परिवर्तित करें। यह आसानी से एन अवयवों के संयोजन तक फैलता है।
/संपादित 2: मैंने एन-वे टेबल को उपयोगकर्ता द्वारा निर्दिष्ट सीएसवी फ़ाइल में सहेजने के लिए एक फ़ंक्शन लिखा था। मैंने इसे थोड़ा सा भी काम किया, क्योंकि विशाल मैट्रिक्स का स्थानांतरण कम्प्यूटेशनल रूप से महंगा है। इस संस्करण को आपको 4-तरफा तालिका की गणना करने की अनुमति देनी चाहिए, हालांकि इसमें काफी समय लगता है और मुझे नहीं पता कि यह गेम के लिए प्रासंगिक है या नहीं।
nway <- function(n, filepath, data=potions) {
nway <- combn(data$Name, n, simplify = FALSE)
nway <- do.call(rbind,nway)
write.csv(nway,filepath, row.names=FALSE)
}
nway(4,'~/Desktop/4way.csv')
/संपादित करें 3: वास्तविक काम करने वाले औषधि खोजने के लिए यहां कुछ कोड दिया गया है। यह बहुत ही कुशल नहीं है और शायद इसमें काफी सुधार किया जा सकता है:
#Given an ingredient, lookup effects
findEffects <- function(Name) { #Given a name, lookup effects
potions[potions$Name==Name,3:6]
}
#2-way potions
intersectTwoEffects <- function(x) {
Effects1 <- findEffects(x[1])
Effects2 <- findEffects(x[2])
Effects <- unlist(intersect(Effects1,Effects2))
Effects <- c(x[1],x[2],Effects)
length(Effects) <- 6
names(Effects) <- NULL
c(Effects,sum(is.na(Effects)))
}
twoway <- lapply(twoway,intersectTwoEffects)
twoway <- do.call(rbind,twoway)
twoway <- twoway[twoway[,7]<4,-7] #remove combos with no effect
write.csv(twoway,'~/Desktop/twoway.csv',row.names=FALSE)
#3-way potions
intersectThreeEffects <- function(x) {
Effects1 <- findEffects(x[1])
Effects2 <- findEffects(x[2])
Effects3 <- findEffects(x[3])
Effects <- c(intersect(Effects1,Effects2),intersect(Effects1,Effects3),intersect(Effects2,Effects3))
Effects <- unlist(unique(Effects))
Effects <- c(x[1],x[2],x[3],Effects)
length(Effects) <- 8
names(Effects) <- NULL
c(Effects,sum(is.na(Effects)))
}
threeway <- lapply(threeway,intersectThreeEffects)
threeway <- do.call(rbind,threeway)
threeway <- threeway[threeway[,9]<5,-9] #remove combos with no effect
write.csv(threeway,'~/Desktop/threeway.csv',row.names=FALSE)
(+1) अच्छा प्रतिक्रिया। एक उपयोगी उत्तर के लिए – chl
+1, लेकिन प्रत्येक संयोजन वास्तव में काम करने वाले औषधि व्यंजनों को खोजने का एक प्रभावी तरीका उत्पन्न कर रहा है? –
@ डेविड बी: आपको क्या लगता है कि एक और अधिक कुशल दृष्टिकोण होगा? – Zach