আপনার নিজের অ্যাডভেঞ্চার চয়ন করুন


17

আপনার নিজের অ্যাডভেঞ্চার বই চয়ন করুন ইন্টারেক্টিভ সাহিত্যের একটি ফর্ম যেখানে পাঠকের অবশ্যই সিদ্ধান্ত নেওয়া উচিত যা গল্পের ফলাফলকে প্রভাবিত করে। গল্পের নির্দিষ্ট পয়েন্টে পাঠকের একাধিক বিকল্প রয়েছে যা বেছে নেওয়া যেতে পারে, প্রতিটি পাঠককে বইয়ের একটি ভিন্ন পৃষ্ঠায় প্রেরণ করে।

উদাহরণস্বরূপ, একটি ফ্যান্টাসি সেটিংয়ে, কাউকে কোনও পৃষ্ঠা 22 এ "ঝাঁপ দিয়ে" কোনও রহস্যময় গুহায় যাত্রা করতে হবে বা 8 পৃষ্ঠায় লাফ দিয়ে নিকটবর্তী অরণ্য সন্ধান করতে হবে কিনা তা সিদ্ধান্ত নিতে হবে "এই" জাম্পগুলি "প্রকাশ করা যেতে পারে পৃষ্ঠা সংখ্যাগুলির জোড়া হিসাবে, এর মতো:

14 22
14 8

বেশিরভাগ ক্ষেত্রেই গল্পটির অনেকগুলি সমাপ্তি রয়েছে তবে কেবল কয়েকটি ভাল। লক্ষ্যটি হল একটি ভাল সমাপ্তিতে পৌঁছানোর জন্য গল্পটি নেভিগেট করা।

টাস্ক:

প্রদত্ত বইয়ের জন্য "জাম্প" এর একটি তালিকা দেওয়া, আপনার কাজটি এমন কোনও রুট নির্ধারণ করা যা একটি নির্দিষ্ট সমাপ্তির দিকে নিয়ে যায়। যেহেতু এটি মোটামুটি সহজ, আসল চ্যালেঞ্জটি হ'ল এটি যতটা সম্ভব কম চরিত্রে করা।

এটি কোড গল্ফ

নমুনা ইনপুট (যেখানে 1 শুরু এবং 100 লক্ষ্য):

1 10
10 5
10 13
5 12
5 19
13 15
12 20
15 100

নমুনা আউটপুট:

1 10 13 15 100

নমুনা ইনপুট:

15 2
1 4
2 12
1 9
3 1
1 15
9 3
12 64
4 10
2 6
80 100
5 10
6 24
12 80
6 150
120 9
150 120

নমুনা আউটপুট:

1 15 2 12 80 100

মন্তব্য:

  • জাম্পগুলির তালিকা ব্যবহারকারী বা ফাইল থেকে স্টিডিনের ইনপুট হবে be আপনি যে কোনওটিকে সবচেয়ে সুবিধাজনক চয়ন করতে পারেন।
  • ইনপুটটিতে একক স্পেস দ্বারা পৃথক হওয়া উত্স এবং গন্তব্য সহ প্রতি লাইনে 1 লাফ থাকবে।
  • ইনপুটটিতে থাকা লাইনগুলি কোনও নির্দিষ্ট ক্রমে থাকার গ্যারান্টিযুক্ত নয়।
  • একটি সফল পথ প্রথম পৃষ্ঠায় শুরু হবে এবং 100 পৃষ্ঠায় শেষ হবে।
  • আপনি ধরে নিতে পারেন লক্ষ্যটির কমপক্ষে 1 টি পথ রয়েছে। আপনাকে সমস্ত পাথ সন্ধান করার দরকার নেই, বা আপনারও সবচেয়ে ছোটতম সন্ধান করার দরকার নেই। কমপক্ষে একটি সন্ধান করুন।
  • সবচেয়ে ছোট পৃষ্ঠা নম্বরটি হবে ১. বৃহত্তম পৃষ্ঠা নম্বরটির কোনও সীমা নেই। (আপনি ধরে নিতে পারেন এটি কোনও ইনট এর পরিসর অনুসারে মাপসই হবে))
  • লুপ উপস্থিত থাকতে পারে। উদাহরণস্বরূপ, তালিকায় পৃষ্ঠাটি 5 থেকে 10, 10 থেকে 19 এবং 19 থেকে 5 এর মধ্যে ঝাঁপ থাকতে পারে।
  • মৃত-প্রান্ত থাকতে পারে। এটি হ'ল কোনও গন্তব্য পৃষ্ঠায় কোথাও যেতে পারে না।
  • বিপরীতে, অ্যাক্সেসযোগ্য পৃষ্ঠা থাকতে পারে। অর্থাত্ কোনও উত্স পৃষ্ঠাটি কোনও জাম্পের গন্তব্য নাও হতে পারে।
  • 1 এবং 100 এর মধ্যে সমস্ত পৃষ্ঠা নম্বর ব্যবহারের গ্যারান্টিযুক্ত নয়।
  • আপনার আউটপুটটিতে পৃষ্ঠা নম্বরগুলির একটি বৈধ রুট থাকতে হবে, 1 দিয়ে শুরু হবে এবং 100 এ শেষ হবে, স্পেস দিয়ে আলাদা করে।

মনে রাখবেন, এটি কোড গল্ফ, তাই সংক্ষিপ্ততম সমাধানটি জয়ী হয়!

সম্পাদনা: পরীক্ষার জন্য আরও একটি নমুনা যুক্ত করা হয়েছে।


1
আমরা কি ধরে নিতে পারি যে 100 পৃষ্ঠা থেকে কোনও জাম্প নেই?
পিটার টেলর

হ্যাঁ, আপনি ধরে নিতে পারেন।
মাইগিমারু

আমার অনুভূতি আছে যে লিসপ বা অ্যালোয় জাতীয় কিছু খুব কম অক্ষরে এটি সম্পাদন করতে পারে, আমি যখন কাজটি ছেড়ে যাব তখন পরে চেষ্টা করব।
জোসেউ নুনোফেরেইরা

উত্তর:


7

গল্ফস্ক্রিপ্ট, 58 57 টি অক্ষর

~]2/.,{:A{){=}+{0=}\+A\,\`{\+}+/}/]A+}*{)100=\0=1=*}?' '*

সতর্কতা : এটি অতি-অদক্ষ। এটি বার বার সংলগ্ন ম্যাট্রিক্স স্কোয়ার করে এবং তারপরে কোনও রাস্তা অনুসন্ধান করে কাজ করে; যদি Eগ্রাফটিতে প্রান্তগুলি থাকে তবে এটি 2 পর্যন্ত দৈর্ঘ্যের প্রতিটি পাথ খুঁজে পেতে পারে (এবং সংক্ষিপ্ততরগুলি এটি প্রচুর সময় পাবেন)। এটি আপনাকে যুক্তিসঙ্গত সময়ে প্রথম পরীক্ষার ক্ষেত্রে ফলাফল দেবে, তবে আপনি যদি দ্বিতীয়টি চেষ্টা করতে চান তবে নিশ্চিত হয়ে নিন যে আপনি কয়েকটি স্মৃতি মেমরি পেয়েছেন এবং দীর্ঘ পথের জন্য যেতে পারেন।

আপনি যদি যুক্তিসঙ্গত দক্ষ সমাধান চান তবে আমি 67 টি অক্ষরে প্রস্তাব দিই:

~]2/:A,[1]]({A{{{?)}+1$\,,}%~!*},{({\-1==}+2$?\[+]+}/}*{100?)}?' '*

আমি বুঝতে পারি নি যে আপনি গল্ফস্ক্রিপ্টে ম্যাট্রিক্স গুণ করতে পারেন!
মাইগিমারু

@ মিগিমারু, এটি একটি টুরিং-শক্তিশালী ভাষা, তবে এর অ্যারে পরিচালনা করার ক্ষেত্রে অনেকগুলি ত্রুটি রয়েছে।
পিটার টেলর

সেটা সত্য. আমার ধারণা আমি খুব সামান্য
জায়গাতেই

@ পিটার দুঃখিত, আমি এটি দিয়ে চালানোর চেষ্টা করেছি cat input | ruby1.9 golfscript.rb peter.gsএবং যা ঘটেছিল তা হ'ল আমার ম্যাকবুকটি সত্যই উত্তপ্ত হয়ে উঠল । আমি কীভাবে এটি চালাব?
গ্যারেথ

3
@ গ্যারেথ, হাঁ আমি যখন আধা ঘন্টা পরে এটি মেরেছিলাম তখন এটি 2 গিগাবাইট পর্যন্ত মেমরি পর্যন্ত ছিল। আমি সতর্কতাটি আরও কিছুটা পরিষ্কার করে দেব।
পিটার টেলর

14

পাইথন, 232 213 157 143 135 132 অক্ষর (সংক্ষিপ্ততম পথ)

এই প্রয়োগটি বর্ণিত সমস্ত প্রান্তের কেসগুলি পরিচালনা করতে পারে (লুপস, মৃত প্রান্তগুলি, এতিম পৃষ্ঠাগুলি ইত্যাদি) এবং গ্যারান্টি দেয় যে এটি শেষের সবচেয়ে সংক্ষিপ্ততম পথটি খুঁজে পাবে। এটি জিক্সট্রার সংক্ষিপ্ততম পথ অ্যালগরিদমের ভিত্তিতে তৈরি।

import sys
l=[k.split()for k in sys.stdin]
s={"100":"100"}
while"1"not in s:
 for i,j in l:
    if j in s:s[i]=i+" "+s[j]
print s["1"]

3

জাভাস্ক্রিপ্ট: 189 অক্ষর

এটি একটি পুনরাবৃত্ত সমাধান যা অ্যাডভেঞ্চারের মধ্য দিয়ে সংক্ষিপ্ততম পথ খুঁজে পায়।

কোড-Golfed:

a=prompt().split('\\n');b=0;while(!(d=c(b++,1)));function c(e,f,i,g){if(e>0)for(i=0;h=a[i++];){g=h.split(' ');if(g[0]==f){if(g[1]==100)return h;if(j=c(e-1,g[1]))return g[0]+' '+j}}}alert(d)

পরীক্ষা করতে ( সতর্কতা: খারাপ ইনপুটটির জন্য অসীম লুপ! ):

  1. নিম্নলিখিত ইনপুট স্ট্রিংগুলির একটি অনুলিপি করুন (বা আপনার নিজস্ব নিজস্ব অ্যাডভেঞ্চার বেছে নেওয়ার জন্য অনুরূপ ফর্ম্যাট ব্যবহার করুন):

    • 1 10\n10 5\n10 13\n5 12\n5 19\n13 15\n12 20\n15 100
    • 15 2\n1 4\n2 12\n1 9\n3 1\n1 15\n9 3\n12 64\n4 10\n2 6\n80 100\n5 10\n6 24\n12 80\n6 150\n120 9\n150 120
  2. পরীক্ষার ফিডলের প্রম্পটে এটি আটকান ।

ফর্ম্যাট এবং মন্তব্য করা কোড:

//Get Input from user
inputLines = prompt().split('\\n');

//Starting at 0, check for solutions with more moves
moves = 0;
while (!(solution = getSolution(moves++, 1)));

/**
 * Recursive function that returns the moves string or nothing if no
 * solution is available.
 *
 * @param numMoves - number of moves to check
 * @param startPage - the starting page to check
 * @param i - A counter.  Only included to make this a local variable.
 * @param line - The line being tested.  Only included to make this a local variable.
 */
function getSolution(numMoves, startPage, i, line) {
    //Only check for solutions if there are more than one moves left
    if (numMoves > 0) {
        //Iterate through all the lines
        for (i=0; text = inputLines[i++];) {
            line = text.split(' ');
            //If the line's start page matches the current start page
            if (line[0] == startPage) {
                //If the goal page is the to page return the step
                if (line[1] == 100) {
                    return text;
                }
                //If there is a solution in less moves from the to page, return that
                if (partialSolution = getSolution(numMoves - 1, line[1])) {
                    return line[0] + ' ' + partialSolution;
                }
            }
        }
    }
}

//Output the solution
alert(solution);

পরীক্ষা করতে ( সতর্কতা: খারাপ ইনপুটটির জন্য অসীম লুপ! ):

  1. নিম্নলিখিত ইনপুট স্ট্রিংগুলির একটি অনুলিপি করুন (বা আপনার নিজস্ব নিজস্ব অ্যাডভেঞ্চার বেছে নেওয়ার জন্য অনুরূপ ফর্ম্যাট ব্যবহার করুন):

    • 1 10\n10 5\n10 13\n5 12\n5 19\n13 15\n12 20\n15 100
    • 15 2\n1 4\n2 12\n1 9\n3 1\n1 15\n9 3\n12 64\n4 10\n2 6\n80 100\n5 10\n6 24\n12 80\n6 150\n120 9\n150 120
  2. পরীক্ষার ফিডলের প্রম্পটে এটি আটকান ।


এখানে পুনরাবৃত্তির দুর্দান্ত ব্যবহার। আমি কেবল ভেরিয়েবলের সুযোগকে সীমাবদ্ধ করতে ফাংশনটিকে অতিরিক্ত যুক্তি দেওয়ার কৌশলটি পছন্দ করি :)
মাইগিমারু

@ মিগিমারু: ধন্যবাদ! সম্পর্কিত দিকের নোট: এই শব্দটি ডিবাগ করার জন্য একটি বগার ছিল যতক্ষণ না আমি জানতে পারলাম যে varকীওয়ার্ড ব্যতীত জাভাস্ক্রিপ্ট ভেরিয়েবলের বিশ্বজুড়ে সুযোগ নেই :)
ব্রিগুই 37

3

রুবি 1.9, 98

j=$<.map &:split
f=->*p,c{c=='100'?abort(p*' '):j.map{|a,b|a==c&&!p.index(b)&&f[*p,b,b]}}
f[?1,?1]

Ungolfed:

$lines = $<.map &:split
def f (*path)
    if path[-1] == '100' # story is over
        abort path.join ' ' # print out the path and exit
    else
        # for each jump from the current page
        $lines.each do |from, to|
            if from == path[-1] && !path.include?(to) # avoid loops
                # jump to the second page in the line
                f *path, to
            end
        end
    end
end

সেখানে স্প্লট খুব সুন্দর ব্যবহার।
মাইগিমারু

3

পার্ল, 88 টি অক্ষর

মূলত ক্লুলেস 'এন্ট্রি'র একটি ঘোলা সংস্করণ; প্রাক ম্যাচ এবং পোস্ট ম্যাচ মজাদার :)

@t=<>;%s=(100,100);until($s{1}){for(@t){chomp;/ /;$s{$`}="$` $s{$'}"if$s{$'}}}print$s{1}

1

পাইথন - 239 237 236

import sys
global d
d={}
for i in sys.stdin:
 a,b=[int(c) for c in i.split(' ')]
 try: d[b]+=[a]
 except: d[b]=[a]
def f(x,h):
 j=h+[x]
 if x==1:
  print ''.join([str(a)+" " for a in j[::-1]])
  exit()
 for i in d[x]:
  f(i,j)
f(100,[])

দুর্ভাগ্যক্রমে, এই পুচ্ছ-পুনরাবৃত্তি সমাধান "গল্প" এর লুপগুলিতে ঝুঁকিপূর্ণ ...

ব্যবহার : বিড়াল। / টেস্ট 0 | পরীক্ষার কেস 1 এর জন্য ./sol.py আউটপুট:

1 10 13 15 100

পরীক্ষার ক্ষেত্রে 2 আউটপুট:

1 15 2 12 80 100

0

স্কালা 2.9, 260 256 254 252 248 247 241 239 234 227 225 212 205 টি অক্ষর

object C extends App{var i=io.Source.stdin.getLines.toList.map(_.split(" "))
def m(c:String):String=(for(b<-i)yield if(b(1)==c)if(b(0)!="1")m(b(0))+" "+b(0)).filter(()!=).mkString
print(1+m("100")+" 100")}

Ungolfed:

object Choose extends App
{
    var input=io.Source.stdin.getLines.toList.map(_.split(" "))
    def findroute(current:String):String=
    (
        for(branch<-input)
        yield 
        if(branch(1)==current)
            if(branch(0)!="1")findroute(branch(0))+" "+branch(0)
    ).filter(()!=).mkString
    print(1+findroute("100")+" 100")
}

ব্যবহার:

সংকলন scalac filenameএবং সাথে চালানো scala C। ইনপুট মাধ্যমে নেওয়া হয় STDIN
Ideone.com চালানোর, পরিবর্তন object C extends Appকরার object Main extends ApplicationScala 2.8 হিসাবে এটি চালানোর জন্য।


0

পিএইচপি, 166 146 138 অক্ষর

$a[]=100;while(1<$c=$a[0])for($i=1;$i<$argc;$i++){list($p,$q)=explode(' ',$argv[$i]);if($q==$c)array_unshift($a,$p);}echo implode(' ',$a);

অসমাপ্ত:

$a[]=100;
while(1<$c=$a[0])
    for($i=1;$i<$argc;$i++){
        list($p,$q)=explode(' ',$argv[$i]);
        if($q==$c)array_unshift($a,$p);
    }
echo implode(' ',$a);

ব্যবহার:

php golf.php "1 10" "10 5" "10 13" "5 12" "5 19" "13 15" "12 20" "15 100"

উইন্ডোতে বা আইডোন.কম এ কমান্ড লাইন থেকে চালানোর সময় এটি আমার জন্য কোনও আউটপুট তৈরি করে না?
গ্যারেথ

এটি আমার কম্পিউটারে (উইন্ডোজ) কাজ করে। আমি একটি ব্যবহারের উদাহরণ যুক্ত করেছি। যদিও আমি আদর্শ ডটকম এ এটি কাজ করতে পারি না
আলফিউড

আহ ... এটি ব্যাখ্যা করে, আমি STDINযুক্তি না দিয়ে ইনপুট প্রেরণের চেষ্টা করছিলাম ।
গ্যারেথ

1
ব্যবহারকারী জেনেসিস character চরিত্রের সংখ্যাটি সংশোধন করার জন্য একটি সম্পাদনার প্রস্তাব দিয়েছে। স্থানীয় কনভেনশন সম্পর্কে মানুষের প্রত্যাশা পূরণের জন্য অযৌক্তিক সংস্করণের আগে হোয়াইটস্পেস ছাড়াই গল্ফযুক্ত সংস্করণ রাখার উপযুক্ত হতে পারে।
পিটার টেলর

-1

আমি তাদের সকলকে একটি 2 ডি অ্যারে রাখতাম এবং একাধিক লুপের সাহায্যে সমস্ত আইটেম সন্ধান করতাম, যদি তারা শেষ আইটেমটিতে পৌঁছতে পারে তবে আমি সম্পর্কিত আইটেমগুলিকে অন্য ফলাফলের অ্যারেতে ক্রম করে সংগ্রহ করব এবং ফলাফলগুলি থেকে আমি একটি অ্যারে নির্বাচন করব যা কোনটি ছোট ।

সম্পাদনা => জাভা: আমি পুনরাবৃত্ত ফাংশন, নীচে সম্পূর্ণ কোডও ব্যবহার করেছি;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class Jumper {
    static int x = 0;
    public static ArrayList<ArrayList<String>> c = new ArrayList<ArrayList<String>>();  
    public static void main(String[] args) throws IOException {
       //Read from line and parse into array
        BufferedReader in = new BufferedReader(new FileReader("list.txt"));
        ArrayList<String> s = new ArrayList<String>();
        String line = null; 
        while ((line = in.readLine()) != null){s.add(line);}
        c.add(new ArrayList<String>());
            //When you get all items forward to method
        checkPages(0, s,Integer.parseInt(s.get(0).split(" ")[0]),Integer.parseInt(s.get(s.size()-1).split(" ")[1]));
    }   

    public static void checkPages (int level,ArrayList<String> list,int from, int dest){
        if(level <= list.size()){           
            for(int i=level;i<list.size();i++){
                int a = Integer.parseInt(list.get(i).split(" ")[0]);
                int b = Integer.parseInt(list.get(i).split(" ")[1]);
                if(a == from){
                    c.get(x).add(list.get(i));
                    if(b==dest){
                        c.add(new ArrayList<String>());
                        x++;
                    }else{
                        checkPages(i, list, b,dest);
                        c.get(x).remove(list.get(i));
                    }
                }

            }

        }
    }

}

এটি কোড-গল্ফ, সুতরাং আপনার একটি বাস্তবায়ন সরবরাহ করা দরকার।
গ্যারেথ

হাই গ্যারেথ, আমার এখনই চলে যাওয়া উচিত আমি যখন বাড়িতে পৌঁছলাম তখন আমি এ্যাসএপ যুক্ত করব।
বুড়াক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.