এএসসিআইতে বয়ন


12

ভাবুন |অক্ষরের একটি আয়তক্ষেত্রাকার গ্রিডটি তাঁত ( ওয়ার্প ) এর টট স্ট্রিংগুলিকে উপস্থাপন করে যা অন্যান্য থ্রেড ( ওয়েফ্ট ), যা আমরা প্রতিনিধিত্ব করব -, চারপাশে বোনা যেতে পারে।

এখানে একটি 7 × 4 তাঁতের অলঙ্কৃত স্ট্র্যাপটি রয়েছে:

|||||||
|||||||
|||||||
|||||||

উপায়ে একটি সংখ্যা পড়েন ওয়ার্প মধ্যে বোনা যেতে পারে, সবচেয়ে সহজ হচ্ছে আছে প্লেইন বুনা

প্লেইন বুননের প্রথম সারিতে ওয়েফ্টটি প্রথম ওয়ার্প স্ট্রিংয়ের উপরে শুরু হয়, দ্বিতীয় স্ট্রিংয়ের নীচে চলে যায়, তারপরে তৃতীয় স্ট্রিংয়ের উপরে, তারপরে চতুর্থের নীচে এবং আরও কিছু।

দ্বিতীয় বাম সারিটি প্রথমটির অনুরূপ তবে এক ডানা স্ট্রিং দ্বারা ডানদিকে অফসেট, সুতরাং এটি শুরু হয় এর পরে শুরু হয় এবং আরও অনেক কিছু।

আমাদের 7 × 4 তাঁতটিতে প্লেইন বুননটি দেখতে এমন দেখাচ্ছে:

-|-|-|-
|-|-|-|
-|-|-|-
|-|-|-|

আমরা সমতল বোনাটি বর্ণনা করে বলতে পারি যে বামফুটটি 1 বারের উপর দিয়ে যায় , তারপরে 1 বারের নীচে এবং প্রতিটি পরবর্তী সারিতে 1 টি স্ট্রিং ডানদিকে স্থানান্তরিত হয় ।

একজন সাধারণ বুনা ওয়ার্প ওভার যেতে পড়েন না থাকার বর্ণনা করা যায় বনাম বার, তারপর অধীনে U বার সঙ্গে প্রতিটি পরবর্তী সারিতে স্থানান্তরিত গুলি ডানদিকে স্ট্রিং। (সমস্ত মান পূর্ণসংখ্যা, গুলি 0 বা negative ণাত্মক হতে পারে, u এবং v অবশ্যই অ-নেতিবাচক হতে পারে))

ভি = 1 , ইউ = 2 , এস = 2 সহ একটি 7 × 4 তাঁত , একধরণের টুয়েল ওয়েভ :

-||-||-
||-||-|
|-||-||
-||-||-

চ্যালেঞ্জ

আপনার কাজটি হ'ল সংক্ষিপ্ত প্রোগ্রামটি (বাইটে) লিখুন যা ভি , ইউ , এস , তাঁতের প্রস্থ এবং উচ্চতা এবং প্রাথমিক শিফট প্রদত্ত বার এবং ড্যাশগুলির একটি বোনা প্যাটার্ন তৈরি করে ।

প্রাথমিক শিফট স্ট্রিং পড়েন মধ্যে প্রথম সারিটি (উপরের উদাহরণগুলোতে 0) ডানদিকে স্থানান্তরিত করা হয় সংখ্যা। প্রতিটি পরবর্তী সারিতে স্থানান্তরিত করা হয় গুলি আরো স্ট্রিং।

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

উদাহরণ

প্রস্থ = 5, উচ্চতা = 4, প্রারম্ভিক শিফট = 0, ভি = 1, ইউ = 3, এস = -2:

-|||-
||-||
-|||-
||-||

প্রস্থ = 5, উচ্চতা = 4, প্রারম্ভিক শিফট = 3, ভি = 1, ইউ = 3, এস = -2:

|||-|
|-|||
|||-|
|-|||

প্রস্থ = 5, উচ্চতা = 4, প্রারম্ভিক শিফট = 1, ভি = 1, ইউ = 1, এস = 0:

|-|-|
|-|-|
|-|-|
|-|-|

প্রস্থ = 5, উচ্চতা = 4, প্রারম্ভিক শিফট = 0, ভি = 1, ইউ = 0, এস = 0:

-----
-----
-----
-----

মন্তব্য

  • প্যাটার্নটি সর্বদা গ্রিডের উপরের বাম কোণে ওয়ার্পের ওপার দিয়ে শুরু হয় (প্রাথমিকভাবে স্থানান্তরিত না হলে)।
  • বাম দিক থেকে সমস্ত ওয়েফ থ্রেড আসে। তারা না মত সর্পিল এই
  • u + v গ্রিডের প্রস্থের একাধিকটি নয় is
  • u এবং v উভয়ই 0 হতে পারে না

উত্তর:


5

রুবি, 72 বাইট

w,h,v,u,s,i=$*.map &:to_i;h.times{puts ((?-*v+?|*u)*w)[-i%(u+v),w];i+=s}

এ সম্পর্কে অনেক কিছুই বলার অপেক্ষা রাখে না। আমি একটি পুনরাবৃত্তি তৈরি করি -এবং |এটির পুনরাবৃত্তি করি w(কেবলমাত্র নিশ্চিত হয়ে), এবং আমি প্রতিটি লাইনের জন্য উপযুক্ত বিভাগটি স্লাইস করি।


আপনি যখন ইউ + ভি == 1, w বার যথেষ্ট?
edc65

@ edc65 হ্যাঁ, কারণ %(u+v)। এক্ষেত্রে আমি কেবল সূচকে শুরু 0করি, তাই আমার কাছে wস্ট্রিংয়ের অক্ষরগুলি রয়েছে।
মার্টিন ইন্ডার

3

জাভাস্ক্রিপ্ট (ES 6) 128

F=(w,h,i,v,u,s)=>{for(x=('-'[R='repeat'](v)+'|'[R](u))[R](w*h),l=v+u,i=-i%l+l,s=-s%l+l;h--;i+=s)console.log(x.substr(i,w)+'\n')}

পরীক্ষা

F(11,8,2,5,3,-2)

||-----|||-
-----|||---
---|||-----
-|||-----||
||-----|||-
-----|||---
---|||-----
-|||-----||

2

পাইথন, 92 বাইট

w,h,i,v,u,s=eval(A)
x=('|'*u+'-'*v)*w
while h:print(x[-i:]+x[:-i])[-w:];x=x[-s:]+x[:-s];h-=1

হুঁ ... এখন রুবি শেখার জন্য প্রলুব্ধ।

এই বিন্যাসে একটি স্ট্রিং ভেরিয়েবল নির্ধারণ করে ইনপুট: "প্রস্থ, উচ্চতা, প্রাথমিক শিফট, ভি, ইউ, এস"।
প্রোগ্রামের আগে পেস্ট করুন:

A="80,80,0,2,2,-9"

1
আমি বিশ্বাস করি এটি হওয়া উচিত while h। আমি একটি অতিরিক্ত সারি পাচ্ছি।
ক্যালভিনের

1
আপনার যেকোন ইনপুট ফর্ম্যাট সিস্টেমটি ব্যবহার করা উচিত - ইনপুট মানগুলিকে কমা পৃথকীকরণ করুন এবং এটিকে দেখান।
isaacg

1

জাভাস্ক্রিপ্ট (ES6), 111 বাইট

কার্যকরী অ্যারে.ফর্ম ব্যবহার করে কিছুটা আলাদা ES6 পদ্ধতির।

fআর্গুমেন্ট নেয় (w,h,i,v,u,s)এবং একটি স্ট্রিং দেয়। কোডগুলিতে নিউলাইনগুলি যুক্ত হয়েছে এবং স্ট্রিংয়ে আক্ষরিক নিউলাইনটি \nস্পষ্টতার জন্য প্রতিস্থাপন করেছে; উভয়ই বাইট গণনায় প্রতিফলিত হয় না।

f=(w,h,i,v,u,s)=>(A=Array).from(A(h),(_,j)=>A.from(A(w),
(_,k)=>(j*((x=v+u)-s)+x+k-i)%x<v?'-':'|').join``).join`\n`

ব্যবহার

console.log(f(5,4,0,1,3,-2)) /*

-|||-
||-||
-|||-
||-||

*/

ব্যাখ্যার সাথে বর্ণহীন সংস্করণ

আমি অ্যারের জন্য একটি উপনাম তৈরি করে কিছু বাইট সংরক্ষণ করেছি, যা অদৃশ্য সংস্করণে প্রতিফলিত হয় না।

// take input and create an array of length h (height):
f = (w,h,i,v,u,s) => Array.from( Array(h),

    // in each row position j, create an array of length w (width):
    (_,j) => Array.from( Array(w), 

        // in each cell, place - or | depending on the pattern (i,v,u,s)
        // and current position (j,k):
        (_,k) => ( j * ( ( x = v + u ) - s ) + x + k - i ) % x < v ? '-' : '|'

    // turn each row into a string:
    ).join``

// join rows with newlines:
).join`\n`

0

সি, 357 বাইট

#include<stdio.h>
int w,h,t,v,u,s,i,j,l,f;int main(){scanf("%d %d %d %d %d %d",&w,&h,&t,&v,&u,&s);l=v+u;char g[l];g[l]='\0';f=0;while(u--){g[v+u]='|';}while(v--){g[v]='-';}for(i=0;i<h;i++){for(j=0;j<w;j++){printf("%c",g[abs(t+f+j)%l]);}printf("\n");f-=s;}}

"এটি দেখতে দেখতে আরও স্বাচ্ছন্দ্যময়।" "এটা হতে হবে।" - গিয়া এবং onদনের (কেউ এই রেফারেন্সটি পাবে না H ইঙ্গিত: "মাদুর বোনা")

তাই আমি এখন প্রায় পাঁচ ঘন্টা ধরে এ নিয়ে কাজ করছি এবং ছেড়ে দিয়েছি। এই কোডটি কীভাবে কাজে লাগানো যায় তা সম্পর্কে আমার কোনও ধারণা নেই। এটি প্রথম সারির পরে পিছনে যেতে থাকে, এবং তারপরে সম্পূর্ণ ভুল হয়ে যায় (7 4 0 2 2 1)।

এখানে আরও সহজ সংস্করণ আপনি আরও সহজেই পড়তে পারেন। আমি যা করি তা হ'ল ইনপুট পুনরুদ্ধার করা, টেমপ্লেটটিকে অ্যারে করা এবং তারপরে লুপগুলির মধ্যে মুদ্রণ করা।

#include<stdio.h>
int w,h,t,v,u,s,i,j,l,f;
int main(){
    scanf("%d %d %d %d %d %d",&w,&h,&t,&v,&u,&s);
    l=v+u;char g[l];g[l]='\0';f=0;
    while(u--){g[v+u]='|';}while(v--){g[v]='-';}
    for(i=0;i<h;i++){
        for(j=0;j<w;j++){
            printf("%c",g[abs(t+f+j)%l]); // THIS is the line that needs help.
        }
        printf("\n");
        f-=s;
    }
}

আপনি এখানে এটি সহজেই পরীক্ষা করতে পারেন: নীচে এসটিডিএন ইনপুট বাক্সে "7 4 0 1 1 1" ব্যবহার করে http://www.compileonline.com/compile_c_online.php । সংখ্যাগুলি সম্পাদনা শুরু করুন এবং আপনি সমস্যাগুলি দেখতে পাবেন।

দুঃখিত আমি একটি কার্যনির্বাহী সমাধান নিয়ে আসতে পারিনি; আমি এ জন্য নিজেকে ঘৃণা করছি। অন্য কাউকে ঠিক করার জন্য এটি আপলোড না করার জন্য আমি অনেক বেশি সময় ব্যয় করেছি।

আমি কিছুক্ষণের জন্য এই প্রিন্টফটি ব্যবহার করে আসছি উপরের সারিটি (সহজ) বাকীগুলির সাথে আরও আলাদা করতে (সমস্যা সারি): printf("%c",g[i?abs(t+f+j)%l:abs(t+j)%l]);


for(i=0;i++<h;)? দ্বিতীয় জন্য লুপ একই কৌশল? এটি লুপ প্রতি মাত্র একটি চর সাশ্রয় করে।
11684

আমি কয়েকবার চেষ্টা করেছিলাম, কিন্তু এটি সংখ্যাটি বন্ধ করে দেয় এবং আমি সেগুলি ব্যবহার করার কোনও উপায় খুঁজে পাই না।
নেস

স্ট্রেঞ্জ। অন্যান্য উপায় কাছাকাছি? ++i? যদিও এটি অন্ধকারে কেবল একটি শট।
11684

নাঃ; এটি তুলনা করার জন্য সংখ্যাটি ব্যবহার করার আগে বৃদ্ধি পেয়েছিল এবং আপনি এইচ -1 পুনরাবৃত্তি দিয়ে শেষ করতে চান। লুপ ঘোষণার জন্য দ্বিতীয় বিভাগে মোটামুটি একটি ++ ব্যবহার করতে সমস্যা হ'ল আপনি লুপের মধ্যে এটি ব্যবহার করার আগেই আমি বর্ধিত হয়। অফ-নম্বর নিয়ে কাজ করার জন্য গণিতের কোথাও কোথাও -1 লাগতে পারে এবং এটি শর্টকাটকে মূল্য দেয় না। এটি -1 ব্যতীত এটি করণীয় না হলে। আমি এখনও এটি বুঝতে পারি না।
নেস

অবশ্যই! facepalm
11684

0

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

f w h i v u s=putStr.unlines$take h$take w<$>(iterate(drop(mod s(u+v)))$drop(mod(-i)(u+v)).cycle$('-'<$[1..v])++('|'<$[1..u]))

1
একটি তুচ্ছ গলফ পরিবর্তন হবে f w h i v u sজন্য (w?h)i v u s। একটি ইনফিক্স ফাংশন
এইচপিউইজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.