ভেরি নাইস ফ্রেডম্যান নাম্বার


13

একটি ফ্রেডম্যান নম্বর হ'ল একটি ধনাত্মক পূর্ণসংখ্যা যা অ-তুচ্ছ প্রকাশের সমান হয় যা ক্রিয়াকলাপ +, -, *, /, he, প্রথম বন্ধনী এবং কনটেনটেশনের সাথে একত্রে তার নিজস্ব ডিজিট ব্যবহার করে।

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

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

এই চ্যালেঞ্জের জন্য, প্রথম বন্ধনী ছাড়াই অভিব্যক্তি লেখার সম্ভাব্য তিনটি উপায় রয়েছে।

উপসর্গ: এটি বাম-সহযোগীতার সমতুল্য। এই ধরণের এক্সপ্রেশনটি সমস্ত অপারেটরের সাথে অঙ্কগুলির বাম দিকে লেখা হয়। প্রতিটি অপারেটর নিম্নলিখিত দুটি এক্সপ্রেশন প্রয়োগ করে। এই ক্ষেত্রে:

*+*1234 = *(+(*(1,2),3),4) = (((1*2)+3)*4) = 20

এই ভাবে লেখা যায় এমন একটি ভিএনএফএন 343:

^+343 = ^(+(3,4),3) = ((3+4)^3) = 343

পোস্টফিক্স: এটি ডান-সহযোগীতার সমতুল্য। এটি ঠিক পূর্বের স্বরলিখনের মতো, অপারেশনটি অঙ্কগুলির ডানদিকে চলে। প্রতিটি অপারেটর পূর্ববর্তী দুটি মত প্রকাশের জন্য প্রযোজ্য। এই ক্ষেত্রে:

1234*+* = (1,(2,(3,4)*)+)* = (1*(2+(3*4))) = 14

একটি ভিএনএফএন যা এইভাবে লেখা যেতে পারে 15655:

15655^+** = (1,(5,(6,(5,5)^)+)*)* = (1*(5*(6+(5^5)))) = 15655

ইনফিক্স: ইনফিক্স নোটেশনটি পাঁচটি ক্রিয়াকলাপের জন্য ক্রিয়াকলাপের মানক ক্রম ব্যবহার করে। চ্যালেঞ্জের উদ্দেশ্যে, ক্রিয়াকলাপের সেই ক্রমটি নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হবে: ^প্রথমে প্রথমে প্রথম, সঠিকভাবে সাহচর্যমূলকভাবে arent তারপরে, প্রথম বন্ধনী রচনা *এবং /একযোগে, সাহসীভাবে বামে। অবশেষে, প্রথম বন্ধনী রচনা +এবং -একযোগে, সাহসিকভাবে বামে।

1-2-3 = (1-2)-3 = -4
2/3*2 = (2/3)*2 = 4/3
2^2^3 = 2^(2^3) = 256
1^2*3+4 = (1^2)*3+4 = 7

একটি ভিএনএফএন যা এইভাবে লেখা যেতে পারে এটি 11664:

1*1*6^6/4 = (((1*1)*(6^6))/4) = 11664

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

স্পেসিফিকেশন: যদি একাধিক উপস্থাপনা সম্ভব হয় তবে আপনি সেগুলির যে কোনও খালি খালি সাবসেট আউটপুট করতে পারেন। উদাহরণস্বরূপ, 736 একটি ভিএনএফএন:

+^736 = 736
7+3^6 = 736

+^736, 7+3^6বা উভয়ই গ্রহণযোগ্য আউটপুট হবে।

একটি "তুচ্ছ" এক্সপ্রেশন মানে এমন কোনও যা কোনও অপারেটর ব্যবহার করে না। এটি কেবলমাত্র একটি অঙ্কের সংখ্যার জন্য প্রাসঙ্গিক এবং এর অর্থ হ'ল এক অঙ্কের সংখ্যা ভিএনএফএন হতে পারে না। এটি একটি ফ্রেডম্যান সংখ্যার সংজ্ঞা থেকে উত্তরাধিকার সূত্রে প্রাপ্ত।

উত্তরগুলি দশ লক্ষের মধ্যে ইনপুটগুলিতে সেকেন্ড বা মিনিটে চালানো উচিত।

সম্পর্কিত।

আইও: স্ট্যান্ডার্ড আইও নিয়ম। সম্পূর্ণ প্রোগ্রাম, ফাংশন, ক্রিয়া বা অনুরূপ। STDIN, কমান্ড লাইন, ফাংশন যুক্তি বা অনুরূপ। "কিছুই না" আউটপুট দেওয়ার জন্য, খালি স্ট্রিং, একটি ফাঁকা লাইন nullবা অনুরূপ এবং খালি সংগ্রহ সব ঠিক আছে। আউটপুট একটি চরিত্রের সাথে সীমিত একটি স্ট্রিং হতে পারে যা উপস্থাপনে থাকতে পারে না বা স্ট্রিংয়ের সংগ্রহও হতে পারে।

উদাহরণ:

127
None

343
^+343

736
736^+
7+3^6

2502
None

15655
15655^+**

11664
1*1*6^6/4
1^1*6^6/4

5
None

স্কোরিং: এটি কোড গল্ফ। সবচেয়ে কম বাইট জেতা

এছাড়াও, যদি আপনি একটি খুঁজে পান তবে আপনার উত্তরে একটি নতুন খুব ভাল ফ্রেডম্যান নম্বর দিন।


*(+(*(1,2),3,4)এর পরে একটি ঘনিষ্ঠ পেরেন নিখোঁজ রয়েছে,3
স্পার

"সেকেন্ড বা মিনিটে" ক্যাপটি কী? চার ঘন্টা এখনও .... অনেক ... মিনিটের মধ্যে রয়েছে।
চার্লস

পুনঃটুইট করুন আসুন 1 ঘন্টা আমার মেশিনে, কিছু উইগল রুম সহ। বহু-অঙ্কের সংখ্যা সম্পর্কে, যা আমি Parentheses, concatenation and unary negation are disallowed.
কনক্রিটেশন করে উল্লেখ করছি

উত্তর:


5

পার্ল, 345 334 318 293 263 245B

$_='$_=$i=pop;$c=y///c-1;sub f{say if$c&&$i==eval pop=~s/\^/**/gr}A$m)$1$4"})};f"("x$c.$m}globOx$c.$i;A$1$4($m"})};f$m.")"x$c}glob$i.Ox$c;map{f$_}glob joinO,/./g';s!O!"{+,-,*,/,^}"!g;s!A!'map{m{(\d)((?R)|(\d)(?{$m=$3}))(.)(?{$m="'!ge;s!d!D!;eval

সাথে কল perl -M5.10.0 scratch.pl 736


ফলাফল

আমি যে প্রথম কয়েকটি ফলাফল পেয়েছি তা হ'ল:

^+343
736^+
7+3^6
^+/3125
^+^3125
/^+-11664
/^--11664
1-1+6^6/4
/^++14641
^^++14641
1+5^6/1-8
1+5^6^1-8
1+5^6-2-2
1+5^6-2^2
1+5^6+2-4
1+5^6+4^2
-^+^16377
-^-+16377
/^+^16384
/^-+16384

ব্যাখ্যা

সম্পূর্ণরূপে ungolfed

পরে গল্ফিং আরও সহজ করার জন্য আমি যথাসম্ভব নিজেকে পুনরাবৃত্তি করার চেষ্টা করেছি।

#!perl
use 5.10.0;

$_ = $input = pop;

# y///c counts characters in $_
$count = y///c - 1;

sub f {
    say if $count && $input == eval pop =~ s/\^/**/gr
}

# PREFIX
map {
    m{                            # Parses *^+1234
        (\D)                      # $1 = first symbol
        (
            (?R)                  # RECURSE
        |
            (\d)(?{               # $3 = first digit
                $match=$3
            })
        )
        (.)(?{                    # $4 = last digit
            $match="$match)$1$4"
        })
    }x;
    f "(" x $count . $match
}
    # glob expands '{0,1}{0,1}' into 00,01,10,11
    glob "{+,-,*,/,^}" x $count . $input;

# POSTFIX
map {
    m{(\d)((?R)|(\d)(?{$match=$3}))(.)(?{$match="$1$4($match"})};
    f $match. ")" x $count
}
    glob $input . "{+,-,*,/,^}" x $count;

# INFIX
# /./g splits $_ into characters
map { f $_} glob join "{+,-,*,/,^}", /./g

এটি কিভাবে গল্ফ হয়

  • হোয়াইটস্পেস এবং মন্তব্যগুলি সরান এবং 1 টি-অক্ষর সংস্করণ সহ সমস্ত ভার্স প্রতিস্থাপন করুন
  • প্রোগ্রাম মোড়ানো $_=q! ... !;eval
  • স্ট্রিংগুলি এক্সট্রাক্ট করুন এবং পরে তাদের বিকল্প করুন।

এটি এরকম কিছু দেয় যা থেকে আপনি ফলাফলের জন্য লাইন ব্রেকগুলি সরাতে পারেন:

$_='
    $_=$i=pop;
    $c=y///c-1;
    sub f{say if$c&&$i==eval pop=~s/\^/**/gr}
    A$m)$1$4"})};f"("x$c.$m}globOx$c.$i;
    A$1$4($m"})};f$m.")"x$c}glob$i.Ox$c;
    map{f$_}glob joinO,/./g
';
s!O!"{+,-,*,/,^}"!g;
s!A!'map{m{(\d)((?R)|(\d)(?{$m=$3}))(.)(?{$m="'!ge;
s!d!D!;
eval

উত্তরের জন্য ধন্যবাদ, এবং প্রথম স্থানে থাকার জন্য অভিনন্দন। বিস্তৃত ধর্মঘটে, এটি কীভাবে কাজ করে?
isaacg

আমি পার্ল জানি না, তবে মনে হচ্ছে এটি 3 টি উপলভ্য বের করে }globকিছু বাইট সংরক্ষণ করতে পারে।
isaacg

s!B!}glob!g;BBB-> 15 বি; }glob}glob}glob-> 15 বি :)
আলেকজান্ডার-ব্রেট

ডার্ন, এত কাছে।
ইসাকাক

4

রুবি কেবল ২.১.৫ - 213 220 238 + 9 = 247

রুবি পার্লকে কীভাবে মারধর করে তা নিশ্চিত নয় তবে আপনি এখানে যান ...

এটি একটি-টাইমআউটআউট পতাকা দিয়ে চালান (এবং হয় -W0 অথবা অন্য কোথাও আপনার স্টারডার প্রেরণ করুন)।

এই করতে সামান্য আরো জোরালো, প্রতিস্থাপন send([].methods[81],z-1)সঙ্গে repeated_permutation(z-1)এবং একটি অতিরিক্ত চরিত্র SCORE (তাই হয়, 248 )।

g=$*[0].split //
exit if 2>z=g.size
d=->a,s{$><<a*''&&exit if$*[0].to_i==timeout(2){eval"#{(s*'').gsub(?^,'**')}"}rescue p}
l,r=[?(]*z,[?)]*z
%w{* / + - ^}.send([].methods[81],z-1){|o|d[m=g.zip(o),m]
d[g+o,l.zip(m)+r]
d[o+g,l+g.zip(r,o)]}

মূলত, অপারেটরগুলির সমস্ত অনুমতি দিয়ে যান এবং সেই ক্রমে ইনফিক্স, পোস্টফিক্স এবং উপসর্গ ব্যবহার করে দেখুন। dপদ্ধতি ব্যবহারের evalদ্বিতীয় প্যারামিটারটি উপর গণনার সঞ্চালন, কোন DivideByZero বা ওভারফ্লো ব্যতিক্রম সংক্রামক।

আপনাকে / dev / null এ স্টেডার প্রেরণ করতে হবে, তবে অন্যথায় evalকখনও কখনও সতর্কতাগুলি প্রিন্ট করবে (eval):1: warning: in a**b, b may be too big

আমি যখন এই উচ্ছলতা নিয়ে এসেছি তখন আমি তিনটি অক্ষর বাঁচানোর উপায় খুঁজে পেয়েছি!

অবহেলিত (পুরানো তবে একই ধরণের নীতি):

input = $*[0]
digits = input.split //
num_digits = digits.size
exit if 2 > num_digits # one-digit numbers should fail

def print_if_eval print_array, eval_array
  # concatenate the array and replace ^ with **
  eval_string = (eval_array * '').gsub(?^, '**') 
  val = eval(eval_string)
  if input.to_i == val
    $><<print_array*''
    exit
  end
rescue
  # this catches any DivideByZero or Overflow errors in eval.
end
# technically, this should be * (num_digits - 1), but as long as we 
# have AT LEAST (num_digits - 1) copies of the operators, this works
operators = %w{* / + - ^} * num_digits
left_parens = ['('] * num_digits
right_parens = [')'] * num_digits
operators.permutation(num_digits-1) { |op_set|
  # infix
  # just uses the native order of operations, so just zip it all together
  # 1+2-3*4/5^6
  print_if_eval(digits.zip(op_set),
                digits.zip(op_set))

  # postfix
  # leftparen-digit-operator, repeat; then add right_parens
  # (1+(2-(3*(4/(5^(6))))))
  # 
  print_if_eval(digits+op_set,
                (left_parens.zip(digits, op_set) + right_parens))

  # prefix
  # leftparens; then add digit-rightparen-operator, repeat
  # ((((((1)+2)-3)*4)/5)^6)
  print_if_eval(op_set+digits,
                left_parens + digits.zip(right_parens, op_set))
}

পরিবর্তণের

247 সময় নির্ধারণের পরিবর্তে বৃহত সংখ্যার জন্য এই কাজটি করেছে।

220 প্যারেন অ্যারে ঘোষণা করে তিনটি অক্ষর শেভ করে এবং একটি বাগ স্থির করে যেখানে এক-অঙ্কের সংখ্যাগুলি ভিএনএফএন হিসাবে বিবেচিত হয়

213 প্রাথমিক প্রতিশ্রুতি


দুর্দান্ত সমাধান - আমার কাছে সম্পূর্ণ কালো যাদু! আমার ধারণা রুবি পার্লকে মারছে, যেহেতু এটি অন্তর্নির্মিত জিপ এবং ক্রমান্বকরণ কার্যকারিতা রয়েছে।
আলেকজান্ডার-ব্রেট

@ আলেকজান্দার-ব্রেট আরও ভাল কি? a.zip(b,c)অ্যারের মতো একটি অ্যারে প্রদান করে [ [a[0],b[0],c[0]],[a[1],b[1],c[1]], etc.]এবং ['hi', 'there']*''অ্যারের মানগুলির স্ট্রিং উপস্থাপনাকে কেবল সম্মতি দেয়।
চার্লস

ওহ, এবং [a,b]*3ফলন[a,b,a,b,a,b]
চার্লস

1

ম্যাটল্যাব (৪৩৫ খ)

n=input('');b=str2num(fliplr(num2str(n)));l=floor(log(b)/log(10));a=unique(nchoosek(repmat('*+-/^', 1,5), l), 'rows');for k=1:numel(a(:,1)),for j=0:2,c=strcat((j>1)*ones(l)*'(',mod(b,10)+48);for i=1:l,c=strcat(c,a(k,i),(j<1)*'(',mod(floor(b/10^i),10)+48,(j>1)*')'); end,c=strcat(c,(j<1)*ones(l)*')');if eval(c(1,:))==n,fprintf('%s%s%s%s\n',c(1,1:(j==1)*numel(c(1,:))),fliplr(a(k,1:(j>1)*l)),(j~=1)*num2str(n),a(k,1:(j<1)*l));end,end,end

এখানে চেষ্টা করুন

http://octave-online.net/


এখনও আরও উন্নতি প্রয়োজন
Abr001am

মানুষ কি এখানে মতলব নিয়ে অভ্যাস করে না?
Abr001am

0

পাইথন 2, 303 বাইট

এটি অনলাইনে চেষ্টা করুন

from itertools import*
n=input()
l=len(n)-1
E=eval
for c in product('+-*/^',repeat=l):
 L=lambda x,y:x.join(map(y.join,zip(n,c+('',)))).replace('^','**')
 C=''.join(c)
 try:
    if`E(L('',''))`==n:print L('','')
    if`E('('*-~l+L('',')'))`==n:print C[::-1]+n
    if`E(L('(','')+')'*l)`==n:print n+C
 except:pass

ইনফিক্স আউটপুট এর **পরিবর্তে থাকবে ^। যদি এটি অনুমোদিত না হয় তবে উপস্থিত .replace('**','^')হবে এবং আরও 18 বাইট যুক্ত করবে

ব্যাখ্যা:

# get all possible combinations of operators (with repetitions)
product('+-*/^',repeat=l)  

# create string from input and operators like
# if passed '(' and '' will return (a+(b+(c
# if passed '' and ')' will return a)+b)+c)
# if passed '' and '' will return a+b+c
lambda x,y:x.join(map(y.join,zip(n,c+('',)))).replace('^','**')

# evaluate infix
E(L('',''))
# evaluate prefix
E('('*-~l+L('',')')) 
# evaluate postfix
E(L('(','')+')'*l)
# all evals need to be inside try-except to handle possible 0 division

# prefix output is need to be swapped (which IMO is not needed)
n:print C[::-1]+n
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.