রাউন্ড টু এন সিগ ফিজ


20

চ্যালেঞ্জ

একটি নম্বর দেওয়া xএবং একটি সংখ্যা n, গোল সংখ্যা xথেকে nউল্লেখযোগ্য পরিসংখ্যান এবং আউটপুট ফলাফল।

উল্লেখযোগ্য পরিসংখ্যান

একটি সংখ্যার উল্লেখযোগ্য পরিসংখ্যান হ'ল অঙ্কগুলি যা এর পরিমাপের রেজোলিউশনে অবদান রাখার অর্থ বহন করে। এতে শীর্ষস্থানীয় শূন্যগুলি বাদে সমস্ত সংখ্যা অন্তর্ভুক্ত রয়েছে ।

মনে রাখবেন যে দশমিক পয়েন্টের পরে নেতৃস্থানীয় শূন্যগুলি এখনও তুচ্ছ পরিমাণে।

অঙ্কটি গোল করার সময়, নিম্নলিখিত অঙ্কটি পাঁচটির চেয়ে বড় বা সমান হলে আপনাকে অবশ্যই শূন্য থেকে দূরে থাকতে হবে।

দশমিক পয়েন্টের পরে সমস্ত অনুসরণকারী শূন্যগুলি উল্লেখযোগ্য হিসাবে গণনা করা হয়।

ইনপুট

প্রথম সংখ্যাটি হবে x, নম্বরটি গোল করা হবে। দ্বিতীয় সংখ্যাটি nহ'ল, আপনার যে পরিমাণ উল্লেখযোগ্য পরিসংখ্যানটি গোল xকরা উচিত ।

x-1,000,000,000 এবং 1,000,000,000 সমেত একটি সংখ্যা হবে (আপনার কোডটি পূর্ণসংখ্যা এবং ভাসমান পয়েন্ট উভয়ই পরিচালনা করবে)। nসমেত 1 এবং 50 এর মধ্যে একটি ধনাত্মক পূর্ণসংখ্যা হবে। nঅঙ্কের নুনবারের চেয়ে বড় কখনই হবে না x

ইনপুট কখনই 0বা কোনও ফর্ম হতে পারে না 0, যেমন 0.000বা 000

উদাহরণ

Inputs: 2.6754, 2
Output: 2.7

একটি আউটপুট 2.7000অবৈধ হবে কারণ দশমিক বিন্দুর পরে অনুসরণকারী শূন্যগুলি উল্লেখযোগ্য পরিসংখ্যান হিসাবে গণনা করা হয়।


Inputs: 0.00034551, 4
Output: 0.0003455

Inputs: 50237.1238, 3
Output: 50200

দ্রষ্টব্য যে এটির দশমিক পয়েন্ট থাকা উচিত নয়।


Inputs: 2374905, 1
Output: 2000000

Inputs: 543.0489, 4
Output: 543.0

Inputs: 15, 1
Output: 20

Inputs: 520.3, 3
Output: 520

আপনি যদি চান, আপনি 520.পরিবর্তে আউটপুট করতে পারেন কিন্তু না 520.0


Inputs: -53.87, 2
Output: -54

Inputs: 0.0999, 2
Output: 0.10

বিধি

অন্তর্নির্মিত ফাংশন এবং লাইব্রেরি যা আপনাকে nউল্লেখযোগ্য পরিসংখ্যানগুলিতে কোনও সংখ্যাকে গোল করে দেওয়ার অনুমতি দেয় না।

জয়লাভ

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


4
কারণ Inputs: 520.3, 3, উত্তরের দশমিক বিন্দু 520.কি গুরুত্বপূর্ণ নয়?
গ্রেগ মার্টিন

5
@ গ্রেগমার্টিন আমি বিশ্বাস করি যে এটিই একমাত্র জিনিস যা এটির জন্য 3 সিগ ডুমুর বনাম 2
সোয়েভার

3
পছন্দ করুন দশমিক পয়েন্ট এটির জন্য প্রয়োজন হবে।
mbomb007


4
@ ডিএলকাস সে কারণেই যদি ফলাফল হয় তবে আপনি এটি লিখতে 2.0 x 10^2চাইতেন, 2 সিগফিগগুলি দেখিয়ে।
mbomb007

উত্তর:


3

পাইথন 3, 83 বাইট

(পিএইচপি উত্তরের অনুরূপ)

from math import *
def s(x,n):
 y=10**(ceil(log10(abs(x)))-n)
 return y*round(x/y)

পরীক্ষার কেস:

tests = [(2.6754,2), (0.00034551, 4), (50237.1238, 3),
        (2374905, 1), (543.0489, 4), (15, 1), (520.3, 3), (-53.87, 2)]

print ([s(x,n) for x,n in tests])

আউটপুট:

[2.7, 0.0003455, 50200, 2000000, 543.0, 20, 520, -54]

কিছুটা দীর্ঘ হওয়া ছাড়াও, অন্য একটি পদ্ধতি যা আমি বিবেচনা করেছি:

from math import *
def s(x,n):
 z=ceil(log10(abs(x)))
 return "%.*f"%(n-z,10**z*round(x/10**z,n))

... এর ইনপুট (15, 1) এর জন্য একটি ভুল আউটপুট উত্পাদন করে:

['2.7', '0.0003455', '50200', '2000000', '543.0', '10', '520', '-54']

... round()ফাংশনে ভাসমান পয়েন্ট অসম্পূর্ণতার কারণে । আমার কাছে এটি সম্ভবত মনে হয় যে আমি পরীক্ষার কেসগুলি খুঁজে পেয়েছি যা যদি যথেষ্ট পরিশ্রমী দেখায় তবে "গোল থেকে শূন্য দশমিক স্থানে" পদ্ধতিটি ভেঙে দেয়।

সুতরাং, এটি আমার কাছে মনে হয় যে আমার সমাধানটি সব ক্ষেত্রেই 100% সঠিক নয় এবং দশমিক হিসাবে গণনা করা না হলে এটি হবে না। এই সমস্যাটি এফপি গাণিতিক ব্যবহার করে এমন কোনও ভাষায় সমাধানগুলিকে প্রভাবিত করতে পারে।


শরীরকে sএকই লাইনে রেখে কিছু বাইট সংরক্ষণ করুন , তারপরে সেমিকোলন ব্যবহার করে। def s(x,n):y=10**(ceil(log10(abs(x)))-n);return y*round(x/y)
সাইওস

এছাড়াও, আপনি আপনার স্থান অপসারণ করতে পারেন import *করতে এটাimport*
Cyoce

আমার জন্য আপনার উত্তর ঠিক নেই কারণ বিধিগুলি বলে: "অন্তর্নির্মিত ফাংশন এবং লাইব্রেরি যা আপনাকে উল্লেখযোগ্য পরিসংখ্যানগুলিতে সংখ্যার গোল করার অনুমতি দেয় না।" এবং আপনি রাউন্ড ফাংশনটি এন = 0
রোজলুপ

@ রসলুপি: round()ফাংশনটি nদশমিক জায়গায় ঘুরে বেড়ায় , nউল্লেখযোগ্য ব্যক্তিত্বের কাছে নয়, তাই এটি এই গল্ফ ইভেন্টের জন্য অনুমোদিত ছিল।
সাইমন

5

পিএইচপি, 130 বাইট

<?=number_format($r=round($i=$argv[1],($n=$argv[2])-ceil(log(abs($i),10))),($d=(1+floor(log(abs($r),10))-$n))<0?abs($d):0,".","");

পিএইচপি, 133 বাইট উল্লেখযোগ্য চিত্রগুলির জন্য <1 মান নিয়ে কাজ করে

<?=number_format($r=round($i=$argv[1],($n=$argv[2])-floor(log(abs($i),10))-1),($d=(1+floor(log(abs($r),10))-$n))<0?abs($d):0,".","");

পিএইচপি, 56 বাইট কাজ করে তবে আনুষঙ্গিক জিরোগুলি এড়িয়ে যায়

<?=round($i=$argv[1],$argv[2]-floor(log(abs($i),10))-1);

কেউ পিএইচপি-তে রাউন্ড ফাংশনটি চুরি বা মুছে ফেলেছে! চ্যালেঞ্জটিকে আরও আকর্ষণীয় করে তুলতে। 127 বাইট

<?=ceil($x=($i=$argv[1])*10**(($r=$argv[2])-($l=floor(log(abs($i),10))+1)))-$x<=0.5?ceil($x)*10**($l-$r):floor($x)*10**($l-$r);

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

লাইব্রেরি রাউন্ড ব্যবহার না করা হলে ঠিক আছে ....
রোজলুপুর

3

ব্যাচ, 660 652 বাইট

@echo off
set m=%1.
set s=
if %m:~,1%==- set s=-&set m=%m:~1%
:m
if %m:~,1%==0 set m=%m:~1%&goto m
set d=%m:.=%
:d
if %d:~,1%==0 set d=%d:~1%&goto d
for /l %%i in (1,1,%2) do call set d=%%d%%0
call set r=%%d:~%2,1%%
call set d=%%d:~,%2%%
if %r% leq 4 goto r
set r=
:i
set/ai=1+%d:~-1%
set r=%i:~-1%%r%
set d=%d:~,-1%
if %i% leq 9 set d=%d%%r%&goto r
if not "%d%"=="" goto i
set d=1%r:~1%
set m=1%m%
set m=%m:1.0=.%
:r
if %m:~,2%==.0 set m=%m:.0=.%&set d=0%d%&goto r
set i=0
set p=.
:l
if %m:~,1%==. echo %s%%i%%p%%d%&exit/b
if %i%==0 set i=
if "%d%"=="" set d=0&set p=
set i=%i%%d:~,1%
set d=%d:~1%
set m=%m:~1%
goto l

ব্যাখ্যা: .প্যারামিটারটিতে ইতিমধ্যে একটি না থাকলে তার সংক্ষেপে শুরু হয় , তারপরে চিহ্নটি (যা সংরক্ষণ করা হয়েছে) এবং কোনও নেতৃস্থানীয় শূন্যগুলি ছাঁটাই করে দেয়। ফলাফল পরিবর্তনশীল mপরে জন্য সংরক্ষণ করা হয় কারণ এটি ফলাফলের কাঙ্ক্ষিত মাত্রা আমাদের বলবে। .এরপরে যে কোনও গুলি সরানো হয়, যার ফলে আরও শীর্ষস্থানীয় শূন্য হতে পারে, তাই সেগুলিও সরানো হয়। nগোল করার পক্ষে পর্যাপ্ত অঙ্ক রয়েছে তা নিশ্চিত করার জন্য শূন্যগুলি প্রত্যয়যুক্ত হয় nএবং তারপরে প্রথম এবং প্রথম nসংখ্যাটি বের করা হয়। যদি nতম সংখ্যাটি 4 বা তার কম না হয় তবে আমরা ক্লান্তিকরভাবে 1স্ট্রিংয়ে যুক্ত করি। যদি স্ট্রিংটি ওভারফ্লো হয়ে যায় তবে আমরা একটি উপসর্গীয়করণের মাধ্যমে প্রস্থকে বাড়িয়ে তুলি 1, তবে এটি কেবলমাত্র যুক্ত 0.1করা সরিয়ে আমরা এটির চেয়ে কম থাকলে 1এবং এটিও একটি0দশমিক বিন্দু পরে। যদি परिमाणটি এখনও এর চেয়ে কম হয় 1তবে আমরা দশমিক পয়েন্টের পরে ফলাফলের শূন্যগুলি অনুলিপি করি, তবে এটি 1আরও বেশি হলে আমরা উত্তরের পূর্ণসংখ্যার অংশটি বের করি, দশমিক পয়েন্টে পৌঁছানোর জন্য প্রয়োজনে অতিরিক্ত শূন্য যোগ করি (যা তখন এটি মুছে ফেলা হয়েছে কারণ এটি ভুল নির্ভুলতা প্রদর্শন করবে)। শেষ অবধি চিহ্ন, পূর্ণসংখ্যার অংশ, দশমিক বিন্দু এবং দশমিক অংশটি সংক্ষিপ্ত হয়।

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