আপনার কথা ওজন!


10

চ্যালেঞ্জ

দুটি স্ট্রিং দেওয়া হয়েছে, প্রতিটি দৈর্ঘ্যের 30 টি পর্যন্ত প্রিন্টযোগ্য এএসসিআইআই অক্ষর (কোড সহ) থাকে [32,126]), কোডের কয়েকতম বাইটে এগুলিকে ব্যালেন্স স্কেলে রাখুন! এটি নিম্নলিখিত পদক্ষেপ নিয়ে গঠিত:

  1. স্ট্রিংগুলির ওজন গণনা করুন এবং তুলনা করুন
  2. যথাযথ কাত হওয়া ASCII- আর্ট স্কেল চয়ন করুন
  3. দুটি স্ট্রিং স্কেলে রাখুন

স্ট্রিংগুলি অ্যারে, দুটি আর্গুমেন্ট বা অন্য কোনও যুক্তিসঙ্গত পদ্ধতি হিসাবে পাস হতে পারে।


একটি স্ট্রিং ওজন যে STRING এর অক্ষর, যেখানে ওজন এর সমষ্টি হিসেবে সংজ্ঞায়িত করা হয়:

  • স্পেসগুলির ওজন 0 ( )
  • ছোট হাতের অক্ষরের ওজন 2 ( abcdefghijklmnopqrstuvwxyz)
  • বড় হাতের অক্ষরের ওজন 4 ( ABCDEFGHIJKLMNOPQRSTUVWXYZ) হয়
  • অন্যান্য সমস্ত চিহ্নগুলির ওজন 3 ( !"#$%&'()*+,-./0123456789:;<=>?@[\]^_`{|}~)

আঁশগুলি দেখতে এ রকম:

          । : _
          | _- * / \
          | - * /
       _- * | /
    _- * | /
   / \ | * ------ *
  / \ |
 / \ |
/ \ |
* ------ * |
    ______ | ______
    _
   / \ * -_ |
  / \ * - |
 / \ | * -_ 
/ \ | * -_
* ------ * | / \
          | /
          | /
          | /
          | * ------ *
    ______ | ______
          ।
          |
    ______ | ______
   / \ | / \
  / \ | /
 / \ | /
/ \ | /
* ------ * | * ------ *
          |
          |
    ______ | ______

প্রথম স্ট্রিং যদি ভারী হয় তবে আপনার আউটপুটটির ভিত্তি হিসাবে প্রথম অঙ্কনটি ব্যবহার করুন; যদি দ্বিতীয় স্ট্রিংটি ভারী হয় তবে দ্বিতীয় অঙ্কনটি ব্যবহার করুন; স্ট্রিংগুলির সমান ওজন থাকলে তৃতীয়টি ব্যবহার করুন। চলমান সাদা স্থান অনুমোদিত।


আমি নীচের সমস্ত উদাহরণের জন্য বেস হিসাবে তৃতীয় অঙ্কনের একটি অংশটি ব্যবহার করব।

প্রথম স্ট্রিংটি বাম প্যানে এবং দ্বিতীয় স্ট্রিংটি ডান প্যানে রাখা উচিত।

তার স্থাপন দ্বারা একটি প্যান উপর একটি স্ট্রিং স্থাপন করুন অ-স্পেস , অবিলম্বে ড্যাশ উপরে 6x5 এলাকার মধ্যে অক্ষর হিসাবে চিহ্নিত #এখানে গুলি (আপনি ভারসাম্য স্কেল অংশ মুছে যাওয়ার শেষ হতে পারে - যে জরিমানা):

 ######: _
 ######
 ######
 ######
/ ###### \
* ------ *

এই সমস্ত অক্ষর "নিষ্পত্তি" হওয়া উচিত। হয় -অক্ষর উপরে বা স্ট্রিং থেকে অন্য একটি অক্ষর:

  ভুল ভুল সংশোধন
    ____ ____ ____
 চ / \ / \ / \
  l \ / \ / \
 / \ / হোভ \ / এস
/ ওটেটিং \ / ইরি এনজি \ / আটল্ড \
* ------ * * ------ * * ------ *

অতিরিক্তভাবে, পুরো স্ট্যাকটি যথাসম্ভব সমতল হওয়া উচিত, যার অর্থ ছয় 1-প্রশস্ত কলামের, লম্বাটির দৈর্ঘ্য এবং সংক্ষিপ্তের উচ্চতা 1 এর বেশি হওয়া উচিত নয়:

    ভুল ভুল সংশোধন
[দীর্ঘতম: 5] [দীর্ঘতম: 4] [দীর্ঘতম: 5] [দীর্ঘতম: 2]
[সংক্ষিপ্ততম: 0] [সংক্ষিপ্ততম: 2] [সংক্ষিপ্ততম: 4] [সংক্ষিপ্ততম: 2]
      5__5_ ____ 5_5__ ____
     45445 & / \ 445454 /
     45445 $% & 44 @ 445454 /
    / 45445 &% @%% & 445454% & $ @% &
   / 45445 \ / & $ @ $ &% \ / 445454 \ / $ @ $% $$
   * ------ * * ------ * * ------ * * ------ *

চরিত্রগুলির যথাযথ অর্ডার / বিন্যাস কোনও ব্যাপার নয়। "আপনার শব্দগুলি ওজন করুন!" স্ট্রিংয়ের জন্য নীচে সমস্ত বৈধ ব্যবস্থা রয়েছে:

    ____ ____ ____ ____
   / \ / \ / \ /
 ডি এস! \ / owd Oe \ u! Wd
 আওয়ারওয়ার ওয়াইহোস ইওইউজিআর ইহিও
/ ওজন \ / এজারি! \ / ডাব্লুআরএইচডি! এস s / আরআরসুই y
* ------ * * ------ * * ------ * * ------ *

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

ইনপুট: "কোড গল্ফ", "কোডিং চ্যালেঞ্জ"
ওজন: 32, 32
উদাহরণস্বরূপ:
          । 
          |
    ______ | ______
   / \ | / \
  / \ | nge \ গুলি
 / ওও \ | challe
/ সিএফজিএলডি \ | / কোডিং \
* ------ * | * ------ *
          |
          |
    ______ | ______ 
ইনপুট: "", "$"
ওজন: 0, 3
উদাহরণস্বরূপ:
    _
   / \ * -_ |
  / \ * - |
 / \ | * -_ 
/ \ | * -_
* ------ * | / \
          | /
          | /
          | / $ \
          | * ------ *
    ______ | ______
ইনপুট: "তারা কী বলে তা আপনি জানেন!", "আছে_দলীয়_আ_প্রযুক্তি_এক্সকিসিডি"
ওজন: 75, 65
উদাহরণস্বরূপ:
          । tr_a_s
          | _hekx_y
          | - * এলসিডিটা
       _- * | revanw
    _- * | / E's_al \
  টি / \ | * ------ *
 শ্রোতা |
 এ! এইচডাব্লুওয়াইকে |
/ ওটিএসএমইউ \ |
* ------ * |
    ______ | ______

1
পিছনে সাদা অংশ গ্রহণযোগ্য?
হিয়াটসু

@ হিয়াটসু ইয়েপ, ঠিক আছে।
নেগেটিভ সাত

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

@ শেগি আমি মনে করি এটি একটি ন্যায্য মূল্যায়ন। এটি পোস্ট করা আমাকে কেবল জিনিসগুলি সহজ রাখতে শিখিয়েছে।
নেতিবাচক সাত

উত্তর:


7

কাঠকয়লা , 110 বাইট

UMθ⪫⪪ι ω≔⁰ηFθ≦⁻ΣEι⁻⁺³№ακ№βκηP-×⁷_↑χ.¶¶≔³ζ¿η«≔∨›⁰η⁵ζM±⁶±²_F⁴⁺¶*-§_|_ι¿›⁰η‖»P-⁺|×⁶_J±⁴±ζFθ«←⁶↑*↗⁴↓↘⁴←↖*←⪪ι⁶J⁹⁻ζ⁶

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। দুটি স্ট্রিংয়ের অ্যারে হিসাবে ইনপুট নেয়। ব্যাখ্যা:

UMθ⪫⪪ι ω

উভয় স্ট্রিং থেকে স্পেসগুলি সরান।

≔⁰η

ওজনের ভারসাম্য ধরে নিন।

Fθ

উভয় স্ট্রিং উপর লুপ।

≦⁻ΣEι⁻⁺³№ακ№βκη

স্ট্রিংয়ের ওজন থেকে চলমান পার্থক্যটি বিয়োগ করুন।

P-×⁷_↑χ.¶¶

ব্যালেন্স স্কেলের বেস প্রিন্ট করুন।

≔³ζ

ধরে নিন যে উভয় কলম মাটির বাইরে 3 টি।

¿η«

ওজন যদি ভারসাম্য না রাখে ...

≔∨›⁰η⁵ζ

... বাম প্যানটির উচ্চতা গণনা করুন ...

M±⁶±²_F⁴⁺¶*-§_|_ι

... ডানদিকে ঝুঁকে থাকা ভারসাম্যটি আঁকুন ...

¿›⁰η‖»

... এবং বাম প্যানটি ভারী হলে প্রতিফলিত করুন।

P-⁺|×⁶_

অন্যথায় একটি স্তর ভারসাম্য আঁকুন।

J±⁴±ζ

প্রথম স্কেল প্যানে ঝাঁপ দাও।

Fθ«

ইনপুট উপর লুপ।

←⁶↑*↗⁴↓↘⁴←↖*

স্কেল প্যান আঁকুন।

←⪪ι⁶

Length দৈর্ঘ্যের সাবস্ট্রিংগুলিতে ইনপুটটি টুকরো টুকরো করুন এবং এগুলি উপরের দিকে মুদ্রণ করুন যাতে তারা প্যানটি উপরের দিকে ভরিয়ে দেয়।

J⁹⁻ζ⁶

দ্বিতীয় স্কেলের প্যানে ঝাঁপ দাও।


6

পাইথন 2 , 1101 1071 855 837 বাইট

স্ট্রিং সংক্ষেপণের সাথে -216 বাইট with

কিছু পুনরাবৃত্তি হ্রাস করে -18 বাইট

from zlib import decompress as Z
from base64 import b64decode as D
r=range(6)
j="".join
w=lambda a:0if not a else(2+2*(a[0]<'[')if a[0].isalpha()else 3)+w(a[1:])
t=Z(D('eJxT0FKIV1BQ0AWT8SAIJsAcXTCppQAGumBSSx8MYsBAC0kCAiCySAIKEJW4ZHGpxA8AejMemQ=='))
p=lambda k,l,m:j(map(j,[(t[2*l+m::6][:30-len(k)]+k)[i::6]for i in r]))
def A(a,b):
 e=cmp(w(j(a.split())),w(j(b.split())))+1;return Z(D('eJxVUUGuhTAI3HOKWTdBW/U2SHoQ4O6ftvrMb0hLZJgZAYABFZB5KxD4zrZtNJOJMaHWIIoa0D6Ao+jrWRiHEI7kMcQg9VLBCo9O3dCbdanepOvZQztF9rRH2xUlwISehIZ96HltLFqu1IMF2p1QH/S+1Ge7CT5blIVOxqUWFudjqHPSwhitjPbzf7uZ1HaIaG2hShFTfU7Eca6J7MBr1K+3/YbRVLd2VlE5oilp7EG/gV7+DPQuSAsZPm7PZE9HBY2G+ctS/QzR+whSGlPAGz4mkkl5Sf18SMvkyL9iF6aLd2WLUm/KDVzvJu93k2tLZXlwetgLmFH4MzcKCaJnqX1Fz3iOf4//Pi7EwP4BHmyJpg=='))[e::3].format(*map(lambda c:[p(j(([a,b]*3)[c].split()),e,c)[i::5]for i in r],r))

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

হিসাবে চালান A(string_one, string_two

w স্ট্রিংয়ের ওজন পুনরাবৃত্তভাবে গণনা করে।

t সম্ভাব্য ছয়টি স্কেলের সংকুচিত এবং ইন্টারলেসড টেক্সট যা খুব সুন্দরভাবে সংকোচিত হওয়ার জন্য ঘটে।

p স্ট্রিংটি (ফাঁকা স্থানগুলি সরিয়ে), স্ট্রিংয়ের ওজন এবং ভারসাম্যের যে অংশটি স্ট্রিংটি চালু রয়েছে তা গ্রহণ করে এবং 5x6 অক্ষরের অক্ষর তৈরি করে।

Aস্ট্রিংগুলি নেয় এবং এর সাথে তাদের ব্লকগুলি তৈরি করে p। নীচে দৈত্য স্ট্রিং তিনটি বিন্যাসের স্ট্রিংগুলি ইন্টারলেসড এবং সংকুচিত হয়েছে।


3

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

অক্ষরের 2 টি অ্যারের অ্যারে হিসাবে ইনপুট নেয়। অক্ষর অনুসারে আউটপুট চরিত্র আঁকুন।

S=>(s=Math.sign(~(g=i=>(S[i]=S[i].filter(c=>c>' '?i+=/[a-z]/gi.test(c)?c>{}?2:4:3:0),i))(0)+g(1))+1,g=x=>y>10?'':(X=(r=x>9)?20-x:x,Y=(r?2-s:s)*2+y,S[+r][X>0&&X<7&&47-Y*6+X]||`. /\\|-_*
`[~X?x-10?y>9?X>3?6:1:[x+y*3-17,2*y-4,x+~y*3][s]/2|X<4?Y<5|Y>8?Y-9|X>7?1:X%7?5:7:~X+Y?X+Y-8?1:2^r:3^r:[7-x%3,6,5+x%3][s]:y&&4:8])+g(x<21?x+1:!++y))(y=0)

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

কিভাবে?

আমরা একটি প্রথম সহায়ক ফাংশন সংজ্ঞায়িত করি যা ইনপুট স্ট্রিং থেকে ফাঁকা স্থান সরিয়ে দেয় S[i] এবং তার ওজন ফেরত:

g = i => (                   // i = string index
  S[i] = S[i].filter(c =>    // for each character c in S[i]:
    c > ' ' ?                //   if c is not a space:
      i +=                   //     update i:
        /[a-z]/gi.test(c) ?  //       if c is a letter:
          c > {} ?           //         if c is in lower case:
            2                //           add 2 to i
          :                  //         else:
            4                //           add 4 to i
        :                    //       else (not a letter):
          3                  //         add 3 to i
    :                        //   else (a space):
      0                      //     remove c from S[i]
  ), i                       // end of filter(); return i
)                            //

এনবি: কারণ আমরা আবার ব্যবহার করি i ওজন গণনা করতে, এটি এক জন্য বন্ধ S[1]

আমরা গণনা করি sযা সমান 0 যদি S[0] ভারী, 2 যদি S[1] ভারী, বা 1 যদি উভয় স্ট্রিং এর ওজন একই হয়:

s = Math.sign(~g(0) + g(1)) + 1

আউটপুট আঁকতে আমরা এখন দ্বিতীয় সহায়ক ফাংশনটি প্রার্থনা করছি:

g = x =>                     // given x:
  y > 10 ?                   //   if we've reached the last row:
    ''                       //     stop recursion
  :                          //   else:
    ( X = (r = x > 9) ?      //     r = true if we're on the right side
        20 - x               //       X = 20 - x on the right side
      :                      //     or:
        x,                   //       X = x on the left side
      Y = (r ? 2 - s : s)    //     Y is the position of the scale tray
          * 2 + y,           //     according to s and the current side
      S[+r][                 //     we try to extract a character from S[0] or S[1]:
        X > 0 && X < 7 &&    //       provided that we're located above the tray
        47 - Y * 6 + X       //       and using an index based on (X, Y)
      ] ||                   //     if this character doesn't exist,
      `. /\\|-_*\n`[INDEX]   //     we need to draw the balance instead
    ) +                      //     (see the next part)
    g(x < 21 ? x + 1 : !++y) //     append the result of a recursive call

INDEXনিম্নলিখিত হিসাবে গণনা করা হয় যেখানে :

~X ?                         // if this is not the last character of the current row:
  x - 10 ?                   //   if this is not the central column:
    y > 9 ?                  //     if this is the last row:
      X > 3 ? 6 : 1          //       draw the base ('_' or a space)
    :                        //     else:
      [ x + y * 3 - 17,      //       attempt to draw the beam:
        2 * y - 4,           //         using an equation depending on s
        x + ~y * 3           //         whose result must be -1, 0 or 1
      ][s] / 2 | X < 4 ?     //       if it's invalid or X is less than 4:
        Y < 5 | Y > 8 ?      //         if we're not over the chains:
          Y - 9 | X > 7 ?    //           if we're not over the pan:
            1                //             draw a space
          :                  //           else:
            X % 7 ? 5 : 7    //             draw the pan ('-' or '*')
        :                    //         else:
          ~X + Y ?           //           if this is not an interior chain:
            X + Y - 8 ?      //             if this is not an exterior chain:
              1              //               draw a space
            :                //             else:
              2 ^ r          //               draw the exterior chain ('/' or '\')
          :                  //           else:
            3 ^ r            //             draw the interior chain ('/' or '\')
      :                      //       else:
        [ 7 - x % 3,         //         draw the beam, using either '_' -> '-' -> '*'
          6,                 //         or just '_'
          5 + x % 3          //         or '*' -> '-' -> '_'
        ][s]                 //         depending on s
  :                          //   else:
    y && 4                   //     draw the central pillar ('|' or '.')
:                            // else:
  8                          //   append a line feed

1

জাভা 10, 1043 993 988 983 বাইট

(a,b)->{var r=new char[11][21];for(var A:r)java.util.Arrays.fill(A,' ');a=a.replace(" ","");b=b.replace(" ","");int A=s(a),B=s(b),j,c,i=3;for(;++i<17;r[3][i]=A==B?'_':32)r[10][i]=95;for(i=11;i-->1;)r[i][10]=i>0?'|':46;if(A==B){r[8][0]=r[8][7]=r[8][13]=r[8][20]=42;for(i=0;++i<20;)if(i<8|i>13)r[8][i]=45;for(i=8;i-->4;r[i][7-i]=r[i][20-i]=47)r[i][i]=r[i][i+13]=92;A=B=8;}else{r[5][i=A<B?0:13]=r[5][i+7]=r[9][13-i]=r[9][20-i]=42;for(i=5;i-->1;r[i][A>B?18-i*3:2+i*3]=42)r[i][A>B?17-i*3:3+i*3]=45;for(i=0;++i<20;)r[i>13?A>B?5:9:A>B?9:5][i>13|i<7?i:1]=45;for(i=9;i-->1;r[i][i>4?A>B?8-i:21-i:A>B?17-i:4-i]=47)r[i][i>4?A>B?i-1:i+12:A>B?i+16:i+3]=92;A=(A>B?r[i=0][16]=r[1][13]=r[3][7]=r[4][4]=95:(r[0][i=4]=r[1][7]=r[3][13]=r[4][16]=95));A=9-i;B=5+i;}c(r,a,A,7);c(r,b,B,20);return r;};int s(String s){int r=0;for(int i:s.getBytes())r+=i>64&i<91?4:i>96&i<123?2:3;return r;}void c(char[][]r,String s,int p,int q){for(int c=0,i=p,j;i-->p-5;)for(j=q;j-->q-6&c<s.length();)r[i][j]=s.charAt(c++);}

-৫ বাইট @ সিলিংক্যাট ধন্যবাদ ।

ইনপুট দুটি স্ট্রিংস, যার ফলস্বরূপ একটি অক্ষর-ম্যাট্রিক্স হবে।

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

ব্যাখ্যা:

// Method with two String parameters and character-matrix return-type:
(a,b)->{
  // Result matrix, with 11 rows and 21 columns:
  var r=new char[11][21];
  // Initially fill the entire matrix with spaces:
  for(var A:r)java.util.Arrays.fill(A,' ');
  // Remove all spaces from the input-Strings:          
  a=a.replace(" ","");b=b.replace(" ","");
  // Call a separated method to calculate the scores of both input-Strings:
  int A=s(a),B=s(b),

  // Fill the cells for the base with '_',
  // and also fill the cells for the balance-bar with '_' when the scores are equal:
  j,c,i=3;for(;++i<17;r[3][i]=A==B?'_':32)r[10][i]=95;
  // Fill the cells for the stand with '|':
  for(i=11;i-->1;)r[i][10]=i>0?'|'
  // And the top of it with '.':
  :46;

  // If the scores are equal:
  if(A==B){
    // Fill the four appropriate cells for the sides of the scales with '*':
    r[8][0]=r[8][7]=r[8][13]=r[8][20]=42;
    // Fill the appropriate cells for the scales themselves with '-':
    for(i=0;++i<20;)if(i<8|i>13)r[8][i]=45;
    // Fill the appropriate cells of the robes with '/' and '\':
    for(i=8;i-->4;r[i][7-i]=r[i][20-i]=47)r[i][i]=r[i][i+13]=92;
    // Set A and B both to 8 to use later on:
    A=B=8;}
  // If the scores aren't equal:
  else{
    // Fill the four appropriate cells for the sides of the scales with '*':
    r[5][i=A<B?0:13]=r[5][i+7]=r[9][13-i]=r[9][20-i]=42;
    // Fill the appropriate four cells of the balance-bar with '-':
    for(i=5;i-->1;r[i][A>B?18-i*3:2+i*3]=42)r[i][A>B?17-i*3:3+i*3]=45;
    // Fill the appropriate cells of the scales with '-':
    for(i=0;++i<20;)r[i>13?A>B?5:9:A>B?9:5][i>13|i<7?i:1]=45;
    // Fill the appropriate cells of the robes with '/' and '\':
    for(i=9;i-->1;r[i][i>4?A>B?8-i:21-i:A>B?17-i:4-i]=47)r[i][i>4?A>B?i-1:i+12:A>B?i+16:i+3]=92;
    // Fill the four appropriate cells of the balance-bar with '_',
    // and set A and B to 9 and 5 depending on which score is higher:
    A=(A>B?r[i=0][16]=r[1][13]=r[3][7]=r[4][4]=95:(r[0][i=4]=r[1][7]=r[3][13]=r[4][16]=95));A=9-i;B=5+i;}
  // Call a separated method to fill the cells above the scales with the input-characters:
  c(r,a,A,7);c(r,b,B,20);
  // And finally return the resulting character-matrix:
  return r;};

// Separated method to calculate the score of the given String:
int s(String s){
  // Initially start the score-sum at 0:
  int r=0;
  // Loop over the characters of the given String:
  for(int i:s.getBytes())
    // Increase the sum by:
    r+=
      // 4 for uppercase letters:
      i>64&i<91?4
      // 2 for lowercase letters:
      :i>96&i<123?2
      // 3 for any other character:
      :3;
  // And return the resulting sum:
  return r;}

// Separated method to draw the strings on top of the scales:
void c(char[][]r,String s,int p,int q){
  // Keep a counter so we know when we're done drawing the given String:
  for(int c=0,
  // Loop over the appropriate rows bottom to top:
  i=p,j;i-->p-5;)
    // Inner loop over the appropriate cells of this row left to right,
    for(j=q;j-->q-6
    // as long as we're not done yet with the input-String:
        &c<s.length();)
      // And fill that appropriate cell with the next character in line of the given String:
      r[i][j]=s.charAt(c++);}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.