মরিচায় গল্ফ করার টিপস


24

যদিও মরিচা খুব কম, কোড গল্ফিং প্রতিযোগিতায় খুব কমই প্রতিযোগিতামূলক হয় (জাভা প্রায়শই খাটো হয়) তবে গল্ফটি এখনও মজাদার হতে পারে R জাস্ট কোডটি সংক্ষিপ্ত করার জন্য কিছু কৌশলগুলি কী কী?

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

উত্তর:


12

ফাংশনের পরিবর্তে ক্লোজার ব্যবহার করুন

একটি বন্ধ:

|n|n+1

একটি ফাংশন চেয়ে ছোট:

fn f(n:i32)->i32{n+1}

এক বিবৃতিতে দীর্ঘ বন্ধের জন্য ধনুর্বন্ধনী প্রয়োজন তবে এটি কোনও ক্রিয়াকলাপের চেয়ে আরও কম orter


9

.Ite ()। গণনা করা () এড়িয়ে চলুন

আসুন ধরা যাক আপনার কাছে এমন কিছু এক্স রয়েছে যা ইন্টিআইটরেটরের বৈশিষ্ট্যকে কার্যকর করে এবং আপনাকে একটি ফাংশন এফ কল করতে হবে যা কোনও উপাদানের সূচক এবং এর সাথে একটি রেফারেন্স নেয়। এটি করার মানক উপায়

x.iter().enumerate().map(f)

পরিবর্তে আপনি করতে পারেন

(0..).zip(x).map(f)

এবং নিজেকে কেবল অস্বাভাবিকভাবে দীর্ঘ গণনাই নয়, এটির জন্য কলও সংরক্ষণ করুন!


8

আপনার যদি অনেকগুলি পরিবর্তনীয় ভেরিয়েবলের প্রয়োজন হয় তবে এটি তাদের ঘোষণা এবং সেগুলির সূচনা করার জন্য প্রচুর জায়গা নষ্ট করতে পারে, যেহেতু প্রত্যেকটির জন্য মিউট কীওয়ার্ডের প্রয়োজন হয় এবং আপনি a = b = c = 0 এর মতো কিছু করতে পারবেন না। তারপরে একটি সমাধান হল একটি পরিবর্তনীয় অ্যারে ঘোষণা করা

let mut a=[0;5];

আপনি প্রতিটি অতিরিক্ত বনাম বনাম প্রতিবার 3 টি অতিরিক্ত বাইট ব্যয় করেন:

a[0]+=1;

তবে এটি প্রায়শই মূল্যবান হতে পারে।

একই কৌশলটির জন্য টিপলস ব্যবহার করা প্রায়শই আরও ভাল বিকল্প:

let mut t=(1,4,"this", 0.5, 'c');

অ্যারে বনাম প্রতিটি ব্যবহারে একটি বাইট সংরক্ষণ করার সুবিধা রয়েছে:

t.0=2

এটি তাদের বিভিন্ন ধরণের হতে দেয়। ডাউনসাইডে, এটি আরম্ভ করার জন্য আরও অক্ষর প্রয়োজন।


4

রূপান্তরিত &strহচ্ছেString

এগুলি কখনই করবেন না:

s.to_string()  // 13 bytes
s.to_owned()   // 12 bytes

এটি সর্বদা সংক্ষিপ্ত:

s.repeat(1)    // 11 bytes

যদি sএকটি স্ট্রিং আক্ষরিক হয়:

format!(s)     // 10 bytes

উদাহরণস্বরূপ: 2 বাইট সংরক্ষণ করার format!("")পরিবর্তে ব্যবহার করুন String::new()

টাইপ অনুমান কাজ করে:

s.into()       // 8 bytes

4

উদাহরণস্বরূপ স্ট্রিং ফর্ম্যাটিং print!()ব্যবহার করার সময়, বিন্যাসে প্রতি আইটেমের মধ্যে একটি বাইট সংরক্ষণ করার জন্য কেউ উভয় সংখ্যক এবং সংখ্যাযুক্ত বিন্যাস ব্যবহার করতে পারে:

একটি উদাহরণ সহ সেরা প্রদর্শিত:

fn main(){
    print!("{}{}{}. Yes, {0}{}{2}. All you other{1}{2}s are just imitating.",
           "I'm",
           " Slim",
           " Shady",
           " the real");
}

কোন ফলাফল:

I'm Slim Shady. Yes, I'm the real Shady. All you other Slim Shadys are just imitating.

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


3

পঠন পঠন

বিভিন্ন বিষয় বিবেচনা করার পরে, আমি মনে করি এটি সাধারণত একটি লাইন পুনরুদ্ধার করার সবচেয়ে স্বল্পতম উপায়। লাইনের একটি নতুন লাইন রয়েছে, এটি ছাঁটাই করে মুছে ফেলা যায় ( .trim()) বা যদি তা কেটে ফেলে দেওয়া যায় না।

let y=&mut"".into();std::io::stdin().read_line(y);

একাধিক লাইনের জন্য, linesপুনরুক্তি ব্যবহার করা যেতে পারে, পুনরাবৃত্ত রেখাটি নতুন লাইনে শেষ হয় না। আমদানি করার জন্য গ্লোব আমদানি প্রয়োজন BufRead, প্রকারের linesজন্য উপলব্ধ হওয়ার জন্য এটি প্রয়োজন StdinLock<'_>

use std::io::*;let y=stdin();y.lock().lines()

3

পিছনে যাওয়া সেমিকোলনগুলি এড়িয়ে যাওয়া

ফাংশনগুলিতে ফিরে আসার ক্ষেত্রে ()যেখানে সর্বশেষ প্রকাশটি প্রকারভেদযুক্ত ()সেখানে আপনার পিছনের দরকার নেই ;:

fn main(){print!("Hello, world!")}

2

স্ট্রিংগুলিতে নতুন লাইনের সাথে স্ট্রিংয়ের সাথে কাজ করার সময়, যদি আপনি \nস্ট্রিংটিতে বনাম উত্স কোডটিতে আক্ষরিক লাইন বিরতি ব্যবহার করেন তবে আপনি একটি বাইট সংরক্ষণ করুন ।

println!("Hello
World!");

এর চেয়ে 1 বাইট কম:

println!("Hello\nWorld!);

2

পুরো নম্বর ভাসমান পয়েন্ট নম্বর ব্যবহার করার সময়, আপনি .0একটি বাইট সংরক্ষণ করতে ট্রেলিং বাদ দিতে পারেন ।

let a=1.

এর চেয়ে 1 বাইট কম:

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