গল্ফ অনুশীলন: পাইথন [বন্ধ]


31

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

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

আপনার স্কোর, যা আপনি হ্রাস করার চেষ্টা করছেন তা হ'ল আপনার কোডের সমস্ত স্নিপেটের মোট দৈর্ঘ্য। রেফারেন্স স্নিপেটের দৈর্ঘ্য ১৫০ T টাইব্রেকার প্রথম পোস্ট।

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

বৈধতার উপর বিশদ: কার্যকরী সমতুল্য মানে কোডটিকে কোনও প্রোগ্রামে তার আচরণকে প্রভাবিত না করে (অভিব্যক্তির অংশ হিসাবে মেমরির ব্যবহার এবং অপারেটরের অগ্রাধিকারের মতো বিষয়গুলি উপেক্ষা করে) প্রতিস্থাপন করা যেতে পারে। এক্সপ্রেশনগুলির দ্বারা সমমানের মানগুলি তৈরি করা উচিত ==। নোট করুন 1.0==1==True। অন্যথায় না বলা পর্যন্ত আপনার কোডের কোনও পার্শ্ব-প্রতিক্রিয়া হওয়া উচিত। আমি সমস্যাগুলি সংস্করণ-নির্দিষ্ট হওয়ার ইচ্ছা করি না, তবে কেবলমাত্র যদি আপনি প্রতিটি সমস্যার জন্য পাইথন সংস্করণ নির্দিষ্ট করতে পারেন।

সমস্যা 1: যতক্ষণ তালিকায় Lকমপক্ষে 7 টি উপাদান রয়েছে ততক্ষণ পুনরাবৃত্তি করুন

# 16 chars
while len(L)>=7:

সমস্যা 2 : দুটি ভাসমান xএবং yউভয়ই ইতিবাচক কিনা তা পরীক্ষা করে দেখুন ।

# 11 chars
x>0 and y>0

সমস্যা 3 : যদি বুলিয়ান bসত্য হয় তবে এর প্রথম উপাদানটি সরান L। অন্যথায় এটি অপরিবর্তিত রেখে দিন।

# 12 chars
if b:L=L[1:]

সমস্যা 4 : খালি খালি তালিকার তালিকার সমস্ত উপাদান Lসমান কিনা তা পরীক্ষা করে দেখুন। এই সমস্যার জন্য, তালিকাটি পরিবর্তন করা ঠিক আছে OK

# 22 chars
all(x==L[0]for x in L)

সমস্যা 5 : কেবলমাত্র ইতিমধ্যে সেই সংখ্যাটি অন্তর্ভুক্ত থাকলে nতালিকার শেষে একটি সংখ্যা যুক্ত করুন।LL

# 16 chars
if n in L:L+=[n] 

সমস্যা 6 : একটি ফ্লোটের চিহ্নটি প্রকাশ করুন x: +1ধনাত্মক হিসাবে, 00 এর -1জন্য, নেতিবাচক জন্য।

# 20 chars
abs(x)/x if x else 0

সমস্যা 7L বুলিয়ানদের তালিকার প্রথম উপাদান যতক্ষণ না একটি লুপ চালিয়ে যান TrueLখালি থাকলেও থামুন।

# 17 chars
while L and L[0]:

সমস্যা 8 : n1 এর চেয়ে বেশি দীর্ঘ হিসাবে একটি লুপ চালিয়ে যান The সংখ্যাটি nইতিবাচক পূর্ণসংখ্য হিসাবে গ্যারান্টিযুক্ত।

# 10 chars
while n>1:

সমস্যা 9 : কোনও স্ট্রিং হিসাবে উপস্থাপিত কোনও পূর্ণসংখ্যা sনেতিবাচক কিনা তা পরীক্ষা করুন (যেমন, '-' দিয়ে শুরু হয়) starts

# 9 chars
s[0]=='-'

সমস্যা 10 : একটি বুলিয়ান রূপান্তর bকরতে "Win"/ "Lose"সঙ্গে True-> "Win"এবং False-> "Lose"

# 17 chars
["Lose","Win"][b]

সতর্কতা: নীচের স্পিলাররা, আপনি যদি এগুলি নিজে সমাধান করতে চান তবে নীচে স্ক্রোল করবেন না।

আপনি যদি কেবল সমস্যার জন্য অনুকূল স্কোরটি জানতে চান:

সমস্যা 1:

12

সমস্যা 2:

5

সমস্যা 3:

7

সমস্যা 4:

13

সমস্যা 5:

13

সমস্যা 6:

8

সমস্যা 7:

12

সমস্যা 8:

9

সমস্যা 9:

5

সমস্যা 10:

15


3
আমি বন্ধ করে ভোট দিয়েছি, যেহেতু এই চ্যালেঞ্জটি সদৃশ জবাবগুলি উত্সাহ দেয় এবং কার্যকরভাবে একটিতে অনেকগুলি প্রশ্ন, যেহেতু স্বতন্ত্র চ্যালেঞ্জগুলির মধ্যে যা কিছু আছে তার মধ্যে কোনও ইন্টারঅ্যাকশন নেই। আমি মনে করি আমাদের যদি এই জাতীয় প্রশ্ন থাকে তবে কেবল একটি উত্তর থাকা উচিত যা একটি সম্প্রদায় উইকি iki
Wrzlprmft

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

2
আমি মনে করি এটি একটি দুর্দান্ত ধারণা এবং আরও বেশি ভাষার জন্য আমাদের গল্ফ অনুশীলন করা উচিত।
রবি Wxyz

2
@Wrzlprmft এখন মেটা নিয়ে এটি নিয়ে আলোচনা চলছে । এই প্রশ্নের মন্তব্যগুলিকে দূষিত না করে আরও সহজ আলোচনার জন্য দয়া করে আপনার মতামতটি ভয়েজ করুন।
ফায়ারফ্লাই

3
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ অংশগুলির মধ্যে কোনও ইন্টারঅ্যাকশন ছাড়াই বহু-অংশীকরণের চ্যালেঞ্জগুলি অনুমোদিত নয়। meta.codegolf.stackexchange.com/a/8464/45941
মেগো

উত্তর:


21

মোট: 104 101 99 অক্ষর

সমস্যা ঘ

12 চর
while L[6:]:

সমস্যা 2

5 অক্ষর
x>0<y

সমস্যা 3

7 অক্ষর
L=L[b:]

সমস্যা 4

13 অক্ষর
len(set(L))<2
L[1:]==L[:-1]

সমস্যা 5

13 অক্ষর
L+=set(L)&{n}

সমস্যা 6

১১ টি চর
(x>0)-(x<0)

৮ টি চর (পাইথন ২)
cmp(x,0)

সমস্যা 7

12 চর
while[.5]<L:

সমস্যা 8

9 টি চর
while~-n:

সমস্যা 9

5 অক্ষর
s<'.'

সমস্যা 10

15 অক্ষর
'LWoisne'[b::2]


@ ফ্রাইআম দ্য এজিগম্যান আপনি কি পার্শ্ব প্রতিক্রিয়াটি ব্যাখ্যা করতে পারেন? আমি একটি বৈধ সমাধান হতে চেয়েছিলেন।
xnor

@ এক্সনর কিছুই নয়, আমি সম্পূর্ণ ভুল ছিলাম। আমি আজ কিছু শিখেছি :)
FryAmTheEggman

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

7

মোট আকার: 128 122 120 117 116 115 111 107 104

সমস্যা ঘ

যতক্ষণ তালিকায় Lকমপক্ষে 7 টি উপাদান রয়েছে ততক্ষণ পুনরাবৃত্তি করুন Keep

15 টি অক্ষর
while len(L)>6:
(হ্যাঁ, আমি এটিতে 3 বাইট সঞ্চয় করতে পারি, তবে আমি ঘটনাক্রমে সমাধান Sp3000 এর উত্তর দেখেছি, সুতরাং আমি এই তিনটি বাইট দাবি করব না))

সমস্যা 2

দুটি ভাসমান xএবং yউভয়ই ইতিবাচক কিনা তা পরীক্ষা করে দেখুন ।

5 অক্ষর
x>0<y

সমস্যা 3

যদি বুলিয়ান bসত্য হয় তবে এর প্রথম উপাদানটি সরান L। অন্যথায় এটি অপরিবর্তিত রেখে দিন।

7 অক্ষর
L=L[b:]

সমস্যা 4

Lসংখ্যাগুলির খালি খালি তালিকার সমস্ত উপাদান সমান কিনা তা পরীক্ষা করে দেখুন। এই সমস্যার জন্য, তালিকাটি পরিবর্তন করা ঠিক আছে OK

13 অক্ষর
L[1:]==L[:-1]

সমস্যা 5

একটি সংখ্যা সংযোজন করুন nএকটি তালিকা শেষে Lশুধুমাত্র যদি Lইতিমধ্যে যে সংখ্যা উপস্থিত রয়েছে।

15 অক্ষর
L+=[n]*(n in L)
বা
L+=[n][:n in L]

সমস্যা 6

একটি ফ্লোটের চিহ্নটি প্রকাশ করুন x: +1ধনাত্মক হিসাবে, 00 এর -1জন্য, নেতিবাচক জন্য।

8 টি অক্ষর, পাইথন 2
cmp(x,0)
ডক্স অনুসারে এটি কোনও ধনাত্মক / নেতিবাচক মান দিতে পারে তবে conক্যমত্য এটি সর্বদা -1, 0, 1 প্রদান করে।

সমস্যা 7

Lবুলিয়ানদের তালিকার প্রথম উপাদান হিসাবে লুপটি চালিয়ে যান TrueLখালি থাকলেও থামুন।

12 চর
while[1]<=L:

সমস্যা 8

n১ এর চেয়ে বড় লুপটি চালিয়ে যান The সংখ্যাটি nধনাত্মক পূর্ণসংখ্যা হিসাবে গ্যারান্টিযুক্ত।

9 টি চর
while~-n:

সমস্যা 9

স্ট্রিং হিসাবে উপস্থাপিত কোনও পূর্ণসংখ্যা sনেতিবাচক কিনা তা পরীক্ষা করুন (যেমন, '-' দিয়ে শুরু হয়)।

5 অক্ষর
s<'.'

সমস্যা 10

একটি বুলিয়ান রূপান্তর bকরতে "Win"/ "Lose"সঙ্গে True-> "Win"এবং False-> "Lose"

15 অক্ষর
"LWoisne"[b::2]


আপনি দয়া করে পৃথক দৈর্ঘ্য স্পয়লার করতে পারেন?
xnor

@xnor কোন সমস্যা নেই, সম্পন্ন হয়েছে।
মার্টিন ইন্ডার

7

মোট: 106 104 102 অক্ষর

সমস্যা ঘ

12 চর
while L[6:]:

সমস্যা 2


x>0<y
তুলনা শৃঙ্খলার জন্য 5 অক্ষর হুজাহ

সমস্যা 3

7 টি অক্ষর
L=L[b:]
ভাল পুরানো অন্তর্নিহিত রূপান্তর

সমস্যা 4

১৩
len(set(L))<2

বিকল্পভাবে:
L[1:]==L[:-1]

পাইথন ২-এ আমরা যা চাই তা প্রত্যাখ্যান করার বোকামি উপায়:
","in`set(L)`

আমি নিশ্চিত নই যে "তালিকাটি সংশোধন করা ঠিক আছে" এর প্রাসঙ্গিকতা যদিও, তবে আমি সবচেয়ে ভাল 14 টি চরিত্রের কথা ভাবতে পারি (এবং এটি আসলে ভুল):
L==[L.pop()]+L

সমস্যা 5

13 অক্ষর
L+={n}&set(L)
সেট সহ মজার জিনিস করছেন

সমস্যা 6

১১ টি চর
(x>0)-(x<0)

সমস্যা 7

12 অক্ষর
while[1]<=L:
তালিকাগুলির ক্রমের তালিকা ব্যবহার করে

সমস্যা 8

9 টি চর
while~-n:

সমস্যা 9

5 টি অক্ষর
s<"."
ডিকোসোগ্রাফিকাল ক্রম ব্যবহার করে

সমস্যা 10

15 অক্ষর
"LWoisne"[b::2]

বিকল্পভাবে:
b*"Win"or"Lose"


1
আমি এর আগে আপনার # 10 এর বিকল্প বিবেচনা করিনি। এর অর্থ হল যে কোনও ব্যক্তি তারের দৈর্ঘ্য বিবেচনা না করেই স্বাভাবিক ইন্টারলিভিং ট্রিকের মতো একই চরিত্রের সঞ্চয় পেতে পারেন, বুলে অগ্রাধিকারের বিষয়গুলি বাদ দিয়ে। আমি এই টিপস যোগ করব।
xnor

1
@ এক্সনোর আহা হ্যাঁ, আমি ভেবেছিলাম এটি বেশ সুন্দর ছিল। আপনার কাছে আরও স্ট্রিং থাকলে এটি ততটা ভাল নয়, যা ডাউনসাইড (যেমন b0, 1 বা 2 এবং আপনি যা করতে পারেন তা হ'ল (b-1)*"Hello"or b*"Goodbye"or"Good Afternoon")
Sp3000


এটি আসলে তিনটি স্ট্রিংয়ের জন্য খারাপ নয়। আপনি পেরেনগুলি দিয়ে মুছে ফেলতে পারেন ~b*"Hello"
xnor

@ এক্সনর এই মুহুর্তে, ["Good Afternoon","Goodbye","Hello"][b]জিততে হবে: পি
এসপি 3000

6

মোট: 99 বাইট

সমস্যা ঘ

12 বাইট
while L[6:]:

সমস্যা 2

5 বাইট
x>0<y

সমস্যা 3

7 বাইট
L=L[b:]

সমস্যা 4

13 বাইট
len(set(L))<2

14 বাইট বিকল্প
min(L)==max(L)
set(L)=={L[0]}

সমস্যা 5

13 বাইট
L+=set(L)&{n}

সমস্যা 6

8 বাইট
cmp(x,0)

সমস্যা 7

12 বাইট
while[1]<=L:

সমস্যা 8

9 বাইট
while~-n:

সমস্যা 9

5 বাইট
s<'.'

সমস্যা 10

15 বাইট
b*"Win"or"Lose"
- বা -
"LWoisne"[b::2]


4

1: 12
while L[6:]:
2: 5
y>0<x
3: 7
L=L[b:]
4: 15
L==L[:1]*len(L)
5: 15
L+=[n]*(n in L)বা L+=[n][:n in L]
6: 11
এটিই কেবলমাত্র যার জন্য একটি মূ .় অভিব্যক্তি তাত্ক্ষণিকভাবে আমার মনে ঝাঁপ দেয় নি, তবে আমি মনে করি সঠিক উত্তর পেয়েছি। সম্পাদনা: না, এটি ভয়াবহ ছিল।
(x>0)-(x<0)
7: 12
while[1]<=L:
অথবা যদি প্রোগ্রামটি এর পরে সম্পূর্ণ হয় তবে তা দুর্দান্ত while L[0]
8: 9
while~-n:
9: 5
অনেকগুলি স্ট্রিং এখানে কাজ করবে তবে "নিষ্পাপ পদ্ধতি" মজার।
s<'0'
10: 15
'LWoisne'[b::2]

মোট: 106


আপনার # 4 ব্যবহার করতে হবে না [L[0]]?
ফায়ারফ্লাই

নিবন্ধন করুন এটি এর মতো খারাপ নয়, তবে এক বাইটের দামও পড়ে।
'20:

2
আপনার # 9 একটি দুর্দান্ত গল্ফিং পাং!
xnor

3

মোট আকার: 123 121 120 116

# 1

(12) while L[6:]:

# 2

(10) min(x,y)>0

# 3

(7) L=L[b:]

# 4

(13) len(set(L))<2বাL[1:]==L[:-1]

# 5

(15) L+=[n]*(n in L)

6 নম্বর

(১৪) x and abs(x)/xবা (হাল ছাড়ার পরে ক্লাউডিয়ুর সমাধান দ্বারা অনুপ্রাণিত)x and(x>0)*2-1

# 7

(15) while[0]<L[:1]:

# 8

(9) while~-n:

# 9

(5) s<'.'

# 10

(15) b*"Win"or"Lose"


1

মোট: 121

প্রথম প্রচেষ্টা:

সমস্যা ঘ

15 অক্ষর
while len(L)>6:

সমস্যা 2

5 অক্ষর
x>0<y

সমস্যা 3

7 অক্ষর
L=L[b:]

সমস্যা 4

13 অক্ষর
len(set(L))<2

সমস্যা 5

16 অক্ষর
if n in L:L+=[n]

সমস্যা 6

16 অক্ষর
x and(1,-1)[x<0]

সমস্যা 7

16 অক্ষর
while(L+[0])[0]:

সমস্যা 8

10 অক্ষর
while n>1:

সমস্যা 9

8 টি চর
s[0]<'0'

সমস্যা 10

15 অক্ষর
"LWoisne"[b::2]

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