জেতে গল্ফ করার টিপস


33

গল্ফস্ক্রিপ্ট অনেক সময় তার নিজস্ব উপায়ে পায় এবং আমি মনে করি যে জেতে গল্ফিংয়ের জন্য সহজ ইঙ্গিতগুলির একটি ভাণ্ডার মন্দ সাম্রাজ্যের বিরুদ্ধে লড়াইয়ে সহায়তা করতে পারে। ইতিমধ্যে এই ক্ষুদ্র ভাষা আরও সংক্ষিপ্ত করার জন্য আপনার কাছে কী টিপস রয়েছে?

জে শিখতে অনুপস্থিত তাদের জন্য সুস্পষ্ট জায়গা শুরু হয় jsoftware সাইট এবং বিশেষ করে শব্দভান্ডার , শিক্ষণ জে নির্দেশিকা এবং সি জন্য J প্রোগ্রামারদের গাইড।


1
GolfScript gets its own way far too often2019 সালে পড়ার বিষয়ে মজার কিছু আছে
অবান্তর স্ট্রিং

উত্তর:


14

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

  • আপনার যখন কোনও ট্রেন চলবে, ([:FLGR)এবং (LF@:GR)আপনার অন্য একটি পার্শ্বের উপরে একটি ফাংশন প্রয়োগ করতে হবে এবং একই সংখ্যক অক্ষর থাকতে হবে তবে একটি (LF@GR)সংরক্ষণ করে। জি এর ফ্রেম যদি এফ এর মনাদ র‌্যাঙ্কের চেয়ে বড় বা সমান হয় তবে এটি একটি বৈধ রূপান্তর। উল্লেখ্য, সব ট্রেন, অসীম রেঙ্ক হিসেবে , ,. ,: ~. /: \: [ ]এবং অধিকাংশ ব্যবহারসমূহ #এবং |.

  • যদি আপনাকে একটি তালিকা থেকে স্ট্রিং বাছাই করতে হয় এবং এই স্ট্রিংগুলির কোনও স্থান নেই, ব্যবহার করুন >i{ab`cd`ef। এটি নোংরা, তবে আপনি যে প্রতিটি নতুন স্ট্রিংয়ের সাথে ডিল করতে হবে সেগুলি অক্ষর সংরক্ষণ করে, যদি না আপনি কেবল একক অক্ষরগুলি টানছেন, এবং তারপরেও তালিকাটি সংক্ষিপ্ত হওয়ার জন্য দৈর্ঘ্য 4 হতে হবে। কী হচ্ছে তা হ'ল অপরিজ্ঞাত নামগুলিকে ক্রিয়াগুলির উল্লেখ হিসাবে বিবেচনা করা হয় এবং আপনি যখন এই ক্রিয়াগুলির সংক্ষিপ্তসারগুলি গ্রহণ করেন আপনি নামের একটি বাক্সযুক্ত স্ট্রিং পাবেন। প্রকার নাম, অ্যাডভারব বা সংমিশ্রণ হিসাবে ইতিমধ্যে সংজ্ঞায়িত কোনও নাম এই ফ্যাশনে ব্যবহার করা যাবে না, কারণ নামগুলি আগেই সমাধান হয়ে `যায় them

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

  • এর মত সংমিশ্রণগুলি আবারও (FGH)^:(u`v`w)লেখা যায় u`v`w(FGH^:)। এটি কোনও ট্রেনের দৈর্ঘ্যের জন্য এমনকি 1 টির জন্যও কাজ করে, যদিও আপনি কেবলমাত্র কিছু সংরক্ষণ করেন যদি এই কৌশলটি সঠিক যুক্তি থেকে পেরেনগুলি সরিয়ে দেয়। আপনি যখন বাম অপারেণ্ডটি প্রিললোড করেন তখনই এই কৌশলটি কাজ করে। (ঠিক কী ঘটেছে সে সম্পর্কে কোনও ধারণা নেই? 'স্বীকৃত অ্যাডওয়্যারস' দেখুন এবং জে অভিধানের পার্সিং এবং এক্সিকিউশন বিভাগ অধ্যয়ন করুন ))

  • ব্যবহার করবেন না a.&i., ব্যবহার করুন u:! {&a.এবং 3&u:দৈর্ঘ্যের সমতুল্য, যদিও পূর্বেরটি একযোগে আরও কার্যকর হতে পারে (সংযুক্তির উপর নির্ভর করে)।

  • জিনিসগুলির মতো (2%~F)এবং (F%2:)দৈর্ঘ্যের সমতুল্য। এটি দরকারী কারণ আপনার ট্রেনের বাকী অংশগুলি কী দেখতে লাগে তার উপর নির্ভর করে আপনি এটিকে পুনর্গঠন করতে পারেন@ কিছু হতাশ অক্ষরগুলি সংরক্ষণ করতে প্রথম বিন্দুতে লেখা কৌশলগুলি । (এবং অবশ্যই, যদি Fহয় ]এবং ট্রেনটি একটি মনাদ হয়, ব্যবহার %&2করে একটি চর সংরক্ষণ করে , দুহ h)

  • সঙ্গে হুক মত ট্রেন ] বা [বামদিকের ক্রিয়া, যেমন যেমন (]FGH)

    • ]আপনাকে একটি ডায়ডিক অ্যাপ্লিকেশন ছিন্ন করতে এবং কেবল সঠিক যুক্তি ব্যবহার করতে দেয়। ( (]FGH)~কমপক্ষে 1 টি চরিত্রের দণ্ডে আরও (FGH)@]কিছুটা বামে সোয়েপ করা যেতে পারে , সম্ভবত আরও বেশি a) একটি চার্জ ওভার সাশ্রয় করে এবং প্রযোজনায় খুব কার্যকর!
    • [মোড়ক দিয়ে প্রয়োগ করা একটি হুক আপনাকে ডান পাশের পার্শ্ব প্রতিক্রিয়াগুলির জন্য কিছু করার অনুমতি দেয়, তারপরে আবার যুক্তিটি ফিরিয়ে দিন। সর্বাধিক সাধারণ ব্যবহার হয়1!:2 সম্ভবত ফর্ম্যাটিং জাঙ্কের সাথে।
  • আমি / হে স্তন্যপান। আপনি যা কিছু করতে পারেন তা থেকে লুপ তৈরি করে প্রক্রিয়াটি গতি বাড়ান। 1!:1র‌্যাঙ্ক রয়েছে 0এবং উভয়ের উভয়ই 1!:2 3র‌্যাঙ্ক রয়েছে _ 0, উদাহরণস্বরূপ, 1s এর অ্যারে তৈরি করে এটিকে ব্যবহার করুন এবং 1!:1সরাসরি তাদের উপর চালান । নোট করুন যে ".এছাড়াও 1 পদ আছে, তাই আপনি সাধারণত সরাসরি পরে এটি রাখতে পারেন1!:1 পারেন এবং শেননিগানের মাধ্যমে এটি সংযুক্ত করতে হবে না @

  • এটি স্থাপনের জন্য জায়গাগুলি খুঁজে পাওয়া সহজ নয় তবে ::এটি কার্যকর হতে পারে।

    • ::]^:_একটি বিশেষত শক্তিশালী সমন্বয়, উদাহরণস্বরূপ, এটি আপনাকে বিপজ্জনক কিছু করতে দেয় যতক্ষণ না আপনি এটি আর না করতে পারেন। (স্বাভাবিকের সাপেক্ষে^:_ -এ-এ-লুপ ক্যাভেটের ))

    • এটি আপনাকে {এমন তালিকাতেও ব্যবহার করতে দেয় যা পছন্দসই সূচী নেই, কারণ যখন এটি ঘটে তখন একটি ডোমেন ত্রুটি নিক্ষেপ করে। উদাহরণস্বরূপ, যদি তালিকার উপস্থিত থাকে তবে কেবলমাত্র মাথাটি নেওয়ার জন্য দরকারী ( ::]খালি তালিকাটি ফেরত দেওয়ার ::_1:জন্য , বা ত্রুটি কোডটি ফেরত দেওয়ার চেষ্টা করুন ইত্যাদি)।

  • ]`($:@u)@.vসাধারণত সংক্ষিপ্ততর করা যায় u^:v^:_, বিশেষত সংজ্ঞা অনুসারে uএবং এর vসাথেও খেলা যায় played শর্তসাপেক্ষ মতো u^:(1-v)বনামের ক্ষেত্রেও একইরকম একটি মামলা রয়েছে ]`u@.v। আপনার বিকল্পগুলি বিবেচনা করুন, বিশেষত যখন আপনার প্রচুর নামকরণ ক্রিয়াগুলি ভাসমান। এটি আরও কিছুটা নমনীয়, তবে মনে রাখবেন, যদি এটি ব্যবহার করা হয় $:তবে এমন একটি পুনরাবৃত্তির গভীরতা রয়েছে যার বিরুদ্ধে লড়াই করা সহজ। (সাধারণত 1800 পুনরাবৃত্তির মতো কিছু?)


প্রতিকূল কৌশলটি সত্যিই দুর্দান্ত।
FUZxxl

"কিছু হতাশ চরিত্রগুলি সংরক্ষণ করুন" আপনি যখন লিট অধ্যয়ন করছেন, তখন সবকিছু স্থানান্তরিত এপিথের মতো লাগে! :)
সোহম চৌধুরী

1
"ব্যবহার %&2করে একটি চর সংরক্ষণ করা হয়, দুহ"। আর -:অন্যকে বাঁচায়!
লিন

11

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

উদাহরণস্বরূপ, সাম্প্রতিকতম একটি চ্যালেঞ্জ বৃহত্তম বৃহত্তম সুব্রায় সমস্যা সমাধান করতে বলেছে এই সমস্যাটি সমাধান করার জন্য স্টক অ্যালগরিদম কাদেনের অ্যালগরিদমে নিম্নলিখিত অনানুষ্ঠানিক বিবরণ রয়েছে:

অ্যারের মধ্য দিয়ে এবং প্রতিটি অবস্থানে যান এবং এখানে সর্বাধিক সুব্রেরির সমষ্টিটি সন্ধান করুন, যা বর্তমান সূচকের সর্বাধিক 0 বা মান এবং পূর্ববর্তী অবস্থানে শেষ হওয়া বৃহত্তম সুবরেয়ের সমষ্টি। আপনি পুরো অ্যারে বৃহত্তম subarray সন্ধান করতে যেতে এই subarrays সর্বাধিক গণনা।

আবশ্যক কোডে একটি অনুবাদ সোজা:

  1. A কে ইনপুট অ্যারে হতে দিন।
  2. hmi ← 0।
  3. যদি আমি ≥ লেন (ক) আগমন মি
  4. এইচ ← সর্বোচ্চ (0, এইচ + এ [ i ]))
  5. মি ← সর্বোচ্চ ( মি , এইচ )
  6. ii + 1।
  7. গোটো 3।

এই অ্যালগরিদমগুলি এক নজরে জে এর জন্য জটিল বলে মনে হচ্ছে কারণ একটি স্পষ্ট লুপ রয়েছে যা প্রথমে হ্রাসের মতো দেখায় না। আপনি যদি বুঝতে পারেন যে অ্যালগরিদম কী করছে আপনি পৃথক পদক্ষেপগুলিকে আনুগত্য করতে পারেন এবং দেখতে পারেন যে এটি দুটি সাধারণ অ্যারে ক্রিয়াকলাপটি সম্পাদন করে:

  1. স্ক্যানপ্রতিটি সূচকে শেষ হওয়া বৃহত্তম সাববারেগুলির দৈর্ঘ্য গণনা করতে অ্যারের মাধ্যমে ।
  2. হ্রাস করাসর্বাধিক সন্ধান করতে সর্বাধিক ক্রিয়া সহ এই দৈর্ঘ্য ।

এখন এই দুটি পদক্ষেপ জেতে প্রয়োগ করা খুব সহজ Here এখানে একটি অনুবাদ:

  1. (0 >. +)/\. y , 0- এই পদক্ষেপটি জে'র দৃষ্টান্তকে আরও ভালভাবে ফিট করতে অ্যারের অন্য প্রান্ত থেকে কাজ করে। 0 >. +জন্য স্বচ্ছন্দ 0 >. x + y
  2. >./ y

একসাথে রাখুন, আমরা অ্যালগরিদমের খুব সংক্ষিপ্ত বাস্তবায়ন পাই:

>./ (0 >. +)/\. y , 0

আপনি যদি অ্যালগরিদমের বাস্তবায়নের কাছে এই পদ্ধতিটি শিখেন তবে আপনার সমাধানগুলি এই কোডের মতোই ক্ষয়িষ্ণু হবে।

সময়ের সাথে সাথে আমি জড়িত কিছু কৌশল এখানে রইল। জে গল্ফিংয়ের আরও জ্ঞান পাওয়ায় এই তালিকাটি প্রসারিত হবে।

  • অভিধান শিখুন। এটিতে অনেকগুলি অস্পষ্ট ক্রিয়া রয়েছে যা আপনি যতক্ষণ না দেখেন যে সেগুলি কতটা কার্যকর। উদাহরণস্বরূপ, মোনাডিক =প্রথমে অদ্ভুত তবে এটি ASCII শিল্প চ্যালেঞ্জগুলিতে খুব কার্যকর।
  • &আপনি যখন বিদ্যুত সংমিশ্রণ চান তখন সূক্ষ্ম প্রসঙ্গে ডায়াডিক ব্যবহার করুন । শব্দভান্ডারটি u@[&0হ'ল সংশোধন প্রতিস্থাপন হিসাবে পরামর্শ দেয় 4 : 'u^:x yএবং আমিও করি।
  • অনেক ক্ষেত্রে আপনি একটি [:বা বাম আর্গুমেন্টের বৈকল্প নির্বাচন করে @:যেমন একটি ক্রম এড়াতে পারেন । উদাহরণস্বরূপ, ফলাফলের প্রথম আইটেমটি ফেলে দেওয়ার জন্য কোনও কারণে সম্ভব না হলে তার পরিবর্তে ব্যবহার করুন ।u@vuv1}.v[:}.v}.@v
  • ] vআপনি একটি dyadic প্রসঙ্গে v@]monadic ব্যবহার করতে চান তার চেয়ে প্রায়শই খাটো হয় v। এটি কার্যকর হয় বিশেষত যখন vক্রিয়াপদের একটি দীর্ঘ ট্রেন।
  • কখনও কখনও আপনি m (n v w) yপরিবর্তে লিখতে পারেন (n v m&w) y। এটি স্পেস এবং প্রথম বন্ধনী এড়ানো সম্ভব করে তুলতে পারে।
  • #\পরিবর্তে >:@i.@#
  • u &. v যখন দরকারী vএকটি বিপরীত আছে । যখন না, আপনি ব্যবহার করতে পারেন[: vinv u & v বা u & (v :. vinv)তার পরিবর্তে ।
  • র‌্যাঙ্ক এবং এটি কীভাবে ব্যবহার করবেন তা বুঝুন। আপনার উপযুক্ত কিছু না পাওয়া পর্যন্ত র‌্যাঙ্কের সংমিশ্রণটি নিয়ে বেড়াতে চেষ্টা করুন। এটি কীভাবে আপনার কোডকে প্রভাবিত করে তা বুঝতে সহায়তা করে।
  • ^:_ অ্যালগরিদমগুলির জন্য অত্যন্ত কার্যকর যেখানে আপনি বন্যা-পূরণ বা সিমুলেশনের মতো আপনি কনভার্সনে পৌঁছাতে চান।
  • আপনার স্ট্যান্ডার্ড লাইব্রেরি জানুন। এটিতে খুব কার্যকর ফাংশন রয়েছে যা আপনাকে প্রচুর পরিমাণে অক্ষর সাশ্রয় করে।
  • কপুলি =.এবং=: একটি বাক্যাংশে যে কোনও জায়গায় এম্বেড করা যেতে পারে। ওয়ান-লাইনার তৈরি করতে এটি ব্যবহার করুন যেখানে সারণী স্বরলিপি যথেষ্ট নয়।
  • Monadic ব্যবহার করুন ,বহুমাত্রিক অ্যারেগুলি হ্রাস করার সময় একাধিক হ্রাসের পরিবর্তে ।
  • যখন চ্যালেঞ্জ রানটাইম সীমানা আরোপ করে তখন বিশেষ কোড দ্বারা কোন বাক্যাংশগুলি সমর্থন করে তা বুঝুন। কিছু দরকারী জিনিস ও ( এন 2 ) এর পরিবর্তে ও ( এন ) এ পরিচালনা করে ) পাল্টা intuitively,।
  • বাক্স গাছ জন্য দরকারী।

জে পুনরায় ব্যবহৃত ব্যবহৃত গণনাগুলি ক্যাচ করে ও (এন) এ আপনার সর্বোচ্চ সুব্রয় সমাধান চালানোর পক্ষে যথেষ্ট স্মার্ট, বা এটি সরল কাজটি করে ও (ওন (এন ^ 2) এ চালাবে?
জোনা

@ জোনাঃ আমি মনে করি এটি চতুর্ভুজ সময়ে চলবে।
FUZxxl

10

লুপগুলি ব্যবহার সম্পর্কে সতর্ক থাকুন।

জে স্ট্রাকচার (লুপিং হলেও for. do. end., while. do. end.ও বৈচিত্রতা), আপনি তাদের ব্যবহার নিজেকে খুঁজে পান, তাহলে যে একটি সম্ভাবনা আছে আপনার অ্যালগরিদম জে এর golfing শক্তি প্রয়োজন এবং যে চরিত্র সঞ্চয়ী তৈরি করা হয় না খেলে হয়।

^:শক্তি সংমিশ্রণ আপনার বন্ধু। একটি ক্রিয়াবার সম্পাদন করতে x:

verb^:x

যদি আপনার তালিকার প্রতিটি পুনরাবৃত্তির ফলাফলের প্রয়োজন হয়:

verb^:(i.x)

আপনি ^:শর্তসাপেক্ষে একটি ক্রিয়াটি কার্যকর করতেও ব্যবহার করতে পারেন :

  +:^:(3<])"0[ 1 2 3 4 5 6
1 2 3 8 10 12

আইটেমটি 3 এর চেয়ে বেশি +:হলে দ্বিগুণ ( ক্রিয়াপদের র‌্যাঙ্ক পরিবর্তন করে তাই এটি একবারে কোনও আইটেম কাজ করে)।^:3<]"0


বক্সযুক্ত মানগুলি (i.x)উদাহরণের মতো কাজ করে , যেমন f^:(<x)এর সমতুল্য f^:(i.x)
ফায়ারফ্লাই

9

ইনপুট

1!:1[1 এন্টার কী টিপে শেষ হওয়া ইনপুটটির এক লাইন নেবে।

1!:1[3 বেশ কয়েকটি লাইন ইনপুট নেবে (উইন্ডোজের সিআরটিএল-সি আমার ম্যাকের সিআরটিএল-ডি দ্বারা সমাপ্ত)।

আপনি যদি সংখ্যাগুলি ইনপুট করার চেষ্টা করছেন, ব্যবহার ".করে স্ট্রিংটি মূল্যায়ন করবে এবং ম্যানিপুলেট করার জন্য প্রস্তুত সংখ্যার একটি তালিকা ফিরিয়ে দেবে। যদি আপনি একটি নম্বর নিচ্ছেন তবে স্বতন্ত্রভাবে অঙ্কগুলিতে পরিচালনা করতে হবে, ".,.(এর জন্য জান ডভোরাকের মন্তব্যে ধন্যবাদ) বা "."0স্ট্রিংটিকে পৃথক অঙ্কে বিভক্ত করবেন:

   "."0[1!:1[1
12345
1 2 3 4 5

   ".,.1!:1[1
12345
1 2 3 4 5

আপনি যদি স্ট্রিংগুলিতে পড়ছেন তবে পৃথক স্ট্রিংগুলির একটি বক্সযুক্ত তালিকা পাওয়ার সবচেয়ে সংক্ষিপ্ততম উপায়টি হ'ল ব্যবহার করা ;:। এটি স্থান বিচ্ছিন্ন স্ট্রিংয়ের জন্য সবচেয়ে ভাল কাজ করে:

   ;:1!:1[1
hello world
┌─────┬─────┐
│hello│world│
└─────┴─────┘

কৌতূহলের বাইরে, (আমি কেবল জেদের সাথে কিছুটা খেলেছি) কী হবে 1!:1[2(যদি কিছু হয়)?
গাফি

1!:পৃষ্ঠায় আমি কী জড়ো করতে পারি (আমি কোনও জে বিশেষজ্ঞ নই) 2 এর স্ক্রিন, সুতরাং পর্দা থেকে ইনপুটটি কোনও তাত্পর্যপূর্ণ নয়।
গ্যারেথ

লিঙ্কের জন্য ধন্যবাদ। সেখান থেকে, দেখে মনে হচ্ছে 2এটি বৈধ নয়? এই মুহুর্তে এটি চেষ্টা করার জন্য আমার কাছে আমার জে কম্পিউটার নেই। আমি যেখানে দেখতে পাচ্ছি 2, কেবলমাত্র নোটগুলির নীচে 1!:1, এটির জন্য 1!:2
গাফি

@ গাফি ইনপুট এবং আউটপুট ফাইলগুলির ফাইলগুলি অনুক্রমিক বলে মনে হচ্ছে, সুতরাং আমি অনুমান করছি যে সেগুলি স্থির হয়ে গেছে এবং 2, 4 এবং 5 কেবলমাত্র আউটপুটের অধীনে প্রদর্শিত হবে কারণ এগুলি থেকে তাদের চেষ্টা করার এবং ইনপুট দেওয়ার কোনও ধারণা নেই। 1 এবং 3 এর জন্য একই পথে চলে যায়
গ্যারেথ

যেহেতু ".র‌্যাঙ্ক 1-এক্সএক্স এবং ,.সর্বদা 2 ডি অ্যারে তৈরি করে, ".,' ',.(স্থানের সাথে সেলাই, রেভাল এবং মূল্যায়ন; 8 টি অক্ষর) কেবলমাত্র ".,.(রেভাল আইটেমগুলি এবং মূল্যায়ন; 4 টি অক্ষর) দিয়ে প্রতিস্থাপন করা যেতে পারে ।
জন ডিভোরাক

6

ক্রমগুলি গণনা করতে পুনরাবৃত্তি ব্যবহার করে

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

(s(]f)^:[~]) n
          ]  Gets n
 s           The first value in the sequence
         ~   Commute the argument order, n is LHS and s is RHS
        [    Gets n
      ^:     Nest n times with an initial argument s
  (]f)         Compute f s
             Returns (f^n) s

sঅনুক্রমের প্রথম মানটি কোথায় , fএটি একটি ক্রিয়া যা পূর্ববর্তী পদটি দেওয়া পরবর্তী পদটি গণনা করবে, এবং nআপনি যে শব্দটি গুণতে চান তার শূন্য-ভিত্তিক সূচক। এই পদ্ধতিটি এই সত্যের উপর নির্ভর করে যে কোনও ডায়াডের শক্তি গণনা করার সময়, এলএইচএস একটি নতুন মোনাড গঠনের জন্য ডায়াডের সাথে আবদ্ধ হয় এবং সেই মানদ প্রাথমিক মান অনুসারে বাসা বেঁধে থাকে। পাওয়ার অ্যাডওয়্যার্বকে দেওয়া ডায়াড হুক হয় যেখানে এলএইচএসে (]f)সূচক nএবং অনুক্রমের একটি শর্তের মান দেওয়া হয় s। হুকটি একটি মোনাড হিসাবে প্রয়োগ fকরা হবে s, এবং তারপরে nফলাফলটি ফিরে আসতে অগ্রাহ্য করবে f s

স্ট্যান্ডার্ড লাইব্রেরি

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

AND =: (17 b.) NB. it is actually '$:/ :(17 b.)'

তারিখ এবং সময় অন্তর্নির্মিত উপলব্ধ।

রেঞ্জ

আপনার যদি মানগুলির একটি সেট থাকে [a, b, c]এবং আপনি যদি তাদের পণ্যগুলির উপর ভিত্তি করে একটি পরিসীমা তৈরি করতে চান [0, 1, 2, ..., a*b*c-1], তবে সাধারণ পণ্যটি তাদের পণ্যটি সন্ধান করতে হবে এবং তারপরে এমন একটি পরিসীমা তৈরি করবে [:i.*/যার দাম 6 বাইট হতে পারে । একটি সংক্ষিপ্ত উপায় ,@i.4 বাইটের জন্য যেহেতু i.এখনও গণনা করার সময় বহুমাত্রিক অ্যারে গঠন করতে পারে, এবং এটি সমতলকরণের সমতুল্য পরিসীমা তৈরি করবে।

ধারাবাহিকভাবে মুদ্রণ করা হচ্ছে

স্পষ্ট লুপ ব্যতীত কোনও মান মুদ্রণ এবং এটি ব্যবহার অবিরত করার একটি স্বতন্ত্র উপায় হ'ল ([echo)এক একজাতীয় ক্ষেত্রে। echoস্ট্যান্ডার্ড লাইব্রেরিতে এমন একটি ক্রিয়া যা দোভাষীতে stdoutব্যবহৃত একই বিন্যাসে এর বিষয়বস্তু মুদ্রণ করে । হুক তারপর বাম [ক্রিয়া ব্যবহার করে একই ইনপুট মানটি পাস করে ।

একটি পূর্ণসংখ্যার 10 সংখ্যা

একটি পূর্ণসংখ্যার বেস 10 ডিজিট অর্জন করার স্ট্যান্ডার্ড উপায়টি হ'ল 10#.inv]8 বাইটের দাম খুব বেশি! বিকল্পটি হ'ল এটিকে একটি স্ট্রিংয়ে রূপান্তর করা এবং এটি 0 র‌্যাঙ্কে পার্স করা "."0@":যা বাইট সংরক্ষণ করে, তবে এর চেয়েও ভাল উপায় হ'ল ,.&.":8 এর পরিবর্তে চূড়ান্ত ব্যয়টি 6 বাইট তৈরির আরেকটি বাইট সংরক্ষণ করে।


5

সুস্পষ্ট সংজ্ঞা ব্যবহার বিবেচনা করুন ক্রিয়া লেখার পরিবর্তে ; নিশ্চিত 3 :'এবং '5 বাইট খরচ, কিন্তু আপনি অনেক সঞ্চয় করতে পারেন @, @:এবং [:যে ভাবে।


5

কিছু (মোটামুটি) প্রচলিত কৌশল আমি দেখেছি

আমি আমার জন্য কার্যকর কিছু জিনিস ভাগ করছি। মূলত এগুলি হ'ল টিপস আমি নিজেই পেয়েছি তবে বেশিরভাগ ক্ষেত্রে আমার কাছে ক্রেডিট নেই।

একটি র‌্যাঙ্ক ওয়ান অ্যারের যোগফল

পরিবর্তে ব্যবহার +/@:(FGH)ব্যবহার করুন (1#.FGH)। এর অর্থ বেস 1-এ দেবাজেস, যার অর্থ কার্যকরভাবে একটি অ্যারের যোগফল। যদিও এটি এর চেয়ে দীর্ঘতর +/, এর জন্য কোনও ক্যাপ বা সংমিশ্রণের প্রয়োজন হয় না, যা প্রায়শই এটি ব্যবহারের চেয়ে অনেক ছোট করে তোলে +/

চলমান সত্য গণনা

আপনার যদি বুলিয়ান তালিকা থাকে এবং আপনি চলমান সত্যের সংখ্যা গণনা করতে চান তবে ব্যবহার করুন #.~এখানে দেখুন । দ্যAPL উত্তর কীভাবে কাজ করে তার জন্য একটি ভাল ব্যাখ্যা সরবরাহ করে। মঞ্জুর, এটি কেবলমাত্র আমার জন্য দুবার সহায়ক হয়েছে তবে আমি বুঝতে পেরেছি যেভাবেই এটি ভাগ করে নিতে পারি।

এর অধীনে (এবং।)

নির্দিষ্ট কৌশল নয়, কেবল একটি সাধারণ পরামর্শ: বিশেষণ &. বিশেষণটি প্রায়শই মার্জিত এবং (আরও গুরুত্বপূর্ণভাবে) সংক্ষিপ্ত সমাধানগুলিতে নিয়ে যায়। আপনি যখন গল্ফ করছেন তখন এটি মনে রাখবেন।

প্রায়শই বার এটি এবং অন্যান্য বেস রূপান্তর চ্যালেঞ্জগুলির জন্য দরকারী , উদাহরণস্বরূপ এই কোড যা একটি সংখ্যা থেকে সর্বাধিক উল্লেখযোগ্য বিট সরিয়ে দেয়: }.&.#:(বাইনারি অঙ্কের তালিকায় রূপান্তর করুন, প্রথম সংখ্যাটি সরিয়ে ফেলুন, তারপরে বাইনারি সংখ্যার তালিকায় রূপান্তরটি পূর্বাবস্থায় ফিরুন এবং রূপান্তর করুন দশমিক ফিরে) সোজা সমাধানটি আরও দুটি বাইট:#.@}.@#:

আন্ডার হ'ল চ্যালেঞ্জগুলির জন্যও আপনাকে সহায়ক যেখানে আপনি দশমিক সংখ্যা নিয়ে কাজ করতে পারেন, যেহেতু আপনি ব্যবহার করতে পারেন u&.":। উদাহরণ হিসেবে বলা যায়, সংক্ষিপ্ত পথ মাইল অধীনে দশমিক সংখ্যা ব্যবহারের বিভক্ত করতে দেয়: ,.&.":

একটি চূড়ান্ত উদাহরণ একটি ভেক্টরের তাত্পর্য খুঁজে পাওয়া: এটি +/&.:*:নোট করুন যে আপনাকে *:-সকোয়ার-এর সাথে- ফলাফল থেকে সমস্ত ফলাফল সংগ্রহ করতে হবে &.:যেহেতু- *:স্কয়ার শূন্য শূন্য।


4

র‌্যাঙ্কগুলির সাথে ঝামেলা করার ছোট উপায় ways

কখনও কখনও, আপনার কোডের মতো কোড থাকে <"0 i.3 3, যেখানে আপনি vর‌্যাঙ্কে একটি ক্রিয়া প্রয়োগ করতে চান r। তবে, আপনি যদি একটি বিশেষ্য (পছন্দ 0) ব্যবহার করেন তবে আপনাকে প্রায়শই একটি স্থান অন্তর্ভুক্ত করতে হবে। এটি এড়াতে আপনি uসমপরিমাণ র‌্যাঙ্কের আর একটি ক্রিয়া ব্যবহার করতে পারেন এবং u"vপরিবর্তে ব্যবহার করতে পারেন । উদাহরণস্বরূপ, যেহেতু +র‌্যাঙ্ক রয়েছে0 0 0 , আমরা এর <"+পরিবর্তে ব্যবহার করতে পারি <"0

এখানে সমস্ত ক্রিয়া এবং তাদের র‌্যাঙ্কগুলির একটি টেবিল রয়েছে (ব্যবহার করে প্রাপ্ত v b. 0 ))

0 0 0     > + * - % ^ | ! ? <. <: >. >: +. +: *. *: %: ^. j. o. q: r.
0 _ _     -. -: E. i: p:
1 0 1     p..
1 0 _     { A.
1 1 0     p.
1 1 1     #.
1 1 _     C.
1 _ _     ;: ". i. I.
2 _ 2     %.
_ 0 0     = < ~. ~: {: }: ?. L.
_ 1 0     #:
_ 1 _     $ # |. |: {. }. ": {::
_ _ _     , ; [ ] _: $. $: ,. ,: /: \: [: e. s: u: x: 0:

এই টেবিলটি ব্যবহার করতে, rবাম হাতের দিকে পছন্দসই র‌্যাঙ্কটি সন্ধান করুন, তারপরে vডান হাত থেকে একটি উপযুক্ত ক্রিয়াটি চয়ন করুন । উদাহরণস্বরূপ, যদি আমার vগভীরতার সাথে কোনও ক্রিয়াটি ভেক্টরাইজ করা দরকার হয় 2 _ 2তবে আমি বাম দিকে সেই পদটি খুঁজে পাই এবং %.ডান থেকে বেছে নিই choose তারপরে আমি এর v"%.পরিবর্তে ব্যবহার করি v"2 _ 2


3

strings গ্রন্থাগার: গল্ফিং টিপস

স্ট্রিং লাইব্রেরি স্ট্রিং ম্যানিপুলেশন সহ যেকোন কিছু করার পক্ষে যথেষ্ট সহায়ক। অবশ্যই, এটি লাগে include'strings'(যা খুব ব্যয়বহুল, জে কে বিবেচনা করে), তবে আপনি মাঝে মাঝে সুবিধাগুলি কাটাতে পারেন।

stringreplace

স্ট্রিং প্রতিস্থাপন ব্যবহার করে নিজেকে সন্ধান করবেন? A stringreplace Bএকই হিসাবে পর্যবেক্ষণ করুনB rplc A

আসলে, এইভাবেই rplcএটি প্রয়োগ করা হয়:

   rplc
 stringreplace~

cuts

ক্রিয়াটি cutsএইভাবে সরবরাহ করে:

এক্স কেটে Y কেটে (একত্রিত করে)
স্ট্রিং (ক্রিয়া কাট n) পাঠ্য
  n = _1 পর্যন্ত তবে স্ট্রিং সহ নয়
  এন = 1 পর্যন্ত এবং স্ট্রিং সহ
  n = _2 এর পরে কিন্তু স্ট্রিং সহ নয়
  n = 2 পরে এবং স্ট্রিং সহ

সুতরাং এটি সত্যিই একটি স্ট্রিং কাটা।


3

0 থেকে 4 নম্বর প্রাপ্তি

যদি আপনার কোডটিতে নম্বর ব্যবহারে কোনও বিধিনিষেধ থাকে:

0 %_ : অনন্ত দ্বারা বিভক্ত এক।
1 #_ : কয়টি অসম্পূর্ণতা?
2 #_ _ : দুটি অসম্পূর্ণতা
3 verb : একটি অন্তর্নির্মিত আছে।
4 dyad : অন্য অন্তর্নির্মিত।

10 থেকে 35 পর্যন্ত নম্বর পাওয়া

বেজ-inifinity লিটারেল: 11 : _bb, 26 : _bqইত্যাদি


3

ট্যাসিট প্রোগ্রামিং

বুনিয়াদি

ডায়াডিক ক্রিয়া

x (F G H) y == (x F y) G (x H y)
x (F G) y == x F (G y)
x ([: G H) y == G (x H y)  NB. G is called monadically

NB. Verbs are grouped from the right by units of 3.
NB. For the following, think like G, I, K are replaced by the results of (x G y) etc.
NB. and then the sentence is run as usual.
x (F G H I J K) y == x (F (G H (I J K))) y
                  == x F ((x G y) H ((x I y) J (x K y)))

NB. Using conjunctions for dyadic verb
x F@G y == F (x G y)  NB. Atop; Same as x ([: F G) y; Consider as golfing alternatives
x F&G y == (G x) F (G y)  NB. Compose; G is applied monadically to both arguments

মোনাডিক ক্রিয়া

(F G H) y == (F y) G (H y)
(G H) y == y G (H y)  NB. Note that this is different from APL
([: G H) y == G (H y)
(F G H I J K) y == (F (G H (I J K))) y
                == y F ((G y) H ((I y) J (K y)))
F@G y == F (G y)

বিবিধ

x&F y == x F y
F&y x == x F y
y F~ x == x F y
F~ y == y F y

ঠাট

(F x) G (H y)

মৌন সমাধান: (G~F)~H; আসল ক্রিয়াগুলির উপর নির্ভর করে অপসারণের জন্য বাম এবং ডান যুক্তি পুনরায় সাজানো বিবেচনা করুন~

x ((G~F)~H) y
x (G~F)~ (H y)
(H y) (G~F) x
(H y) G~ (F x)
(F x) G (H y)

মোনাডিক-ডায়াডিক প্রতিস্থাপন

>:y == 1+y
<:y == 1-~y or _1+y
+:y == 2*y
-.y == 1-y
-:y == 2%~y
*:y == 2^~y
#.y == 2#.y
#.inv y == 2#.inv y  NB. #: doesn't work this way
{.y == 0{y
{:y == _1{y
}.y == 1}.y
+/y == 1#.y

1
(G~F)~Hখাঁটি বুদবুদ মঙ্গল!
জোনা

2

& আপনার বন্ধু, এটি বুদ্ধিমানের সাথে ব্যবহার করুন

vএকটি ক্রিয়াপদ, nএকটি বিশেষ্য, xএবংy যথাক্রমে বাম এবং ডান যুক্তি হয়।

মোনাড &: পরিচয় করিয়ে দিন~ অ্যাডভারব / সম্মিলন শৃঙ্খলের অভ্যন্তরে

একটি বিশেষণ / সংমিশ্রণ বাম থেকে মূল্যায়ন করে। কিছু সুতরাং _2&+/\&.>কাজ করবে না কেননা এটা পছন্দ parses (_2&+)/\&.>আমরা চাই যখন _2&(+/\)&.>। এই ক্ষেত্রে, বাম / ডানদিকে অদলবদল করা +/\একটি বাইট সংরক্ষণ করতে পারে, +/\~&_2&.>কারণ এটি একটিকে পার্স করে ((+/\)~)&_2&.>। এটি কেন কাজ করে তা দেখার জন্য:

+/\~&_2 y
is equivalent to
y +/\~ _2
is equivalent to
_2 +/\ y
is equivalent to
_2&(+/\) y

দ্বৈত & : একই পদ্ধতি পুনরাবৃত্তি করুন xবার

আপনি কি জানেন যে আপনি যদি কোনও বাম যুক্তি xদিয়ে থাকেন &তবে ফাংশনটি এটি xবারবার প্রয়োগ করেy ? বেশ কয়েকটি চ্যালেঞ্জ আপনাকে নির্দিষ্ট অপারেশন xসময় করতে বলে। এটি মূলত দুটি উপায়ে অর্জনযোগ্য:

  • পাওয়ার অপারেটর ব্যবহার করুন ^:ডান অপরেন্ড ছাড়াই

যদি অপারেশন হয় v, তবে v^:একটি ক্রিয়াপদ ট্রেন হয়ে যায়, যখন একটি বাম অপারেন্ড দেওয়া হয়, তখন একটি একাকী ক্রিয়া হয়। তাই , সময় vপ্রয়োগ করা হয় ।yx

x(v^:)y
is equivalent to
(v^:x)y
  • ডায়াডিক ব্যবহার করুন &বাহ্যিকতম সংমিশ্রণ হিসাবে

এটি ব্যবহার করার জন্য, আপনাকে একটি ধ্রুবক nএবং ডায়াডিক ক্রিয়া সনাক্ত করতে হবে u, যাতে হয়n u y বা y u nতার সমতুল্য v। তাহলে আপনি লিখতে পারেন n&uবাu&n পুরো টাস্কটি সমাধান । এই ফর্মটি সর্বাধিক কার্যকর হয় যখন ধ্রুবকের পছন্দটি সুস্পষ্ট হয়, উদাহরণস্বরূপ 3 ইন 3 u:(অক্ষরকে ASCII মানগুলিতে রূপান্তর করুন)।

এছাড়াও, u&nসামান্য ওভার পছন্দ করা হয়n&u যখন বাহ্যিকতম কাঠামোটি uএকটি সংযোগ বা ক্রিয়াবিজ্ঞান হয় তখন (কিছু ক্ষেত্রে যা n&uহওয়া উচিত n&(u); আপনি এটি করতে পারেনu~&n পরিবর্তে এটি ) ।

নোট করুন যে আপনি গতিশীলর &অনুরূপ অর্থে স্বেচ্ছাসেবী যুক্তিতে পুনরাবৃত্তি সালিশী ফাংশন অর্জন করতে ট্রায়াতে ডায়াডিককে যে কোনও জায়গায় রাখতে পারেন ^:

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