ফাইল অনুমতি


26

ফাইল অনুমতি

ইউআইএল থেকে অভিযোজিত - কম্পিউটার সায়েন্স প্রোগ্রামিং ফ্রি রেসপন্স প্রশ্ন "কারলা" 2018 জেলার জন্য।

ভূমিকা

ইউএনআইএক্স-এর মতো অপারেটিং সিস্টেমে প্রতিটি ফাইল, ডিরেক্টরি বা লিঙ্কটি একটি "ব্যবহারকারী" এর দ্বারা "মালিকানাধীন", যিনি "গ্রুপ" এর সদস্য, এবং দশটি-অক্ষরের স্ট্রিং দ্বারা প্রতিনিধিত্ব করে এমন কিছু "অনুমতি" রয়েছে যেমন " drwxrwxrwx "। প্রথম অক্ষরটি হ'ল 'ডি', '-', বা 'এল' (ডিরেক্টরি, ফাইল বা লিঙ্ক), তারপরে "rwx" মানগুলির তিনটি সেট, "পড়ুন, লিখুন, সম্পাদন করুন" অনুমতিগুলি নির্দেশ করে। প্রথম সেটটি হ'ল ব্যবহারকারীর অধিকার, মাঝামাঝি গোষ্ঠীর অধিকার এবং তৃতীয়টি সেই বস্তুর প্রত্যেকের অধিকার rights

এর মধ্যে যে কোনও অধিকারের জন্য অনুমতি অস্বীকার করা '-', 'ডাব্লু' বা 'এক্স' এর জায়গায় '-' দ্বারা প্রতিনিধিত্ব করা হয়। উদাহরণস্বরূপ, একটি নমুনা ডিরেক্টরি অনুমতি স্ট্রিংটি "drwxr - r--" হবে, এটি ব্যবহারকারীর জন্য সম্পূর্ণ ডিরেক্টরি অধিকারের ইঙ্গিত দেয়, তবে গ্রুপ সদস্য এবং অন্য সকলের জন্য "কেবল পঠনযোগ্য" অধিকারগুলি।

প্রতিটি "আরডাব্লুএক্স" সংমিশ্রণটি অষ্টাল মান (0-7) দ্বারাও সর্বাধিক উল্লেখযোগ্য বিট পড়ার অনুমতি উপস্থাপন করে, পরবর্তী সর্বাধিক উল্লেখযোগ্য বিট লেখার অনুমতি উপস্থাপন করে এবং কমপক্ষে নির্বাহের অনুমতিকে উপস্থাপন করে এমন কমপক্ষে উল্লেখযোগ্য বিট দ্বারাও প্রতিনিধিত্ব করা যায়।

চ্যালেঞ্জ

একটি অক্ষরের সমন্বয়ে একটি চার-অক্ষরের কোড স্ট্রিং দেওয়া হয়েছে: 'ডি', 'এফ', বা 'এল', এর পরে একটি তিন-অঙ্কের অক্টাল পূর্ণসংখ্যা মান, 664 এর মতো, ফলাফলের 10 অক্ষরের স্ট্রিং যা অনুমতি মানকে উপস্থাপন করে জ্ঞাপিত.

ইনপুট

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

আপনার প্রোগ্রাম বড় হাতের বা ছোট হাতের ইনপুট গ্রহণ করতে পারে তবে অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে (হয় সমস্ত ইনপুট বড় হাতের বা সমস্ত ইনপুট ছোট হাতের হয়)।

আউটপুট

আপনার প্রোগ্রামকে অবশ্যই দশটি-অক্ষরযুক্ত স্ট্রিং মুদ্রণ করতে হবে যা উপরে বর্ণিত সঠিক বিন্যাসে নির্দেশিত অনুমতি মানকে উপস্থাপন করে। টেইলিং সাদা স্থান অনুমোদিত।

পরীক্ষার মামলা

ইন: F664আউট: -rw-rw-r--
ইন: D775আউট: drwxrwxr-x
ইন: L334আউট: l-wx-wxr--
ইন: F530আউট: -r-x-wx---
ইন: D127আউট: ইন: আউট:d--x-w-rwx

স্কোরিং এবং বিধি


কি অপেক্ষা করুন, গতকাল জিজ্ঞাসা করেছেন এবং উত্তর ইতিমধ্যে গৃহীত হয়েছে? এর অর্থ কি আর উত্তর প্রত্যাশিত নয় বা কী?
নিত

1
@ নীট আরও উত্তরগুলি সর্বদা স্বাগত জানায়, উত্তর গ্রহণযোগ্য কিনা তা বিবেচনা না করেই।
isaacg

1
@Nit আমি মোবাইলে ছিলাম এবং কোনও সম্পর্কযুক্ত উত্তরকে (যা এরপরে সরিয়ে দেওয়া হয়েছে) হ্রাস করার চেষ্টা করছি। আমি দুর্ঘটনাক্রমে আমার মোটা আঙুলের সাথে গ্রহণযোগ্য উত্তর বোতামটিতে আঘাত করি। আমি কীভাবে গ্রহণ করব না তা বুঝতে পারি না তাই এখনই স্বল্পতম উত্তরটির জন্য আমি স্বীকৃত উত্তরটি পরিবর্তন করেছি।
বিলিলেগোটা

2
@ না আমার মানে ... সে ডেনিসের উত্তর গ্রহণ করেছে, তাই সে সত্যই সঠিক হতে পারে।
ম্যাজিক অক্টোপাস উরন

উত্তর:


7

জেলি , 19 বাইট

“rwx“-”Œp⁺;Ṁ⁾f-yị@~

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

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

“rwx“-”Œp⁺;Ṁ⁾f-yị@~  Main link. Argument: s (string)

“rwx“-”              Set the return value to ["rwx, "-"].
       Œp            Take the Cartesian product, yielding ["r-", "w-", "x-"].
         ⁺           Take the Cartesian product, yielding
                     ["rwx", "rw-", "r-x", "r--", "-wx", "-w-", "--x", "---"].
          ;Ṁ         Append the maximum of s (the letter).
            ⁾f-y     Translate 'f' to '-'.
                  ~  Map bitwise NOT over s.
                     This maps the letter to 0, because it cannot be cast to int,
                     and each digit d to ~d = -(d+1).
                ị@   Retrieve the results from the array to the left at the indices
                     calculated to the right.
                     Indexing is modular and 1-based, so the letter from s is at
                     index 0, "---" at index -1, ..., and "rwx" at index -8.

16

bash, 59 53 বাইট

chmod ${1:1} a>a;stat -c%A a|sed s/./${1:0:1}/|tr f -

কাজের সঠিক সরঞ্জাম?

ধন্যবাদ ডেনিস 5 বাইট এবং সংরক্ষণের জন্য HTNW এক সংরক্ষণের জন্য।

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

chmod ${1:1} a>a;  # call chmod with the input with its first character removed
                   # note that the redirection creates the file a *before* the
                   #   chmod is run, because of the way bash works
stat -c%A a|       # get the human readable access rights
sed s/./${1:0:1}/  # replace the first character with the first char of input
|tr f -            # transliterate, replacing f with -

ভাল যে দ্রুত ছিল। কাজের জন্য অবশ্যই সঠিক সরঞ্জাম।
বিলিলেগোটা

chmod ${1:1} a>a;stat -c%A a|sed "s/-/\L${1:0:1}/;s/f/-/"দুটি বাইট সংরক্ষণ
ডেনিস

@ ডেনিসকে ছাড়তে গিয়ে আমি মনে করি আপনি এর trপরিবর্তে আরও একটি কেটে ফেলতে পারবেন y:chmod ${1:1} a>a;stat -c%A a|sed s/./\\L${1:0:1}/|tr f -
HTNW

2
কোনও ফাইল নেই বলে ধরে নেওয়া কি বৈধ নয় aএবং ব্যবহারকারীর কাছে এটি তৈরি করার অনুমতি আছে বা ফাইল আছে aএবং এটি ব্যবহারকারীর দ্বারা লিখিত আছে? কারণ যদি অনুমতি সহ aমালিকানাধীন কোনও ফাইল থাকে তবে এটি কাজ করা উচিত নয়। root700
NoOneIsHere

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

10

পাইথন 2 , 78 বাইট

lambda a,*b:[a,'-'][a=='f']+''.join('-r'[x/4]+'-w-w'[x/2]+'-x'[x%2]for x in b)

একটি অক্ষর এবং তিনটি ইনট হিসাবে ইনপুট নেয়।
এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

[a,'-'][a=='f']চরিত্রটি -যদি হয় তবে ইনপুট অক্ষর গ্রহণ করে f। স্ট্রিং
'-r'[x/4]+'-w-w'[x/2]+'-x'[x%2]পেতে মূলত একটি অষ্টাল রূপান্তর rwx



5

রেটিনা 0.8.2 , 43 বাইট

\d
$&r$&w$&x
f|[0-3]r|[0145]w|[0246]x
-
\d

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। নিম্ন ক্ষেত্রে ইনপুট লাগে। ব্যাখ্যা:

\d
$&r$&w$&x

প্রতিটি অঙ্ক তৃতীয়ক সঙ্গে suffixing r, wএবং x

f|[0-3]r|[0145]w|[0246]x
-

সমস্ত ভুল অক্ষর -গুলি এস।

\d

বাকী কোনও অঙ্ক মুছুন।


4

রেটিনা , 51 বাইট

f
-
0
---
1
--x
2
-w-
3
-wx
4
r--
5
r-x
6
rw-
7
rwx

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

কীভাবে রেটিনা ব্যবহার করবেন সে সম্পর্কে কোনও ধারণা নেই, সুতরাং দয়া করে কীভাবে এটি আরও ভাল করবেন তা আমাকে জানান। আমি ঠিক বুঝতে পেরেছি যে কমপক্ষে একটি ভাষা পাইথ নয় এমন ভাষা শেখার চেষ্টা করব।

ব্যাখ্যা:

(ছেড়ে যাওয়া এবং অপরিবর্তিত) দিয়ে প্রতিস্থাপন করুন, তারপরে প্রতিটি অঙ্কটি যথাযথের fসাথে প্রতিস্থাপন করুন ।-dlrwx


: / আমি যতদূর পেতে পারেন এই বেশী নয়। এবং স্মার্ট উপায়টি দুর্দান্ত অসম্পূর্ণ
ASCII- কেবল

এটি কোনও ধরণের টেরিনারি / লজিক্যাল বা / অ্যাড এবং ট্রিম অপারেটরগুলির সাথে এত গল্ফিয়ার হবে
এএসসিআইআই-

@ ASCII- কেবল আপনার ধারণাটি বেশ দুর্দান্ত ছিল, আমি এই উত্তরের জন্য এটি ব্যবহার করেছি :)
লিও

4

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

লোয়ারকেসে ইনপুট স্ট্রিং আশা করে।

s=>s.replace(/\d|f/g,c=>1/c?s[c&4]+s[c&2]+s[c&1]:'-',s='-xw-r')

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

মন্তব্য

s => s.replace(   // replace in the input string s
  /\d|f/g, c =>   //   each character c which is either a digit or the letter 'f'
    1 / c ?       //   if c is a digit:
      s[c & 4] +  //     append '-' or 'r'
      s[c & 2] +  //     append '-' or 'w'
      s[c & 1]    //     append '-' or 'x'
    :             //   else:
      '-',        //     just replace 'f' with '-'
  s = '-xw-r'     //   s holds the permission characters
)                 // end of replace()

4

কাঠকয়লা , 27 বাইট

FS≡ιdιlιf¦-⭆rwx⎇§↨⁺⁸Iι²⊕λκ-

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

 S                          Input string
F                           Loop over characters
   ι                        Current character
  ≡                         Switch
    d                       Literal `d`
     ι                      Implicitly print current character
      l                     Literal `l`
       ι                    Implicitly print current character
        f                   Literal `f`
         ¦                  (Separator between string literals)
          -                 Implicitly print literal `-`
                            Implicit default case
            rwx             Literal `rwx`
           ⭆                Map over characters
                     ι      Input character
                    I       Cast to integer
                   ⁸        Literal 8
                  ⁺         Sum
                      ²     Literal 2
                 ↨          Base conversion
                        λ   Inner index
                       ⊕    Incremented
                §           Index into base conversion
                         κ  Inner character
                          - Literal `-`
               ⎇            Ternary
                            Implicitly print

4

হাস্কেল , 84 83 81 বাইট

f 'f'='-'
f y=y
t#n=f t:((\x->["-r"!!div x 4,"-w-w"!!div x 2,"-x"!!mod x 2])=<<n)

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

স্তন্যপায়ী পাইথন 2 উত্তরের ধারণার সাথে বেশ একই রকম হয়ে গেছে। f ফাইলের প্রকারটি তৈরি করে, বাকিটি হ'ল অষ্টাল নম্বর থেকে অনুমতি প্রাপ্ত হয়। এটি সত্যিই আমার ইচ্ছা করেছে এবং কিছুটা দিকনির্দেশনা এবং অপারেটরটি উপস্থাপনে অন্তর্ভুক্ত ছিল।


2
আপনি divপরিবর্তে ব্যবহার করতে পারেন quot
নিমি

4

জাভা 8, 100 বাইট

s->s.replaceAll("(\\d)","$1r$1w$1x").replaceAll("f|[0-3]r|[0145]w|[0246]x","-").replaceAll("\\d","")

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

পোর্ট অফ @Neil এর অক্ষিপট উত্তর

ব্যাখ্যা:

s->                                 // Method with String as both parameter and return-type
  s.replaceAll("(\\d)","$1r$1w$1x") //  Replace every digit `d` with 'drdwdx'
   .replaceAll("f                   //  Replace every "f",
                |[0-3]r             //  every "0r", "1r", "2r", "3r",
                |[0145]w            //  every "0w", "1w", "4w", "5w",
                |[0246]x",          //  and every "0x", "2x", "4x", "6x"
               "-")                 //  with a "-"
   .replaceAll("\\d","")            //  Remove any remaining digits


@ অলিভিগ্রগ্রোয়ার ওয়েল, মূলত কারণ এটি রিটার্নের বিবৃতি এবং লুপগুলিতে সঞ্চয় করে। খুব খারাপ তিনজন ব্যক্তি .replaceAllতার সাথে লুপের চেয়ে কম বাইট .replaceAllএবং যুক্ত returnএবং স্ট্রিং-অ্যারে .. তবে অবশ্যই কৃতিত্ব নীলকে দেয় , যিনি রেটিনা উত্তরটি উত্তর থেকে আমি বন্দর হিসাবে ব্যবহার করেছি।
কেভিন ক্রুইজসেন

3

জেলি , 21 বাইট

Ḣ⁾f-yɓOBṫ€4a“rwx”o”-ṭ

STDOUT এ একটি সম্পূর্ণ প্রোগ্রাম মুদ্রণ। (মোনাডিক লিঙ্ক হিসাবে রিটার্ন মান হ'ল একটি অক্ষর এবং একটি অক্ষরের তিনটি তালিকার একটি তালিকা list

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষা-স্যুটটি দেখুন

কিভাবে?

Ḣ⁾f-yɓOBṫ€4a“rwx”o”-ṭ | Main Link: list of characters
Ḣ                     | head & pop (get the 1st character and modify the list)
 ⁾f-                  | list of characters = ['f', '-']
    y                 | translate (replacing 'f' with '-'; leaving 'd' and 'l' unaffected)
     ɓ                | (call that X) new dyadic chain: f(modified input; X)
      O               | ordinals ('0'->48, '1'->59, ..., '7'->55 -- notably 32+16+value)
       B              | convert to binary (vectorises) (getting three lists of six 1s and 0s)
        ṫ€4           | tail €ach from index 4 (getting the three least significant bits)
           “rwx”      | list of characters ['r', 'w', 'x']
          a           | logical AND (vectorises) (1s become 'r', 'w', or 'x'; 0s unaffected)
                 ”-   | character '-'
                o     | logical OR (vectorises) (replacing any 0s with '-'s)
                   ṭ  | tack (prepend the character X) 
                      | implicit print (smashes everything together)


3

রেটিনা , 38 বাইট

দ্বারা অনুপ্রাণিত একটি মন্তব্য থেকে হওয়া ASCII শুধুমাত্র

\d
---$&*
---____
r--
--__
w-
-_
x
f
-

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

ধারণাটি _তিনটি শীর্ষস্থানীয় -এবং প্রতিটি বাইনারি ডিজিটকে সর্বাধিক থেকে ন্যূনতম তাত্পর্যপূর্ণ করে রূপান্তরিত করে রেটিনায় ডিফল্ট অ্যানারি অঙ্কটি রেটিনায় রূপান্তর করে এবং তারপরে বাইনারি অঙ্কগুলিকে রূপান্তর করে।


2

পাইথন 3 , 71 বাইট

lambda s:("-"+s)[s[0]!="f"]+stat.filemode(int(s[1:],8))[1:]
import stat

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

পাইথন ৩.৩++ এর জন্য একটি বিল্ট-ইন রয়েছে, যদিও কোনও আমদানির প্রয়োজন এবং প্রত্যাশিত ইনপুট ফর্ম্যাটের পার্থক্যের কারণে এটি খুব গল্ফ-বান্ধব নয়।


2

Tcl , 139 বাইট

proc P s {join [lmap c [split $s ""] {expr {[regexp \\d $c]?"[expr $c&4?"r":"-"][expr $c&2?"w":"-"][expr $c&1?"x":"-"]":$c==f?"-":$c}}] ""}

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


টিসিএল , 144 বাইট

proc P s {join [lmap c [split $s ""] {expr {[regexp \\d $c]?[list [expr $c&4?"r":"-"][expr $c&2?"w":"-"][expr $c&1?"x":"-"]]:$c==f?"-":$c}}] ""}

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

Tcl , 149 বাইট

proc P s {join [lmap c [split $s ""] {if [regexp \\d $c] {list [expr $c&4?"r":"-"][expr $c&2?"w":"-"][expr $c&1?"x":"-"]} {expr {$c==f?"-":$c}}}] ""}

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

টিসিএল , 150 বাইট

proc P s {join [lmap c [split $s ""] {if [regexp \\d $c] {set v [expr $c&4?"r":"-"][expr $c&2?"w":"-"][expr $c&1?"x":"-"]} {expr {$c==f?"-":$c}}}] ""}

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

টিসিএল , 180 বাইট

proc P s {join [lmap c [split $s ""] {if [regexp \\d $c] {[set R regsub] (..)1 [$R (.)1(.) [$R 1(..) [$R -all 0 [format %03b $c] -] r\\1] \\1w\\2] \\1x} {expr {$c==f?"-":$c}}}] ""}

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

তবুও খুব সরল!


2

জাভা (জেডিকে 10) , 118 বাইট

s->{var r=s[0]=='f'?"-":""+s[0];var z="-xw r".split("");for(int i=0;++i<4;)r+=z[s[i]&4]+z[s[i]&2]+z[s[i]&1];return r;}

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

ক্রেডিট


2
আপনি যখন ছোট হাতের হিসাবে ইনপুট নিতে fdl, আপনি পরিবর্তন করতে পারেন var r=s[0]<70?"d":s[0]<72?"-":"l";থেকে var r=s[0]=='f'?"-":s[0]+"";6 বাইট সংরক্ষণ করুন। এছাড়াও, .toCharArray()হতে পারে .split("")একটি অতিরিক্ত 4 বাইট সংরক্ষণ করুন।
কেভিন ক্রুইজসেন

2
@KevinCruijssen আপনার পরিকল্পনা আমাকে 13 বাইট সংরক্ষণ করেছেন, না 10 (যেহেতু আমি দূর করতে পারবে? ""+"কাস্ট" একটি উপর পরে charএকটি মধ্যে String);) ধন্যবাদ!
অলিভিয়ার গ্রাগোয়ার

2

এক্সেল, 224 বাইট

=IF(LEFT(A1,1)="f","-",LEFT(A1,1))&CHOOSE(MID(A1,2,1)+1,"---","--x","-w-","-wx","r--","r-x","rw-","rwx")&CHOOSE(MID(A1,3,1)+1,"---","--x","-w-","-wx","r--","r-x","rw-","rwx")&CHOOSE(MID(A1,4,1)+1,"---","--x","-w-","-wx","r--","r-x","rw-","rwx")

4 পর্যায়ে সম্পন্ন:

IF(LEFT(A1,1)="f","-",LEFT(A1,1))    Replace "f" with "-".

এবং 3 বার:

CHOOSE(MID(A1,2,1)+1,"---","--x","-w-","-wx","r--","r-x","rw-","rwx")

বুদ্ধিমান হওয়ার চেষ্টা করছেন, 25 bytesপ্রতি সেট অধিকারের যোগ করুন , মোট 75 টি:

IF(INT(MID(A1,2,1))>3,"r","-")&IF(MOD(MID(A1,2,1),4)>1,"w","-")&IF(ISODD(MID(A1,2,1)),"x","-")

2

05 এ বি 1 ই , 34 27 বাইট

ćls8βbvyi…rwx3*Nèë'-}J'f'-:

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

@ ম্যাজিকঅ্যাক্টোপাস ইউর্ন দ্বারা 7 বাইট নিচে গল্ফড


ć                           # Remove head from string.
 ls                         # Lowercase swap.
   8βb                      # Octal convert to binary.
      vy                    # For each...
        i        ë  }
         …rwx3*Nè           # If true, push the correct index of rwx.
                  '-        # Else push '-'.
                     J      # Repeatedly join stack inside the loop.
                      'f'-: # Repeatedly replace 'f' with '-' inside the loop.

ćls8βbvyi…rwx3*Nèë'-}J'f'-:7
টির

মূলত শুধু একটি ভিন্ন ক্রম ব্যবহার করা হয় তবে বিবৃতি, এবং এর পরিবর্তে সরানোর fআমি শুধু সব প্রতিস্থাপন করছি fসঙ্গে চূড়ান্ত স্ট্রিং এর -
ম্যাজিক অক্টোপাস উরন

i <CODE FOR TRUE> ë <CODE FOR FALSE> }
ম্যাজিক অক্টোপাস উরন


1

পাইথন 2 , 238 বাইট

lambda m,r=str.replace,s=str.split,j="".join,b=bin,i=int,z=str.zfill,g=lambda h,y:y if int(h)else "-":r(m[0],"f","-")+j(j([g(z(s(b(i(x)),"b")[1],3)[0],"r"),g(z(s(b(i(x)),"b")[1],3)[1],"w"),g(z(s(b(i(x)),"b")[1],3)[2],"x")])for x in m[1:])

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

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


: | অনেকগুলি বিল্টিন = খুব দীর্ঘ
ASCII-

1

এপিএল + উইন, 55 বাইট

শীর্ষস্থানীয় অক্ষর লোয়ার কেস সহ ইনপুট স্ট্রিংয়ের জন্য অনুরোধ:

('dl-'['dlf'⍳↑t]),⎕av[46+(,⍉(3⍴2)⊤⍎¨⍕1↓t←⎕)×9⍴69 74 75]

ব্যাখ্যা:

9⍴69 74 75 create a vector of ascii character codes for rwx -46, index origin 1

1↓t←⎕ prompt for input and drop first character

,⍉(3⍴2)⊤⍎¨⍕ create a 9 element vector by concatenating the binary representation for each digit 

46+(,⍉(3⍴2)⊤⍎¨⍕1↓t←⎕)×9⍴69 74 75 multiply the two vectors and add 46

⎕av[.....] convert back from ascii code to characters, 46 being '-'

('dl-'['dlf'⍳↑t]), append first character from input swapping '-' for 'f'


1

জে , 57 52 বাইট

ফ্রাউনফ্রোগের জন্য 5 বাইট সংরক্ষণ করা হয়েছে!

-&.('-DLld'i.{.),[:,('-',:'rwx'){"0 1&.|:~1#:@}."."0

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

তবুও আরও একটি দীর্ঘ সমাধান ... আমি জানি না কীভাবে }স্বচ্ছ ক্রিয়াগুলিতে কাজ করা যায় এবং সে কারণেই আমি {"0 1&.|:নির্বাচনের জন্য দীর্ঘ সময় ব্যবহার করেছি।

ব্যাখ্যা:

@}. প্রথম প্রতীক এবং ড্রপ

,.&.": বাকিটিকে ডিজিটাল ডিজিটের তালিকায় রূপান্তর করুন

]:#: প্রতিটি অঙ্ককে বাইনারি অঙ্কের তালিকায় রূপান্তর করুন (এবং কাঁটাচামচ ক্যাপ করুন)

('-',:'rwx') একটি 2-সারি সারণী তৈরি করে এবং এর প্রথম সারি / 1 থেকে তার দ্বিতীয়টি থেকে নির্বাচন করতে 0 ব্যবহার করুন

   '-',:'rwx'
---
rwx

{"0 1&.|:~ উপরের সারণি থেকে নির্বাচন করতে বাইনারি সংখ্যাগুলি ব্যবহার করে

[:, ফলাফল সমতল

('d-l'{~'DFL'i.{.) প্রথম প্রতীক বিন্যাস

, অনুমতিগুলির তালিকায় fisrt প্রতীক যুক্ত করে


1
ইনপুটটি ইতিমধ্যে একটি স্ট্রিং, আপনার প্রয়োজন1#:@}."."0
ফ্রাউনফ্রোগ

1
এটি কাজ করছে বলে মনে হচ্ছে: ('d-l'{~'DFL'i.{.)-&.('-DLld'i.{.)
ফ্রাউনফ্রাগ

@ ফ্রাউনফ্রেগ খুব সুন্দর ব্যবহার i.এবং &.অনেক ধন্যবাদ! যাইহোক, আপনি কীভাবে }tacit ক্রিয়াগুলিতে নির্বাচন ব্যবহার করবেন তা আমাকে ব্যাখ্যা করতে পারেন ?
গ্যালেন ইভানভ

1
2 2 2&#:`('-',:'rwx'"_)}@"."0@}.হুবহু একই দৈর্ঘ্য
ফ্রেউনিফ্রোগ

তবে এটি 333
ভাঙ্গেনি

1

পিএইচপি, 68 বাইট

<?=strtr(strtr($argn,[f=>_,___,__x,_w_,_wx,r__,r_x,rw_,rwx]),_,"-");

অনুবাদ fআন্ডারস্কোর এবং তার প্রতি অকট্যাল নম্বরে ছোট হাতের ইনপুটে rwxসমতুল্য, ড্যাশ (উদ্ধৃতি প্রয়োজনীয়তার সংরক্ষণ করতে), তারপর প্রতিস্থাপন পরিবর্তে আন্ডারস্কোর ব্যবহার _সঙ্গে -

পাইপ হিসাবে চালান -nFবা এটি অনলাইনে চেষ্টা করুন


1

সি (জিসিসি) , 109 104 বাইট

কমপক্ষে সি অষ্টাল ইনপুট রূপান্তর করতে পারে .... :-)

সম্পাদনা: আমি বুঝতে পেরেছি যে আকারের সংশোধক কঠোরভাবে প্রয়োজন হয় নি, এবং এটি এই ক্ষেত্রেটির putchar()চেয়ে ছোট orterprintf()

f(a,b){char*s="-xwr";scanf("%c%o",&a,&b);putchar(a-70?a:*s);for(a=9;~--a;putchar(s[(1&b>>a)*(a%3+1)]));}

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

মূল:

f(a,b){char*s="-xwr";scanf("%c%3o",&a,&b);putchar(a-70?a:*s);for(a=9;~--a;printf("%c",s[(1&b>>a)*(a%3+1)]));}

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

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