> <> (মাছ) এ গল্ফ করার টিপস


14

যেহেতু আমি আরও > << সাবমিশনগুলি ইদানীং চারদিকে ভাসতে দেখছি , তাই আমি টিপস পৃষ্ঠাটি পাওয়া ভাল ধারণা হতে পারে।

তারা নিবিড়ভাবে সম্পর্কিত না হলে দয়া করে প্রতি পোস্টে একটি টিপকে আঁকুন।

অফিসিয়াল পাইথন দোভাষী

অনলাইন দোভাষী (কিছু বাগ উপস্থিত রয়েছে, তবে বেশিরভাগ ক্ষেত্রে ভাল)


9
এসোলাং পৃষ্ঠাটি দেখার সময় আমি কেবল বুঝতে পেরেছিলাম:> << এর স্রষ্টার একটি নাম রয়েছে যা "হার্পুন" এর মতো শোনাচ্ছে।
mbomb007

আমি কীভাবে মাছের একটি নতুন লাইন প্রিন্ট করতে পারি?
ক্যাপ্টেন ম্যান

@ ক্যাপিটেনম্যান আপনি কোড পয়েন্টগুলি আউটপুট করতে পারেন oএবং যেহেতু নিউলাইনটি \nASCII 10 আপনি করতে পারেন ao
Sp3000

@ এসপি ধন্যবাদ, আমি CRপরিবর্তে চেষ্টা করছিলাম LFএবং dপরিবর্তে চাপ দিচ্ছিলাম a
ক্যাপ্টেন ম্যান

উত্তর:


5

0 এর বিপরীতে চেক করা হচ্ছে

সাধারণত ?!পরিবর্তে ব্যবহার করা 0=?একটি বাইট সংরক্ষণ করে।

তবে ?আপনি কিছুটা পুনর্গঠন করতে পারলে কেবলমাত্র একটি স্ট্যান্ডার্ড কখনও কখনও ভাল better

?!vA
  B

বনাম

?vB
 A

4

ইওএফের জন্য চেক করা হচ্ছে

যখন ইওএফ পৌঁছে যায়,> <> স্ট্যাকের উপর একটি -1 ধাক্কা দেয়, যা দুটি উপায়ের মধ্যে একটিতে চেক করা যেতে পারে:

:0(?
:1+?

ইওএফ পরীক্ষা করার উদ্দেশ্যে, এই দুটি প্রত্যাখ্যান, যাতে কোনটি বেশি উপকারী তা আপনার প্রোগ্রামের কাঠামোর উপর নির্ভর করে।


3

নতুন লাইন শুরু করে পরিবেষ্টনের দিকে ঝাঁপুন

কখনও কখনও একটি নতুন লাইন শুরু করার অর্থ পরবর্তী লাইনে প্রচুর নেতৃস্থানীয় হোয়াইটস্পেস নষ্ট করা। এমন পরিস্থিতিতে জাম্পিং কার্যকর হতে পারে।

এই ক্ষেত্রে,

[lots of code here]>[loop body]v
                   ^ ......... <

এক লাইনে এমনভাবে ফিট করার জন্য তৈরি করা যেতে পারে:

[lots of code here][loop body][jump]

ব্যবহারিক উদাহরণের জন্য, এখানে এক লাইনে হ্যালো ওয়ার্ল্ড প্রোগ্রামটি রয়েছে:

"!dlroW ,olleH"l?!;oe0.

3

ইনপুট সরল করতে মডুলাস ব্যবহার

এটি একটি টিপ খুব সহজ হতে পারে, তাই যদি এটি হয় আমি কেবল এটি প্রতিস্থাপন করব বা এটি মুছব।

ধরা যাক আপনি দুটি অক্ষরের ইনপুট নিতে চান, "ক" এবং "বি" এবং প্রতিটিটির জন্য যথাক্রমে 1 এবং 2 ফেরত চান। আপনি সম্ভবত এটির জন্য শর্তাবল ব্যবহার করতে চাইছেন, যেহেতু এটি সর্বাধিক উপলব্ধি করে এবং আমি এই নির্দিষ্ট উদাহরণের জন্য আরও ঘনীভূত ফর্মটি ব্যবহার করব।

i:"a")+1+n

এইটি ইনপুটটি "ক" এর চেয়ে বেশি এবং 1 যোগ করে কিনা তা পরীক্ষা করে দেখায় যেহেতু "এ" 0 এবং "বি" 1 প্রদান করবে, এটি 1 এবং 2 দেবে This এটি কাজটি বেশ ভাল করে তোলে, তবে আমাদের ক্ষেত্রে ইনপুট, আমরা আরও এগিয়ে যেতে পারে।

i:3%n

Mod 3, 97 এ, যা "a" এর সংখ্যার সমতুল্য, 1 হয়ে যায়, এবং 98, যা "b" গুলি, 2 হয় two দুটিরও বেশিের জন্য, এমন একটি মোড রয়েছে যা অনন্য ফলাফল দেয়, তবে আমার কাছে সহজ উপায়ে সবচেয়ে ছোটটি খুঁজে পাওয়ার জন্য গাণিতিক দক্ষতা নেই (যেমন আপনার কাছে যদি সেট {100,101,102,103} থাকে, তবে 104 এর জন্য অনন্য ফলাফল দেওয়া হবে) এতে প্রতিটি মান তবে খুব সহায়ক ফ্যাশনে নয়)। তবে বেশিরভাগ ক্ষেত্রে, ইনপুটটি কয়েকটি বর্ণানুক্রমিক অক্ষরের মধ্যে সীমাবদ্ধ থাকায় আপনি প্রায়শই এমন একটি মোড খুঁজে পাবেন যা কাজ করে।

ক্ষুদ্রতম মডুলাসটি সন্ধান করতে যা দুটি সংখ্যার জন্য অনন্য ফলাফল দেয়, ক, এবং, বি, আপনি নীচের মত কাজ করেন। A এবং b ( |a - b|) এর পার্থক্যের নিখুঁত মানটি ধরুন এবং সবচেয়ে ক্ষুদ্রতম সংখ্যা, n, যা এটি ভাগ করে না তা সন্ধান করুন। উদাহরণস্বরূপ, 97 এবং 98 এর জন্য |98 - 97| = 1, এবং তাই 2 সবচেয়ে ছোট মোড হবে (তবে আমাদের পরীক্ষার প্রোগ্রামের জন্য, এটি 97 এর জন্য 1 এবং 98 এর জন্য 0 দেয়, সুতরাং 3 টি আরও ভাল)।


3

শর্তযুক্ত হিসাবে জাম্প ব্যবহার করা

কিছু সময় আপনি> <> এ লেখার প্রোগ্রামগুলি বন্ধ করে দেবেন যার জন্য আপনাকে বিভিন্ন ইনপুট পাওয়ার পরে বিভিন্ন জিনিস করতে হবে। সাধারণত, আপনি ?এটি পার্স করার জন্য কন্ডিশনাল ( ) এবং দিক পরিবর্তনকারী ব্যবহার করবেন use কিছু ক্ষেত্রে, এটি সূক্ষ্মভাবে কাজ করে (বিশেষত যখন হ্যান্ডেল করার জন্য কম ধরণের ইনপুট থাকে) তবে কখনও কখনও আপনি এমন কিছু দেখায় শেষ করেন। (এই কোডটি অন্য কয়েকটি কৌশল ব্যবহার করে হ্রাস করা যেতে পারে এ বিষয়টি উপেক্ষা করুন এটি কেবল প্রদর্শনের জন্য)

i:"a"=?v:"b"=?v"c"=?v>
  .00n1< .00n2<.00n3<

যদিও এটি ঠিক আছে, এর কিছু শ্বেত স্পেস রয়েছে (যা আমি ব্যক্তিগতভাবে কখনই দেখতে পছন্দ করি না) এবং এর প্রচুর পুনরাবৃত্তি ( =?vএবং .00n) রয়েছে। এর পরিবর্তে, আপনি নিজের শর্ত হিসাবে এক লাফ এবং বিভিন্ন লাইন ব্যবহার করতে পারেন। এখানে একটি উদাহরণ:

i:"a")$"b")+1+0$.>
v1
v2
v3
<.00n

এটি 10 ​​বাইট অফ শেভ যা হচ্ছে তা এখানে:

i: আমরা একবার ইনপুট নকল করি যাতে আমরা এটি দুবার মূল্যায়ন করতে পারি

"a")$"b")+এটি তার নিজস্ব ধরণের টিপ হতে পারে তবে আমি এখানে যা করছি তা পরীক্ষা করে দেখছে ইনপুটটি "ক" অক্ষরের চেয়ে বড় কিনা এবং যদি এটি "বি" অক্ষরের চেয়ে বড় হয় এবং ফলাফল যুক্ত করে। "ক," এর জন্য এটি 0, "বি," 1 এবং "সি," 2 উপার্জন করবে।

1+0$.জাদু ঘটবে এই যেখানে; আমরা পূর্ববর্তী সরলকরণের ফলাফলটি গ্রহণ করি এবং 1 টি যোগ করি ("ক" এর জন্য 1 প্রদান করি, "খ" এর জন্য 2, "গ" এর জন্য 3), তারপর 0 টি চাপুন এবং মানগুলি অদলবদল করি। যখন আমরা লাফটি পৌঁছে যাব, এটি সেই অক্ষরের সাথে আমরা নির্ধারিত মানের সাথে সম্পর্কিত লাইনে চলে যাবে (উদাহরণস্বরূপ "a" এর জন্য লাইন 1)। এনবি লাইন 0 প্রোগ্রামের শীর্ষে।


1

কোড লিখন যা দুটি উপায়ে চলতে পারে

!আপনি যখন নিজের কোডটি এগিয়ে এবং পিছনের দিকে চালিত করতে চান (বা উপরে এবং নীচে) ট্রাম্পোলাইনগুলি ( ) খুব সহজ হয়। এই পরিস্থিতিতে কিছুটা সম্ভাবনা নেই, তবে প্যালিনড্রোম বা অনুরূপ চ্যালেঞ্জগুলির জন্য এই টিপটি কার্যকর হতে পারে।

এখানে একটি উদাহরণ রয়েছে: আমি একবারে কিছু কোড চালাতে চাই, তারপরে 0 টি না পৌঁছানো পর্যন্ত স্ট্যাক বিলোপের মানগুলি লুপ করব এবং তারপরে নীচে নামব। পয়েন্টারটি এই লুপটি প্রবেশ করে >। এটি সম্পাদন করতে আপনি একটি লাফ ব্যবহার করতে পারেন, যেমন

?!v80.>ao (ধরা যাক আমি প্রথমে একটি নতুন লাইন প্রিন্ট করতে চাই)

তবে যদি আমরা একবার চালাতে চাই কোডটি (অতীতের কোডটি >) লাইনটিকে 16 টি অক্ষরের বেশি করে তোলে, আমরা আর তিনটি অক্ষরে জাম্পটি ব্যবহার করতে পারি না। তবে এটি একটি উদাহরণ যেখানে সামনের দিকে এবং পিছনের দিকে চালানো তুচ্ছ ...

?!v!?<>ao>

এগিয়ে যাওয়া, আমরা একটি নতুন লাইন মুদ্রণ করি এবং তারপরে আঘাত করে ?!vকোনটি মানটি যদি 0 না হয় তবে তা ট্রামপোলিনের কারণে আমরা পরবর্তীটি এড়িয়ে ?চলে এবং পিছনে চলে যাই। একই জিনিস ঘটে এবং আমরা 0 টি আঘাত না করা অবধি লুপটি অবিরত থাকে hit

এটি একটি অদ্ভুতভাবে নির্দিষ্ট উদাহরণ, তবে কিছু অ্যাপ্লিকেশন রয়েছে (সম্ভবত খুব বেশি নয়)।

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