এই সকলের মধ্যে সবচেয়ে নিদ্রা কে?


31

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা অক্ষরের একটি স্ট্রিংয়ের সাথে নিয়ে থাকে -=o.যেখানে -=oএর এবং .সর্বদা বিকল্প, অক্ষর থেকে অক্ষরে থাকে। স্ট্রিংটির বিজোড় দৈর্ঘ্য একের চেয়ে বেশি হবে এবং সর্বদা একটিতে শুরু এবং শেষ হবে -=o

মূলত, ইনপুটটি ইমোটিকন মুখগুলির এক লাইনের মতো দেখায় যা ঘুমের বিভিন্ন রাজ্যে চোখ ভাগ করে

o.=.=.-.-.o.o

আপনার লক্ষ্য হ'ল মুখটি মুদ্রণ করা বা ফিরে আসা যা ঘুমন্ত বা সবচেয়ে বেশি জাগ্রত (আপনি যা পছন্দ করেন এটি আপনার উপর নির্ভর করে)। কে সবচেয়ে বেশি ঘুমন্ত / সবচেয়ে বেশি জাগ্রত তার পক্ষে যদি একাধিক পছন্দ থাকে তবে তার মধ্যে যে কোনও একটিই আউটপুট হতে পারে।

নয়টি স্বতন্ত্র মুখ এবং ঘুমের পাঁচ স্তর রয়েছে:

-.- is 100% sleepy
-.= is 75% sleepy
-.o is 50% sleepy
=.- is 75% sleepy
=.= is 50% sleepy
=.o is 25% sleepy
o.- is 50% sleepy
o.= is 25% sleepy
o.o is 0% sleepy

যদি এটা পরিষ্কার না, নিদ্রালুতা শতাংশ বরাদ্দ করে নির্ণয় করা হয় 1থেকে -সম্পূর্ণরূপে ঘুমিয়ে জন্য, 0.5থেকে =আধা ঘুমন্ত জন্য, এবং 0থেকে oজাগ্রত জন্য। তারপরে দুটি চোখের মানগুলির যোগফলকে দুটি দ্বারা ভাগ করা হয় শতাংশ।

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

পরীক্ষার মামলা

Sleepiest

-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES -.=
=.-.= GIVES =.- OR -.=
o.-.= GIVES -.=
-.-.= GIVES -.-
o.o.- GIVES o.-
=.=.=.o GIVES =.=
-.=.=.= GIVES -.=
=.o.-.= GIVES -.=
o.-.o.=.= GIVES o.- OR -.o OR =.=
-.o.-.=.= GIVES -.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES -.-
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES -.= OR =.-

সর্বাধিক জাগ্রত

-.- GIVES -.-
=.- GIVES =.-
o.o GIVES o.o
o.-.= GIVES o.-
=.-.= GIVES =.- OR -.=
o.-.= GIVES o.-
-.-.= GIVES -.=
o.o.- GIVES o.o
=.=.=.o GIVES =.o
-.=.=.= GIVES =.=
=.o.-.= GIVES =.o
o.-.o.=.= GIVES o.=
-.o.-.=.= GIVES -.o OR o.- OR =.=
o.o.o.o.o GIVES o.o
-.-.-.-.- GIVES -.-
o.=.=.-.-.o.o GIVES o.o
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o

31
আমি অনুভব করছি-.-
ক্রিটসি লিথোস

উত্তর:


28

পাইথ, 12 10 বাইট

hoSN%2.:z3

এটি নিদ্রিত ইমোটিকন প্রিন্ট করে। পাইথ কম্পাইলারের সমস্ত পরীক্ষার কেস একবারে যাচাই করুন ।

বাছাই করার ধারণার জন্য ক্রেডিটটি @ Sp3000 এ যায় ।

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

hoSN%2.:z3
              (implicit) Save the in z.
      .:z3    Compute all substrings of length 3.
    %2        Keep every seconds substring. This discards non-emoticons.
 o            Sort the emoticons by the following key:
  SN            Sort the characters of the emoticon.
                This works since '-' < '=' < 'o'.
h             Retrieve the first, minimal element.

18
এই মায়া কি ?!
এভিজেড

@ ডেনিস আমি পাইথের কাছে নতুন তাই এটি হয়ত ভুল হতে পারে: কেন নয় hS%2.:z3?
হেলিক্স কোয়ার

5
@ হেলিক্স কারণ আমরা আরও =.-বেশি ঘুমোতে চাই -.o, তবে সেগুলি অন্যভাবে বাছাই করা। আমিও একই ভুল করেছি।
xnor

9

পাইথন 2, 54 53 বাইট

f=lambda s:s and max((s+' ')[:3],f(s[2:]),key=sorted)

এটি এমন একটি ফাংশন যা সবচেয়ে বেশি জাগ্রত হওয়া মুখটি ফিরিয়ে দেয়।

আমার আসল অ্যালগরিদমকে সংক্ষিপ্ত করতে কৌশলগত কৌশলগুলি সরবরাহ করার জন্য xnor কে অনেক ধন্যবাদ।


ঠিক আছে, আমি বোধহয় অনুভূত হয় যে প্রতীকগুলি জাগ্রত দ্বারা সাজানো হয় না। আমি মনে করি আপনি maxএটিকে পুনরাবৃত্তি করার পরিবর্তে পুনরাবৃত্তি করতে পারেন :f=lambda s:s[3:]and max(s[:3],f(s[2:]))or s
xnor

আসলে, আমি মনে করি এটি কার্যকর হয় না =.-.o, কারণ =.-বনাম -.oসাজানোর নিয়মের ব্যতিক্রম।
xnor

আসলে, আমি ঠিক বুঝতে পেরেছি যে আমি অপটিটি ভুলভাবে লিখেছি। আমি ভেবেছিলাম যে টেবিলে প্রদর্শিত মুখগুলি সাজানো হয়েছে। এই অনুমানের কারণে আমার জমাটি "= .o.-" এর জন্য ব্যর্থ হয়। আমার মনে হয় যদিও আমার একটা ঠিক আছে।
xsot

@ এক্সসট আমি বিশ্বাস করি ,key=sortedএকটি সমাধান হবে তবে এটি 11 টি অক্ষর যাতে আপনার সম্ভবত সংক্ষিপ্ত হয়।
xnor

হ্যাঁ এটাই আমার মনে স্থির ছিল
xsot

6

সিজেম, 12 বাইট

q3ew2%{$}$0=

এটি নিদ্রিত ইমোটিকন প্রিন্ট করে। এই বেহালতা চেষ্টা করুন বা এই পরীক্ষাটি স্যুট CJam অনুবাদক হবে।

ক্রেডিট এর জন্য @ Sp3000 এ যায় বাছাই করার ধারণার

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

q            e# Read all input from STDIN.
 3ew         e# Push all overlapping slices of length 3.
    2%       e# Keep every seconds slice. This discards non-emoticons.
      {$}$   e# Sort the slices by their sorted characters.
             e# This works since '-' < '=' < 'o'.
          0= e# Retrieve the first, minimal slice.

4

ডায়ালগ এপিএল, 35 28 বাইট

{⊃{⍵[⍒{+/'.??o='⍳⍵}¨⍵]}3,/⍵}

এটি একটি মোনাডিক ফাংশন যা ডানদিকে স্ট্রিং নেয় এবং ঘুমের মুখকে আউটপুট করে।

    {⊃{⍵[⍒{+/'.??o='⍳⍵}¨⍵]}3,/⍵}'o.=.=.-.-.o.o'
-.-

{(⊃⍒3+/'.??o='⍳⍵)⊃3,/⍵}
ব্যবহারকারী46915

এবং ইনপুট সীমাবদ্ধতা দেওয়া, ??এটিও অপ্রয়োজনীয়।
ব্যবহারকারী46915

4

প্রোলোগ, 205 189 বাইট

কোড

r([X|T],[N|B],M):-N=M,write(X);r(T,B,M).
p(X):-findall(S,sub_atom(X,_,3,_,S),L),findall(E,(nth1(I,L,E),I mod 2=\=0),R),maplist(atom_codes,R,Q),maplist(sum_list,Q,S),min_list(S,M),r(R,S,M).

ব্যাখ্যা

r([X|T],[N|B],M):-N=M,write(X);r(T,B,M).
p(X):-findall(S,sub_atom(X,_,3,_,S),L),              % L = all sublists of length 3
      findall(E,(nth1(I,L,E),I mod 2=\=0),R),        % R = every other element of L
      maplist(atom_codes,R,Q),                       % Q = list of decimal ascii codes 
                                                           created from R

      maplist(sum_list,Q,S),                         % S = list of sums of R's lists
      min_list(S,M),                                 % M = minimum sum
      r(R,S,M).                                      % Prints first element in R with sum M

উদাহরণ

>p('-.=.-.o.o.=.o.-.o.=.-.o.=.o.-').
-.=

সম্পাদনা করুন: ওআর এর সাথে আর-ক্লজগুলি একীকরণ করে 16 বাইট সংরক্ষণ করা হয়েছে।


1

Clojure, 82 বাইট

(fn[x](println(apply str(apply min-key #(reduce +(map int %))(partition 3 2 x)))))

বোনাস: নিম্নলিখিত ছোট ফাংশন একই মুখের মুদ্রণ করে তবে আরও স্টাইল সহ!

(fn[x](println(apply min-key #(reduce +(map int %))(partition 3 2 x))))

পরীক্ষা এখানে।


1

রুবি, 59 বাইট

বাছাইয়ের কৌশলটি ব্যবহার করে ফাংশনটি নিদ্রতম মুখটি ফিরিয়ে দেয়।

f=->(s){s.split(?.).each_cons(2).min_by{|e|e.sort}.join(?.)}

এভাবে ডাকা:

f.call("o.=.=.-.-.o.o")
# => "-.-"

অভ্যন্তরীণ চোখের ধরণের কারণে বিশ্রী চোখের ক্রমে কাজ করে:

f.call("=.-.o")
# => "=.-"

1

মিনকোলাং 0.12 , 119 বাইট

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

>2@fv$oI2:[9[i$z3[iciz1+q=]++3=tt"^"3zpt]$x$x]IX3140w
o.o1F
o.=1$
=.o1+
=.=12
o.-1:
-.o11
=.-1+
-.=13
-.-1[
/c0i<
\qO].

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

ব্যাখ্যা

তবে সত্যই, উপরের লিঙ্কটিতে ক্লিক করুন এবং ক্লিক করুন Slow! যাই হোক ...

>2@fv

এটি fvপরে যায় , যা পরে গুরুত্বপূর্ণ হবে।

$o                                                  Read in whole input as characters 
  I2:                                               Half the stack length
     [                                              Open for loop (for each face)
      9[                                            Open another for loop - 9 repeats
        i$z                                         Stores loop counter in register
           3[                                       Open another for loop - 3 repeats
             ic                                     Copy char 1/2/3
               iz1+q                                Retrieve char from lookup table
                    =                               1 if equal, 0 otherwise
                     ]                              Close for loop
                      ++                            Add twice
                        3=                          1 if equal to 3, 0 otherwise
                          tt      t                 Ternary - executes first part when 0,
                                                    second part otherwise
                            "^"3zp                  Put a ^ next to the face that matched
                                   ]                Close lookup for loop
                                    $x$x            Dump first two characters
                                        ]           Close for loop
                                         IX         Dump the whole stack
                                           31       Push a 3, then a 1
                                             40w    Wormhole to (4,0) in the code

যা কিছু হয়েছিল ^তা মিলে যাওয়া মুখগুলির পাশে রেখে দেওয়া হয়েছিল। সুতরাং এখন কোডবক্সটি দেখতে এরকম হতে পারে:

>2@fv$oI2:[9[i$z3[iciz1+q=]++3=tt"^"3zpt]$x$x]IX3140w
o.o1F
o.=1$
=.o1+
=.=^2   <-- caret
o.-^:   <-- caret
-.o11
=.-1+
-.=^3   <-- caret
-.-1[
/c0i<
\qO].

মন্তব্য ছাড়া, অবশ্যই। এখন, 40wওয়ার্মহোলটি নির্দেশের পয়েন্টারটি প্রেরণ করেছিল v, এটি এটি অবিলম্বে পুনর্নির্দেশ করে F। এখন, Fএকটি "গসব" কমান্ড। এটি একটি গোটোর মতো, তবে আপনি যেখানে ডেকেছিলেন সেখানে ফিরে যেতে পারেন। সময়ে Fসম্মুখীন হয়, স্ট্যাক হয় [3,1], তাই এটি 1দ্বিতীয় সারির উপর (সম্ভবত) লাফায়। প্রোগ্রামের কাউন্টারটি নীচের দিকে যাচ্ছিল, এটি চালিয়ে যাচ্ছে, 1পথে স্ট্যাকের দিকে গুলি ঠেলে । এটি ... এটি হিট না হওয়া অবধি, এটি ^আবার পুনর্নির্দেশ করা হয়েছে, যেখানে এটি 1আবার প্রতিটি ধাক্কা দেয় । তারপরে নির্দেশিকা নির্দেশক হিটগুলি প্রয়োজনীয় নির্দেশ অনুসারে নির্দেশিকা পুনঃনির্দেশিত করতে পরিবেশন করে)f , যা এর অবস্থান এবং দিকটি পুনরুদ্ধার করে (যখন এর Fআগে দেখা হয়েছিল)। সুবিধার জন্য, আমি নিম্নলিখিত কোডটি নেব এবং এর বিন্যাসটি পরিবর্তন করব। (দ্য</\

$+                 Sum up the whole stack
  2:               Divide by 2 (because each 1 was pushed twice)
    1+             Add 1 (shift down one row)
      3[           Open for loop - 3 repeats
        i          Push loop counter
         0c        Copy top of stack
           q       Retrieve face character
            O      Output as character
             ].    Close for loop and stop when it's done.

আমি মিনকোলাংয়ের কাছে অনন্য একাধিক বৈশিষ্ট্য ব্যবহার করেছি যা আমি আগে কখনও ব্যবহার করি নি সে সম্পর্কে আমি আসলেই গর্বিত। মূলত তিনটি এবং গসব। যাইহোক, আপনি এটি আছে!


1

সি, 70 বাইট

char*f(char*s){char*p=s[3]?f(s+2):s;return*s+s[2]>*p+p[2]?s[3]=0,s:p;}

ফাংশনটি সর্বাধিক জাগ্রত মুখ ফিরিয়ে দেয়। এটি জায়গায় ইনপুট স্ট্রিংটি পরিবর্তন করে, যাতে নাল-টার্মিনেটেড স্ট্রিংটি ফিরে আসে।


1

পাইথন 2/3, 54 56 বাইট

lambda x:".".join(max(zip(x[::2],x[2::2]),key=sorted))

Xsot এর পুনরাবৃত্ত উত্তরের জন্য একটি বিকল্প ট্যাক নিতে চেয়েছিলেন।

এটি সংলগ্ন জোড়া চোখের সেরা (বা সবচেয়ে খারাপ?) টিপল নেয় এবং তাদের সাথে একত্রিত হয়।

সর্বাধিক নিদ্রাহীনতা ফিরে পাওয়ার জন্য সর্বনিম্ন মিনিটের সাথে প্রতিস্থাপন করুন (এটি সর্বাধিক জাগ্রত হিসাবে ফিরে আসে)

নিম্নলিখিত পরীক্ষাটি ব্যবহার করে কাজ করা বলে মনে হচ্ছে:

for line in """-.- GIVES -.-
    =.- GIVES =.-
    o.o GIVES o.o
    o.-.= GIVES o.-
    =.-.= GIVES =.- OR -.=
    o.-.= GIVES o.-
    -.-.= GIVES -.=
    o.o.- GIVES o.o
    =.=.=.o GIVES =.o
    -.=.=.= GIVES =.=
    =.o.-.= GIVES =.o
    o.-.o.=.= GIVES o.=
    -.o.-.=.= GIVES -.o OR o.- OR =.=
    o.o.o.o.o GIVES o.o
    -.-.-.-.- GIVES -.-
    o.=.=.-.-.o.o GIVES o.o
    -.=.-.o.o.=.o.-.o.=.-.o.=.o.- GIVES o.o""".splitlines():
    inp, _, opts = line.partition(" GIVES ")
    optst = opts.split(" OR ")
    act = f(inp)
    print(inp, "expected", opts, "got", act, "equal?", act in optst)

যা নিম্নলিখিত ফলাফল দেয়:

-.- expected -.- got -.- equal? True
=.- expected =.- got =.- equal? True
o.o expected o.o got o.o equal? True
o.-.= expected o.- got o.- equal? True
=.-.= expected =.- OR -.= got =.- equal? True
o.-.= expected o.- got o.- equal? True
-.-.= expected -.= got -.= equal? True
o.o.- expected o.o got o.o equal? True
=.=.=.o expected =.o got =.o equal? True
-.=.=.= expected =.= got =.= equal? True
=.o.-.= expected =.o got =.o equal? True
o.-.o.=.= expected o.= got o.= equal? True
-.o.-.=.= expected -.o OR o.- OR =.= got =.= equal? True
o.o.o.o.o expected o.o got o.o equal? True
-.-.-.-.- expected -.- got -.- equal? True
o.=.=.-.-.o.o expected o.o got o.o equal? True
-.=.-.o.o.=.o.-.o.=.-.o.=.o.- expected o.o got o.o equal? True

দুটি তাত্ক্ষণিক প্রশ্ন: 1) যখন উভয়ই প্রস্তাবিত উভয়ের সাথে কাজ করে তখন পাইথন 2/3 হিসাবে লেবেলিং করা হয়? 2) f=এই চ্যালেঞ্জের জন্য কোড আকারের অংশ হিসাবে অংশটি প্রয়োজনীয়? আমি যদি এটি না করি তবে এটি ল্যাম্বডা তৈরি করবে এবং ঠিক তখনই তা আবার ফেলে দেবে ...
TLW

1
1) "পাইথন 2/3" বা "পাইথন" ঠিক আছে আমি মনে করি 2) আপনার যদি প্রয়োজন না হয় f=তবে বর্তমান sensক্যমত্য মনে হয় বেনাম ফাংশনগুলি ডিফল্টরূপে ঠিক আছে, তাই আপনি f=এই ক্ষেত্রে ড্রপ করতে পারেন ( এটি পুনরাবৃত্ত হওয়ার পরে xsot এর এটির প্রয়োজন)
Sp3000


0

গণিত, 61 বাইট

"."
Sort[Partition[#~StringSplit~%,2,1]][[1]]~StringRiffle~%&

সবচেয়ে ঘুমের জন্য যায়।


এই ফাংশনটি কেবল একবারে কাজ করে, আপনি যতবারই এই কোডটি কল করতে চান না যতক্ষণ না পুরো কোডটি পুনরাবৃত্তি করে। ফাংশন জমা দেওয়ার বিষয়টি তাদের পুনরায় ব্যবহারযোগ্য হওয়ার জন্য । আপনার ফাংশনটি কল করা বিশ্বব্যাপী এর মান ভেঙে দেয় %যা এটি নির্ভর করে।
মার্টিন এন্ডার

0

এফ # 60

fun s->Seq.max[for n in 0..2..String.length s-2->s.[n..n+2]]

সর্বাধিক জাগ্রত মুখটি ফিরে আসে (সবচেয়ে ঘুমের maxদ্বারা পরিবর্তিত min)


0

পার্ল 5, 127 বাইট

%h=qw[- 2 = 1];sub r{$b=0;$b+=$h{$_}for split'',pop;$b}($_)=<>;@a='o.o';while(/.../g){push@a,$& if(r$&)>r$a[-1];--pos}say$a[-1]

(আমি নিশ্চিত যে এটি আরও সংক্ষিপ্তভাবে করণীয়।) এটি কীভাবে কাজ করে:

  1. একে একে ওভারল্যাপ করে স্ট্রিং থেকে প্রতিটি তিন-অক্ষরের স্ট্রিংটি ধরুন (এটিই --posহয়)।
  2. তিনটি অক্ষরের স্ট্রিংটিকে একটি অ্যারেতে যুক্ত করুন যদি এর মান অ্যারের শেষ উপাদানটির চেয়ে বেশি হয়; এখানে "মান" হ'ল ঘুমের মধ্যে এর অক্ষরের মানগুলির যোগফল।
  3. অ্যারের শেষ উপাদানটি মুদ্রণ করুন।

0

ES6, 81 72 বাইট

a=>"-.-,-.=,=.-,-.o,=.=,o.-,=.o,o.=,o.o".split`,`.find(b=>a.includes(b))

সম্ভবত ক্রোম 45 বা ফায়ারফক্স 41 প্রয়োজন।

9 বাইট সংরক্ষণের জন্য @ETH প্রডাকশনগুলিকে ধন্যবাদ।


1
ভাল, কিন্তু "=.-"সঙ্গে স্যুইচ করা উচিত "-.o"; একই সাথে "=.o"এবং "o.-"। এছাড়াও, আপনি কমা দ্বারা আলাদা করে এবং একটি স্ট্রিংয়ে সমস্ত কিছু রেখে কিছু বাইট সংরক্ষণ করতে সক্ষম হতে পারেন .split`,`
ETH প্রোডাকশন

বিভাজন ব্যবহার 9 টি অক্ষর বাঁচাতে পারে
edc65

@ ইথ প্রডাকশনস দুঃখিত, আমি খেয়াল করিনি যে মুখগুলির মূল তালিকাটি ঘুমের ক্রমে নিজেই ছিল না।
নিল

0

> <> , 55 বাইট

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

<v~i:i&0"."0
 >i:@+:&:@)?v&~i0(?v
 ^?)0i:r~r&~<;ooo$r<

সর্বাধিক জাগ্রত চেহারা আউটপুটস।

যেহেতু ASCII মান যথাক্রমে -, =, এবং o বৃদ্ধি করে, তাই আমি এটি আমার সুবিধার জন্য ব্যবহার করতে পারি। মূলত এটি বর্তমান এবং পূর্বের চোখের অংশের মানগুলি যুক্ত করে, এটি আগের চেয়ে উচ্চতর মান কিনা তা পরীক্ষা করুন, এটি যদি নতুন মান সংরক্ষণ করে এবং কোন মুখটি উপস্থাপিত করে তা আপডেট করে তবে ইনপুটটির শেষ অবধি লুপ হয়। তারপরে যে মুখটি রয়ে যায় তা আউটপুট করে। (সমস্ত কোডটি কতটা সুন্দরভাবে ফিট করে তাতে আমি খুব সন্তুষ্ট)


0

পার্ল 5 -MList::Util=max -p , 68 বাইট

s|..(?=(.))|$t=max$t,ord($&)%15%4+ord($1)%15%4 .$&.$1|eg;$_=$t;s/.//

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

তিনটি অক্ষরের প্রতিটি সেট আঁকুন, .মাঝখানে উপেক্ষা করে , অন্যান্য দুটি সংযোজনকে 0-4 পরিসরের একটি পূর্ণসংখ্যার সাথে মানচিত্র করে, তা ইমোটিকন মুখের সামনের দিকে যুক্ত করে, তারপরে সাজিয়ে তোলে। শেষ এন্ট্রি ধরুন (সর্বাধিক জাগ্রত), সামনে থেকে নম্বরটি সরিয়ে দেয় এবং আউটপুট দেয়।

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