একটি স্কিটিশ প্রোগ্রাম


17

উদ্দেশ্য

আপনাকে এমন একটি প্রোগ্রাম লিখতে হবে যা nইনপুট হিসাবে একটি পূর্ণসংখ্যা প্রাপ্ত করে (কমান্ড লাইন থেকে), এবং nডিরেক্টরি গাছের নীচে নিজেকে (প্রোগ্রাম) ডিরেক্টরিগুলি এম্বেড করে । উদাহরণস্বরূপ n=5:

এন = 5 সহ উদাহরণ

ফোল্ডারের নামগুলি আপনার ইচ্ছামতো হতে পারে। কেবলমাত্র প্রয়োজনীয়তাগুলি হ'ল গভীরতাটি সঠিক, এবং প্রোগ্রামটি আবার ডিরেক্টরি গাছের নতুন জায়গা থেকে চালানো যেতে পারে এবং নতুন উত্স ফাইলটি একই ফাইলের নামটি ধরে রাখে।

বোনাসেস:

  • স্কোর * 0.9 যদি ডিরেক্টরিগুলির সমস্তটির আলাদা আলাদা নাম থাকে (কমপক্ষে 1 000 000 গভীরতা পর্যন্ত হওয়া উচিত)
  • স্কোর * 0.5 যদি আপনি প্রত্যক্ষ বা অপ্রত্যক্ষভাবে উত্স ফাইলটি পড়েন বা সরান না, বা প্রোগ্রামের উত্স কোড অ্যাক্সেস না করেন

1
" উত্স পড়া " হিসাবে গণনা করা হয় ? আপনি ফাইল মানে? নাকি আসল সোর্স কোড?
জায়ান্ট্রি ট্রি

2
@ আঙ্কেলমেট এটি করে, কারণ ফাইলটি সরানোর জন্য আপনাকে (বা সিস্টেম) ফাইলের ডেটা অ্যাক্সেস করতে হবে।
গ্লোবাই

25
দেখে মনে হচ্ছে আপনি কেবল নিজের পর্ন স্ট্যাশ লুকানোর চেষ্টা করছেন।
অ্যাব্লু

3
@globby কীভাবে ln* নিক্সের কমান্ডটি সম্পর্কে ? যদি আমি ভুল না হয়ে থাকি তবে এটি কেবল ফাইল ইনডে অন্য একটি এন্ট্রি তৈরি করছে এবং কোনও সামগ্রী মোটেই পঠিত হয় না।
hjk

7
@globby যতদূর আমি সচেতন, একটি ফাইল সরিয়ে নেওয়া বিষয়বস্তু পড়বে না, যদি না আপনি হার্ড ড্রাইভ বা পার্টিশনের মধ্যে না চলে যান। এটি মূলত ফাইল সিস্টেমে কিছু পয়েন্টার পরিবর্তন করছে।
মার্টিন এন্ডার

উত্তর:


36

বাশ, 30 * 0.9 * 0.5 = 13.5

mkdir -p `seq -s/ $1`;ln $0 $_

প্রথম যুক্তি হিসাবে গভীরতা নেয়। নিম্নলিখিত ডিরেক্টরি কাঠামোতে নিজেই একটি হার্ড লিঙ্ক তৈরি করে:

1/2/3/4/5/.../n

স্ক্রিপ্টটি তখন rmপুরানো স্ক্রিপ্টে চালিত হলেও নতুন অবস্থান থেকে চালানো যেতে পারে ।

ব্যাখ্যা:

seq -s/ $1$1ফরোয়ার্ড স্ল্যাশ দ্বারা আলাদা করে 1 থেকে (প্রথম যুক্তি) সংখ্যাগুলি আউটপুট করে ।

mkdir -p `seq -s` $1ডিরেক্টরি দ্বারা নির্দিষ্ট সৃষ্টি seqসঙ্গে, -pসব অন্তর্বর্তী ডিরেক্টরি তৈরি করা।

ln $0 $_ সদ্য নির্মিত ডিরেক্টরিতে বর্তমান চলমান স্ক্রিপ্টের জন্য একটি হার্ড লিঙ্ক তৈরি করুন।

পুরানো (30 * 0.9 = 27):

mkdir -p `seq -s/ $1`;cp $0 $_

উদাহরণ রান (LN সহ):

$ ls -lGR
.:
total 1
-rwx------+ 1 ducks 41 Jan  5 15:00 test.sh

$ ./test.sh 4

$ ls -lgR
.:
total 1
drwxr-xr-x+ 1 ducks  0 Jan  5 15:01 1
-rwx------+ 2 ducks 41 Jan  5 15:00 test.sh

./1:
total 0
drwxr-xr-x+ 1 ducks 0 Jan  5 15:01 2

./1/2:
total 0
drwxr-xr-x+ 1 ducks 0 Jan  5 15:01 3

./1/2/3:
total 0
drwxr-xr-x+ 1 ducks 0 Jan  5 15:01 4

./1/2/3/4:
total 1
-rwx------+ 2 ducks 41 Jan  5 15:00 test.sh

$ rm ./test.sh

$ ls -lg
total 0
drwxr-xr-x+ 1 ducks 0 Jan  5 15:01 1

$ ls -lg 1/2/3/4
total 1
-rwx------+ 1 ducks 41 Jan  5 15:00 test.sh

পরামর্শ প্রতিস্থাপন জন্য @DigitalTrauma ধন্যবাদ $(..)সঙ্গে`..`

ব্যবহারের পরামর্শের জন্য @ hjk কে ধন্যবাদ ln


6
এর উজ্জ্বল ব্যবহার $_!
wchargin

2
একটি চর সংরক্ষণ করুন - এর পরিবর্তে ব্যাকটিকগুলি ব্যবহার করুন $( ): কোডগল্ফ.স্ট্যাকেক্সচেঞ্জ
ডিজিটাল ট্রমা

2
আমার মন্তব্যের উত্তর উপর নির্ভর করে প্রশ্ন , হয়তো প্রতিস্থাপন cpসঙ্গে ln0.5 বোনাস খুব পেতে ...
hjk

2
ওয়েলস, এখন ওপি থেকে আপডেট রয়েছে এবং mvএটি 0.5 বোনাস থেকেও সীমাবদ্ধ। এটি এখনও lnপরিষ্কার মধ্যে ছেড়ে , হ্যাঁ?
hjk

2
হ্যাঁ, ln(আপনার প্রয়োজন নেই -s) প্রোগ্রামটি নতুন ডিরেক্টরিতে রাখবে, যাতে এটি পড়া থেকে চালানো, না যাওয়া বা তার আসল উত্স অ্যাক্সেস না করে সেখান থেকে চালানো যেতে পারে। আমি বলি 13.5 এর ফ্যালকন পঞ্চ স্কোরের জন্য যান!
টোবিয়া 5'15

12

সি, 225 * 0.9 * 0.5 = 101.25

সি তে আমার সমাধান:

$ cat d.c
#define R(x)#x
#define T(x)R(x)
#define S(p)b[9];main(i,v)char**v;{for(i=atoi(v[1]);i--;sprintf(b,"%i",i),mkdir(b),chdir(b));fputs("#define R(x)#x\n#define T(x)R(x)\n#define S(p)"p"\nS(T(S(p)))",fopen("d.c","w"));}
S(T(S(p)))

এখানে আরও কিছু পাঠযোগ্য ফর্মে:

#define R(x) #x
#define T(x) R(x)
#define S(p) char b[9];\
             main(int i,char**v) { \
                for(i=atoi(v[1]); i--; sprintf(b,"%i",i), \
                                       mkdir(b), \
                                       chdir(b)); \
                fputs("#define R(x) #x\n" \
                      "#define T(x) R(x)\n" \
                      "#define S(p) " p "\n" \
                      "S(T(S(p)))", \
                      fopen("d.c", "w")); \
             }
S(T(S(p)))

এটি কাজ করে কিনা তা পরীক্ষা করে দেখুন:

$ gcc -o d d.c
# a lot of warning and notes from gcc ... 
$ ./d 10
$ diff -s d.c 9/8/7/6/5/4/3/2/1/0/d.c
Files d.c and 9/8/7/6/5/4/3/2/1/0/d.c are identical

সম্ভবত সোর্স কোডে প্রচুর গল্ফিংয়ের সম্ভাবনা রয়েছে।


প্রিপ্রসেসর ব্যবহারের দুর্দান্ত ব্যবহার!
লেফাউভ

5

ব্যাচ - 48 * 0.9 = 43.2

for /l %%a in (1,1,%1)do md %%a&cd %%a&move..\%0

এই স্ক্রিপ্টটি সহজেই একটি নতুন ডিরেক্টরি তৈরি করে এবং উত্স ফাইলটিকে এতে স্থানান্তরিত করে - nসময়।

H:\MyDocuments\uprof\top>embed.bat 5

     ...

H:\MyDocuments\uprof\top>tree /f
Folder PATH listing for volume DATA009_HOMES
Volume serial number is B88B-384C
H:.
└───1
    └───2
        └───3
            └───4
                └───5
                        embed.bat

5

জেডএস, 63 60 58 52 * 0.9 = 56.7 54 52.2 46.8

s=$(<$0);for i in {1..$1};{mkdir $i;cd $i};echo $s>f

উদাহরণ:

llama@llama:...Code/misc/foo$ zsh f 5
llama@llama:...Code/misc/foo$ ls -R
.:
d1  f

./d1:
d2

./d1/d2:
d3

./d1/d2/d3:
d4

./d1/d2/d3/d4:
d5

./d1/d2/d3/d4/d5:
f
llama@llama:...Code/misc/foo$ cat d1/d2/d3/d4/d5/f 
s=$(cat $0);for i in {1..$1};do;mkdir d$i;cd d$i;done;echo $s>f
llama@llama:...Code/misc/foo$ cat f
s=$(cat $0);for i in {1..$1};do;mkdir d$i;cd d$i;done;echo $s>f
llama@llama:...Code/misc/foo$ diff f d1/d2/d3/d4/d5/f
llama@llama:...Code/misc/foo$

UUOC s=$(<$0) (জাস্ট রেকর্ডের জন্য, আমার সঙ্গে ব্যর্থ bash4.3.11: "কাছাকাছি অপ্রত্যাশিত টোকেন` বাক্যগঠন ত্রুটি; ' "কিন্তু সঙ্গে কাজ করে জরিমানা। zsh5.0.2)
manatwork

আপনি কি dপূর্বে সরিয়ে একটি চরিত্র সংরক্ষণ করতে পারেন $i?
কানাডিয়ান লুক পুনরায় ইনস্টল করুন মনিকা

@ কানাডিয়ানলুক হু, আমি কখনই জানতাম না যে আপনার নামের একটি ডিরেক্টরি থাকতে পারে 1। ধন্যবাদ
ডুরকনব

আমার মনে হয় আপনি কোঁকড়া বন্ধনী ব্যবহার করতে সক্ষম হতে হবে: for i in {1..$1};{mkdir $i;cd $i};echo $s>f
রাই-

@ U2744NFFLAKE ধন্যবাদ, যা কয়েকটা বাইট সংরক্ষণ করেছে। সম্পাদনা করা হয়েছে।
ডুরকনব

3

রিবোল - 114 * 0.9 * 0.5 = 51.3

do b:[d: copy %./ repeat n do input[mkdir repend d[n"/"]]write join d s: system/options/script join"do b: "mold b]

Ungolfed:

do b: [
    d: copy %./
    repeat n do input [
        mkdir repend d [n "/"]
    ]
    write join d s: system/options/script join "do b: " mold b
]


আসল নন-কুইন সংস্করণ - 90 * 0.9 = 81

d: %./ repeat n do input[mkdir repend d[n"/"]write join d s: system/options/script read s]

Ungolfed:

d: %./
repeat n do input [
    mkdir repend d [n "/"]
]
write join d s: system/options/script read s

2

167 * 0.5 * 0.9 = 75.15 বাশ করুন

@ এস 1024 এর দুর্দান্ত উত্তর থেকে প্রচুর orrowণ নেওয়া , তবে এটি একটি সত্যিকারের কুইন, সুতরাং এটি উভয় বোনাসের জন্য যোগ্যতা অর্জন করে।

b=\' c=\\ a='d=`seq -s/ $1`;mkdir -p $d;echo b=$c$b c=$c$c a=$b$a$b>>$d/$0;echo $a>>$d/$0'
d=`seq -s/ $1`;mkdir -p $d;echo b=$c$b c=$c$c a=$b$a$b>>$d/$0;echo $a>>$d/$0

এছাড়াও, এখান থেকে শেল কুইন কৌশলগুলি ।


1

অটোআইটি 3, 106 * 0,9 = 95,4 বাইট


কিছুটা দীর্ঘ তবে আমি সেই দীর্ঘ ফাংশন / ভেরিয়েবল নামগুলির সাথে সহায়তা করতে পারি না:

$f = @WorkingDir
For $i = 1 To $CmdLine[1]
    $f &= "\" & $i
Next
DirCreate($f)
FileCopy(@ScriptFullPath, $f)

কেবল <script/.exe name> <depth>উদাহরণ দিয়ে এটি কল করুন । script.exe 5
এটি যে কোনও পরিমাণ ডিরেক্টরিতে কাজ করবে; আপনার ফাইল সিস্টেমটি পরিচালনা করতে পারে তার চেয়েও বেশি। : ডি

কিভাবে এটা কাজ করে:

এটি কেবল একটি সরল লুপ যা সূচকে একটি স্ট্রিংয়ে যুক্ত করে। তারপরে ডিরেক্টরিটি (এবং সমস্ত মূল ডিরেক্টরিগুলিও) তৈরি হয় এবং ফাইলটি সেই ডিরেক্টরিতে নিজের অনুলিপি করে।


1

নোড.জেএস, 136 133 * 0.9 * 0.5 = 61.2 59.85

r=require,f=r('fs'),p=__dirname;while(i=process.argv[2]--)f.mkdirSync(p+='/'+i);f.linkSync(a=__filename,p+'/'+r('path').basename(a))

fs.linkSyncPOSIX কল লিঙ্কে মানচিত্র , যা একটি শক্ত লিঙ্ক তৈরি করে। একটি অবৈধ যুক্তি প্রোগ্রামটি ক্রাশ করবে।


1

জে, 82 * 0.9 = 73.8

এটি বেশিরভাগই শীর্ষ-ভোট প্রাপ্ত উত্তরের একটি বন্দর।

exit (1!:1[1{A) 1!:2 <] (s,'/',>1{A)[fpathcreate s=:' /'charsub":1+i.".>{:A=:ARGV

skittish.ijsআপনি যা চান সেভ করুন এবং আপনার সংস্করণ ব্যবহার করে কমান্ড লাইন থেকে কল করুন jconsole। আমার সাথে মিল রয়েছে jc:

$ jc skittish.ijs 20
$ ls 1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/skittish.ijs 
1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/skittish.ijs

0

জেডএস , 55 * 0.9 * 0.5 = 24.75 বাইট

আমি দীর্ঘদিন এই চ্যালেঞ্জের দিকে আমার দৃষ্টি রেখেছিলাম, তবে আমি Zsh এ কোনও বাহ্যিক প্রোগ্রামের মতো mkdirএবং ln(অন্যথায়, এটি ব্যাশ সমাধানের অনুরূপ হতে পারে) কল না করে এটি সম্পূর্ণ করতে চেয়েছিলাম । দেখা যাচ্ছে, Zsh সেই প্রোগ্রামগুলির নিজস্ব সংস্করণ সরবরাহ করতে পারে!

zmodload zsh/files
mkdir -p ${(j:/:):-{1..$1}}
ln $0 $_

এটি অনলাইন চেষ্টা করুন!

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