ওও কোডে অনুবাদ করুন


46

ওও কোডে লিখিত একটি প্রোগ্রামের একটি ইনপুট দেওয়া , BF কোডটি উপস্থাপন করে যা এটি উপস্থাপন করে।

ওও সিওডি কীভাবে কাজ করে তার একটি সংক্ষিপ্ত বিবরণ এখানে:

  • প্রথমত, সমস্ত বর্ণমালার অক্ষর মুছে ফেলা হয় (সমস্ত কিছু সীমার মধ্যে নেই A-Za-z)।

    উদাহরণস্বরূপ, প্রোগ্রামটি PROgRam reVERsES giVeN iNPut sEqUENcEধরুন (ইওসোলংস উইকি পৃষ্ঠায় প্রদত্ত একটি উদাহরণ যা আপনি প্রত্যাশা করতেন ঠিক তেমন করে)। এই প্রথম পদক্ষেপের পরে, আমরা এখন PROgRamreVERsESgiVeNiNPutsEqUENcE

  • এর পরে, 3. দলের আমরা এখন আছে সব অক্ষর বাকি ভাগ PRO,gRa,mre,VER,sES,giV,eNi,NPu,tsE,qUE,NcE। যদি 1 বা 2 টি অক্ষরের পিছনে গ্রুপ থাকে তবে এটিকে বাতিল করুন।

  • নিম্নলিখিত টেবিলের উপর ভিত্তি করে 3 টি বর্ণের প্রতিটি গ্রুপকে BF কমান্ডে রূপান্তর করুন:

    ooo  >
    ooO  <
    oOo  [
    oOO  ]
    Ooo  -
    OoO  +
    OOo  .
    OOO  ,
    

    এটি হ'ল, যদি কোনও গ্রুপের প্রথম অক্ষর ছোট হাতের হয়, দ্বিতীয়টি বড় হাতের এবং তৃতীয়টি ছোট হাতের অক্ষর হয়, এটি কমান্ডে অনুবাদ করবে [

    আমাদের উদাহরণ সহ, এটি শেষ পর্যন্ত বিএফ প্রোগ্রামে পরিণত হয় ,[>,]<[.<]+, যা সত্যই এর ইনপুটটিকে বিপরীত করে।

যেহেতু এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে।

পরীক্ষার কেস:

<empty string> -> <empty string>
A -> <empty string>
Ab -> <empty string>
Abc -> -
AbcD -> -
AbcDe -> -
AbcDef -> --
1A_b%c*D[]e\\\f! -> --
PROgRamreVERsESgiVeNiNPutsEqUENcE -> ,[>,]<[.<]+

26
আমি ওওতে কারও উত্তর নিয়ে অপেক্ষা করছি ...
গ্লোরফাইন্ডেল

17
@ গ্লোরফাইন্ডেল: বাধ্য হয়ে খুশি।
nneonneo

উত্তর:


127

ওও, 1569 1515 বাইট

করতে হবে। এখানে চেষ্টা করুন

Golfed:

oooooooooOoOoooooooooooooooOoOooooooOOOoOoooooooOoOOoOOoOOoOOoOOoOOoOOoOoOoooOOoOOoOOoOOoOOoOOoOOoOOoOoooOoooOOooOOoOooOoOoOoooooOoooOoooooOOooOooOoOOooOoOoOoooooOoOooooOoOoooooOoOooOoOOoooOoOooooooOoOOoOOoOOoOOoOoOoooOOoOOoOOoOOoOOoOoooOoooOOooOOoOOoOooOoOoOoooooOoooOoooooOOooOooOoOOooOoOoOoooooOoOooooOoOoooooOoOooOoOOoooOoOoooOoOOoOOoOOoOOoOOoOOoOooOoOoOoooooOoooOoooooOOooOooOoOOooOoOoOoooooOoOooooOoOoooooOoOooOoOOoooOoOooooooOoOOoOOoOOoOOoOoOoooOOoOOoOOoOOoOOoOoooOoooOOooOOoOOoOooOoOoOoooooOoooOoooooOOooOooOoOOooOoOoOoooooooooOoOoooOOooOooOoOOooOoOoOooooOooOooOooOooOooOooOooOooOooOooOOoOoooooooooooooooooooooooooooooooooooooooooooOoOoooOOooOooOooOooOoOOoOOooOoOoOooooooooooooOoOoooOOooOooOooOooOoOOoOOooOoOoOooooOooOooOooOooOooOooOooOooOOoOooooooooooooOoOoooooooooooooooooooooooooOoOoooOOooOooOooOooOoOOoOOooOoOoOooooooooooooOoOoooOOooOooOooOooOoOOooOooOooOooOooOooOooOoOoooooOooooooooooooooooOoOOoOOoOOoOOoOOoOoOoooOOoOOoOOoOOoOOoOOoOOoOoooOoooOOooOOoOOoOooOooOooOoOoooooOoooooOoooOOoooooOoooOOooOoOoooooooOoOOoOooOooOOoooOOooOOooooooOOooOoOooooOoOooooOooooOooooOooOOoooooOoooOOooOoOoooooooOoOooOooOOoooOOooOOoooOOooOOooooooOOooOoOooooOoOooooooooooooOoOOoOOoOOoOoOoooOOoOOoOOoOOoOoooOoooOOooOooOooOoOooooooooooOoOOoOOoOOoOOoOoOoooOOoOOoOOoOOoOOoOOoOoooOoooOOooOOoOooOoOooooOoOOoOooOooOOoooooOoooOOooOoOoOoooOOooOOooooooOOooOoOooooOoOooooOoooOOoooooOoooOOooOoOoooooooOoOOoOooOooOOoooOOooOOoooOOooOOoooOOOoOooooooooooooOOooOoOoooOOooOooOooOooOooOOooooOOooooOOoooOOoOOooooooooooooooooooooooooOoOooooooOOOoOO

ব্রেইনফাক-এ অনুবাদ করা (স্পষ্টতার জন্য লাইন ব্রেক সহ):

>>>+>>>>>+>>,[>>++++++++[<++++++++>-]<+<[->-[>]<<]<[->+>[->+<]>+>>+++++[<+++++>-
]<++<[->-[>]<<]<[->+>[->+<]>+>+++++++<[->-[>]<<]<[->+>[->+<]>+>>+++++[<+++++>-]<
++<[->-[>]<<]<[->>[-]<<]<[-<<<<<<<<<<<+>>>>>>>>>>>>>>[-]<<<<]]<[->>>[-]<<<<]]<[-
<<<<<<<<<+>>>>+>>>>>>>>[-]<<<<]]<[->>>[-]<<<<]<<<<<<<[>[>>>>>++++++[<+++++++>-]<
++<<<[>[>[<->-]<[>>++<<-]<->]<[>+>[>-<<->-]<[>>+<<-]<-]<->]<[>+>>>>++++[<++++>-]
<<<[>>>+++++[<++++++>-]<+<[>++<<->-]<[-]<->]<[>+>[<->-]<[>>++<<-]<-]<-]+>>>>.[-]
<<<<<-<-<-]]>>>>>>>>+>>,]

ব্যাখ্যার সাথে নিরবচ্ছিন্ন:

this progrAm Translates ooo codE tO brainfUCK cOde. i guesS sINcE ThE ExAMpLE
tEXt WAs SeLf-doCUmENtINg, I ShOUlD PrOBaBLy Make This SElf-DOcUmeNtInG too.

oh, I shoUld menTIon ThaT i WRotE tHe OriginAl BrainFuCk code EnTirElY By haNd.
If you waNt TO sEE tHE bRAiNfUck cODe, RUn THiS PrOGrAm wiTh itSElf AS iNPuT!

baSiCaLly, thiS proGram seTS up MemOrY As fOlLoWs: the fIrSt thrEe Bytes aRe
"ValId" FLags (V0, v1, V2), theN tHErE'S a BArRIeR (A 1) fOLlOweD bY tHree
"vaLue" bIts (b0, b1, b2). THe rEst Of THe aRrAy Is basiCaLly juSt ScratcH
sPacE. tO Save SpAce, i'm slIdINg THe POiNTeR fOrwaRD bY OnE In EAcH ItEratIon
uNTil THe POiNteR hItS the baRrieR, at whiCH poInt ThE ProGrAm Prints out tHe
ConvERteD chArACteR.

tHe ProgrAm eXteNsiVelY usEs tHe cLevEr "gReaTEr-Than" comparison operator
described by dheeraj ram aT
hTtp://sTAckOveRflOw.cOm/QUeSTioNs/6168584/BrAinfuck-comparE-2-nUmbeRS. i hAppEn
tO reAlLY lIKe tHiS iMplemEntAtiOn bEcaUse It iS boTh cOMpAct and nestablE,
wHich is critical for my bf code tO wOrk pROpeRly.

I seT up ThE ReQUisItE sTructure, then pErForm A BunCh oF neSteD cOMpaRisOns
ThaT loOk rOugHlY like tHis:

    if(in >= 65 /* capital a */) {
        if(In <= 90 /* CApITaL Z */) {
            vI = 1
            Bi = 1
        } ELsE {
            iF(in >= 97 /* lOWeRCaSE a */) {
                IF(iN <= 122 /* LoWErCAsE z */) {
                    vi = 1
                }
            }
        }
    }

At thE End OF tHEsE coMpaRisOnS, if the V (valid) Bit iS Set, the ProgRAm sTePs
the poiNtER rIghTwaRDs. if IT hiTS the barRIer, It Then gOeS into A big sEt of
nEstED condiTionALs tHaT test the AcCumUlaTEd vaLUe bITs, anD ConSTruct thE
CorReSpondInG character to pRiNT oUT. tHEn It ReseTS bACk TO tHE iNitiAl stATe.

fInaLly, It Reads anotheR iNPuT ChARaCTeR aNd goES bACk TO lOOpINg.

SO tHere You hAVe iT - An Ooo To BrainFuCK cOnvErtER writtEn in OOo (aNd
BrAinfUCk, bY ExtensiON!). siNcE i havE a Few moRe chARacterS to sPAre In This
progRaM, HeRe's A coUPle oF StrESs teST paTTernS:

0123456789ABcDefghijklmnopQRstUvWxyzABcdEfgHijKlmNopQRstuvWXyz!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ 
 ~}|{`_^]\[@?>=<;:/.-,+*)('&%$#"!zyXWvutSRqPOnmlkjihgfedcbazyxwvutsrqPoNmlkjihGFEdCBa9876543210

আকর্ষণীয় চ্যালেঞ্জের জন্য ধন্যবাদ!


1
ওহ godশ্বর ... এটি মহাকাব্য! সাবাশ.
Rɪᴋᴇʀ

11
... কি দারুন. আমি অভিভূত. কৌতূহলের জন্য: goo.gl/vbh3h9 (সম্পূর্ণ চেষ্টা করুন অনলাইন লিঙ্কটি সুস্পষ্ট কারণে খুব দীর্ঘ ছিল)।
ডুরকনব

1
গল্ফড / চার্চগুলির একগুচ্ছ অপ্টিমাইজড। নতুন ট্রাইটি লিঙ্ক: goo.gl/ISjwLB
nneonneo

7
এই ভাল জিনিস আমি কখনো এই সাইটে দেখা যায়
নয়টি

15
@ টেক্সেনক্স সেক্ষেত্রে প্রোগ্রামিং ধাঁধা এবং কোড গল্ফে আপনাকে স্বাগতম! আমি নিশ্চিত যে এর আশেপাশে আরও অনেক উত্তর আপনি পেয়ে যাবেন যে "মনে মনে" সেই "সেরা জিনিসটি আমি দেখেছি" তার জন্য দাগ দেবেন :)
Sp3000

15

সিজেম, 36 35 বাইট

l{el_eu-},'_f<0+3/W<2fb"><[]-+.,"f=

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

l               e# Read input.
{el_eu-},       e# Discard all characters that don't change in a lower/upper case
                e# transformation, i.e. non-letters.
'_f<            e# Compare with '_' to determine case as 0 or 1.
0+              e# Append a zero.
3/              e# Split into chunks of 3.
W<              e# Discard last chunk.
2fb             e# Convert each chunk from base 2.
",.+-][<>"f=    e# Select the corresponding character for each chunk.

একটি মান যুক্ত করুন এবং শেষ খণ্ডটি বাতিল করুন: চালাক!
লুইস মেন্ডো

আহ্, এটি সত্যিই চালাক
আদনান

9

জাভাস্ক্রিপ্ট (ES6), 94 93 91 85 84 83 বাইট

@ দেব-নালকে ধন্যবাদ 1 বাইট সংরক্ষিত

x=>x.replace(/[a-z]/gi,c=>(a+=c<'a'|0)[2]?b+="><[]-+.,"['0b'+a-(a="")]:0,a=b="")&&b

আমি এর বিভিন্ন রূপ চেষ্টা করেছি, তবে এটি সবচেয়ে স্বল্পতম বলে মনে হচ্ছে। খালি ইনপুটটিতেও কাজ করে!

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

প্রথমত, এর সাথে x.replace(/[a-z]/gi,c=>আমরা প্রতিটি অক্ষর ইনপুটটিতে পাই c। আমরা সেট aএবং bকরতে ""ফাংশন কল এর অন্য প্রান্তে, যেহেতু ফাংশন দ্বিতীয় গত কোনো পরামিতি উপেক্ষা করে। aবর্তমানে আমরা কোন অক্ষরটি তৈরি করছি তা নির্ধারণের জন্য একটি বাইনারি স্ট্রিং bসঞ্চয় করবে এবং ফলাফলটি সংরক্ষণ করবে।

এখন বিভ্রান্তিকর অংশ জন্য: প্রথম, সঙ্গে (a+=+(c<'a')), আমরা একটি যোগ 0করতে aযদি cবড় হাতের হয়; 1অন্যথায়। এই মত প্রকাশের নতুন মান ফেরৎ a, অতএব আমরা পরীক্ষা করতে পারবেন যদি এটা চেক করার যদি সূচক 2 এ চরিত্র বিদ্যমান দ্বারা দৈর্ঘ্য তিন অক্ষর পৌঁছেছে: [2]?। যদি তা না হয় তবে আমরা সহজেই এর সাথে ফাংশনটি শেষ করব :0

যদি aএখন দৈর্ঘ্যে তিনটি অক্ষর হয় তবে এটি 000এবং এর মধ্যে একটি বাইনারি সংখ্যা 111"0b"শুরুতে সংযোজন করে আমরা এটিকে দশমিক সংখ্যায় রূপান্তর করতে পারি , তারপরে ইঞ্জিনটিকে একটি সংখ্যার সাথে পার্স করতে বাধ্য করি '0b'+a-0

তবে, আমাদের এখনও aখালি স্ট্রিংটিতে পুনরায় সেট করতে হবে। আমরা কেবল এটি করতে পারি না '0b'+(a="")-0কারণ এর অর্থ হবে যে স্ট্রিংটিকে পার্স করা হয়েছে ঠিক 0b। ভাগ্যক্রমে, যখন একটি সংখ্যা হিসাবে বিশ্লেষণ করা হয়, খালি স্ট্রিং 0 হয়ে যায়, তাই আমরা এর 0সাথে প্রতিস্থাপন করতে পারি (a="")

এখন আমাদের সংখ্যা রয়েছে এবং আমরা কেবলমাত্র সেই সূচকটিতে অক্ষরটি যুক্ত "><[]-+.,"করতে পারি b। প্রতিস্থাপনটি সম্পন্ন হওয়ার পরে, আমরা &&bএটি ফাংশন থেকে ফেরত দিতে ব্যবহার করি । (ঠিক আছে, ফলাফল .replaceখালি না হলে , যা খালি ইনপুটটিতে ঘটে এবং যাইহোক খালি স্ট্রিংটি ফেরত দেয়))


এর সাথে দুর্দান্ত একটি বাইট সংরক্ষণ করুন: '0b'+a-0বনাম +`0b${a}`এবং+("0b"+a)
andlrc

সুতরাং, replaceসব পরে জেতা!
নীল

@ নীল হ্যাঁ আপনাকে ট্রেলটিতে নামিয়ে আনার জন্য দুঃখিত match...
andlrc

সর্বশেষ সংস্করণে নেতৃস্থানীয় নন-অক্ষরগুলির সাথে সমস্যা আছে?
নীল

@ নীল আপনি ঠিক বলেছেন ভাগ্যক্রমে, আমি অ-কর্মক্ষম ব্যক্তির একটি কৌশল ব্যবহার করে ওয়ার্কিং সংস্করণটি একটি বাইট বন্ধ করে গল্ফ করেছিলাম।
ETH প্রোডাকশনগুলি

8

05 এ বি 1 ই , 35 32 বাইট

কোড:

á0«3÷\)vyS).uïJC",.+-][<>"Sr@?)\

এই উত্তরটি থেকে মার্টিন বাটনার খুব চতুর কৌশলটি ব্যবহার করছেন । ব্যাখ্যা:

á0«                               # Remove all non-alphabetic characters and append a zero
   3÷\                            # Split into pieces of 3 and discard the last one
      )v                          # Wrap everything into an array and map over it
        yS).uï                    # Is uppercase? Converts AbC to [1, 0, 1]
              JC                  # Join and convert from binary to int
                ",.+-][<>"        # Push this string
                          S       # Split the string
                           r@     # Reverse the stack and get the character from that index
                             ?    # Pop and print without a newline
                              )\  # Wrap everything into an array and pop

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

ব্যবহার সিপি-1252 এনকোডিং।


8

রেটিনা , 79 75 71 70 বাইট

1 বাইট সংরক্ষণ করার জন্য র্যান্ডম্রা ধন্যবাদ।

i`[^a-z]

M!`...
m`^
;
+`(.*);(.)
$1$1$2;
T`l
.+
$.&
T`d`_><[]\-+.,
¶

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

ব্যাখ্যা

i`[^a-z]

আমরা চিঠি নয় এমন সমস্ত কিছু সরিয়ে দিয়ে শুরু করি।

M!`...

এটি স্ট্রিংকে তিনটি অক্ষরের অংশে বিভক্ত করে সমস্ত (অ-ওভারল্যাপিং) 3-অক্ষরের ম্যাচ ফেরত পাঠিয়ে দেয়। এটি স্বয়ংক্রিয়ভাবে কোনও অসম্পূর্ণ ট্রেলিং অংশ বাদ দেয়।

m`^
;

একটি শুরুতে যোগ ;প্রতিটি লাইনে করতে। আমরা এটি বেস -২ রূপান্তরকরণের জন্য চিহ্নিতকারী হিসাবে ব্যবহার করব। যার কথা বলতে গিয়ে আমরা কেবল উচ্চতর ক্ষেত্রেের অক্ষর 1এবং লোয়ার-কেস অক্ষর হিসাবে সহজ আচরণ করব 0

+`(.*);(.)
$1$1$2;

এটি অদ্ভুত রূপান্তর করতে একটি মজার বেস -2 করে। প্রতিটি পদক্ষেপে আমরা কেবল বাম অক্ষরগুলি দ্বিগুণ করি ;এবং ;একটিকে ডানে স্থানান্তরিত করি । কেন এই কাজ করে? মনে রাখবেন আমরা লোয়ার কেস হিসাবে 0এবং বড় হাতের হিসাবে ব্যাখ্যা করব 1। যখনই আমরা কোনও চিঠি প্রক্রিয়া করি তখন আমরা কেবল এ পর্যন্ত চলমান মোট দ্বিগুণ (বাম দিকে) দ্বিগুণ করি - ডাবল লোয়ার-কেস বর্ণগুলি কেবলমাত্র 2*0=0তাই এগুলি সম্পূর্ণ উপেক্ষা করা যায় এবং উচ্চ-অক্ষরের অক্ষরগুলি এখন পর্যন্ত বাইনারি সংখ্যাকে উপস্থাপন করে, তাই এগুলি দ্বিগুণ করা হয় আমরা কি চাই. তারপরে আমরা সেই চলমান মোটের সাথে বর্তমান চিঠিটি যুক্ত করি যা প্রতিনিধিত্ব করে 0বা 1অনুরূপ।

T`l

সমস্ত ছোট হাতের অক্ষর / শূন্যগুলি সরান।

.+
$.&

প্রতিটি লাইন মেলে এবং সেই লাইনের অক্ষরগুলির (দশমিক) সংখ্যার সাথে প্রতিস্থাপন করুন। এর কারণে ;এটি অবিচ্ছিন্ন সংখ্যাটিকে দশমিক সমতুল্য +1 এ পরিণত করে।

T`d`_><[]\-+.,

প্রতিলিপি যা সংশ্লিষ্ট কমান্ডের সাথে 1-8 প্রতিস্থাপন করে।

লাইনফিড সরান।


তিনটি অক্ষরের অংশে বিভক্ত করার এটি একটি চতুর উপায়। আপনি কি আগে এটি ব্যবহার করেছেন?
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনগুলি আমার মনে হয় আমার আছে তবে আমি কোথায় তা নিশ্চিত নই। আমি হয়ত কোডগল্ফ.স্ট্যাকেক্সেঞ্জের
মার্টিন এন্ডার

আমার নতুন যুক্ত রেটিনা আইডিয়াগুলির সাথে 70 বাইট এবং কিছুটা কম ।
এলোমেলো

@ র্যান্ডোমরা আহ এর জন্য দুর্দান্ত ধারণা ;। আমি পরে এটি সম্পাদনা করব।
মার্টিন এন্ডার

7

এমএটিএল , 38 32 বাইট

'><[]-+.,'jt3Y2m)3ZCtAZ)92<!XBQ)

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

'><[]-+.,'      % push string with BF commands
j               % read input as a string
t               % duplicate
3Y2             % predefined literal: string 'A...Za...z'
m               % true for elements of input string that are letters
)               % index into input string to keep only letters
3ZC             % 2D array whose columns are non-overlapping slices of length 3.
                % The last column is padded with zeros if needed
tA              % duplicate. True for columns that don't contain zeros 
Z)              % keep those columns only. This removes padded column, if any
92<             % 1 for upper case letters, 0 for lower case letters in the 2D array
!               % transpose so each group of 3 is a row
XBQ             % convert each row from binary to decimal and add 1
)               % index into string containing the BF commands. Implicitly display

5

জাপট, 37 36 বাইট

Uo"%l" f'.³ £",><[]-+."gX®c ¤gJÃn2Ãq

এটি অনলাইন পরীক্ষা!

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

Uo"%l" f'.³ £  ",><[]-+."gX®   c ¤  gJÃ n2Ã q
Uo"%l" f'.³ mX{",><[]-+."gXmZ{Zc s2 gJ} n2} q

Uo"%l"      // Get rid of all non-letter chars in U.
f'.³        // Take each set of three chars in U.
mX{      }  // Map each item X in this group to:
XmZ{     }  //  Map each letter Z in X to:
Zc s2 gJ    //   Take the char code of Z as a binary string, and take the first char.
            //   This maps each character to 1 if it's UC, or 0 if it's lc.
        n2  //  Interpret the result as a binary number.
",><[]-+."g //  Get the item at this index in this string.
q           // Concatenate the result and implicitly output.

4

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

s=>s.match(/[A-Z]/gi).map(c=>+(c<'a')).join``.match(/.../g).map(g=>'><[]-+.,'['0b'+g|0]).join``

কেবল নন-অক্ষরগুলি সরিয়ে দেয়, বড় হাতের অক্ষরগুলিকে 1s এবং লোয়ার কেস 0-তে রূপান্তর করে, তিনটি গ্রুপে ভাগ করে, 1 বা 2 এর অনুবর্তনকারী গোষ্ঠীটিকে উপেক্ষা করে এবং গ্রুপগুলি ডিকোড করে।

সম্পাদনা: @ ডিভ-নালকে ধন্যবাদ 16 টি বাইট সংরক্ষণ করা হয়েছে, যদিও খালি স্ট্রিংটি পাস করার পরে কোডটি আর কাজ করে না।


@ দেব-নুল উগ, আমি match(/.../g).map().joinপদ্ধতির চেষ্টা করেছিলাম কিন্তু বাইটের সংখ্যাটি মিস করেছি এবং যদিও এটি আমার কিছুই সংরক্ষণ করেনি। যদিও প্রথম ম্যাচে টিপ দেওয়ার জন্য ধন্যবাদ।
নিল

4

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

b=1
for c in input():
 b=-~c.isalpha()*b+c.isupper()
 if b>7:print(end="><[]-+.,"[b-8]);b=1

হুম ... কিছুটা লম্বা দেখাচ্ছে, বিশেষত দ্বিতীয় লাইনে। b=[b,2*b+(c<'a')][c.isalpha()]যদিও কিছুটা খারাপ।


2
এর মতো প্রান্তটি ব্যবহার করা সত্যিই স্মার্ট। আমি এর আগে কখনও দেখিনি।
মরগান থ্রাপ

3

পাইথ, 40 বাইট

jkm@"><[]-+.,"id2f!%lT3cm?rId0Z1f!rIT2z3

এখানে চেষ্টা করুন!

আমি যদি স্ট্রিংয়ের পরিবর্তে অক্ষরের তালিকা হিসাবে ফলাফল আউটপুট করতে পারি তবে 2 বাইট সংরক্ষণ করতে পারব।

ব্যাখ্যা

সমস্ত অ-অক্ষর ফিল্টার করে, বড় হাতের অক্ষরে 1 এবং লোয়ারকেস 0 তে রূপান্তর করে 3 টি অংশে বিভক্ত হয়, প্রতিটি অংশকে বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করে এবং এটিকে সূচি হিসাবে একটি স্ট্রিংয়ে ব্যবহার করে যা সমস্ত বিএফ কমান্ড ধারণ করে।

jkm @ "> <[] - +।," id2f!% lT3 সেমি? rId0Z1f! rIT2z3 # z = ইনপুট

                                টিজি সহ এফজেড # ফিল্টার ইনপুট
                                 ! # যৌক্তিক নয়
                                  rIT2 # টি == স্ব্যাপকেস (টি), টি যদি অক্ষর না হয় তবে সত্য
                        মি # মানচিত্রের ফিল্টার ফলাফল ডি
                         ? rId0 # যদি d == থেকে কম (d)
                              ছোট হাতের জন্য জেড 1 # 0, বড় হাতের জন্য 1
                       সি 3 # 3 এর অংশগুলিতে বিভক্ত করুন, শেষের উপাদানটি প্রয়োজন হলে খাটো হয়
                 টি এর সাথে চ # ফিল্টার
                  ! # যৌক্তিক নয়
                   % lT3 # লেন (টি) মোড 3 -> কেবল 3 দৈর্ঘ্যের উপাদান রাখুন
  d # সহ মানচিত্র
              আইডি 2 # বাইনারি থেকে দশমিক রূপান্তর করুন
   @ "> <[] - +।," # ফলাফলের বিএফ কমান্ড পান
jk # একটি স্ট্রিং এ যোগ দিন

3

জल्फ, 31 34 বাইট

এখানে চেষ্টা করুন! সাথে \x10এবং সাথে প্রতিস্থাপন করুন \x05। যেহেতু আমি চপ ফাংশনটি ভুলভাবে প্রয়োগ করেছি, আমি 3 বাইট লাভ করি। :(

►ΜZeZcAAρi♣Epu1pl033d."><[]-+.,"ΙH
        ρi♣E                        remove all space in input
       A    pu1                     replace all uppercase letters with 1
      A        pl0                  replace all lowercase letters with 0
    Zc            3                 chop into groups of three
  Ze               3                keep groups of length three
 Μ                  d               map
                              ΙH   parse element as binary
                     ."><[]-=.,"    and return a member of that
►                                  join by nothing

3

হুন , 212 বাইট

=+([v=turn c=curr q=cold k=tape] |=(t/k `k`(v (v `(list k)`(need ((unit (list k)) p:(rose (murn t (c rush alf)) (star (stun [3 3] ;~(pose (q '0' low) (q '1' hig))))))) (c scan bin)) (c snag (rip 3 '><[]-+.,')))))

Ungolfed:

|=  t/tape
^-  tape
%+  turn
  %+  turn  ^-  (list tape)
  %-  need  %-  (unit (list tape))
    =+  t=(murn t (curr rush alf))
    p:(rose t (star (stun [3 3] ;~(pose (cold '0' low) (cold '1' hig)))))
  (curr scan bin)
(curr snag (rip 3 '><[]-+.,'))
  1. ইনপুটটিতে সমস্ত অক্ষর থেকে মুক্তি পেতে ++ মર્ન ব্যবহার করুন যা "আলফ" (বর্ণমালা) দিয়ে পার্স করা যায় না
  2. কম্বিনেটর দিয়ে তালিকাটি পার্স করুন যা একবারে প্রতিটি 3 টি অক্ষরকে তালিকায় আউটপুট করে, '0' এর সাথে ছোট হাতের বদলে এবং '1' দিয়ে বড় হাতের অক্ষর রেখে দেয়
  3. (ইউনিট (তালিকার টেপ)) এ ফলাফলটি কাস্ট করুন এবং সর্বাধিক পার্স করা ফলাফল পেতে, জোর করে আনপ্রেপ করুন, ক্র্যাশ না করে কেবল একাধিক ত্রিশের সাথে কাজ করতে
  4. তালিকার উপরের মানচিত্র, প্রতিটি দলকে এমনভাবে বিশ্লেষণ করছে যেন এটি বাইনারি হয়
  5. '> <[] - +।,' টেক্সটে সূচী হিসাবে তালিকার প্রতিটি নম্বর ব্যবহার করুন এবং তালিকাটিকে কোনও টেপে ফেলে দিন।

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

হুন হ'ল আরবিটের প্রোগ্রামিং ল্যাঙ্গুয়েজ, একটি ক্লিন স্লেট রিম্পিমিনেশন প্রকল্প project এটি নিখুঁতভাবে কার্যকরী, স্ট্যাটিকালি টাইপড, অস্পষ্টভাবে লিস্প-জাতীয় এবং নকতে সংকলিত। নোক একটি সংযুক্তিভিত্তিক ভিএম যা বাইনারি ট্রি বিগনাম মেমরির মডেলের উপরে চলে।

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

%.  "PROgRam reVERsES giVeN iNPut sEqUENcE"

এবং তারপরে পরের লাইনে স্ট্যান্ডেলোন ফাংশনটি পেস্ট করুন।


পিপিসিজিতে আপনাকে স্বাগতম! আপনার উত্তরটি মোটামুটি ভালভাবে ব্যাখ্যা করা হয়েছে, তবে আপনি কোনও অনুবাদক বা কোনও জায়গায় অনলাইনে চেষ্টা করার জন্য লিঙ্ক করতে পারেন?
অ্যাডিসন ক্রম্প

আমি আরবিটের গিথুব পৃষ্ঠায় একটি লিঙ্ক যুক্ত করেছি, যেহেতু এটি নির্মাণের একমাত্র উপায়। তা কি যথেষ্ট?
রেন্ডারসেটিংস

একেবারে। : ডি একটি সম্পূর্ণ প্রোগ্রামে এটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে নির্দেশাবলী রেখে দেওয়া দুর্দান্ত হবে।
অ্যাডিসন ক্রম্প

3

জেলি , 27 বাইট

=Œs¬Tịµ=Œu;0s3ṖḄ€ị“<[]-+.,>

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

Implicit input: string s (list of characters)

=Œs             Compare with swapcase
¬               Not - this gives 1 for letters, 0 otherwise
Tị              Take characters at truthy indices
µ               Start a new monadic chain

Input: string s' (list of letters)

=Œu             Compare with uppercase
;0              Append 0
s3              Split into chunks of length 3
Ṗ               Pop last chunk
Ḅ€              Apply convert-from-binary to each chunk
ị“<[]-+.,>      For each number, 1-based index cyclically into the string "<[]-+.,>"

2

মতলব, 98 বাইট

function t(s);s=s(isletter(s));s=s(1:end-mod(end,3));r='><[]-+.,';r([4 2 1]*reshape(s<92,3,[])+1)
  1. পরিষ্কার
  2. ট্রিম
  3. ইউসি = 1, এলসি = 0 দিয়ে একটি 3xn ম্যাট্রিক্স মি-এ পুনরায় আকার দিন
  4. (4 2 1) * মি + 1 ফলাফলের একটি সূচক তালিকায় আসে
  5. ডান অক্ষরে সূচক

1

পার্ল, 76 73 72 + 1 = 73 বাইট

$a.=y+A-Z++dfor/[A-Z]/gi;print substr"><[]-+.,",oct"0b$_",1for$a=~/.../g

-nপতাকা প্রয়োজন :

$ perl -n oOo.pl <<< 'PROgRamr{}\eVERsESgiVeNiNPutsEqUENcE'
,[>,]<[.<]+

বেস -২ রূপান্তর সহ কৌশলটি ব্যবহার করা ।

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

                          # '-n' auto read first line into `$_`
            for/[A-Z]/gi; # Iterate over all letters a-z
$a.=y/A-Z//d              # Count number of uppercase letters (1 or 0)

                                  for$a=~/.../g # Split $b into hunks of 3 characters. And
                                                # remove any potential trailing characters.
      substr"><[]-+.,",oct"0b$_",1              # `oct("0b$binary")` will convert binary
                                                # to decimal.
print

1

জুলিয়া, 107 বাইট

s->"><[]-+.,"[map(j->parse(Int,j,2)+1,[map(i->i<'_'?'1':'0',m)for m=matchall(r"\w{3}",filter(isalpha,s))])]

এটি একটি অনামী ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে। এটি কল করতে, এটি একটি ভেরিয়েবলের জন্য বরাদ্দ করুন।

Ungolfed:

function f(s)
    # Brainfuck commands
    bf = "><[]-+.,"

    # Filter out non-alphabetic characters from the input
    chars = filter(isalpha, s)

    # Get all non-overlapping groups of three characters
    groups = matchall(r"\w{3}", chars)

    # Construct binary strings by comparing to _
    binary = [map(i -> i < '_' ? '1' : '0', m) for m = groups]

    # Parse each binary string as an integer and add 1
    indices = map(j -> parse(Int, j, 2) + 1, binary)

    # Return the Brainfuck commands at the indices
    return bf[indices]
end

1

লুয়া, 120 বাইট

string.gsub()এখানে বড় ব্যবহার , আরও একটি সময় আমাকে কিছু বাইট পেতে এই ফাংশনটিতে একটি চরিত্রের পয়েন্টার তৈরি করার অনুমতি দিতে পারত। এছাড়াও, এটি কোনও স্থান ছাড়াই আমার প্রথম লুয়া প্রোগ্রাম! : ডি

এই প্রোগ্রামটি কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে এটির ইনপুট নেয় এবং প্রতি লাইন একটি কমান্ড একটি ব্রেইনফাক প্রোগ্রাম আউটপুট দেয়।

সম্পাদনা: সংরক্ষিত 1 বাইট @ ওলেগ ভি। ভলকভকে ধন্যবাদ

arg[1]:gsub("[%A]",""):gsub("%l",0):gsub("%u",1):gsub("...",function(c)x=1+tonumber(c,2)print(("><[]-+.,"):sub(x,x))end)

Ungolf এবং ব্যাখ্যা

arg[1]:gsub("[%A]","")    -- replace the non-letter character by an empty string
                          -- %A matches all the character not in %a (letters)
:gsub("%l",0)             -- replace lower case letters by 0s
:gsub("%u",1)             -- replace upper case letters by 1s
:gsub("...",function(c)   -- iterate over all groupe of 3 characters
  x=tonumber(c,2)+1       -- convert the 3-letter group from binary to decimal
  print(("><[]-+.,")      -- output the corresponding brainfuck command
             :sub(x,x))   
end)

আপনি ইনলাইনিংয়ে একটি বাইট bএবং একটিতে আরও string.gsubছোট সংরক্ষণ করতে পারবেন এবং ম্যানুয়ালি এটিতে প্রথম যুক্তিগুলি ভাঁজ করতে পারেন:g=("").gsub g(g(g(g(arg[1],"[%A]",""),"%l",0),"%u",1),"...",function(c)x=1+tonumber(c,2)print(("><[]-+.,"):sub(x,x))end)
ওলেগ ভি। ভলকভ

... অথবা সম্ভবত আমি ভাঁজ অনুসারে বাইট গণনা ভুল লিখেছি। ইনলাইনিং এখনও কাজ করে।
ওলেগ ভি। ভলকভ

@ ওলেগভি.ভোলকভ একটি সংক্ষিপ্ত পরিমাণে সাশ্রয় করছেন, দুঃখের বিষয়, আরও, আমি একই জিনিস চেষ্টা করেছি ^^ এবং খ এর ইনলাইনিংয়ের জন্য ধন্যবাদ ... আমি জানি না কেন আমি এটি একটি
ভারে

1

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

''.join('><[]-+.,'[int('%d'*3%tuple(map(str.isupper,y)),2)]for y in zip(*[iter(filter(str.isalpha,input()))]*3))

এটি আরও গল্ফ চেষ্টা করবে।


1

গণিত, 192 বাইট

StringJoin[FromDigits[#,2]&/@Partition[ToCharacterCode@#-48,3]&[StringDelete[#,a_/;!LetterQ[a]]~StringReplace~{_?UpperCaseQ->"1",_?LowerCaseQ->"0"}]/.Thread[0~Range~7->Characters@"><[]-+.,"]]&

অজ্ঞাতনামা ফাংশন যা আর্গুমেন্ট হিসাবে পছন্দসই স্ট্রিং নেয়। (বেশ সোজা) অ্যালগরিদমের পদক্ষেপ:

  1. স্ট্রিং পরিষ্কার করুন
  2. ইউসি -> "1", এলসি -> "0" প্রতিস্থাপন করুন
  3. স্ট্রিংটিকে বাইনারি তালিকায় পরিণত করুন
  4. তালিকে ত্রিশে ভাগ করুন এবং প্রতিটি খণ্ডকে বেস -২ নম্বর হিসাবে ব্যাখ্যা করুন
  5. সংখ্যাগুলি তাদের উপযুক্ত প্রতীকগুলির সাথে প্রতিস্থাপন করুন এবং আবার স্ট্রিংয়ে যোগ দিন।

1

রুবি 117 114 113 111 86 79 বাইট

gets.tr(?^+m='a-zA-Z','').tr(m,?0*26+?1).scan(/.../){$><<"><[]-+.,"[$&.to_i 2]}
  • tr(?^+m='a-zA-Z','')এম সেট করে 'a-zA-Z'এবং নন-অক্ষর সরিয়ে দেয়
  • .tr(m,?0*26+?1) লোয়ারকেসকে 0 তে, বড় হাতের অক্ষরে 1 তে রূপান্তর করে
  • .scan(/.../) স্ট্রিংটি 3 টি গ্রুপে বিভক্ত করুন এবং শেষ গ্রুপটি 3 টিরও কম হলে বাতিল করুন discard
  • {$><<"><[]-+.,"[$&.t‌​o_i 2]} প্রতিটি বাইনারি সংখ্যা একটি অক্ষরে রূপান্তর করুন

আপনি ব্যবহার করতে পারবেন না tr("a-zA-Z","01")? বা এমনকিtr("A-Za-z",10)
andlrc

@ দেব-নাল "AAz".tr("a-zA-Z","01")দেয়111
ফাজিট্রি

1
এখানে অনেক কিছুই করা যায়। এটি একটি সূচনা: gets.delete('^a-zA-Z').tr("a-z",?0).tr("^0",?1).scan(/.../){$><<"><[]-+.,"[$&.to_i 2]}(86 বাইট)। কমান্ড লাইন অপশন থেকে স্টিডিনে ইনপুট পরিবর্তন করেছে; আউটপুটে আশেপাশের উদ্ধৃতিগুলি স্থির করে (তবে এখন এটির পিছনে কোনও নতুন লাইন নেই)
ড্যানিয়েরো

@ দানিরো ধন্যবাদ! এটি একটি সম্প্রদায় উত্তর করেছে। পরিবর্তনগুলি নির্দ্বিধায় মনে করুন
49

1
tr(^a-zA-Z','').tr('a-zA-Z',?0*26+?1)সংক্ষিপ্ত
চার্লস

1

পার্ল 6, 81 বাইট

এটি সম্ভবত আরও ভাল করা যেতে পারে, তবে এটি আমার এটাই

{m:g/:i<[a..z]>/;[~] ("><[]-+.,".comb[:2[$_]]for (+(91>$_.ord)for |$/).rotor(3))}

ব্যবহার

> my &f = {m:g/:i<[a..z]>/;[~] ("><[]-+.,".comb[:2[$_]]for (+(91>$_.ord)for |$/).rotor(3))}
-> ;; $_? is raw { #`(Block|149805328) ... }
> f("PROgRamreVERsESgiVeNiNPutsEqUENcE")
,[>,]<[.<]+

Ungolfed

sub oOo ($_) {
    m:g/:i<[a..z]>/;  # Match all letters and put them in $/

    my @digits = (                
        for |$/ -> $c {           # For all $c in $/
            +(91>$c.ord)          # 1 if $c.ord < 91 else 0
        }
    );
    @digits.=rotor(3);            # Split the digits into chunks of 3

    my @chars = (
        for @digits -> @l {
            "><[]-+.,".comb[:2[@l]] # Take the character from "><[]-+.,"
                                    # at an index given by converting 
                                    # @l (a list of 3 binary digits)
                                    # from base 2 to base 10
        }
    );
    @chars.join # Join the list of chars into a string and return
}

1

সি ++, 173 167 বাইট

পুরো প্রোগ্রাম, গল্ফড (স্ট্যান্ডার্ড ইনপুট থেকে পড়া):

#include <cstdio>
main(){for(char*a="@[`{>-[.<+],",c,o=0,t=1;(c=getchar())>0;)if(c=c>*a&&c<a[1]?2:c>a[2]&&c<a[3]?1:0){o|=c>1?t:0;t*=2;if(t>4)putchar(a[o+4]),o=0,t=1;}}

কিছুটা নাড়িত:

#include <cstdio>
main(){
    for(char*a="@[`{>-[.<+],",c,o=0,t=1;(c=getchar())>0;)
        if(c=c>*a&&c<a[1]?2:c>a[2]&&c<a[3]?1:0){
            o|=c>1?t:0;
            t*=2;
            if(t>4)putchar(a[o+4]),o=0,t=1;            
        }
}

লক্ষ্য করুন @A... Z[হওয়া ASCII, এবং অনুরূপভাবে জন্য `a... z}




0

পাইকে, 31 বাইট, অ-প্রতিযোগিতামূলক

পাইকে চ্যালেঞ্জের চেয়ে পুরানো, তবে এটিকে আরও প্রতিযোগিতামূলক করার জন্য আমি কয়েকটি বৈশিষ্ট্য যুক্ত করেছি - খণ্ড ক্রিয়াকলাপ। আমি @ মার্টিন বাটনার যেমন ব্যবহার করেছি তেমন কৌশল ব্যবহার করেছি।

#~l{)\`Lm<0+3cFb2"><[]-+.,"@)st

এখানে চেষ্টা করুন!


0

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

function a(s){function b(c){return c.charCodeAt()&32}return (l=(s=s.replace(/[^a-z]/gi)).substr(3))?",.+-][<>"[b(s[0])*4+b(s[1])*2+b(s[2])]+a(l):""}

0

টিআই-বেসিক, 311 288 বাইট

কি, টিআই-বেসিক উত্তর নেই? আমার ঠিক করার সময়!

Ans→Str1:" →Str2:" →Str6:"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str4:For(S,1,length(Str1:sub(Str1,S,1:If inString(Str4+"abcdefghijklmnopqrstuvwxyz",Ans:Str2+Ans→Str2:End:sub(Str2,2,length(Str2)-1→Str2:For(B,1,.1+3⁻¹length(Str2:sub(Str2,3B-2,3→Str3:1+sum({4,2,1}seq(0≠inString(Str4,sub(Str3,X,1)),X,1,3→L₁(B:End:For(C,1,.1+dim(L₁:Str6+sub("><[]-+.,",L₁(C),1→Str6:End:sub(Str6,2,length(Str6)-1→Str6

ইনপুট হল ওও কোড Ans
আউটপুট অনুবাদ করা হয় বি এফ কোড।

উদাহরণ:

"AbcDef
AbcDef
prgmCDGF18
--
"PROgRam reVERsES giVeN iNPut sEqUENcE
PROgRam reVERsES giVeN iNPut sEqUENcE
prgmCDGF18
.[>,]<[.<]+
"AbcDe
AbcDe
prgmCDGF18
-

আন-গল্ফড:
( নিউলাইনস এবং মন্তব্য যুক্ত হয়েছে)

Ans→Str1                                                   ;store the input in "Str1"
" →Str2                                                    ;set "Str2" and "Str6" to a
" →Str6                                                    ; space character
                                                           ; (needed b/c TI-BASIC doesn't
                                                           ;  like concatenating empty
                                                           ;  strings)

"ABCDEFGHIJKLMNOPQRSTUVWXYZ→Str4                           ;store the uppercase alphabet
                                                           ; in "Str4"
For(S,1,length(Str1                                        ;loop over the input string
sub(Str1,S,1                                               ;get the current character
If inString(Str4+"abcdefghijklmnopqrstuvwxyz",Ans          ;if the character is in either
                                                           ; the uppercase or lowercase
                                                           ; alphabet
Str2+Ans→Str2                                              ;add it to "Str2", the code
                                                           ; string
End
sub(Str2,2,length(Str2)-1→Str2                             ;remove the space added earlier
For(B,1,.1+3⁻¹length(Str2                                  ;loop over each 3-char substring
                                                           ; and skip any extra chars
                                                           ; (.1 is added to force one
                                                           ;  loop)
sub(Str2,3B-2,3→Str3                                       ;store said substring in "Ans"
1+sum({4,2,1}seq(0≠inString(Str4,sub(Str3,X,1)),X,1,3→L₁(B ;convert to the respective
                                                           ; index in "><[]-+.,"
                                                           ; (1-indexed)
End
For(C,1,.1+dim(L₁                                          ;loop over each index
                                                           ; (.1 is added to force one
                                                           ;  loop)
Str6+sub("><[]-+.,",L₁(C),1→Str6                           ;add the char to the translation
                                                           ; string
End
sub(Str6,2,length(Str6)-1→Str6                             ;remove the added space and
                                                           ; store the result in "Str6"
                                                           ; and "Ans"
                                                           ;implicit print of "Ans"

নোট:

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