আনুষাঙ্গিক ঘটনা পরে!


10

এই চ্যালেঞ্জটি গণিত দ্বারা অনুপ্রাণিত সত্য। প্রোগ্রামিং হয় না


একটি কল্পিত বা সত্যের জন্য গাণিতিক স্বরলিপি একটি বিস্মৃত চিহ্ন !। বিস্ময়কর চিহ্নটি notঅনেক প্রোগ্রামিং ভাষার ক্ষেত্রেও একটি সাধারণ প্রতীক ।

চ্যালেঞ্জ:

অঙ্ক এবং অক্ষরগুলি সহ একটি স্ট্রিং নিন: + !ইনপুট হিসাবে এবং নিম্নলিখিতটি আউটপুট করুন:

বিস্মৃত চিহ্নের সামনে থাকা সমস্ত কিছুর গাণিতিক প্রকাশ হিসাবে মূল্যায়ন করা উচিত, তাই 2+2হবে 4

একক বিস্ময়কর চিহ্নের পরে সমস্ত কিছুই সামনে থাকা জিনিসগুলির জন্য আনুষাঙ্গিক হিসাবে যুক্ত করা 2+2!5উচিত , সুতরাং: দেওয়া উচিত 45, কারণ 2+2=4, এবং 5এটি একটি আনুষাঙ্গিক। 2+2!5+5দেওয়া উচিত 410

যেহেতু !অর্থ এও notকিছু যে না আসলে পরে আনুষঙ্গিক উচিত না যোগ করা। সুতরাং, দেওয়া 2+2!!5উচিত 4, যেহেতু 5কোনও আনুষাঙ্গিক নয়। এখন, not(not(true))==trueতাই দেওয়া 2+2!!!5উচিত 452+2!!5!5+5দেওয়া উচিত: 410কারণ 2+2=4, তারপরে একটি ফ্যাক্টরিয়াল এবং !5!5+5। প্রথমটি 5কোনও সত্য নয়, তবে 5+5এটি অন্য বিস্মৃত চিহ্নের পরে, এবং এটি আবারও সত্য।

ব্যাখ্যা:

  • বিস্মৃত চিহ্নগুলি +উভয় পক্ষের সাথে সংযুক্ত হবে না ।
  • +সংখ্যাগুলির জন্য শীর্ষস্থানীয় হবে না (এটি 5নয়, +5)।
  • আপনি যদি প্রথমে সামনে অভিব্যক্তির ফলাফল হন তবে আপনি বিকল্পভাবে একটি শীর্ষস্থানীয় শূন্যকে অন্তর্ভুক্ত করতে পারেন !। উভয় 4এবং 04ইনপুট জন্য গৃহীত আউটপুট:0+0!4

কার্যনির্বাহী সংক্ষিপ্তসার: প্রতিটি যোগফলকে পৃথক করুন ( !পৃথককারী হিসাবে বিবেচনা করুন )। তারপরে সমস্ত সংখ্যার পরে যেগুলি সংখ্যার !(স্ট্রিংয়ের শুরু থেকে গণনা ) পরে প্রদর্শিত হবে তা ফেলে দিন । তারপরে সব সরিয়ে দিন !

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

!
   <- Empty string

5
5

12!
12

!87
87

!!5
   <- Empty string

5+5!2+2
104

5+5!!2+2
10

1!2!3!4!5!6!7!8!9
12468

10+10!!2+2!!3+3!4+4
208

2!!3!5
25

2!!3!5!7
25

10!!!!!!!5
105

এটি তাই বাইটের সংক্ষিপ্ততম কোড (প্রতিটি ভাষায়) জয়! ব্যাখ্যা জোরালোভাবে উত্সাহিত করা হয়!


উম্ম ... বলুন যে আমাদের 2 আছে! 3! 5 এখানে 3 টির একটি আনুষঙ্গিক আছে বা না?
অফিসিয়ালাইম

3
@officialaimm এটি 25(পরীক্ষার কেস দেখুন) আরও গুরুত্বপূর্ণ বিষয়টি 2!!3!5!7এখনও দেবে 25, কারণ এখানে একটি !বাম সংখ্যা রয়েছে 7(যাতে আপনি কেবল সংখ্যাটির সামনের দিকে রানটি গণনা করেন না, তবে !এটির সমস্ত বাম))।
মার্টিন এন্ডার

আউটপুট একটি গণিত হতে পারে Row?
নেজেনিসিস

উম ... সুতরাং এই চ্যালেঞ্জটির আসলে ফ্যাক্টরিওরগুলির সাথে কোনও সম্পর্ক নেই?
ডিএলসাস

উত্তর:


5

রেটিনা , 35 31 29 বাইট

ইটিএইচ প্রডাকশন থেকে কিছু অনুপ্রেরণা নিয়ে 4 বাইট সংরক্ষণ করা হয়েছে

লিওকে আরও 2 বাইট সংরক্ষণ করার জন্য ধন্যবাদ।

\d+|\+
$*
1+
$.&
1`!

!\d*!?

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


তোমার মত গত লাইনে কিছু বাইট সংরক্ষণ করতে পারবেন এই
লিও

1
@ লিও এটি সত্যই ঝরঝরে, আপনাকে ধন্যবাদ :)
মার্টিন এন্ডার

5

জাভাস্ক্রিপ্ট (ES6), 58 56 বাইট

মার্টিন ইন্ডারকে ধন্যবাদ দিয়ে দুটি বাইট সংরক্ষণ করা হয়েছে ।

let f =
x=>x.replace(/[^!]+/g,eval).replace(/!(\d*)!?\d*/g,"$1")
<input value="2+2!5+5" oninput="try{O.value=f(value)}catch(e){}"><br>
<input id=O value="410" disabled>

কোনওভাবে উন্নতি করা যেতে পারে ...


ফাংশন যুক্তির নিস ব্যবহার replace
নিল

@ নীল ধন্যবাদ, তবে আমি এর থেকে আরও ভাল উপায় খুঁজে পেয়েছি :-)
ETH প্রোডাকশনগুলি

আপনার কোড স্নিপেট আমাকে ভুল উত্তর দিচ্ছে 1+1!5। আমি মনে করি আপনি এর evalআগে কিছুটা ভুলে গেছেন !
মান কালি

@ ভালিউইঙ্ক আহ ছিঃ ছিঃ, আমি মনে করি না যে এটি ঠিক করার কোনও সহজ উপায় নেই।
ETH প্রোডাকশনগুলি

2

জেলি , 16 বাইট

ṣ”!µḢW;m2$VṾ$L¡€

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

ব্যাখ্যা

এখানে মূল পর্যবেক্ষণটি হ'ল আমরা "আউট অফ অর্ডার" পদক্ষেপগুলি চালাতে পারি; অঙ্কগুলি মূল্যায়ন না করে তারপরে যা আমরা পছন্দ করি না তা অগ্রাহ্য করে আমরা অবৈধ অবস্থানগুলিতে অঙ্কগুলি উপেক্ষা করতে পারি, তারপরে বাকীগুলি মূল্যায়ন করতে পারি।

ṣ”!µḢW;m2$VṾ$L¡€
ṣ”!                Split input on '!'
   µ               Set as the new default for missing arguments
    Ḣ              Take the first element, removing it from the default
     W;  $         Cons with
       m2            every odd-numbered element of {the tail of the !-split input}
               €   For each remaining element
          VṾ$      Evaluate and de-evaluate it
             L¡      a number of times equal to its length

সমষ্টিটির "10+10"মূল্য নির্ধারণ করা এটি একটি সংখ্যার সাথে মূল্যায়ন করবে, উদাহরণস্বরূপ 20, তারপরে একে স্ট্রিং-এ মূল্যায়ন করুন "20",। এই প্রক্রিয়াটি পুনরাবৃত্তি করার কোনও অতিরিক্ত প্রভাব নেই (এটি আদর্শবান)। সুতরাং, আমরা কার্যকরভাবে স্ট্রিংয়ের প্রতিটি উপাদান মূল্যায়ন করি, নাল স্ট্রিং ব্যতীত , যা অবমূল্যায়িত থেকে যায় কারণ এটির শূন্য দৈর্ঘ্য রয়েছে।


শর্তসাপেক্ষে প্রতিটি আইটেম মূল্যায়ন করার জন্য এটি দুর্দান্ত কৌশল। আপনি কি কোনও উপায়ে প্রতিটি আইটেমের লজিক্যাল এ্যান্ড এবং এটির ডেভাল'ড মান নিতে পারেন? (আমি ধরে নিলাম খালি স্ট্রিংটি জেলিতে মিথ্যা)
ETH প্রোডাকশনগুলি

@ এইচটি প্রোডাকশনস: জেলির এই সাক্ষ্যদাতা এটি অসম্ভাব্য করে তোলে যে এটি বাইট সংরক্ষণ করতে পারে; এটি সম্ভব হলে দু'বার একই মান ব্যবহার করা এড়াতে পছন্দ করে এবং আপনি যদি কোনও মান পুনরায় ব্যবহার করতে চান তবে আপনাকে সাধারণত কমপক্ষে কোনও µজায়গায় অতিরিক্ত পরিমাণে রাখতে হবে (এবং µএকটি লুপের অভ্যন্তরে কাজ করে না, এর অর্থ আপনার কিছু প্রয়োজন হয়) আরও বেশি ভার্বোস)। আমি এটিকে কাজ করার মতো ব্যবস্থা করেছিলাম ṣ”!µḢW;m2$ȧVṾ$$€, তবে এটি কোনও ছোট নয় (এবং ডলার সংকেতগুলির বৈশিষ্ট্যযুক্ত স্তূপ রয়েছে যা আপনি জেলিকে নীড় নিয়ন্ত্রণের কাঠামোর

2

জেলি , 18 বাইট

ṣ”!µḊm2;@ḢW$LÐfVṾ€

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

কিভাবে?

ṣ”!µḊm2;@ḢW$LÐfVṾ€ - Main link: string
ṣ”!                - split on '!' characters
   µ               - monadic chain separation (call that x)      e.g. ['1+1','0+0','0+0','0+0','','1+0','','','']
    Ḋ              - dequeue x (all but the leftmost entry of x) e.g.       ['0+0','0+0','0+0','','1+0','','','']
     m2            - modulo 2 index into that result             e.g.       ['0+0',      '0+0',   '1+0',   '']
           $       - last two links as a monad
         Ḣ         -     head x (the leftmost entry of x)        e.g.  '1+1'
          W        -     wrap                                    e.g. ['1+1']
       ;@          - concatenate with reversed arguments         e.g. ['1+1','0+0',      '0+0',   '1+0',   '']
             Ðf    - filter keep:
            L      -     length (keep that have non-zero length) e.g. ['1+1','0+0',      '0+0',   '1+0']
               V   - eval as jelly code (vectorises)             e.g. [  2,    0,          0,       1]
                      Yes, addition is just + and decimal numbers are just strings of digits in Jelly believe it or not!
                Ṿ€ - uneval €ach (creates a string from each one)e.g. [ '2',  '0',        '0'     ,'1']
                      without the € it would uneval the list and hence yield commas too)
                   - implicit print (prints the resulting list [of characters and possibly
                      lists of characters] as if it were all one string.)

আমি মনে করি 0+0না এটি ইনপুটটির মাঝখানে (এমন জায়গায় যেখানে এটি ফেলে দেওয়া হচ্ছে না) আক্ষরিক জন্য কাজ করে ; এটি নাল স্ট্রিং উত্পাদন করে, যদিও এটি একটি অঙ্ক 0 উত্পাদন করতে পারে

আহ, সত্য - আমাকে আরও দীর্ঘ সমাধানে নিয়ে যেতে হবে :(
জোনাথন অ্যালান

স্থির করা উচিত (সম্ভবত এখন গল্ফযোগ্য)।
জোনাথন অ্যালান


1

রুবি , 58 56 + 1 = 59 57 বাইট

-pপতাকা ব্যবহার করে । টুটলম্যান থেকে -2 বাইট ।

i=0;$_=' '+$_;gsub(/!?([^!]*)/){eval$1if(2>i+=1)||i%2<1}

এটি অনলাইন চেষ্টা করুন! (কোডের একটি অতিরিক্ত লাইন যুক্ত করা হয়েছিল যাতে এটি সমস্ত ইনপুট লাইন নিয়ে যায় এবং বিভিন্ন লাইনে আউটপুট প্রিন্ট করে))


আমার মনে হয় আপনি বন্ধনীগুলি প্রায় ফেলে দিতে পারবেন eval$1, না?
টুটম্যান

নিবন্ধন করুন আমি জানি না যে আমার কী সমস্যা ছিল যা আমাকে প্যারেন্স যুক্ত করতে বাধ্য করেছিল (আমি প্রোগ্রামটি লেখার সময় তারা উপস্থিত ছিল না) তবে মনে হয় আমি সত্যিই সেগুলি ফেলে দিতে পারি।
মান কালি

0

ব্যাচ, 192 184 বাইট

@echo off
set/ps=
call:c . "%s:!=" "%"
echo(%s%
exit/b
:c
set s=
if not %2=="" set/as=%2
:l
shift
shift
if "%1"=="" exit/b
if %1=="" goto l
set/at=%1
set s=%s%%t%
goto l

খালি স্ট্রিংগুলি পরিচালনা করা অসুবিধাজনক।


0

পিপ , 18 বাইট

আমি মনে করি এটি এটি সবচেয়ে সংক্ষিপ্ততম ... যদিও আমি বলেছিলাম যে প্রায় তিনটি পুনরাবৃত্তি আগেও।

{VaX++v%2+!v}Ma^'!

কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

                    a is 1st cmdline arg; global variable v is -1 (implicit)
              a^'!  Split a on !
{           }M      Map this function to the resulting list (note that inside function,
                    a is the function arg):
    ++v              Increment v (so that v tracks the 0-based index of the current
                     element)
       %2            We want to keep the elements where v%2 is 1...
         +!v         ... and also v=0, where v%2 is 0, but adding !v makes it 1
  aX                 String-multiply the argument by the above quantity (turning elements
                     we don't want into empty string)
 V                   Eval it (eval'ing empty string gives nil, but that's okay because
                     nil doesn't output anything)
                    Autoprint the resulting list, concatenated together (implicit)

0

আর, 95 বাইট

function(x)for(e in strsplit(gsub('!([^!]*)![^!]*','\\1!',x),'!')[[1]])cat(eval(parse(text=e)))

উন্নতির জন্য সম্ভবত কিছু জায়গা আছে তবে এই মুহূর্তে এটিই আমার পক্ষে সেরা।

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