Pannenkoek একটি প্রেস টি গণনা সাহায্য করুন


28

Pannenkoek2012 এর লক্ষ্য এ এ বোতামটি যতটা সম্ভব প্রেসের সাহায্যে সুপার মারিও 64 টি সম্পন্ন করা , যা মারিও লাফিয়ে তোলে। প্রতিটি "একটি প্রেস" তিনটি অংশ নিয়ে গঠিত:

  • বোতাম টিপছে
  • যে কোনও সময়ের জন্য এটি ধরে রাখা
  • এটি মুক্তি

Pannenkoek2012 দ্বারা ভিডিও থেকে একটি প্রেসের অংশগুলি

দেখুন - এই ভিডিও (3:23 1:15) একটি দুর্দান্ত ব্যাখ্যা যে উপরোক্ত চিত্র অন্তর্ভুক্ত হয় না। (তবে, এই চ্যালেঞ্জটি অর্ধ-এ-প্রেস পরিভাষাটি ব্যবহার করবে না এবং এগুলিকে ছেড়ে দেওয়ার প্রয়োজন এমন বাধা সৃষ্টি করবে)

টাস্ক:

চাপ দেওয়া (পি), অধিষ্ঠিত (এইচ), বা একটি (A) বোতাম রিলিজ করার জন্য প্রয়োজনীয় বাধাগুলির ক্রম দেওয়া, প্রদত্ত ক্রমটিতে তাদের কাটিয়ে উঠতে প্রয়োজনীয় সংক্ষিপ্ত সংখ্যক প্রেসগুলি আউটপুট দেয়। শুরুতে একটি বোতামটি রাখা হয় না।

আনুষ্ঠানিকভাবে স্থিত: অক্ষরের একটি স্ট্রিং এস দেওয়া PHR, ফর্মের স্ট্রিংগুলিকে বিবেচনা করুন (PH*R)*যাতে এসটি একটি উপসর্গ হিসাবে রয়েছে, এবং এই Pজাতীয় স্ট্রিংয়ের মধ্যে সবচেয়ে কম সংখ্যক সংখ্যা নির্ধারণ করে । অথবা, বিকল্পভাবে, P?H*R?এস ফর্মটি ভাগ করতে পারে এমন ফর্মের খণ্ডগুলির মধ্যে সর্বনিম্ন সংখ্যাটি সন্ধান করুন ।

উদাহরণ

আসুন ইনপুট তাকান RHRPHHHR। একটি বোতামটি ধরে রাখা শুরু হয় না, তাই প্রাথমিক বাধা অতিক্রম Rকরে বোতামটি টিপতে হবে এবং তারপরে ছেড়ে দেওয়া দরকার (# 1 টিপুন)। এরপরে আমাদের বোতামটি ধরে রাখা Hদরকার, যার জন্য এটি আবার প্রথমে টিপতে হবে (# 2 টিপুন)। তারপরে, এর পরে সন্তুষ্ট করার জন্য এটি Rপরে প্রকাশ করা যেতে পারে । অবশেষে, PHHHRবাকীগুলি একক প্রেসের মাধ্যমে সন্তুষ্ট হতে পারে (# 3 টিপুন) তারপরে ধরে রাখা HHHএবং ছেড়ে দেওয়ার পরে R। সুতরাং, আউটপুট গণনা 3।

এটি দেখার আরেকটি উপায় হ'ল আমরা ইনপুট স্ট্রিংটিকে ফর্মের 3 টি অংশে বিভক্ত করতে পারি PHH..HHRযেখানে অক্ষরগুলি বাদ দেওয়া যেতে পারে।

R
HR
PHHHR    

ছক পূরণ করা

ইনপুটটি আপনার পছন্দ হিসাবে প্রেস, হোল্ড এবং রিলিজ উপস্থাপনকারী উপাদানগুলির একটি তালিকা বা স্ট্রিং হবে:

  • P, H, R
  • p, h, r
  • 1, 2, 3
  • 0, 1, 2

প্রদত্ত ক্রমের সাথে মিলছে। ইনপুট খালি হবে না।

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

P 1
H 1
R 1
HP 2
RHP 3
HHR 1
PHRH 2
RHRPHHHR 3
HHHHHH 1
PPRRHHPP 6
HPPRHRPRHPPRHPPHRP 12
PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP 28

লিডারবোর্ড:


1
বাটনটি ধরে রাখার জন্য প্রয়োজনীয় বাধা সম্পর্কে কী? গ্রাফটিতে চারটি বোতামের রাজ্য রয়েছে (আমি মনে করি এগুলি আসলে
খেলায়ও

3
বাস্তবে, এখানে 3 টি রাষ্ট্র রয়েছে: প্রেস, হোল্ড এবং নন-হোল্ড। কোনও রাষ্ট্রের জন্য একটি বোতাম রিলিজের প্রয়োজন নেই। বাস্তবতার তুলনায় চ্যালেঞ্জটি কিছুটা ভুল।
ব্যবহারকারী 202729

1
@ 11684 "মুক্তির বিষয়ে, ভাল, বর্তমানে এমন কোনও ঘটনা নেই যেখানে তা কার্যকর বা গুরুত্বপূর্ণ তাই সেই অংশটি নিয়ে চিন্তা করবেন না।" (1:48 - 1:52)
ব্যবহারকারী 202729

3
এমআইপিএস সমাবেশে কেউ এটি করতে চান? (ভাষা সুপার মারিও 64 প্রোগ্রাম করতে ব্যবহৃত হয়েছিল)
ব্যবহারকারী 202729

1
@ user202729 বাহ, এটি একটি সম্পূর্ণ প্যানকেক। ধন্যবাদ!
11684

উত্তর:



3

পাইথ , 13 বাইট

tl:z"P?H*R?"3

এখানে চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন।

নোট করুন যে 1এছাড়াও জায়গায় কাজ করে 3

কিভাবে এটা কাজ করে?

tl: z "পি? এইচ * আর?" 3 | পুরো প্রোগ্রাম। STDIN থেকে ইনপুট নেয়, STDOUT এ আউটপুট দেয়।

  : জেড 3 | এর ম্যাচগুলিতে ইনপুট স্ট্রিংটি বিভক্ত করুন ...
    "পি? এইচ * আর?" | নিয়মিত অভিব্যক্তি "পি? এইচ * আর?"।
 l | দৈর্ঘ্য পান।
t | হ্রাস (কারণ বিভাজনে খালি স্ট্রিং অন্তর্ভুক্ত)।

রেজেক্স সম্পর্কে আরও:

পি? | পি - আক্ষরিক চরিত্র পি, কেস সংবেদনশীল।
       | ? - কোয়ান্টিফায়ার আগের অক্ষরের সাথে এক বা শূন্যগুণ মেলে।
  এইচ * | এইচ - আক্ষরিক চরিত্র এইচ, কেস সংবেদনশীল।
       | * - কোয়ানটিফায়ার পূর্বের চরিত্রের যে কোনও সংখ্যক ঘটনার সাথে মেলে।
    আর? | আর - আক্ষরিক চরিত্র আর, সংবেদনশীল ক্ষেত্রে।
       | ? - কোয়ান্টিফায়ার আগের অক্ষরের সাথে এক বা শূন্যগুণ মেলে।

আহ্, ফেক, আপনি আমাকে এটি মারধর!
শেগি

চমৎকার! Regexp বিবরণে দ্বিতীয় থেকে শেষ লাইনে "আক্ষরিক চরিত্র আর" বলা উচিত, তাই না?
vidtige

হ্যাঁ, ধন্যবাদ স্থির
মিস্টার এক্সকোডার 11

2

জেলি , 10 বাইট

o5ḄƝ%⁵>4S‘

একটি মোনাডিক চেইন একটি তালিকা ( P,H,R : 0,1,2বিকল্প) গ্রহণ করে এবং পূর্ণসংখ্যা, গণনা প্রদান করে।

এটি অনলাইন চেষ্টা করুন! বা পরীক্ষা স্যুট দেখুন

কিভাবে?

(কার্যকরভাবে সব সংলগ্ন জোড়া যেকোনো যে "ধারাবাহিকতা জোড়া" নয় বেড়ে চলেছে পেয়ে করে কাজ করে PR, PH, HR, অথবা HH) এবং যোগ।

o5ḄƝ%⁵>4S‘ - Link: list of integers (in [0,1,2])  e.g.: [0,0,1,0,2,1,1,2,2,0] (representing PPHPRHHRRP)
o5         - logical OR with 5                          [5,5,1,5,2,1,1,2,2,5]
   Ɲ       - for all adjacent pairs:              i.e.: [5,5],[5,1],[1,5],[5,2],[2,1],[1,1],[1,2],[2,2],[2,5]
  Ḅ        -   convert from binary                      [ 15 ,  11 ,  7  ,  12 ,  5  ,  3  ,  4  ,  6  ,  9 ]
     ⁵     - literal ten
    %      - modulo                                     [  5 ,   1 ,  7  ,   2,   5  ,  3  ,  4  ,  6  ,  9 ]
      >4   - greater than four?                         [  1 ,   0 ,  1  ,   0,   1  ,  0  ,  0  ,  1  ,  1 ]
        S  - sum                                        5
         ‘ - increment                                  6

পূর্ববর্তী 11 বাইট সমাধান:

ḅ3Ɲạ3ḟ1,2L‘

এটি অনলাইন চেষ্টা করুন! বা পরীক্ষা স্যুট দেখুন

কিভাবে?

উপরের মতো কাজ করে তবে সম্পূর্ণ ভিন্ন উপায়ে ...

ḅ3Ɲạ3ḟ1,2L‘ - Link: list of integers (in [0,1,2])  e.g.: [0,0,1,0,2,1,1,2,2,0] (representing PPHPRHHRRP)
  Ɲ         - for all adjacent pairs:              i.e.: [0,0],[0,1],[1,0],[0,2],[2,1],[1,1],[1,2],[2,2],[2,0]
ḅ3          -   convert from base three                  [ 0  ,  1  ,  3  ,  2  ,  7  ,  4  ,  5  ,  8  ,  6 ]
   ạ3       - absolute difference with three             [ 3  ,  2  ,  0  ,  1  ,  4  ,  1  ,  2  ,  5  ,  3 ]
     ḟ1,2   - filter discard if in [1,2]                 [ 3        ,  0        ,  4              ,  5  ,  3 ]
         L  - length                                     5
          ‘ - increment                                  6

এবং অন্যটি, আবার বেশ আলাদা:

+19*Ɲ%13ḂS‘

(প্রত্যেকটিতে 19 যোগ করুন, তারপরে সংলগ্ন জোড়গুলির জন্য 13 টি যোগ করুন, মডুলো 13 দ্বারা, মডিউল 2 দ্বারা যোগ করুন এবং একটি যোগ করুন)।


দ্রুত নতুন জেলি!
ব্যবহারকারী 202729

2

ব্যাচ, 69 বাইট

@set/ab=2,n=0
@for %%b in (%*)do @set/an+=b/2^|!%%b,b=%%b
@echo %n%

ইনডেক্স 0-ইনডেক্সড কমান্ড-লাইন প্যারামিটারগুলির তালিকা হিসাবে নেয় p, h, rতবে আপনি set /a p=0, h=1, r=2প্রথমে টাইপ করলে আপনি উপরের বা নিম্নতর ক্ষেত্রে অক্ষরের একটি তালিকা ব্যবহার করতে পারেন । ব্যাখ্যা: bশেষ ইনপুট (প্রকাশের জন্য ডিফল্ট 2) এবং nপ্রেসগুলির গণনা বজায় রাখে । প্রতিটি ইনপুট একটি প্রেস যুক্ত করে যদি সর্বশেষ ইনপুটটি প্রকাশ হয় বা বর্তমান ইনপুটটি একটি প্রেস হয়।


ওহ, setএকবারে একাধিক ভেরিয়েবল সেট করতে পারেন? জানার জন্য দরকারী।
ব্যবহারকারী 202729

1
@ ব্যবহারকারী202729 set /aহ'ল পাটিগণিত মূল্যায়ন, সুতরাং যতক্ষণ আপনি সেট করতে চান সমস্ত ভেরিয়েবল সংখ্যাসূচক হয়, আপনি অ্যাসাইনমেন্ট এক্সপ্রেশনগুলি একত্রিত করতে কেবল কমা অপারেটরটি ব্যবহার করতে পারেন।
নিল

2

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

পি-> 1 এইচ-> 2 আর-> 3 ব্যবহার করে

lambda a:sum(1/y|x/3for x,y in zip([3]+a,a))




1

হুশ , 6 5 বাইট

Lġo&ε

এটি অনলাইন চেষ্টা করুন! ইনপুট হ'ল একটি তালিকা 0,1,2(টিআইও লিঙ্কটি পরীক্ষার মামলার অনুলিপি-অনুলিপি করার জন্য অক্ষর ব্যবহার করে)।

ব্যাখ্যা

আমি জোনাথন অ্যালানের জেলি উত্তর হিসাবে একই সাধারণ ধারণাটি ব্যবহার করি : "বিচ্ছিন্ন জুটি" পিপি, এইচপি, আরএইচ, আরআর এবং আরপি সংঘটিত হওয়ার ফলে বিভক্ত হয়ে ফলাফলগুলি ব্লকগুলি গণনা করুন। 0,1,2 এনকোডিং-এ, এই জোড়গুলি হ'ল হ'ল যাদের বাম উপাদান 2 বা ডান উপাদান 0 হয়।

Lġo&ε  Input is a list.
 ġ     Split between pairs that do not satisfy:
    ε  the left element is at most 1
  o&   and the right element is truthy.
L      Length.



1

জেলি , 10 বাইট

Pn1></µƝS‘

এটি অনলাইন চেষ্টা করুন! নাকি টেস্ট স্যুট! ( চুরি জোনাথনের কাছ থেকে ধার করা।)

বিকল্প:

P=1=</µƝS‘

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

Pn1></µƝS‘ | Monadic chain.

      µƝ   | Map over each pair of "neighbours" (x, y) in the list.
P          | And check whether their product...
 n1        | ... 1 if it doesn't equal 1, 0 otherwise...
   >       | Is higher than?
    </     | The pair reduced by "Smaller than?". 1 if x < y, else 0.
        S  | Sum.
         ‘ | Add 1.

জেলি , 11 বাইট

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

ḅ3Ɲf⁽vḲD¤L‘

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


ওহ, আমি প্রথম প্রতিবেশীদের দ্রুত ব্যবহার করার
সুযোগটি হাতছাড়া করেছি

আপনি μতৃতীয়টি থেকে সরিয়ে ফেলতে পারেন
স্নিগ্ধ কোইনারিংহিং

1

কোটলিন , 36 বাইট

Regex("P?H*R?").findAll(i).count()-1

শোভিত

Regex("P?H*R?").findAll(i).count()-1

পরীক্ষা

fun f(i:String) =
Regex("P?H*R?").findAll(i).count()-1
data class Test(val input: String, val output: Int)

val TESTS = listOf(
        Test("P", 1),
        Test("H", 1),
        Test("R", 1),
        Test("HP", 2),
        Test("RHP", 3),
        Test("HHR", 1),
        Test("PHRH", 2),
        Test("RHRPHHHR", 3),
        Test("HHHHHH", 1),
        Test("PPRRHHPP", 6),
        Test("HPPRHRPRHPPRHPPHRP", 12),
        Test("PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP", 28)
)

fun main(args: Array<String>) {
    for ((input, expectded) in TESTS) {
        val actual = f(input)
        if (actual != expectded) {
            throw AssertionError("$input $expectded $actual")
        }
    }
}

Tio

TryItOnline


0

জে , 18 17 বাইট

-1 @ ফ্রাউনফ্রোগকে ধন্যবাদ

1+1#.}:(<+:1=*)}.

আকারে ইনপুট নেয় 0,1,2। টিআইওতে সহায়তা ফাংশন পরীক্ষার কেসগুলি এই ফর্মটিতে রূপান্তর করে।

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

তুলনাগুলির যুক্তি এখনও গল্ফযোগ্য হতে পারে। আমি আরও বেশি সমতুল্য ও সংক্ষিপ্ত বিবৃতি ভাবার চেষ্টা করে আমার মস্তিষ্ককে গিঁটে পরিণত করছি।

ব্যাখ্যা (পূর্ববর্তী সমাধান)

1+1#.2(</+:1=*/)\]

বর্তমান সমাধান এবং পূর্ববর্তী সমাধানের মধ্যে একমাত্র পার্থক্য হ'ল তুলনাগুলি কীভাবে উত্পন্ন হয়। বর্তমান দ্রষ্টব্য সুস্পষ্টভাবে অ্যারের অফসেট করে সংলগ্ন উপাদানগুলির সাথে তুলনা করে এবং পূর্ববর্তী দ্রবণটি 2 এর ইনফিক্সগুলি দেখে সংলগ্ন উপাদানগুলির সাথে তুলনা করে।

1 + 1 #. 2 (</ +: 1 = */)\ ]
         2               \ ]  On infixes of 2 on the input
                  1 = */        Is the infix 1 1 (two holds)?
            </                  Is the infix x y such that x < y?
               +:               These results NORed
    1 #.                       Add all of the results together (debase to base 1)
1 +                            Add one

যদি দুটি হোল্ড কিছুই না করে তবে এটি অনেক ক্লিনার হতে পারে। কোডটি দুটি এর ইনফিক্স নেয় এবং চেক করে যদি তারা আরোহী না হয় এবং দুটি হোল্ড হয় না। যদি এটি হয় তবে আমরা আমাদের চূড়ান্ত গণনায় একটি যুক্ত করব। অন্যথায় আমরা একে অপরের বন্ধ থাকায় আমাদের শেষ পর্যন্ত 1 যুক্ত করতে হবে (বা আপনি _2 বা তার চেয়ে বড় কোনও মান আগেই দিতে পারেন )।

ইনফিক্স দুটি হোল্ড রয়েছে কিনা তা যেভাবে পরীক্ষা করে তা হ'ল দুটি মানকে এক সাথে গুণ করে এবং এটি এক হয় কিনা তা দেখতে (দুটি হোল্ড রয়েছে 1 1)।


1
1+1#.}:(<+:1=*)}.একটি খাটো হয়।
ফ্রাউনফ্রগ

@ ফ্রভনিফ্রোগ চালাক, আমি এটিকে সম্পাদনা করব
কোল

1
14:1+1#.0=}.*2-}:
ফ্রাউনফ্রোগ

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