ট্র্যাভেলিং ও


26

বিশ্ব পাঁচটি পাঁচটি কোষের অ্যারে। এটি চারদিকে মোড়ক করে। এটি এর মতো ভিজ্যুয়ালাইজ করা যায় ...

XXXXX
XXXXX
XXOXX
XXXXX
XXXXX

আপনি একজন ও। আপনি বিশ্ব ভ্রমণ করতে পছন্দ করেন এবং নিম্নলিখিত বিধি অনুসারে আপনি এটি করেন (সিটিকে বর্তমান দিন দিন):

  • উপর মৌলিক দিন, আপনি গৃহাকুল মনে। আপনি গতকাল যেখানে শুরু করেছিলেন সেখানে ফিরে যান।
  • উপর বিজোড় দিন, আপনি স্বদেশে ফেরার জন্য কাতর বোধ। যদি সম্ভব হয় তবে একটি অনুভূমিক পদক্ষেপ বাড়ির নিকটে, এবং সম্ভব হলে একটি উল্লম্ব ধাপ বাড়ির নিকটে সরিয়ে নিন। ঘনিষ্ঠতা নির্ধারণের উদ্দেশ্যে বিশ্ব মোড়ক উপেক্ষা করুন।
  • উপর এমনকি দিন, আপনি দু: সাহসিক মনে। সি / 2 পদক্ষেপ দক্ষিণে সরান।
  • উপর বর্গ দিন, আপনি দু: সাহসিক মনে। পূর্ব প্রাচীরের দিকে সরান।
  • উপর ফিবানচি দিন, বিশ্বের এক সারি দ্বারা দক্ষিণে প্রসারিত হয়।
  • উপর ত্রিদলীয় দিন, বিশ্বের একটি কলাম দ্বারা পূর্বদিকে প্রসারিত হয়।

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

আপনি (প্রাথমিক) বিশ্বের কেন্দ্রে থাকেন, অর্থাৎ অবস্থান (২,২), উত্তর-পশ্চিম কোণ থেকে শূন্য-সূচকযুক্ত। আপনি সেখানে প্রথম দিন যাত্রা শুরু করুন।

ইনপুট

একক পূর্ণসংখ্যা, এন।

আউটপুট

আপনার এক্স এবং ওয়াই সমন্বিত, নবমীর দিন উত্তর-পশ্চিম কোণ থেকে শূন্য-সূচকযুক্ত, একক স্থান দ্বারা পৃথক।

ব্যাখ্যার সাথে টেস্ট কেস

একটি ইনপুট দেওয়া 3, সঠিক আউটপুট:

2 3

আমরা একদিনে এটির মাধ্যমে কাজ করতে পারি। প্রথম দিন থেকে শুরু করে আমাদের নিম্নলিখিত পদক্ষেপগুলি প্রয়োগ করতে হবে:

  1. বিজোড়, বর্গক্ষেত্র, ফিবোনাচি এবং ত্রিভুজাকার
  2. প্রধানমন্ত্রী, এমনকি, এবং ফিবোনাচি
  3. প্রধানমন্ত্রী, বিজোড়, ফিবোনাচি এবং ত্রিভুজাকার ular

ভিজ্যুয়াল আকারে:

     দিন 1 দিন 2 দিন 3
XXXXX XXXXXX XXXXXX XXXXXXX
XXXXX XXXXXX XXXXXX XXXXXXX
XXOXX -> XXXXOX -> XXXXXX -> XXXOXXX
XXXXX XXXXXX XXOXXX XXXXXXX X
XXXXX XXXXXX XXXXXX XXXXXXX
           XXXXXX XXXXXX XXXXXXX
                       XXXXXX XXXXXXX
                                   XXXXXXX

অতিরিক্ত পরীক্ষার কেস

সৌজন্যে মার্টিন Büttner এর রেফারেন্স সমাধান (অনুগ্রহ করে মনে রাখবেন আপনি আউটপুট কেবলমাত্র একক, তাদের সব না তুল্য উচিত):

Input:  1     2     3     4     5     6     7     8     9     10    11    12    13    14     15    16    17    18    19    20    21    22    23
Output: 4 2   2 3   3 2   6 4   2 2   2 5   2 2   2 6   7 5   7 0   6 4   6 0   5 3   5 10   4 9   9 6   3 8   3 6   2 7   2 6   2 5   2 4   2 4

এটি কোড গল্ফ। সংক্ষিপ্ততম জমাটি জয়লাভ করে।


6
আমার ওতে এটি করা দরকার!
kirbyfan64sos

উত্তর:


4

পাইথ, 157 156 153 বাইট

=Z=b5aYA,2 2FNtUhQI&!tPN<1NA@Y_2)Iq*2/N2NA,G%+H/N2b)EL-+b<b2<2bAyM,GH)J@N2Iq/NJJA,tZH)=TU2W<hTNIqNeT=hbBE=TX_T1sT))=J0W!<NJIqN/*JhJ2=hZBE=hJ))aY(GH;jd,GH

আপনি এখানে চেষ্টা করে দেখতে পারেন

গল্ফের জন্য এটি একটি মজাদার সমস্যা ছিল! আমি এখনও পাইথের অভ্যস্ত হয়ে উঠছি তবে এটি সত্যিই দুর্দান্ত ভাষা।


1
পাইথ স্বাগতম! আমি এখনই দেখতে পাচ্ছি একটি গল্ফ: আপনি যদি 2 টি উপাদান তালিকা / টিপল বানাতে চান তবে ব্যবহার করুন ,- এটি এখানে রয়েছে।
isaacg

- কোড thoughout এই গলফ জন্য আরো জায়গা আছে (G%+H/N2b), (GH), (tZH)
isaacg

12

হাস্কেল, 394 বাইট

z=0<1
p d y c|all((0<).mod d)[2..d-1]=y|z=c
g x=x-signum(x-2)
e d(x,y)h|odd d=(g x,g y)|z=(x,mod(y+div d 2)h)
s d c@(_,y)w|d==(floor$sqrt$fromIntegral d)^2=(w-1,y)|z=c
f d a b m|b>d=m|b==d=(+1)<$>m|z=f d b(a+b)m
d%m@(w,h)|elem d[div(n*n-n)2|n<-[1..d+1]]=(w+1,h)|z=m
i=fst.c
j=snd.c
c d|d<1=((2,2),(5,5))|z=(s d(e d(p d(i$d-2)$i$d-1)$snd$j$d-1)$fst$j$d-1,d%(f d 1 1$j$d-1))
main=readLn>>=print.i

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

ভালই হোক সমস্যা!

সম্পাদনা: জাগার্বের দেওয়া মূল্যবান পরামর্শ আমলে নিয়ে আমার সমাধান সম্পাদনা করেছেন । এটি এখন পুরোপুরি কাজ করে!

EDIT2: ধন্যবাদ nimi আমি কোডটি এমনকি ছোট করেছেন। আমি এখন দুটি পরিবর্তে একটি ফাংশনে সমান এবং বিজোড়ের জন্য চেকগুলিও করছি যা সামগ্রিকভাবে গণনাটি 446 থেকে 414 বাইটে হ্রাস করে।

EDIT3: আরও উন্নত হয়েছে 414 থেকে 400 বাইটে নিমিকে আরও 2 বাইটের জন্য ধন্যবাদ , আপনি আগুনে আছেন! :)

EDIT4: দ্বারা আরো 4 বাইট nimi :)


2
পিপিসিজিতে আপনাকে স্বাগতম! দ্রুত ইঙ্গিতগুলির একটি দম্পতি: এর 0<1চেয়ে ছোট otherwiseএবং 0/=mod x yএটি সংক্ষিপ্ত করা যেতে পারে 0<mod x y। এছাড়াও, 1==mod(d)2হয় odd dএবং 0==mod(d)2হয় even d
জাগারব

@ জাগারব দুর্দান্ত কৌশলগুলি, পুরো কোড গল্ফ জিনিসটিতে আমি সত্যিই বেশ নতুন। 0<1পরিবর্তে কিভাবে otherwiseকাজ না করে?
বেসাইল-হেনরি

1
এছাড়াও, আমি মনে করি আপনার ত্রিভুজাকার সংখ্যার সংজ্ঞাটি ভুল (আমি অনুমান করছি যে এটি ফাংশনে রয়েছে t), যেহেতু সবার elem d[1..div(d*d-d)2]জন্য সত্য d > 2
Zgarb

otherwiseএর অন্য একটি নাম True
Zgarb

আপনাকে অনেক ধন্যবাদ, হ্যাঁ আপনি ঠিক বলেছেন আমি ত্রিভুজাকার সংখ্যা খুব দ্রুত করার চেষ্টা করেছি ...
বেসাইল-হেনরি

5

সি, 425 396 বাইট

typedef struct{int x,y,b,r}c;S,p,n;s(d){return(S=sqrt(d))*S==d;}c m(d){if(!d)return(c){2,2,4,4};c q,l=m(d-1);for(p=1,n=d;--n;p=p*n*n%d);if(p&&d>1)q=m(d-2),l.x=q.x,l.y=q.y;if(d%2)l.x-=l.x>2?1:l.x<2?-1:0,l.y-=l.y>2?1:l.y<2?-1:0;else l.y+=d/2,l.y=l.y>l.b?l.y-l.b-1:l.y;if(s(d))l.x=l.r;if(s(5*d*d+4)||s(5*d*d-4))l.b++;if(s(8*d+1))l.r++;return l;}main(i){scanf("%d",&i);printf("%d %d",m(i).x,m(i).y);}

এর কিছু অংশ রয়েছে যা উন্নত হতে পারে তবে এটি পরীক্ষার ক্ষেত্রে কাজ করে


ব্যাখ্যা

typedef struct {
    int x,y,b,r
} c; //c will hold the information for each day

//determines if a number is a perfect square
S,p,n;
s(d) {
    return (S=sqrt(d))*S==d;
}

c m(d) {
    if(!d)
        return (c){2,2,4,4}; //returns the initial information if the day is 0

    c q,l=m(d-1); //gets the information for the previous day
    for (p=1,n=d;--n;p=p*n*n%d); //tests if the number is prime

    if (p&&d>1)
        q=m(d-2),l.x=q.x,l.y=q.y; //changes the position to what it was at the end of the day 2 days ago if the day is prime
    if (d%2)
        l.x-=l.x>2?1:l.x<2?-1:0,l.y-=l.y>2?1:l.y<2?-1:0; //moves the position towards (2,2) if the day is odd
    else
        l.y+=d/2,l.y=l.y>l.b?l.y-l.b-1:l.y; //moves down if the day is even
    if (s(d))
        l.x=l.r; //moves east if the day is a perfect square
    if (s(5*d*d+4)||s(5*d*d-4))
        l.b++; //expands world down if the day is a fibonacci number
    if (s(8*d+1))
        l.r++; //expands world right if the day is a triangular number
    return l;
}

main(i) {
    scanf("%d",&i);
    printf("%d %d",m(i).x,m(i).y);
}

3

পার্ল 5, 284 বাইট

@s=([2,2]);@n=(2,2);@f=(0,1);$w=$h=5;for(1..<>){$f[$_+1]=$f[$_]+$f[$_-1];$t[$_]=$_*($_+1)/2;$s[$_]=[@n];@n=@{$s[$_-1]}if(1 x$_)!~/^1$|^(11+?)\1+$/;($_%2)&&($n[0]-=($n[0]<=>2),$n[1]-=($n[1]<=>2))or$n[1]=($n[1]+$_/2)%$h;$n[0]=$w-1if(int sqrt$_)**2==$_;$h++if$_~~@f;$w++if$_~~@t}say"@n"

283 বাইট, প্লাস 1 এর -Eপরিবর্তে ফ্ল্যাগের জন্য-e

একই কোড তবে আরও শ্বেত স্পেস, আরও বেশি বন্ধনী এবং আরও দীর্ঘ পরিবর্তনশীল নাম সহ:

@start=([2,2]);
@now=(2,2);
@fibonacci=(0,1);
$width = ($height=5);
for my $iterator (1 .. <>) {
  $fibonacci[$iterator+1] = $fibonacci[$iterator] + $fibonacci[$iterator-1];
  $triangular[$iterator] = $iterator * ($iterator+1) / 2;
  $start[$iterator] = [@now];
  @now = @{ $start[$iterator-1] } if ((1 x $iterator) !~ /^1$|^(11+?)\1+$/); # prime
  $now[0] -= ($now[0] <=> 2) , $now[1] -= ($now[1] <=> 2) if ($iterator % 2 != 0); # odd
  $now[1] = ($now[1] + $iterator / 2) % $height if ($iterator % 2 == 0); # even
  $now[0] = $width - 1 if ((int sqrt $iterator) ** 2 == $iterator); # square
  $height ++ if $iterator ~~ @fibonacci;
  $width ++ if $iterator ~~ @triangular;
}
say "@now";

আমি আরও বিশ্বাস করি যে এটি আরও গল্ফ করা যেতে পারে।


2

জাভাস্ক্রিপ্ট, 361 359 বাইট

N=>{for(c=1,x=y=v=w=j=k=2,h=z=5;c<=N;c++,j=v,k=w,v=x,w=y){m=Math;p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0;[x,y]=c==2||p(c,2)&&c!=1?[j,k]:[x,y];p=x=>x+(x<2?1:x>2?-1:0);c%2?[x,y]=[p(x),p(y)]:y+=c/2;m.sqrt(c)==~~m.sqrt(c)?x=z-1:0;f=(n,c,d)=>d<c?0:d==c?1:f(c,n+c,d);f(1,2,c)||c==1?h++:0;t=(n,c)=>n*++n/2==c?1:--n*n/2>c?0:t(++n,c);t(1,c)?z++:0;x%=z;y%=h}return x+" "+y}

কোডটি ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করে । এটি এখনই কেবল ফায়ারফক্স এবং সাফারিগুলিতে সমর্থিত।

ব্যাখ্যা

N=>{
// C => the day, x,y => position, v,w => position at the start of the day, 
// j,k => position of yesterday
for(c=1,x=y=v=w=j=k=2,h=z=5;c<=N;c++,j=v,k=w,v=x,w=y){
    m=Math;

    // Prime Function for C > 2. Recursive call to save a loop.
    p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0;
    // Assign x and y to yesterday
    [x,y]=c==2||p(c,2)&&c!=1?[j,k]:[x,y];

    // Function to move closer to home
    p=x=>x+(x<2?1:x>2?-1:0);
    c%2?[x,y]=[p(x),p(y)]:y+=c/2;

    // Square check
    m.sqrt(c)==~~m.sqrt(c)?x=z-1:0;

    // Fibonnacci function for C > 1
    f=(n,c,d)=>d<c?0:d==c?1:f(c,n+c,d);
    f(1,2,c)||c==1?h++:0;

    // Triangle function
    t=(n,c)=>n*++n/2==c?1:--n*n/2>c?0:t(++n,c);
    t(1,c)?z++:0;

    // Stay in bounds
    x%=z;y%=h
}
// Output
return x+" "+y}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.