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


46

পাইথ হলেন পাইথন-অনুপ্রাণিত পদ্ধতিগত প্রোগ্রামিং ল্যাঙ্গুয়েজ, পিপিসিজি ব্যবহারকারী ইস্যাকের দ্বারা তৈরি ।

পাইথের গল্ফ করার জন্য আপনার কাছে কোন সাধারণ টিপস রয়েছে? আমি পাইডের সাথে অন্তত কিছুটা সুনির্দিষ্ট কোড গল্ফ সমস্যার ক্ষেত্রে প্রয়োগ করতে পারি এমন ধারণাগুলি সন্ধান করছি।

উত্তর প্রতি এক টিপস, দয়া করে।

উত্তর:


25

পাইথনে কোডটি প্রথমে লিখুন

পাইথ পাইথনের সাথে এতটাই মিল যে পাইথন প্রোগ্রামগুলি পাইথের কাছে অনুবাদ করা বেশ সহজ is যাইহোক, পাইথ হ'ল একক-চিঠি-প্রতি-কমান্ডের ভাষা, কখনও কখনও সোজা পাইথটি লেখা শক্ত হয়। পাইথনে প্রথমে লেখার মাধ্যমে, একবারে চিন্তা করা কম হবে (যেহেতু পাইথন কোড করার ক্ষেত্রে সুন্দর একটি সহজ ভাষা)।


1
আপনি আরও উল্লেখ করতে পারেন যে আপনি পাইথনে পাইথন সিনট্যাক্সটি এখনও ব্যবহার করতে পারেন, তাই আপনি প্রোগ্রামের অংশগুলি স্বতন্ত্রভাবে রূপান্তর করতে পারেন বা প্রয়োজনে পাইথন ব্যবহার করতে পারেন। (আপনি এখানে যেমন করেছেন )
FryAmTheEggman

@ mbomb007 পাইথ ইন্টারপ্রেটার ডাউনলোড করুন এবং দস্তাবেজগুলির মাধ্যমে পড়ুন। পাইথ প্রোগ্রাম লেখার জন্য এটিই একমাত্র নির্ভরযোগ্য উপায়।
জাস্টিন

@ mbomb007 দুঃখিত! এভাবেই আমি পাইথ কীভাবে লিখতে শিখেছি (উত্স কোডটি দেখে)। পাইথ নিয়ে মূলত কোনও ডকুমেন্টেশন নেই; আপনি মূলত পরীক্ষার এবং ত্রুটি দ্বারা সিনট্যাক্স শিখতে হবে।
জাস্টিন

22

আপনার চলকগুলি জানুন

পাইথের 3 টি বিভাগের ভেরিয়েবল রয়েছে: জেনেরিক প্রি-ইনিশিয়েলড ভেরিয়েবলস, ভেরিয়েবলগুলি ব্যবহারকারী ইনপুটের উপর ভিত্তি করে প্রি-ইনিশিয়ালাইজড এবং ভেরিয়েবলগুলি যা স্পষ্টতই প্রথম ব্যবহারের জন্য একটি অ্যাসাইনমেন্ট তৈরি করে।

জেনেরিক ভেরিয়েবল:

b = "\n"
d = " "
k = ""
G = "abcdefghijklmnopqrstuvwxyz"
H = {}                            # (empty dict)
N = '"'
T = 10
Y = []
Z = 0

ইনপুট-ইনিশিয়ালড ভেরিয়েবলগুলি:

Q = eval(input())
z = input()

মনে রাখবেন যে এই সূচনাটি কেবলমাত্র প্রদত্ত প্রোগ্রামে চালিত হবে যদি সম্পর্কিত ভেরিয়েবল কোডের একটি স্ট্রিংয়ের বাইরে ব্যবহার করা হয়। উপরন্তু, অর্ডার Q, তারপর zউভয় ব্যবহার করা হয়।

প্রথম ব্যবহারের ভেরিয়েবলগুলিতে অ্যাসাইনমেন্ট:

Jএবং K। আপনি যদি উভয়কে একই মান দিয়ে আরম্ভ করতে চান তবে আপনি এমন একটি ভাবের সাহায্যে এটি করতে পারেন KJ0, যা দৈর্ঘ্যের সমান J0K0


18

আপনার উত্তরগুলি পরীক্ষা করতে আরও নতুন অনলাইন দোভাষী ব্যবহার করুন ।

মনে রাখবেন এটি নতুন সফ্টওয়্যার, তাই এটি বাগি হতে পারে। আমাকে কোন সমস্যা রিপোর্ট করুন।


2
অসাধারণ! আমি গুগল দিয়ে এটি সন্ধান করতে পারি না, আমার যা প্রয়োজন!
theonlygusti

12

লাইনের শেষে স্ট্রিংগুলির শেষের উদ্ধৃতিগুলির প্রয়োজন নেই। উদাহরণ স্বরূপ:

"Hello, world!

সম্পূর্ণ বৈধ হ্যালো ওয়ার্ল্ড প্রোগ্রাম।


বেশ স্পষ্টতই, এটি "পাইথ প্রোগ্রামিং ল্যাঙ্গুয়েজ" এর প্রথম গুগল ফলাফল। আপনি কি ইওল্যাংগুলিতে নিজের পৃষ্ঠা তৈরি করেছেন?
theonlygusti

3
@ থিওনলিগুস্তি হ্যাঁ, আমি করেছি। এছাড়াও, গত অক্টোবরে এটি প্রথম ফলাফল ছিল না।
isaacg

9

Cবেস সংকোচনের জন্য ব্যবহার করুন

এটি আসলে অনথিভুক্ত, একটি স্ট্রিং উপর সি আসলে না সরাসরি chr, -> int- এ কিন্তু এর পরিবর্তে বেস 256 -> বেস 10 (যা এক গৃহস্থালির কাজ স্ট্রিং একই যায়)। এটি কোনও সংকোচনের ক্ষেত্রে অত্যন্ত সহায়ক, আমরা এই স্ক্রিপ্টটি সংক্ষেপে ব্যবহার করতে পারি:

sCMjQ256

নিন 12345678910, এটির ফলাফল ßÜ>(সেখানে কিছু অপ্রিনিত)।

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

Cআমাকে এই দেখানোর জন্য ধন্যবাদ @ এক্সনরের আরেকটি ব্যবহার , একটি স্বেচ্ছাসেবী সংখ্যক সংখ্যা তৈরি করছে। নিষ্পাপ উপায় হ'ল:

^TT

তবে আমরা এর সাথে আরও একটি বাইট আরও ভালভাবে করতে পারি:

CG

এই বেসটি 256 পুরো বর্ণমালা ডিকনভার্ট করে। ফলাফল 156490583352162063278528710879425690470022892627113539022649722= ~ 1.56e62


এখন নথিতে যুক্ত হয়েছে।
isaacg


8

সংক্ষিপ্ত ফাংশনাল ... এরর ... ফাংশন ব্যবহার করুন

থেকে ল্যামডা যুক্তি যখন mapবা reduceশুধু আর্গুমেন্ট এক অপারেশন প্রযোজ্য ,, আপনি ছোট ফর্ম ব্যবহার করতে পারেন, Mএবং FfMxসমতুল্য mfdx, এবং fFxএকই জিনিস .UfbZx। উদাহরণস্বরূপ, বলুন যে আমরা প্রতিটি ইনক্রিমেন্ট হিসাবে ইনপুট এবং আউটপুট হিসাবে সংখ্যার একটি তালিকা নিই। প্রথম পদ্ধতির হতে পারে:

mhdQ

যাইহোক, এটি আবার লিখতে পারেন:

hMQ

একটি অনুরূপ জিনিস প্রযোজ্য reduceসঙ্গে F। উদাহরণস্বরূপ, বলুন পূর্ণসংখ্যার তালিকার পণ্য গণনা করার জন্য একটি চ্যালেঞ্জ রয়েছে। আবার, প্রথম চেষ্টা হতে পারে:

.U*bZQ

তবে, এর সাথে Fএটি সংক্ষিপ্ত করা যেতে পারে:

*FQ

তিন বাইট শেভ করে ... খারাপ না!


এবং আপনার প্রয়োজন নেই Q, যেমন এটি পরিপূরক হয় যখন ফাংশনটি কোনও ইনপুট হারিয়ে *F
স্ট্যান স্ট্রাম

7

আপনার পাইথ বাস্তবায়ন আপ টু ডেট রাখুন।

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

কিছু সম্প্রতি যুক্ত বৈশিষ্ট্য: (10/19/14 হিসাবে)

y: *2সংখ্যা অনুসারে এবং স্ট্রিং এবং তালিকাগুলিতে সমস্ত উপ-তালিকার তালিকা হিসাবে কাজ করে। এই ক্ষেত্রে:

pyth -c 'y"abc'
['', 'a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']

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

উদাহরণস্বরূপ, এক বিলিয়নের চেয়ে সবচেয়ে ছোট প্রাইমটি খুঁজতে এখানে কোডটি রয়েছে:

pyth -c 'f!tPT^T9'
1000000007

এগুলি দরকারী সংযোজনের মতো দেখায় তবে পুরানোগুলির পরিবর্তে আপনি কী ব্যবহার করতে পারেন yz? mvdczdসবচেয়ে স্বল্পতম উপায় হতে পারে না ...
ডেনিস

1
@ ডেনিস আমি পুরানোটি ফেলে দিয়েছি yকারণ আমি মনে করি না পাইথের একাধিক সুপার-সহজে পার্সড ইনপুট ফর্ম্যাট থাকা দরকার, যেমন একটি পাইথন ফর্ম্যাট। সুতরাং, হ্যাঁ, আমি মনে করি mvdczdদুর্ভাগ্যক্রমে এটি করতে হবে।
isaacg

@ ডেনিস সমস্যা সমাধান হয়েছে, এটি কেবল rস্ট্রিং প্রসেসিং স্যুটে যুক্ত করেছে।
isaacg

rদেখতে বেশ দরকারী।
ডেনিস

@ আইস্যাএজি দুঃখিত যদি এটি অফ-টপিক হয় তবে আমি কীভাবে @ক্যালকুলেটর তৈরি করতে Fdr1 + 1 @ Q2Iq% Qd0d এ রুট অপারেশনটি ব্যবহার করব তা ভাবছি । আমি যখন এটি ব্যবহার করার চেষ্টা করি তখন indexপরিবর্তে এটি অর্থের ডিফল্ট হয় । এই আচরণের চারপাশে কোনও উপায় আছে?
স্টারডাস্টগোজেটা

5

ফাংশনে নামযুক্ত যুক্তি (আর সমর্থিত নয়)

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

DC=Z1RZ;C;C5

মুদ্রণ করবে:

1
5

এটি করার সময় আপনি অক্ষর সংরক্ষণ করতে J এবং K ব্যবহার করতে পারেন:

DgJ1K1R+JKg;g2;g2 3

কপি করে প্রিন্ট:

2
3
5

এটি সাধারণত পুনরাবৃত্ত আলগোরিদিমগুলির জন্য দরকারী is

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


16
বাহ - এমনকি আমি বুঝতে পারি নি পাইথ এটি সমর্থন করেছিল এবং আমি ভাষাটি লিখেছি!
isaacg

দুর্ভাগ্যক্রমে, এটি পাইথের আরও সাম্প্রতিক সংস্করণগুলিতে আর কাজ করে না।
isaacg

এই টিপটি কি অন্য পুরানো টিপসের মতো মুছে ফেলা উচিত? যদি তা না হয় তবে এই টিপটি কোন সংস্করণ (গুলি) প্রয়োগ করে তা চিহ্নিত করা উচিত।
mbomb007

@ mbomb007 আমি সংস্করণটি সন্ধান করতে চাইছি তবে আমি খুব অলস হয়েছি। আমি যদি এটি না খুঁজে পেলাম তবে আপনি যদি মনে করেন এটি ভাল হয় তবে আমি এটি মুছে ফেলব।
FryAmTheEggman

@ ফ্রাইআম দ্য এজিগম্যান আমি মনে করি এটি আপনার উপর নির্ভরশীল, কারণ এটি শিরোনামে বলে যে এটি সমর্থিত নয় not
mbomb007

5

2 উপাদান টিপলগুলি আনপ্যাক করে F

বলুন যে আপনার কাছে একটি 2 উপাদান টিউপল রয়েছে J = (a, b)এবং আপনি চান r(a,b)2 টি আরটি ফাংশন r এর জন্য।

এটি করার সহজ উপায় rhJeJ

r.*Jআনপ্যাক অপারেটরটি ব্যবহার করে এটি করার অভিনব উপায় using

এটি করার প্রকৃত অভিনব উপায় হ'ল rFJভাঁজ অপারেটরটি ব্যবহার করে।


এটি এখনও ব্যবহার করা সম্ভব .u? .uএখন কমিয়ে আনতে হবে বলে মনে হচ্ছে।
ভেন

.u ->। * এটি এমন একটি পরিবর্তন যা কিছুক্ষণ আগে করা হয়েছিল, তবে কখনও আপডেট হয়নি।
ইসাকাক

4

সংক্ষিপ্ত পাটিগণিত ফাংশন ব্যবহার করুন

h: তালিকার প্রথম উপাদানটি ফেরত দেওয়া ব্যতীত, এটি একটি সংখ্যা বৃদ্ধি করে, যেমন: hTমূল্যায়ন করে 11। চেয়ে খাটো +1T

t: এটি একটি সংখ্যা হ্রাস করে (তালিকার লেজ ফেরত ব্যতীত), যেমন tTমূল্যায়ন করে 9। চেয়ে খাটো -T1

y: এটি একটি সংখ্যাকে দ্বিগুণ করে, যেমন yTমূল্যায়ন করে 20, এর চেয়ে কম *T2বা কম +TT


4

mapতালিকা তৈরি করতে ব্যবহার করুন

এটি মূলত অজগরটির অভিনব তালিকা বোঝার সমতুল্য। প্রতিটি মূল্যকে পুনরাবৃত্তি করতে এবং মানচিত্রের জন্য কোনও বিদ্যমান তালিকা বা একটি ব্যাপ্তি ব্যবহার করুন, এমনকি মানটির কোনও কারণ নেই।

দুটি উদাহরণ:

  • 8 টি শূন্যের একটি তালিকা তৈরি করুন।

    mZ8 পরিবর্তে *8]Z

  • 0 এবং 9 এর মধ্যে 5 এলোমেলো সংখ্যার একটি তালিকা তৈরি করুন:

    mOT5 পরিবর্তে V5~Y]OT)

    দ্বিতীয়টি স্বয়ংক্রিয়ভাবে তালিকাটি বরাদ্দ করে Y(ভাল এটি ওয়াইয়ের সাথে যুক্ত হয়) তবে =YmOTU5এটি আরও ছোট।


4

EOF এ অন্তর্ভুক্ত প্রশ্ন

এটি আজকের মতো একটি নতুন পরিবর্তন।

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

এটি লেখার একটি সংক্ষিপ্ততম উপায়:

@,/Q2h*3QQ

যাইহোক, যেহেতু Qগুলি ফাইলটির শেষে অন্তর্ভুক্ত রয়েছে, তাই আমরা সহজভাবে লিখতে পারি:

@,/Q2h*3

2 বাইট সংরক্ষণ করা হচ্ছে।

নোট করুন যে অ-প্রয়োজনীয় আর্গুমেন্টগুলি সহ ফাংশনগুলিতে সেই আর্গুমেন্টগুলি পূরণ করা c"12 12"হবে না For উদাহরণস্বরূপ, একটি অন্তর্নিহিত থাকবে না Q, cকেবলমাত্র 1 টি যুক্তি প্রয়োজন argument


3

বারবার একটি ফাংশন প্রয়োগ করতে হ্রাস ব্যবহার করুন।

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

@,/Q2h*Q3Q

এটি 100 বার প্রয়োগ এবং ফলাফল মুদ্রণের সর্বাধিক সুস্পষ্ট উপায়

V100=Q@,/Q2h*Q3Q;Q

100 বার লুপ করুন, প্রতিবার কিউ এর মান আপডেট করুন, তারপরে লুপটি প্রিন্ট করুন এবং কিউ মুদ্রণ করুন

পরিবর্তে, আমরা একটি হ্রাস ফাংশন ব্যবহার করতে পারি যা সিকোয়েন্স ভেরিয়েবল ( H) উপেক্ষা করে ।

u@,/G2h*G3GU100Q

এটি 2 টি অক্ষর ছোট। এটি যদি তিনটি অক্ষর সংক্ষিপ্ত হয় তবে আপনি যদি ক্রমের উপাদানগুলির যতবার লুপ করার চেষ্টা করছেন।


3

সাধারণত যে কোনওটির সংক্ষিপ্ত বিকল্প রয়েছে

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

.Emgd5Q

তবে, যদি এটি কেবল সত্য / মিথ্যা হওয়ার দরকার হয়, সত্য / মিথ্যা না হয়, smযেহেতু বুলগুলিতে যোগফল কাজ করে।

smgd5Q

আমরা এমনকি ছোট্ট একটি fইল্টার দিয়েও করতে পারি :

fgT5Q

শেষটি যদিও দেখতে সত্যিই কুৎসিত দেখাচ্ছে।

জন্য .Aটু, আমি শুধু মনে করতে পারেন একটি এক গৃহস্থালির কাজ বেশি সংরক্ষণ বিপরীত শর্ত ব্যবহার এবং এটি অস্বীকার করা হয় .Am:

!f<T5Q

3

সমস্ত নিয়ন্ত্রণ প্রবাহ বিকল্পের দিকে নজর দিন

loops:

F: লুপের জন্য। পাইথনের মতোই।

V: একটি ব্যাপ্তির ওপরে লুপের জন্য। ভেরিয়েবল বা ব্যাপ্তি উভয়ই দিতে হবে না তাই 2 টি অক্ষর খাটো হবে।

W: যখন লুপ। পাইথনের মতোই।

#: লুপ যখন অসীম। ত্রুটি বা স্পষ্ট বিরতি দিয়ে পালানো। পাইথটিতে এখন কেবল try ... exceptবৈশিষ্ট্য।

কার্যাবলী:

D: সাধারণ সংজ্ঞায়িত। পাইথনের মতোই।

L: 1 টি যুক্তি, পাইথনের ল্যাম্বডার মতো কোনও অ্যাসাইনমেন্ট ফাংশন, তবে নাম নেই। ফাংশন নাম, ভেরিয়েবলের নাম এবং রিটার্ন ( R) দেওয়ার দরকার নেই, সুতরাং 3 টি অক্ষর খাটো হবে।

কার্যকরী প্রোগ্রামিং:

f: ফিল্টার - ইনপুট সিকোয়েন্সের উপাদানগুলি নির্বাচন করুন যা ইনপুট ল্যাম্বডায় সত্যতা দেয়।

f: ইনপুট এর চেয়ে বড় বা সমান প্রথম পূর্ণসংখ্যা যা সত্যবাদী ফিল্টার ফলাফল দেয়।

m: মানচিত্র - ইনপুট ল্যাম্বদা ব্যবহার করে ইনপুট ক্রমের উপাদানগুলিকে রূপান্তর করুন trans

u: হ্রাস করুন - ইনপুট ল্যাম্বদাতে ইনপুট ক্রম ভাঁজ করুন, তৃতীয় আর্গুমেন্টে সংগ্রহকারীকে আরম্ভ করুন।

o: অর্ডার - ইনপুট ল্যাম্বডাকে কী হিসাবে ব্যবহার করে ইনপুট ক্রমের পুরানো উপাদান।

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


.xব্লক ব্যতীত চেষ্টা করার জন্য আরও সম্প্রতি ব্যবহার করা যেতে পারে।
mbomb007

@ mbomb007 ব্লক ব্যতীত অবহেলা করার উপায় আছে, মানে কি এটি ফাঁকা রাখা যেতে পারে? উদা: .x{some_statments}{except_block - can this be empty}
গুরুপদ মামাদপুর

@ গুরুপদমমাদাপুর # ... Bআপনি যদি কোনও অভিব্যক্তির ভিতরে না থাকেন তবে এইভাবে ব্যবহার করা যেতে পারে
ইসাএচজি

3

একটি তালিকায় দুটি উপাদান স্যুইচ করা

দুটি উপাদান স্যুইচ করা বেশ ব্যয়বহুল কাজ হতে পারে। সুতরাং আপনি যে দুটি পদ্ধতির ব্যবহার করতে চান তা এখানে।

Tmp- পরিবর্তনশীল পদ্ধতির

প্রস্তুতিতে আমরা একটি তালিকা সংজ্ঞায়িত করি Yএবং এটি কয়েকটি নম্বর দিয়ে পূরণ করি। লক্ষ্যটি দ্বিতীয় এবং তৃতীয় উপাদানটি স্যুইচ করা।

=Y[1 3 5 3 6 7)AGH,1 2

আমরা কেবলমাত্র tmp ভেরিয়েবলটি নির্ধারণ J = Q[G]করি, প্রথম তালিকা অ্যাসাইনমেন্ট করি Y[G] = Y[H]এবং তারপরে দ্বিতীয় শেষ অ্যাসাইনমেন্ট করি Y[H] = J। কৌশলটি এখানে দুটি তালিকা কার্যনির্বাহী বাসা বাঁধাই, সুতরাং আপনাকে মুদ্রণ দমন করতে হবে না এবং দুবার রেফারেন্স ব্যবহার করতে হবে না Y

J@YGXXYG@YHHJ

পরিবর্তে

J@YG XYG@YHXYHJ

অনুবাদ পদ্ধতি

আপনি যে উপাদানগুলি স্যুইচ করতে চান তা যদি তালিকায় অনন্য হয় তবে এই পদ্ধতির ব্যবহার করুন। এটা সত্যিই সংক্ষিপ্ত। সুতরাং এবার আমরা প্রথম এবং তৃতীয় উপাদানটি (মানগুলি 1এবং 5অনন্য) স্যুইচ করি ।

=Y[1 3 5 3 6 7)K,Z2

এটি তালিকার অনুবাদ কার্যকারিতাটি ব্যবহার করে:

XYm@YdK)

এই অনুবাদ প্রতিটি উপাদান প্রতিস্থাপন Y[0]সঙ্গে Y[1]এবং প্রতি Y[1]সঙ্গে Y[0]। সুতরাং মানগুলি যদি অনন্য না হয় তবে খারাপ জিনিসগুলি সুখী হয়। উদাহরণস্বরূপ K,1 2ফলাফল [1, 5, 3, 5, 6, 7]

লক্ষ্য করুন যে ক্লোজিং বন্ধনীগুলি isচ্ছিক, যদি বিবৃতিটি আপনার কোডের সর্বশেষ।


3

সাথে ডিবাগিং <newline>

যদি আপনার কোডটি একটি অত্যাবশ্যক প্রোগ্রামিং শৈলীতে লেখা হয় তবে এটি ডিবাগ করা বেশ সহজ, যেহেতু আপনি সহজেই মধ্যবর্তী ফলাফল মুদ্রণ করতে পারেন। ( permalink )

FN.:Q2                loop
      =Y+-Y-FNhN      some random command
                Y     print intermediate result
                 ;Y   end for loop and print result

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

u(হ্রাস) ব্যবহার করে একই কোডটি হ'ল : ( পারমালিঙ্ক )

u        .:Q2Y   reduce .:Q2, start with G = Y
 +-G-FHhH        random command

আপনি যদি মধ্যবর্তী মানগুলি মুদ্রণ করতে চান তবে কেবল সন্নিবেশ করানোর জন্য \n: ( পারমালিঙ্ক )

u         .:Q2Y   reduce
   \nG             print(G)
 +-\nG-FHhH        random command

\naaএকটি নতুন লাইনে মুদ্রণ এবং ফেরত a। সুতরাং আপনি প্রোগ্রামটির কার্যকারিতা পরিবর্তন করার চিন্তা না করে এটি যে কোনও জায়গায় sertোকাতে পারেন।


আপনি আজকাল এটির জন্য নিউলাইনটি ব্যবহার করতে পারেন যা একটি নতুন লাইনও প্রিন্ট করে।
পূর্কাকুডারী

@ পিটু ১৯৯৮ হ্যাঁ, আমি এটি সর্বদা ব্যবহার করি। পোস্ট আপডেট করার সময়।
জাকুবে

3

সর্বোচ্চ দুটি পূর্ণসংখ্যার সন্ধান করা

g#

উদাহরণস্বরূপ, ধরুন আপনার কাছে J=5এবং আছে K=12। তারপরে g#JK= 12, এবং g#KJ= 12 ও ।

এটি @ পিটু 1998 দ্বারা আবিষ্কার করা হয়েছিল, যিনি এটিকে এভাবে রেখেছিলেন:

কেউ ইতিমধ্যে এটি খুঁজে পেয়েছে কিনা তা নিশ্চিত নন, তবে 2 বাইটে সর্বোচ্চ (এ, বি) করার একটি দুর্দান্ত উপায় রয়েছে, এর জন্য 3 ব্যবহার করার দরকার নেই eS,ABg#ABএকই জিনিস। (যদিও এটি অত্যন্ত অদক্ষ, যেহেতু এটি সর্বোচ্চ (1, এ-বি + 1) বার লুপ করে optim


@ জাকুবে এটি সত্য। আড্ডায় এটি টাইপ করার সময় আমি স্পষ্টতই কিছু ভুল করি।
পুরক্কা কুডারী

2

পাইথ এর joinপদ্ধতি

joinপাইথন পদ্ধতি যেহেতু এটি শুধুমাত্র স্ট্রিং যোগ দেয় তখন একটি সামান্য বিট বিরক্তিকর প্রায়ই হতে পারে। পাইথ joinবেশি উদার। এটি ডিফল্টরূপে সমস্ত বস্তুকে স্ট্রিংয়ে রূপান্তর করে।

যেমন jkUTদেয় 0123456789বা jb["abc"4,5\f]7দেয়

abc
4
(5, 'f')
[7]

সম্প্রতি, আরও রূপান্তরকারী-স্ট্রিং কার্যকারিতা যুক্ত হয়েছিল - প্রথম যুক্তিটি একটি স্ট্রিংতেও জোর করা হয়, উদাহরণস্বরূপ j2\a\b->"a2b"
isaacg

1

একটি সংখ্যা একটি পুরো সংখ্যা কিনা তা জানাচ্ছি

একটি ঝরঝরে কৌতুক Invariant ব্যবহার করে বলার জন্য কোনও সংখ্যাটি একটি সম্পূর্ণ সংখ্যা কিনা:

sI

আপনি এটি কেটে দিলে সংখ্যাটি পরিবর্তন না হয় কিনা এটি পরীক্ষা করে, এটি যদি পুরো সংখ্যাটি না হয় তবে তা নয়।

উদাহরণস্বরূপ, আপনি এটি নিখুঁত বর্গাকার চেক হিসাবে ব্যবহার করতে পারেন:

sI@Q2

1

প্যাকড পাইথ ব্যবহার করুন

প্যাকড পাইথ হ'ল একটি নতুন "প্রোগ্রামিং ল্যাঙ্গুয়েজ" যা পাইথের ঠিক ঠিক একই, এটি ব্যতীত অক্ষরের প্রতি 8 টি বিটের পরিবর্তে অক্ষরে 7 বিট ব্যবহার করে।

এটি ব্যবহার করতে পাইথ রিপোজিটরি ক্লোন করুন । ফাইলটি packed-pyth.pyদোভাষী হয়।

আপনার কোডটি বলুন "Hello, world!

প্রথমে এটি একটি ফাইলে রাখুন: echo -n '"Hello, world!' > code.pyth

এর পরে, পাইথ কোডটি প্যাকড পাইথ ফাইলটিতে প্যাক করুন: python3 packed-pyth.py -p code.pyth code.ppyth

শেষ পর্যন্ত, প্যাকড পাইথ কোডটি চালান: python3 packed-pyth.py code.ppyth

কোড চলমান -dথাকাকালীন , আপনি যে পাইথ কোডটি চালাচ্ছেন তা আসলে আপনি পতাকাটি সরবরাহ করতে পারেন এবং কোড যুক্ত ফাইলের পরে আপনি দ্বিতীয় কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট সরবরাহ করতে পারেন।

উপরের দিক:

  • কোডটি 1/8-এর দ্বারা সংক্ষিপ্ত হয়।

downside:

  • কেবলমাত্র ASCII।

  • কোনও ইন্টারেক্টিভ ইনপুট নেই।

  • সম্পূর্ণ ডিবাগ বিকল্পগুলি উপলভ্য নয়।

  • খারাপ ত্রুটি রিপোর্টিং।


1
যেমনটি আমরা নিরাপদ মোডের জন্য করেছি, আমরা কি এটি একটি পতাকাতে স্থানান্তর করতে পারি?
মালটিসেন

এটি দুর্দান্ত
বিটিডব্লিউ

@ মাল্টেসেন আমি মনে করি যে এটি বাইট স্কোর এক করে বাড়িয়ে দেবে।
isaacg

পাইথটি আরও প্যাক করা যায় না কেননা এটি কেবল প্রিন্টযোগ্য এএসসিআইআই ব্যবহার করে?
lirtosiast

1

ডিভিজিবিলিটি টেস্টিং Iএবং জিসিডি ব্যবহার করে

দাবি অস্বীকার: এটি কেবল অ-নেতিবাচক পূর্ণসংখ্যার জন্য কাজ করে।

দুটি অ-নেতিবাচক পূর্ণসংখ্যা বিভাজ্য কিনা তা পরীক্ষা করতে আপনি নিম্নলিখিতটি করতে পারেন:

iI<divisor><dividend>

যদি একটি দিয়ে বিভাজ্য এবং একটি ≥ খ ≥ 0 , তারপর GCD (ক, খ) = খ

এটি অগত্যা বাইটগুলি সংরক্ষণ করে না !%<dividend><divisor>, তবে এটি আপনাকে একটি সঞ্চয় এনে দিতে পারে, কারণ:

  • Qলভ্যাংশের সাথে কাজ করার সময় আপনি পাইথ প্রোগ্রামের শেষে (ঝরে পড়ার মতো ) অন্তর্নিহিত স্টাফগুলি টুইঙ্ক করতে সক্ষম হতে পারেন ।
  • আপনি এটি হিসাবে এটি ব্যবহার করতে পারেন <pfn>, যেহেতু এটি নিজস্বভাবে একটি ফাংশন।
  • এটি দ্বারা মডুলো পরিচালনা করে 0

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


আরও একটি সুবিধা: iIএটি একটি নিজস্ব ফাংশন, যেখানে !%না হয়, তাই আপনি এটি উপসর্গের কাজ হিসাবে ব্যবহার করতে পারেন।
এরিক আউটগল্ফার

@ এরিকথ আউটগলফার ধন্যবাদ, সুবিধাগুলির তালিকায় যুক্ত হয়েছে :)
মিঃ এক্সকোডার

0

নিজে প্রয়োগ করা একটি ফাংশনে ভেরিয়েবল বরাদ্দ করা

আপনার যদি আধ্যাত্মিক 1 এর কোনও ক্রিয়াকলাপ থাকে এবং আপনি এটি পরিবর্তনশীলতে প্রয়োগ করতে এবং নিজে প্রয়োগ করতে চান, আপনি নীচের বাক্য গঠনটি ব্যবহার করতে পারেন:

=<function><variable>

পরিবর্তে:

=<variable><function><variable>

উদাহরণস্বরূপ, আপনি যদি ভেরিয়েবলটি বৃদ্ধি করতে চান তবে আপনি এটি Zকরতে পারেন:

=hZ

যা এক বাইট ওভার সাশ্রয় করে =ZhZ

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