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


18

এখন আমি কোড গল্ফের পুরোপুরি আসক্ত হয়ে পড়েছি, সম্ভবত প্রায় সময়টিই আমি কয়েকটি গল্ফিং ভাষা বেছে নেওয়ার চেষ্টা করেছি।

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

যেহেতু আমি জাপট এবং সাধারণভাবে গল্ফিং ভাষাগুলির একটি শিক্ষানবিশ, আপনি যদি জাভাস্ক্রিপ্টে আপনার পরামর্শগুলি "অনুবাদ" করতে পারতেন, যেখানে সম্ভব হয় তবে জিনিসগুলির সাথে আঁকড়ে ধরতে আমাকে সহায়তা করার ক্ষেত্রে এটি একটি বড় সহায়তা হবে।


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

জপ চ্যাটরুমটি দেখতে ভুলবেন না :)
অলিভার

উত্তর:


11

জাভাস্ক্রিপ্ট থেকে জাপটে সরানো হচ্ছে

আপনি জানেন যে, জাপট জাভাস্ক্রিপ্টের কেবল একটি সংক্ষিপ্ত, প্রসারিত সংস্করণ। আমি জাপট তৈরি করেছি কারণ আমি দীর্ঘ সম্পত্তির নাম, যেমন String.fromCharCode(x)এবং Math.floor(x)এবং পরিসর তৈরির মতো কাজ করার ক্লান্তি দেখে ক্লান্ত হয়ে পড়েছিলাম । জাভাস্ক্রিপ্ট থেকে জাপতে যাওয়ার সময় আপনার সর্বনিম্ন জানতে হবে:

  • জাপট একটি পরিবহিত ভাষা; Japt কোড transpiled জাভাস্ক্রিপ্ট এবং তারপর জাতীয় হিসাবে চালানো। (আমি অনুমান করি আপনি সংকলিত বলতে পারেন , তবে স্থানান্তরিত আরও হিপস্টার শোনায়। দাবি অস্বীকার: আমি হিপস্টার হওয়া সম্পর্কে একেবারে কিছুই জানি না)
  • সমস্ত এন্ট্রি ডিফল্টরূপে সম্পূর্ণ প্রোগ্রাম। ইনপুট পরোক্ষভাবে পার্স করা হয়, এবং প্রথম ছয় ইনপুট ভেরিয়েবল পুরা হয় U, V, W, X, Y, এবং Z; সম্পূর্ণ অ্যারে সংরক্ষণ করা হয় N। শেষ প্রকাশের ফলাফলটি স্বয়ংক্রিয়ভাবে মুদ্রিত হয়।
  • সমস্ত বড় হাতের অক্ষরগুলি পরিবর্তনশীল, এবং স্থানান্তরিত হওয়ার সময় একই থাকে stay সর্বাধিক প্রিসেট মান, যা আপনি Japt ডক্সের "ভেরিয়েবল" বিভাগে (এ খুঁজে পেতে পারেন আছে অনুবাদক )।
  • সমস্ত ছোট হাতের অক্ষর হ'ল প্রোটোটাইপ ফাংশন বা পদ্ধতি । জাপট সংখ্যা, স্ট্রিং এবং অ্যারেগুলিতে a- z(এবং à- ÿ) পদ্ধতি যুক্ত করে । আপনি যখন এই বর্ণগুলির একটি ব্যবহার করেন, তখন জাপট ভরাট করে .এবং (; Ucজাপটে U.c(জাভাস্ক্রিপ্টের সমান , যার সিল, চারকোডএট বা কনক্যাট এর ধরণের উপর নির্ভর করে বোঝাতে পারে U। এখান থেকেই জাপানের বেশিরভাগ শক্তি আসে; আপনি (এ Japt ডক্সের "_____ ফাংশন" বিভাগে অধীনে এই পদ্ধতি সম্পূর্ণ তালিকা জানতে পারেন অনুবাদক )।
  • একটি স্থান প্রতিনিধিত্ব করে ), এবং )উপস্থাপন করে ))। এর কারণ এটি যখন আমি প্রথম জাপট ডিজাইন করেছি তখন আমি যথাসম্ভব অনেকগুলি বাইট সঞ্চয় করতে চেয়েছিলাম এবং এটিই আমি প্রথম এটি করার কথা ভেবেছিলাম। (যদিও আইএমএইচও এর Us w nচেয়ে আরও ভাল দেখাচ্ছে Us)w)n))
  • একটি ফাংশন হিসাবে চিহ্নিত করা হয় ABC{...}, যেখানে ABCভেরিয়েবলের যে কোনও স্ট্রিং হতে পারে। জেএস-এর মতোই বেশিরভাগ অংশে কাজ করে, শেষ পার্থক্যটি হ'ল মূল পার্থক্যটি স্বয়ংক্রিয়ভাবে ফিরে আসে (পরিবর্তে returnES6 বন্ধনী ব্যবহার করা বা অভিনব হওয়া)।
  • 'একটি একক চর স্ট্রিংকে বোঝায় (অর্থাত্ 'aএকই হিসাবে "a"), এবং #পরবর্তী চর-কোড নেয় এবং সেই সংখ্যায় পরিণত হয় ( #eএকই হিসাবে হয় 101)।
  • $প্রতিস্থাপন প্রক্রিয়া চলাকালীন ডলারের লক্ষণগুলির মধ্যে যে কোনও কিছুই একই থাকে। আপনি এটি forলুপগুলি প্রয়োগ করতে ব্যবহার করতে পারেন , উদাহরণস্বরূপ, যেহেতু জাপটে এগুলি নেই, তবে আমি অন্যান্য পদ্ধতি (যেমন mস্ট্রিং এবং অ্যারে বা oসংখ্যায়) ব্যবহার করার পরামর্শ দেব ।
  • সর্বাধিক অন্যান্য অক্ষর সাধারণভাবে জাতীয় ব্যবহৃত - "", 0-9, (, +, =, ইত্যাদি - একই যখন (যাহাই হউক না কেন অধিকাংশ অংশ জন্য,) transpiled থাকার।

এবং বেসিক জাপট কোডটি লিখতে আপনাকে কেবল এটি জানতে হবে। জাপটে সর্বাধিক গল্ফ শক্তি অর্জনে আরও জ্ঞানের প্রয়োজন, তবে এটি অন্যান্য উত্তরে পাওয়া যাবে।


এখানে একটি প্রাথমিক উদাহরণ। বলুন যে আপনি ASCII টি অক্ষরের একটি স্ট্রিং নিতে এবং প্রতিটিকে তার হেক্সাডেসিমাল চর কোডের সাথে প্রতিস্থাপন করতে চান। জাভাস্ক্রিপ্টে আপনি কীভাবে এটি করতে পারেন তা এখানে:

U.split("").map(x=>x.charCodeAt(0).toString(16)).join("")

এখন জাপটে রূপান্তর করতে। .split("")জেএস- q""এ জ্যাপের সমান , বা আরও ছোট, ঠিক q.join("")এছাড়াও ঠিক q, পার্থক্য হ'ল বস্তুটি একটি স্ট্রিংয়ের পরিবর্তে একটি অ্যারে। .map(হয় m, .charCodeAt(হয় cএবং .toString(হয় s। সুতরাং আমাদের জাপট কোডটি দেখতে পারে:

Uq mX{Xc0 s16} q 

জাপটে, যদিও, mঅ্যারেগুলিতে যেমন স্ট্রিং রয়েছে তেমন কাজ করে, তাই আমরা উভয়টি অপসারণ করতে পারি q:

UmX{Xc0 s16}

এটি অনলাইন পরীক্ষা! আপনি "জেএস ​​কোড" বাক্সে দেখতে পাচ্ছেন, এটি সরাসরি এখানে স্থানান্তর করে:

U.m(function(X){return X.c(0).s(16)})

আপনি জাপটের সাথে কাজ করতে শিখার সাথে সাথে আপনি জাভাস্ক্রিপ্ট থেকে পিছনে রূপান্তর করতে কম এবং কম মনোনিবেশ করবেন এবং জাপটে কোডটিকে নিজস্ব ভাষা হিসাবে কোড করতে সক্ষম হবেন। পুরোপুরি জাভাস্ক্রিপ্ট অংশটি ছাড়াই এখানে একটি ব্যাখ্যা রয়েছে:

UmX{Xc0 s16}
               // Implicit: U = input string
UmX{       }   // Take U, and replace each character X with the result of this function:
    Xc0        //   Take the char-code at index 0 in X (the first and only one).
        s16    //   Convert this to a hexadecimal string.
               // Implicit: output result of last expression

আরও একটি পদক্ষেপ দেখানো ভাল হতে পারে: ইউনিকোড শর্টকাট। এই ক্ষেত্রে, আমরা তাদের সাথে 2 বি সংরক্ষণ করব co এছাড়াও, আপনি যুক্ত করতে চাইবেন যে আপনি নির্দিষ্ট কিছু শেষে রেখে দিতে পারেন। এটি অন্য একটি বাইট সংরক্ষণ করতে পারে।
লুক

একটি দুর্দান্ত প্রাইমার, ধন্যবাদ, ETH। আমার মনে হয়, কয়েকটি সহজ চ্যালেঞ্জের জন্য আমাকে শুরু করার জন্য যথেষ্ট রয়েছে I
শেজি

এ পর্যন্ত README থেকে আমি কী সংগ্রহ করেছি তার সাথে এইটির সংমিশ্রণটি কি আমি সঠিক হতে পারি যে উপরের উদাহরণটি আরও ছোট করা যেতে পারে Um_c s16?
শেগি

অথবা, এখনো খাটো: ¡Xc s16?
শেগি

1
@ শেগি আপনি সঠিক! ম্যান, আপনি এটি দ্রুত খুঁজে পেয়েছেন ;-) আমি কিছু বেসিক জাপট গল্ফিং টিপস যুক্ত করব (ইউনিকোড শর্টকাট এবং এর মতো), সম্ভবত অন্যান্য উত্তর হিসাবে।
ETH প্রোডাকশনগুলি

8

স্ট্রিং অ্যারেগুলি সংকুচিত করছে

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

ভূমিকা

আপনার কোডে যদি স্ট্রিংগুলির একটি অ্যারে থাকে তবে এটি সংকোচন করার সবচেয়ে সুস্পষ্ট উপায় হ'ল পৃথকভাবে প্রতিটি স্ট্রিং চালানোOc । এই টিপটির উদ্দেশ্যে, আমরা অ্যারের সাথে কাজ করব ["lollipop","marshmallow","nougat","oreo"], যা প্রাথমিকভাবে 42 বাইটে ওজন। প্রতিটি স্ট্রিং চালানো Ocআমাদের দেয়:

[`lo¥ipop`,`Ú\hÚaow`,`Í`,`eo`]

এটি এখন 33 বাইট, একটি ভাল সঞ্চয়।


ধাপ 1

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

`lo¥ipop
Ú\hÚaow
Í
eo`·

এখন 26 বাইট নিচে।


ধাপ ২

তবে , আমরা আরও ভাল করতে পারি! আমরা একটি নতুন লাইনের পরিবর্তে স্ট্রিংগুলি সীমিত করতে একটি ছোট হাতের অক্ষর ব্যবহার করতে পারি, যা সংকোচনে অন্তর্ভুক্ত হতে পারে। zআমাদের কোনও স্ট্রিং ব্যবহার করা হয়নি তাই আসুন এটি বাদ দিন এবং দেখুন কীভাবে আমরা এগিয়ে চলেছি।

`lo¥ipopzÚ\hÚaowzÍzeo`qz

আহ, বাদাম - কোনও উন্নতি নেই; আমাদের বাইট গণনা এক এক করে বেড়েছে! আপনি ব্যবহার করতে পারেন এমন আরও একটি চিঠি থাকতে পারে তবে, আপনার স্ট্রিংয়ের উপর নির্ভর করে চেষ্টা করার জন্য বেশ কয়েকজন থাকতে পারে - আমাদের উদাহরণে 11: আছে b,c,d,f,j,k,q,v,x,y,z। প্রত্যেকটির চেষ্টা করা অত্যন্ত ক্লান্তিকর হবে, যেখানে এই সহজ সরঞ্জামটি আসে; এটিকে আপনার নতুন লাইনের দ্বারা পৃথক করা স্ট্রিং খাওয়ান এবং এটি প্রতিটি বর্ণের সাথে স্ট্রিংগুলি সীমিত করার চেষ্টা করবে যা সেগুলির কোনওর মধ্যে নেই এবং আউটপুট:

  • সংক্ষিপ্ততম সংকুচিত স্ট্রিং,
  • ডিলিমিটারটি এটি ব্যবহার করে এবং
  • এর দৈর্ঘ্য

এটির মাধ্যমে আমাদের নমুনা স্ট্রিংগুলি চালিত করা bসর্বোত্তম ফলাফল দেয় তা দেখায় :

`lo¥ipáæqrÚaowbÍÞo`qb

এবং সেখানে আপনার এটি আছে, আমরা কেবল 24 বাইটে নেমে এসেছি।


ধাপ 3

তবে , আমরা আরও ভাল করতে পারি ! যদি আপনার অ্যারে স্ট্রিংয়ের ক্রমটি বিবেচনা না করে তবে সম্ভবত একটি পৃথক ডিলিমিটারের সাথে পৃথক পৃথক ক্রিয়াকলাপ রয়েছে যা আরও খাটো কাজ করতে পারে। যদিও প্রতিটি সম্ভাবনার চেষ্টা করা আরও বেশি ক্লান্তিকর হতে চলেছে। আমাদের 4 টি স্ট্রিং সহ, 24 টি পৃথক ক্রম ব্যবহারের চেষ্টা রয়েছে। প্রতিটি 11 টি চিঠি দিয়ে 264 হয়ে যায়! যে যেখানে আছে এই টুল খেলার মধ্যে আসে। আবার এটিকে আপনার নতুন লাইনের দ্বারা পৃথক স্ট্রিংগুলি খাওয়ান এবং এটি প্রতিটি ক্রমান্বয়ে এবং প্রতিটি বিস্মৃত অক্ষর, আউটপুটিংয়ের প্রতিটি সংমিশ্রণ চেষ্টা করবে:

  • সংক্ষিপ্ত সংক্ষেপিত স্ট্রিংয়ের স্ট্রিংগুলির ক্রম,
  • সংকুচিত স্ট্রিং,
  • যে ডিলিমিটারটি এটি ব্যবহার করে, এবং,
  • এর দৈর্ঘ্য

এটির মাধ্যমে আমাদের নমুনা স্ট্রিংগুলি "nougat","oreo","lollipop","marshmallow"চালিয়ে যাওয়া দেখায় যে bএকটি ডিলিমিটার হিসাবে সেরা ফলাফল দেয়, কেবলমাত্র চূড়ান্ত বাইট গণনা সহ ২৩:

`ÍÞo½o¥ipáæqrÚaow`qb


বোনাস টিপ: পূর্ণসংখ্যার অ্যারে সংক্ষেপণ

আপনি প্রথমে প্রত্যেকটিকে উচ্চতর বেসে রূপান্তর করে পূর্ণসংখ্যার অ্যারেগুলিতে একই নীতি প্রয়োগ করতে পারেন। এই নমুনাটি ব্যবহার করে, 36 বাইট অ্যারে:

[588181,156859,595676,475330,680474]

আমরা প্রথমে এটি 32 বেসগুলিতে একটি অ্যারে রূপান্তর করে এবং পরে প্রথম সংক্ষেপণ প্রোগ্রামের মাধ্যমে এটি চালিয়ে 29 বাইটে পেতে পারি:

`huclt4p5r5ÛÊg62tkogq`qt mnH

বা দ্বিতীয় প্রোগ্রামটি ব্যবহার করে 27 বাইট হিসাবে কম:

`4p5Ïcl5ÛÊg62tkogq`qt mnH

আপনি ইতিমধ্যে অ্যারেতে চালাচ্ছেন এমন কোনও পদ্ধতিতে পূর্ণসংখ্যার রূপান্তরটি স্থানান্তরিত করে আপনি এর উপরে আরও একটি বাইট বা 2 বাঁচাতে সক্ষম হতে পারেন।


মন্তব্য

  1. 1 বা 2 অতিরিক্ত বাইট q<letter>(<space>)ব্যয়গুলি ফ্যাক্ট করতে ভুলবেন না ·। যদিও, আপনি আপনার ডিলিমিটারের উপর নির্ভর করে বাইট ফিরে পেতে ইউনিকোড শর্টকাটগুলির একটি ব্যবহার করতে সক্ষম হতে পারেন ( একইql<space> , উদাহরণস্বরূপ ) ।
  2. শেষ সরঞ্জামটি ব্যবহার করার সময় একটি সতর্কতার শব্দ: আপনার যত বেশি স্ট্রিং রয়েছে, তত বেশি ক্রমশক্তি ঘটবে এবং প্রোগ্রামটি ধীরে ধীরে চালিত হবে যতক্ষণ না শেষ পর্যন্ত এটি ক্রপ হয়ে যায়। উপরে বর্ণিত হিসাবে, চেষ্টা করার জন্য আমাদের 4 টি নমুনা স্ট্রিং এবং 11 টি সম্ভাব্য অক্ষর রয়েছে, সেখানে 264 সম্ভাব্য সংমিশ্রণ রয়েছে, একই 11 টি বর্ণের সাহায্যে কেবল স্ট্রিংয়ের সংখ্যা বাড়িয়ে দিন এবং আমাদের ইতিমধ্যে 1320 টি সংমিশ্রণ রয়েছে। (আপনি চাইলে সংযোজনগুলির সংখ্যা গণনা করতে এই সরঞ্জামটি ব্যবহার করতে পারেন)।

ক্রেডিট

  • এই টিপটিতে পাওয়া সরঞ্জামগুলি তৈরি করতে অনুপ্রেরণার জন্য অলিভার।
  • প্রুফরিডিংয়ের জন্য ইটিএইচ প্রোডাকশনস।

6

সংক্ষিপ্ত স্ট্রিং

জাপট (বর্তমানে) স্ট্রিং সংক্ষেপণের জন্য শোক লাইব্রেরি ব্যবহার করে । আপনি Ocযতক্ষণ না ছোট অক্ষরের রান থাকতে পারে তা ব্যবহার করে একটি স্বেচ্ছামূলক স্ট্রিং সংকোচন করতে পারেন :

Oc"Hello, World!"

এই আউটপুটগুলি HÁM, WŽld! (ভাল, Žপ্রযুক্তিগতভাবে একটি মুদ্রিত অক্ষর)। আপনি এটিকে ব্যাকটিক্সে আবদ্ধ করে সংক্ষেপণ করতে পারেন:

`HÁM, WŽld!`

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

বিকল্পভাবে, আপনি Odএকটি স্বেচ্ছাসেবী স্ট্রিং সংক্ষেপিত করতে ফাংশনটি ব্যবহার করতে পারেন । এটি সাধারণত দরকারী নয়, তবে এর উদ্দেশ্যগুলি ...


সুতরাং, আমি যদি উত্তর দিই "হ্যালো, ওয়ার্ল্ড!" চ্যালেঞ্জ, আমি কি শুধু ব্যবহার করব HÁM, WŽld!বা এটি ব্যাকটিক্সে আবদ্ধ হওয়া দরকার? আমি উত্তরোত্তর অনুমান করছি।
শেগি

2
@ শেগি কোনও প্রশ্নের উত্তর দেওয়ার সময় আপনার সমস্ত কোড অন্তর্ভুক্ত করা দরকার, যাতে এটি হ্যাম, ওয়েল্ড হতে পারে! এই ক্ষেত্রে
মার্টিজান দর্শকরা

6

চর-কোড সহ সংখ্যা ছোট করা

জাপট-এ আপনি #চর-কোড তৈরি করতে একটি অক্ষর অনুসরণ করতে পারেন । দীর্ঘ সংখ্যা সংক্ষিপ্ত করার সময় এটি কার্যকর হয়।

@ETH প্রডাকশনগুলির উল্লিখিত হিসাবে, এটি ইউটিএফ -8 এ সরে যেতে রাজি না হলে 100-255 সীমাতে কেবল তিন-অঙ্কের রানগুলিতে কাজ করে।

উদাহরণ:

123 সংক্ষিপ্ত করা যেতে পারে #{

101 সংক্ষিপ্ত করা যেতে পারে #e

আপনি এমনকি এটি একসাথে চেইন করতে পারেন:

123101 সংক্ষিপ্ত করা যেতে পারে #{#e

আপনি যথাযথ চরিত্রটি খুঁজে পেতে String.fromCharCode(123)জাভাস্ক্রিপ্ট বা 123dজাপটে ব্যবহার করতে পারেন ।

String.fromCharCode(123) আয় {


ধন্যবাদ, @ ওবারকন, বলটি ঘোরানোর জন্য দুর্দান্ত টিপ; String.fromCharCode()সেইগুলির মধ্যে একটি (বহু!) খুব দীর্ঘ জেএস পদ্ধতি যা আপনার বাইট গণনাটিকে ট্যাঙ্ক করতে পারে। সম্ভবত, এগুলি পূর্ণসংখ্যা হিসাবে বিবেচিত হবে? অর্থাত্, 123সমাধানে আমার যদি পূর্ণসংখ্যার প্রয়োজন হয় , আমি #{বাইট সংরক্ষণ করতে ব্যবহার করতে পারি ।
শেগি 21

1
হ্যাঁ, এটি পূর্ণসংখ্যা। আপনি যদি -Qআপনার ইনপুট উইন্ডোতে পতাকাটি যুক্ত করেন তবে আপনি আউটপুট প্রকারটি আরও ভালভাবে দেখতে পাবেন: স্ট্রিং , অ্যারে ইত্যাদির উদ্ধৃতি etc.
অলিভার

1
আপনার String.fromCharCode(123)জাভা 123dস্ক্রিপ্টে কাজ করে উল্লেখ করা উচিত , তবে একই ফল পেতে আপনি জাপটে করতে পারেন ;-) এছাড়াও, এটি কেবলমাত্র তিন অঙ্কের ব্যাপ্তিতে কাজ করে 100- 255(আপনি যদি ইউটিএফ -8 এ যেতে চান না)
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনস ভাল কল, আপডেট!
অলিভার

5

দ্রুত পরামর্শ: খালি অ্যারে []

Japt একটি খালি অ্যারের জন্য একটি ধ্রুবক রয়েছে: A। তবে, এটি অ্যাক্সেস করার জন্য, আপনাকে ;জাপটের বিকল্প ধ্রুবকগুলি ব্যবহার করতে আপনার প্রোগ্রামে একটি সেমিকোলন তৈরি করতে Aহবে , অন্যথায় হবে 10। সুতরাং ;Aআসলে ব্যবহার করে একটি 0 বাইট সংরক্ষণের প্রস্তাব দেয় [], তবে আপনাকে যদি একটি ভেরিয়েবলের (যেমন, A=[]) আপনার অ্যারে নির্ধারণ করতে হয় তবে আপনাকে বাইটগুলি সংরক্ষণ করবে

তবে, যদি (এবং কেবলমাত্র) আপনার প্রোগ্রামটি কোনও ইনপুট নিচ্ছে না, আপনি Nভেরিয়েবলটি ব্যবহার করে কেবল 1 বাইট দিয়ে খালি অ্যারেটি অ্যাক্সেস করতে পারবেন , যা ইনপুটগুলির বিন্যাস নয় - এটি খালি হবে it এখানে চেষ্টা করে দেখুন

এটি আপনার প্রোগ্রামে আপনাকে ডিফল্ট ধ্রুবক মানগুলি ব্যবহার করার অনুমতি দেওয়ার অতিরিক্ত সুবিধাও পেয়েছে এবং কিছু ক্ষেত্রে, ;Aআপনার প্রোগ্রামটি শর্টকাটের জন্য s1এবং এর জন্য ইনপুট গ্রহণ করার সময়ও আপনাকে ব্যবহার করে বাইটস সংরক্ষণ করতে পারে s2


2
বাহ, আমি ব্যবহার সম্পর্কে ভাল চিন্তা ছিল না N
ETH প্রোডাকশন

2
ভাল লাগছে, @ শেগি!
অলিভার

4

জাভাস্ক্রিপ্ট মূল্যায়ন

জাপট আপনাকে কাঁচা জাভাস্ক্রিপ্টের চারপাশে মোড়ানো দ্বারা সম্পাদন করতে দেয় $...$

উদাহরণ স্বরূপ, $alert("hello world")$

এই Japt এর স্বয়ংক্রিয় বন্ধের সুবিধা গ্রহণ করে সংক্ষিপ্ত করা যেতে পারে $এবং )

$alert("hello world")$ সংক্ষিপ্ত করা যেতে পারে $alert("hello world"

জাভাস্ক্রিপ্ট সংকোচনের

আপনি জাভাস্ক্রিপ্ট ব্যবহার করে সংক্ষিপ্ত করতে পারেন Ox

যদি কোনও জাভাস্ক্রিপ্ট ফাংশন থাকে যা আপনি ব্যবহার করতে চান, বলুন screen.width, আপনি স্ট্রিংটি ব্যবহার করে সংক্ষেপ করতে পারেন"screen.width"Oc সংক্ষেপ , তারপরে ফলাফল `োকাতে ...

মনে রাখবেন যে জাপ্টে যখন অন্য কোনও কিছু অনুসরণ না করা হয় তখন আপনার সমাপনী দরগুলির দরকার হবে না।


@ শেগি Oxআপনার স্ট্রিংটি মূল্যায়ন করতে হবে। অন্যথায়, আপনি শুধু পাঠ্য আউটপুট হবে "screen.width"উদাহরণ
অলিভার

4

পতাকাগুলি জানুন

অনুযায়ী সর্বশেষ মেটা ঐক্যমত্য (ডিসেম্বর 2017) , কম্যান্ড-লাইন ফ্ল্যাগ আর বাইট প্রতি গণনা করা হয়। ইনপুট / আউটপুটে অতিরিক্ত চিকিত্সার জন্য এটির অনেক পতাকা রয়েছে বলে এটি জাপটের পক্ষে সত্যিই একটি দুর্দান্ত সংবাদ।

মূল্যায়নের ক্রমে জাপটে সমস্ত উপলভ্য পতাকাগুলি নীচে বর্ণিত হয়েছে । একই গ্রুপের পতাকাগুলি একে অপরের সাথে একচেটিয়া। লক্ষ্য করুন বিভিন্ন গ্রুপের পতাকাগুলি ভালো কিছু ফলে, সমন্বয় ব্যবহার করা যেতে পারে এই :)

mdefæ

পুরো যুক্তিটি প্রথম যুক্তি ( U) দিয়ে ম্যাপ করা হয়েছে ।

যদি আরও যুক্তি উপস্থিত থাকে তবে সেগুলি যেমন হয় ( ততক্ষণে জোড়াযুক্ত ম্যাপযুক্ত নয় ) পাস করা হয় । অন্যথায়, দ্বিতীয় আর্গুমেন্টটি সূচক, এবং তৃতীয়টি পুরো অ্যারে, ঠিক যেমন U.m। যদি Uএকটি সংখ্যা হয় তবে এটি পরিসরে রূপান্তরিত হয়; যদি স্ট্রিং হয়, এটি অক্ষরের অ্যারেতে রূপান্তরিত হয় এবং ফলাফলগুলি একসাথে যোগ হয়।

  • -m: উপরোক্ত প্রয়োগ এবং অন্য কিছুই।
  • -d: trueকিছু ফলাফল সত্যবাদী falseহলে ফিরে আসে otherwise
  • -e: trueসমস্ত ফলাফল সত্যবাদী হলে ফিরে আসে,false অন্যথায় হলে ফিরে আসে।
  • -f: Uযার ফলাফলগুলির সত্যতা রয়েছে তার উপাদানের অ্যারেটি ফিরিয়ে দেয়।
  • : প্রয়োগ করে -fএবং এর প্রথম উপাদানটি প্রদান করে।

gh

নির্দিষ্ট সূচকে একটি উপাদান নেয়।

  • -g: প্রথম উপাদান নেয় (সূচক 0)।
  • -gX: সূচকে উপাদান নেয় X(কোনও ধনাত্মক পূর্ণসংখ্যার হতে পারে)।
  • -h: শেষ উপাদান নেয়।

ফলাফলটি বুলেয়ানে রূপান্তর করুন।

  • -!: বুলিয়ান প্রয়োগ করবেন না।
  • : দুবার নয় বুলিয়ান প্রয়োগ করুন (সত্যতা ফেরান)।

N

ফলাফলকে সংখ্যায় রূপান্তর করুন। আনারি প্লাস ব্যবহার করা হয়।

PRSQ

কোনও ধরণের স্ট্রিংয়ে রূপান্তর করুন।

  • -P: সাথে অ্যারে যোগদান করুন ""
  • -R: সাথে অ্যারে যোগদান করুন "\n"
  • -S: সাথে অ্যারে যোগদান করুন " "
  • -Q: প্রয়োগ করুন JSON.stringify(যে কোনও বস্তু হতে পারে, কেবল একটি অ্যারে নয়)। উদাহরণ

x

xআউটপুটে ফাংশন প্রয়োগ করে । (এটি আক্ষরিক অর্থে x, "কোনও ছোট ছোট বর্ণমালার ক্রিয়া নয়"।)

  • অ্যারে: সম
  • স্ট্রিং: উভয় প্রান্ত থেকে ছাঁটা।
  • সংখ্যা: পূর্ণসংখ্যার বৃত্তাকার।

2
নোট করুন যে পতাকা ব্যবহার করা জাপানের জমা হিসাবে গণ্য হয় না, এটি জাপট-এর সাথে-নির্দিষ্ট-পতাকা-ভাষা জমা দেওয়ার হিসাবে গণ্য হয়।
নিট

3

ইউনিকোড শর্টকাট

যেমন Japt অনেক সাধারণ কাঠামো যে শুধু একটি একক হওয়া ASCII গৃহস্থালির কাজ সঞ্চিত করা যাবে না, আছে qS , p2 , mX{, , ইত্যাদি তাই এই কাছাকাছি পেতে, Japt "ইউনিকোড শর্টকাট", যা সীমার মধ্যে অক্ষর রয়েছে \xA1- \xDE( ¡- Þ) যা এই সাধারণ কাঠামোতে প্রসারিত হয়। দোভাষী দস্তাবেজে আপনি এগুলির একটি সম্পূর্ণ তালিকা পেতে পারেন

উপরন্তু, @ঘোরা XYZ{, এবং _ঘোরা Z{Z, সাহায্যের বিল্ড ফাংশন। সুতরাং আসুন অন্য উত্তর থেকে আমাদের উদাহরণ প্রোগ্রাম গল্ফ :

UmX{Xc0 s16}

প্রথমত, আমরা প্রতিস্থাপন করতে পারেন X{Xসঙ্গে _, যা আমাদের দেয়:

Um_c0 s16}

তারপর আমরা প্রতিস্থাপন করতে পারেন m_সঙ্গে ®অন্য বাইট সংরক্ষণ:

U®c0 s16}

বা আমরা এর X{সাথে প্রতিস্থাপন করতে পারি @, যা আমাদের দেয়:

Um@Xc0 s16}

এটি তখন আমাদের ¡দুটি বাইট সংরক্ষণের জন্য শর্টকাট ব্যবহার করতে দেয় :

¡Xc0 s16}

এই দুটি পাথের একটিতে অন্যটির চেয়ে 1 বাইট বেশি ছোট করা যায়। আপনি কোনটি বুঝতে পারেন?


1
®c s166 বাইটের জন্য - আমি কি একটি কুকি জিততে পারি ?!
শেগি

@ শেগি আপনি যদি যথেষ্ট কঠিন দেখেন তবে আপনি আরও 1 টি বাইট সংরক্ষণ করতে পারবেন ...;)
ইটিএইচ প্রোডাকশনগুলি

এটা হবে ®c sG?
শেগি

1
হাঁ! আমি মনে করি যে আপনি যেতে পারেন হিসাবে কম। সাবাশ! :-)
ইটিএইচ প্রোডাকশনগুলি

2
আশ্চর্যজনকভাবে এগুলি পিছনে ফিরে তাকানো, কয়েক সংক্ষিপ্ত মাসে জাপানের অগ্রগতি দেখে। এটি এখন দিয়ে অর্জন করা যেতে পারে csG
শেগি

3

প্রিসেট ভেরিয়েবলগুলির সুবিধা নিন

ভেরিয়েবলগুলি A- Sপ্রচলিত মানগুলির পূর্বনির্ধারিত যা জাপটে প্রতিনিধিত্ব করতে একাধিক বাইট নেয়:

  • A- Gহয় 10- 16
  • Hহয় 32, Iহয় 64, Jহয় -1, Lহয় 100
  • Kহিসাবে সংজ্ঞায়িত করা হয় new Date(), যা আপনি বিভিন্ন উপায়ে হেরফের করতে পারেন।
  • Mএবং Oবিভিন্ন দরকারী ফাংশন সঙ্গে বস্তু হয়। আপনি ডক্সে আরও শিখতে পারেন।
  • Pখালি স্ট্রিং, Qএকটি উদ্ধৃতি চিহ্ন, Rএকটি নতুনলাইন এবং Sএকটি স্থান।
  • Tএ সেট করা আছে 0, যাতে প্রয়োজনে আপনি এটি সঞ্চয়ের হিসাবে ব্যবহার করতে পারেন।

প্রোগ্রামটির প্রথম চরিত্রটি যদি একটি সেমিকোলন হয় ; , A-Lরিসেট নিম্নরূপ:

  • Aখালি অ্যারে হয় []
  • Bহয় "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  • C হয় "abcdefghijklmnopqrstuvwxyz"
  • D হয় "QWERTYUIOP\nASDFGHJKL\nZXCVBNM"
  • Eহয় "[a-z]", এবংF হয় "[A-Za-z]"(আমি এগুলিকে পুনরায় বৈশিষ্ট্য হিসাবে যুক্ত করার আগে দরকারী)
  • Gহয় 36, Hহয় 65এবংI হয় 91(বর্ণমালা ব্যাপ্তির জন্য দরকারী)।
  • J একক কমা; L, একক সময়কাল।

আজকাল শুধুমাত্র A, B, C, এবং Dএই তালিকা থেকে সত্যিই দরকারী। আমি একটি আরও ভাল সিস্টেম যুক্ত করার পরিকল্পনা করছি যা 256 টি পর্যন্ত দ্বি-বাইট ভেরিয়েবলগুলিকে মঞ্জুরি দেয় যা এই মানগুলির জন্য প্রিসেট হবে এবং আরও অনেক কিছু।


3

অটো-ফাংশন ব্যবহার করুন

আপনি সম্ভবত ইতিমধ্যে জানি @এবং _শর্টকার্ট হয় XYZ{এবং Z{Zযথাক্রমে (মধ্যে আবৃত ইউনিকোড শর্টকাট উত্তর)। তবে কখনও কখনও আপনি ফাংশনগুলি আরও ছোট করতে পারেন।

মনে করুন আপনার কাছে অক্ষরের একটি অ্যারে রয়েছে এবং আপনি প্রতিটি চরিত্রকে তার চর-কোডে মানচিত্র করতে চেয়েছিলেন। আপনি এর যে কোনও একটি দিয়ে এটি করতে পারেন:

mX{Xc} 
m_c} 

তবে এর থেকে আরও ভাল উপায় আছে। কোনও পদ্ধতি বা অপারেটর যদি অন্য পদ্ধতি বা ক এর পরে প্রথম আইটেম হয় তবে (এটি স্ট্রিংয়ে রূপান্তরিত হয়। সুতরাং এই দুটি লাইন সমতুল্য:

r'a'b  // Replace all "a"s with "b"s; transpiles to .r("a","b")
ra'b   // Does the same thing, 1 byte less; transpiles to the same thing

কিন্তু কীভাবে এটি আমাদের কাজগুলিতে সহায়তা করে? ভাল, বেশিরভাগ পদ্ধতি যা ফাংশন গ্রহণ করে, যদি কোনও পদ্ধতি বা অপারেটরের প্রতিনিধিত্ব করে একটি স্ট্রিং দেওয়া হয় তবে এটি একটি ফাংশন হিসাবে ব্যাখ্যা করবে। যার অর্থ আপনি এটিও করতে পারেন:

m_c}  // Map each item to its char code
m'c   // Does the same thing, 1 byte less
mc    // Also does the same thing, 2 bytes less

আমি এগুলিকে "অটো-ফাংশন" বলি। বিভিন্ন বিভিন্ন জাত রয়েছে:

  • m@Xc}mc
  • m@Xc1}mc1
  • m@X+1}m+1
  • m@1+X}m!+1
  • m@2pX}m!p2

আশা করি আপনি ধারণাটি পাবেন। যুক্তিগুলি অদলবদল করতে, কেবল পদ্ধতি বা অপারেটরের সাথে উপস্থাপন করুন !


এখানে কি লক্ষণীয় যে অটো-ফাংশনগুলি ব্যবহার করে শর্টকাট ব্যবহারের মাধ্যমে আরও সঞ্চয় করা যায়? যেমন, m@2pXÃm!p2<space>m!²
শেগি

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

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

3

অন্তর্ভুক্ত পরিবর্তনশীল বরাদ্দ

(আপনার যখনই এই Japt একটি নতুন লাইন শুরু পূর্ববর্তী লাইনের ফলাফল স্বয়ংক্রিয়ভাবে ইনপুট বৈপরিত্য এক নির্ধারিত হয় U- Zপ্রথম লাইন হচ্ছে সঙ্গে) U, দ্বিতীয় Vইত্যাদি, এবং।

আসুন একটি উদাহরণ নেওয়া যাক: বলুন যে আপনি কাজ করতে 2 টি অ্যারে তৈরি করতে চেয়েছিলেন, একটিতে 1-10 নম্বর রয়েছে এবং অন্যটি তাদের স্কোয়ারযুক্ত রয়েছে। এটি করার দীর্ঘ পথটি এরকম হবে:

U=Aõ V=Um² [do something with the arrays]

স্বয়ংক্রিয় ভেরিয়েবল অ্যাসাইনমেন্ট ব্যবহার করে, এটি সংক্ষিপ্ত করা যেতে পারে:

Aõ
Um²
[do something with the arrays]

আমরা সেখানে 4 বাইট সংরক্ষণ করেছি। কিন্তু, এই ক্ষেত্রটিকেই, আমরা আরো এক বাইট কারণ 1-10 অ্যারে নির্ধারিত হয় সংরক্ষণ করতে পারবেন Uএবং Uনির্দিষ্ট পরিস্থিতিতে বাদ দেওয়া যেতে পারে :

Aõ
m²
[do something with the arrays]

সতর্ক করা

এই টিপটি সম্পর্কে সতর্কতা অবলম্বন করার একটি বিষয় হ'ল আপনি আপনার প্রোগ্রামে পরবর্তী সময়ে প্রয়োজন হতে পারে এমন কোনও ইনপুট ভেরিয়েবলগুলি ওভাররাইট করবেন না। এটি শুরুতে এক বা একাধিক খালি লাইন রেখে এড়ানো যায়। নিম্নলিখিত উদাহরণে, 2 অ্যারেগুলিকে V& এর Wপরিবর্তে U& র পরিবর্তে ভেরিয়েবলগুলি বরাদ্দ করা হবে V:


Aõ
Vm²
[do something with the arrays]

3

জাভাস্ক্রিপ্ট জানুন

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

প্রাসঙ্গিক জেএস টিপস

[]Vm@...
...
  • শর্ট-সার্কিট
  • সংখ্যা সহ বিভক্ত
    • এটি স্ট্রিং গ্রহণ করে তবে সংখ্যা নয় এমন কোনও পদ্ধতিতে সাধারণীকরণ করা যেতে পারে। বেশ কয়েকটি পাস সেখানে পরোক্ষভাবে একটি স্ট্রিং এ কাস্ট করবেন প্রায়ই একটি বাইট (যেমন সংরক্ষণ 0ওভার '0)।

প্রাসঙ্গিক জেএস অন্তর্নির্মিত কার্যাদি

যুক্তিগুলি ফাংশনগুলিতে কী কী পরামিতিগুলি পাস করা হয়েছে তা নিবিড়ভাবে দেখুন look

  • Array.prototype.map
    • সংশ্লিষ্ট Japt পদ্ধতি: Array.a/b/m/x/y/í, Number.o/õ,String.m/y/í
  • Array.prototype.reduce
    • সম্পর্কিত জাপট পদ্ধতি: Array.r/å, String.å; কারণ å, চতুর্থ যুক্তি পাস করা হয় না।
  • Array.prototype.some
    • সম্পর্কিত জাপট পদ্ধতি: Array.d
  • Array.prototype.every
    • সম্পর্কিত জাপট পদ্ধতি: Array.e

স্ট্রিং পদ্ধতিগুলির জন্য, এটি জেনে রাখা ভাল যে gপতাকাটির সাথে বা ছাড়াই স্ট্রিং বা রেজেক্স পাস করার মধ্যে আচরণগুলি কীভাবে পৃথক হয় ।

  • String.prototype.match
    • সম্পর্কিত জাপট পদ্ধতি: String.f/o
  • String.prototype.search
    • সম্পর্কিত জাপট পদ্ধতি: String.â
  • String.prototype.replace
    • সম্পর্কিত জাপট পদ্ধতি: String.e/k/r
    • কারণ e/r, দ্বিতীয় আর্গুমেন্ট হিসাবে ফাংশনগুলি পাস করা ঠিক আছে, এবং ফাংশনটির পরামিতিগুলি বোঝার পক্ষে উত্সাহ দেওয়া হয়।

3

প্রয়োজনে একাধিক লাইন ব্যবহার করুন

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

বন্ধ বন্ধনগুলি সরান

কার্য : সংখ্যার একটি অ্যারে দেওয়া, প্রতিটি উপাদানকে সূচক বর্গক্ষেত্রের সাথে জুড়ুন এবং যোগফল অনুসারে এটি সাজান।

[5,1,17,9,3] => [[5,0],[1,1],[17,4],[9,9],[3,16]] => [[1,1],[5,0],[9,9],[3,16],[17,4]]

এক-লাইন সমাধান íUm@Yp2})ñx, তবে })ব্যয় দুটি বাইট (এবং কোনও বাইট শর্টকাট নেই)। আপনি })কেবল ñxপরের লাইনে ট্রেলিং সরাতে সরিয়ে ফেলতে পারেন , তাই কোডটি এর মতো দেখায়:

íUm@Yp2
ñx

এবং স্থানান্তরিত জেএস হয়ে যায়:

U = U.í(U.m(function(X, Y, Z) { return Y.p(2) })); U.ñ("x")

আপনি পরিষ্কারভাবে দেখতে পাচ্ছেন যে এটি এক-লাইন সমাধানের মতো একই কাজ করে, কেবলমাত্র মধ্যবর্তী ফলাফলকে ফিরে আসার জন্য U

অন্তর্নিহিত যুক্তি দিয়ে পুনরাবৃত্তি

পুনরাবৃত্তি ফাংশনটি নির্দিষ্ট না থাকলে ßসমস্তই UVWXYZঅন্তর্নিহিত পরামিতি হিসাবে গ্রহণ করে । Uস্পষ্টতই মূল ইনপুট, তবে VWXYZআপনার প্রয়োজনীয় অন্যান্য মানগুলি লক্ষ্য রাখতে আপনি যে কোনওটি ব্যবহার করতে পারেন । উদাহরণস্বরূপ, আপনি নীচের মতো কিছু করতে পারেন:

(modify input and implicit assign to U)
(modify V and implicit assign to V)
(test something and call ß without arguments; U and V are passed automatically)

বিকল্পভাবে, আপনার সমস্ত কিছু যদি অস্থায়ী পরিবর্তনশীল (T=...)হয় তবে আপনি ভেরিয়েবল হিসাবে ইনলাইন অ্যাসাইনমেন্ট ব্যবহার করতে পারেনT (0) খুব কমই ব্যবহৃত হয় as

একটি দীর্ঘ ফাংশন পুনরায় ব্যবহার করুন

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

  • কোনও ফাংশন পুনরায় ব্যবহার করার জন্য, আপনাকে এটি একটি ভেরিয়েবলে সঞ্চয় করতে হবে। ফাংশন-ওপেনারের সাথে একটি লাইন শুরু করা {, @বা _কাজটি করে। বিকল্পভাবে, আপনি যেমন কিছু করতে পারেন(T=@...}) আরও জটিল লাইনের ভিতরে ফাংশন অ্যাসাইনমেন্টটি এম্বেড করার ।
  • সঞ্চিত ফাংশনটি কল করা আসলে তুচ্ছ নয়। ধরা যাক Vএকটি ফাংশন এবং আমরা V(U)জেএসে কল করতে চাই । VUএটি সহজভাবে বোঝায় তাই কাজ করে না V,UV(Uহয় না; এটাV,(U) । এমনকি ফাংশন পদ্ধতিগুলি খুব বেশি সহায়ক হয় না। আমাদের পাওয়া সবচেয়ে ভাল উপায়:
    • [U]xV (মানচিত্র এবং যোগফল) যদি ফলাফল সংখ্যা হয়
    • UmVযদি Uএকক চর হয় এবং Vএকটি স্ট্রিং প্রদান করে, বা
    • $V($Uবা [U]mV gসাধারণভাবে।
  • তবে এটির সাথে ম্যাপিং বা লুপিং করা বরং সহজ। একটি অ্যারে মানচিত্র করতে, ব্যবহার করুন UmV। সন্তুষ্ট হওয়া প্রথম পূর্ণসংখ্যার সন্ধান করতে V, ব্যবহার করুন Va

2

অটো-ফাংশন দিয়ে মজা করুন

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


একটি অ্যারেতে বৃহত্তম পূর্ণসংখ্যা পান।

ধরুন আমাদের কাছে অ্যারেটি [3,1,4,2]ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছে Uএবং আমরা এটি থেকে বৃহত্তম সংখ্যক পুনরুদ্ধার করতে পিপড়ায় আছি। অ্যারে বাছাই করে এবং পরে শেষ উপাদানটি পপিং করে আমরা এটি 4 বাইটে করতে পারি:

Un o

এর নেতিবাচক দিকটি হ'ল আমরা আসল অ্যারেটি সংশোধন করেছি; Uএখন [1,2,3]যা সর্বদা কাম্য নয়। ভাগ্যক্রমে, অ্যারেটি পরিবর্তন না করে এটি করার একটি উপায় রয়েছে যা একটি বাইটও খাটো:

Urw

আমরা সেখানে যা করেছি তা wপদ্ধতিটি ব্যবহার করে অ্যারে হ্রাস পেয়েছে , যা কোনও পূর্ণসংখ্যার উপর ব্যবহার করা হলে পূর্ণসংখ্যার বৃহত্তর এবং পদ্ধতির যুক্তি (যেমন, 2w5প্রত্যাবর্তন 5) প্রদান করে returns সুতরাং উপরের সমতুল্য UrÈwYবা UrXY{XwY}। দ্রষ্টব্য, যদিও, এই টিপটি ক্ষেত্রে কাজ করবে না অ্যারেতে সমস্ত পূর্ণসংখ্যার নেতিবাচক হওয়ার ।


1
পার্শ্ব নোট: আমি কমপক্ষে এবং একটি অ্যারের সর্বাধিক পেতে ফাংশন যুক্ত করার পরিকল্পনা করছি, যদিও এটি কেবলমাত্র v2-এ in
ইটিএইচ প্রডাকশনগুলি

2

কখন ব্যবহার করবেন নাí

íজোড়াগুলি (বা zipগুলি) দুটি অ্যারে বা স্ট্রিংগুলি অন্তর্নির্মিত হ'ল একটি কার্যকর ফাংশনের মাধ্যমে প্রতিটি জোড়কে মানচিত্র। তবে অসম অ্যারে বা স্ট্রিং দেওয়ার সময় বর্তমানে এটি কয়েকটি ছোটখাটো সমস্যা রয়েছে:

  • প্রথম অ্যারেতে যদি দ্বিতীয়টির চেয়ে বেশি আইটেম থাকে তবে দ্বিতীয়টিতে অস্তিত্বের আইটেমগুলি দেওয়া হবে undefined
  • দ্বিতীয় অ্যারেতে যদি প্রথমটির চেয়ে বেশি আইটেম থাকে তবে এটি প্রথম অ্যারের শেষে প্রক্রিয়াজাতকরণ বন্ধ করবে।

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

UíUç hV @[XY]n o

পরিবর্তে আপনি যা করতে পারেন তা হ'ল ট্রান্সপোজ , দুটি স্ট্রিংয়ের অ্যারে হিসাবে ইনপুট নেওয়া সাথে অ্যারের করুনy এবং তারপরে প্রতিটি সারিকে সঠিক ফলাফলটিতে মানচিত্র করা:

Uy m_q n o

উভয় স্ট্রিংয়ের সম্পূর্ণতা দিয়ে যাওয়ার জন্য এটি সর্বদা সংক্ষিপ্ত স্ট্রিংকে ফাঁকা করে রাখার সুবিধা রয়েছে।

বাস্তব জীবনের উদাহরণ: 1 , 2


2

এএসসিআইআই রেঞ্জ তৈরি করুন

আপডেট: জাপটে এখন ASCII ব্যাপ্তির জন্য একটি ধ্রুবক রয়েছে; এর জন্য বিকল্প মান E, এর সাথে অ্যাক্সেসযোগ্য ;। জাপানের ধ্রুবক সম্পর্কে আরও জানতে এই টিপটি দেখুন ।

যদিও জাপ্টের (এখনও) এএসসিআইআই ব্যাপ্তির জন্য অন্তর্নির্মিত নেই, আপনি মাত্র 5 বাইটে অক্ষরের একটি অ্যারে তৈরি করতে পারবেন:

95odH

চেষ্টা করে দেখুন


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

95o[0,95)প্রতিটি উপাদান অটো-ফাংশন দিয়ে যাওয়ার সাথে সাথে পরিসীমা তৈরি করে d যা কোনও সংখ্যায় ব্যবহৃত হলে সেই কোডপয়েন্টে অক্ষরটি ফিরিয়ে দেয়। dএই ক্ষেত্রে পদ্ধতির আর্গুমেন্ট হিসাবে একটি সংখ্যা পাস করুনH , এক্ষেত্রে 32 এর জন্য জাপট ধ্রুবক এবং রূপান্তরিত হওয়ার আগে এটি মূল সংখ্যায় যুক্ত হবে।

জাভাস্ক্রিপ্টে একটি সমতুল্য সমাধানটি হ'ল:

[...Array(95)].map((_,x)=>String.fromCharCode(x+32))

র্যান্ডম অক্ষর

এএসসিআইআই ব্যাপ্তিতে একটি এলোমেলো চরিত্র পেতে, এর öপরিবর্তে ব্যবহার করুন, যা পরিসর থেকে একটি এলোমেলো নম্বর প্রদান করে [0,X), এটি কোথায় Xচলছে এমন নম্বরটি।

95ö dH

অথবা, একাধিক এলোমেলো অক্ষরের অ্যারে পেতে আপনার যুক্তি হিসাবে প্রয়োজনীয় অক্ষরের সংখ্যাটি পাস করুন ö। নিম্নলিখিতটি 10 ​​টি অক্ষর ফিরিয়ে দেবে:

95öA mdH

1

অপ্রয়োজনীয় কাঠামোগত চরগুলি সরান

কাঠামোগত অক্ষর দ্বারা, আমি বলতে চাচ্ছি {}, (), $, এমনকি "এবং `। আপনি যখনই কোনও প্রোগ্রামের শেষে ঠিক এই ঘটনাগুলি ঘটে তখন আপনি সাধারণত মুছে ফেলতে পারেন (উদাঃUmX{Xc +"; "} -> UmX{Xc +"; )।

অতিরিক্তভাবে, যখনই নীচের জায়গায় উপস্থিত হন আপনি প্যারেনস বা স্পেসগুলি সরাতে পারবেন:

  • একটি সেমিকোলনের বিপরীতে ; (বা প্রোগ্রামের শেষের দিকে);
  • ডানদিকে {(এবং এক্সটেনশন, দ্বারা @) অথবা [, অথবা বাম ]বা }

এছাড়াও পৃথক যুক্তিগুলির জন্য কমাগুলি খুব কমই প্রয়োজন। আপনি যদি লিখেন AB, উদাহরণস্বরূপ, জাপট আপনার অর্থ Aএবং Bপৃথকভাবে জানেন । দুটি সংখ্যাগত আক্ষরিক যেমন পৃথক পৃথক করতে আপনার কেবলমাত্র কমা দরকার Us2,5

অবশেষে, যদি একটি এর Uএকটি প্রোগ্রাম শুরুতে বা পরে একটি {বা ;, একটি পদ্ধতি কল (ছোট হাতের অক্ষর বা সম্পর্কিত ইউনিকোড শর্টকাট) অথবা কোন বাইনারি অপারেটর ব্যতীত দ্বারা অনুসরণ +এবং -( *, &, ==, ইত্যাদি), আপনি অপসারণ করতে পারেন Uএকটি সংরক্ষণ করতে বাইট এবং জাপট এটি আপনার জন্য .োকাবে।


আমি আরও কয়েকটি উদাহরণ খুঁজে পেয়েছি যেখানে Uপ্রোগ্রামটি শুরু না হওয়ার পরেও বাদ দেওয়া যেতে পারে।
শেজি

@ শেগি ওহ ঠিক আছে, এটি একটি {বা পরে কাজও করে ;। এমন কি অন্য কেউ আছেন যা আপনি জানেন? (আমি এই বৈশিষ্ট্যটি কোড করেছিলাম এমন কিছুক্ষণ হয়ে গেছে: পি)
ইটিএইচ প্রোডাকশনস

এগুলি আমার মাথার উপরের দিক থেকে ভাবেন না; আমি আগামীকাল আমার কম্পিউটারে ফিরে এলে এটি আবার পরীক্ষা করে দেখব।
শেগি

1

একটি অ্যারেতে শেষ উপাদানটি পরিবর্তন করুন

কখনও কখনও আপনাকে অ্যারেতে শেষ উপাদানটি সংশোধন করার প্রয়োজন হতে পারে তাই এটি করার একটি ছোট পদ্ধতির ব্যাখ্যা এখানে। আমরা [2,4,8,32]ইনপুট ভেরিয়েবলের জন্য নির্ধারিত অ্যারের সাথে কাজ করব Uএবং শেষ সংখ্যাকে ভাগ করব (32 2 দ্বারা ।

এটি অর্জনের সুস্পষ্ট উপায়টি এই 9 বাইট সমাধান ( ডেমো ) এর সাথে থাকবে:

UhJUgJ /2
  • hnxসূচিতে উপাদান সেট করে nকরতে x
  • gnসূচকটিতে উপাদানটি ফেরত দেয় n
  • J এর জন্য জাপট ধ্রুবক -1নেতিবাচক সূচকের জন্য জাপ্টের সমর্থনকে ধন্যবাদ , যা আমাদের অ্যারেতে শেষ উপাদানটির সাথে কাজ করতে দেয়; সহজ যখন আপনি অ্যারের আকার জানেন না।
  • এবং /2কেবল 2 দ্বারা বিভাজন।

উপরে সেট সূচিতে উপাদান তাই -1সূচিতে উপাদানে অ্যারের মধ্যে -1: অ্যারের 2. দ্বারা বা জাভাস্ক্রিপ্ট বিভক্ত মধ্যে U[3]=U[3]/2। আপনি যখন এটির মতো লেখেন, মনে হয় এটির সম্পর্কে অনেক দূরে দীর্ঘায়িত পথ। সৌভাগ্য যে, সেখানে হয় একটি সংক্ষিপ্ত পথ; আমরা অ্যারে থেকে শেষ উপাদানটি পপ করতে পারি, এটি সংশোধন করে অ্যারেতে ফিরে যেতে পারি। এই অপারেশনগুলির প্রতিটি পৃথকভাবে সম্পাদন করতে 9 বাইটেরও বেশি সময় লাগবে তবে আমরা কেবলমাত্র 7 বাইট, 2 বাইট সংরক্ষণের ( ডেমো ) জন্য একবারে এগুলি করতে পারি

UpUo /2

জেএস তে অনুবাদ, এটি এর সমতুল্য:

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