সম্পূর্ণ প্যালিনড্রোমিক ত্রিভুজ


18

স্ট্রিং বিবেচনা করুন 160615051। এটি যেমন "ত্রিভুজযুক্ত" হতে পারে:

  1
 606
15051

তারপরে, প্রতিটি সারি একটি প্যালিনড্রোম। আরও মনে রাখবেন যে ঘেরের প্রতিটি পাশই একটি প্যালিনড্রোম:

  1  |   1   |   
 6   |    6  |      
1    |     1 | 15051 

অতএব, এই স্ট্রিংটিকে সম্পূর্ণ প্যালিনড্রমিক ত্রিভুজ হিসাবে বিবেচনা করা যেতে পারে। 100এই ক্ষেত্রে উচ্চতা সম্পর্কে চিন্তা করবেন না , এটি প্যালিনড্রোমিক হতে হবে না।

ইনপুট: 0x20 থেকে 0x7E থেকে মুদ্রণযোগ্য ASCII অক্ষরের একটি স্ট্রিং। এটি একটি অক্ষরের অ্যারে, একটি একক স্ট্রিং বা এএসসিআইআই কোড পয়েন্টের একটি অ্যারে হতে পারে। আপনার ইনপুট সর্বদা ত্রিভুজায়িত হতে সক্ষম হবে (এটির দৈর্ঘ্য সর্বদা নিখুঁত বর্গক্ষেত্র হবে)।

আউটপুট : যদি স্ট্রিংটি সম্পূর্ণ প্যালিনড্রমিক ত্রিভুজ হয় বা অন্যথায় একটি মিথ্যা মান হয় truth

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

input => output

1 => true
A => true
AAAA => true
nope => false
{{}} => false
1101 => true
1011 => false
1202 => false
111110001 => true
160615051 => true
160625052 => false
1111111111111111 => true
1121123211234321123454321 => true
HHeHHeleHHellleHHellolleH => true
HellolleHHellleHHeleHHeHH => false
111111111111111111111111111111111111 => true
abcbdefeddefgfedbcdefedcbabcdefedcba => true

উত্তর:


10

জেলি , 14 12 বাইট

J’ƲœṗZ⁻¦µU⁼

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

পটভূমি

আমরা ইনপুট স্ট্রিংয়ের 0-ভিত্তিক সূচকগুলি দেখে শুরু করি।

 H  H  e  H  H  e  l  e  H  H  e  l  l  l  e  H  H  e  l  l  o  l  l  e  H
 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

ত্রিভুজের সারিগুলি পেতে, আমরা সূচকগুলি 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 এবং 1 + 3 + 5 + 7 = 16 এর আগে স্ট্রিংটি বিভক্ত করতে পারি । যেহেতু (n + 1) ² = nn + (2 এন + 1) , এই পরিমাণগুলি সূচক তালিকার যথাযথভাবে ইতিবাচক, নিখুঁত স্কোয়ার। যদি আমরা 0 এর আগেও স্ট্রিংটি বিভক্ত করি তবে নিখুঁত স্কোয়ারযুক্ত সমস্ত 0-ভিত্তিক সূচকগুলির আগে এটি বিভাজনের মতোই সহজ।

বিভক্ত হওয়ার পরে, আমরা নিম্নলিখিত স্ট্রিংগুলি পাই।

""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"

এর পরে, আমরা প্রথম কলামে সমস্ত অক্ষর দিয়ে শুরুতে খালি স্ট্রিংটি প্রতিস্থাপন করি।

"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"

সমস্ত স্ট্রিং উল্টিয়ে একই স্ট্রিং অ্যারে দেয় কিনা তা পরীক্ষা করার জন্য এখন টাস্কটি হ্রাস পেয়েছে।

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

প্রথমে Jইনপুট স্ট্রিংয়ের সমস্ত 1-ভিত্তিক সূচকগুলি উত্পন্ন করে J, তারপরে সমস্ত 0-ভিত্তিক সূচকগুলি উত্পাদনের জন্য সেগুলি হ্রাস করে । Ʋবর্গক্ষেত্রের জন্য সমস্ত 0-ভিত্তিক সূচকগুলি পরীক্ষা করে। উপরে থেকে আমাদের উদাহরণের জন্য, এটি নিম্নলিখিত বুলিয়ান অ্যারে দেয়।

 1  1  0  0  1  0  0  0  0  1  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0

এর পরে, আমরা œṗইনপুট স্ট্রিংকে পার্টিশন করার জন্য কল করি , যেমন,

 H  H  e  H  H  e  l  e  H  H  e  l  l  l  e  H  H  e  l  l  o  l  l  e  H

সমস্ত 1 এর আগে (আসলে সমস্ত সত্যবাদী উপাদান) আমাদের উদাহরণস্বরূপ, এটি নিম্নলিখিত স্ট্রিং অ্যারের ফলন করে।

['', 
 'H',
 'HeH',
 'HeleH',
 'HellleH',
 'HellolleH'
]

Z⁻¦যুক্তিযুক্তভাবে এই উত্তর সবচেয়ে আকর্ষণীয় অংশ। Z1¦প্রথমে আরও সহজবোধ্য বিশ্লেষণ করা যাক ।

¦হয় বিক্ষিপ্ত দ্রুত। এটি স্ট্যাক থেকে দুটি লিঙ্ক খায়, বিশেষত 1এবং Zএই ক্ষেত্রে। প্রথমে Zতার যুক্তিতে প্রয়োগ করা হয়: স্ট্রিং অ্যারেটি আগে থেকে। Zহয় জিপ পরমাণু ও কলাম স্ট্রিং অ্যারে / 2D চরিত্র অ্যারে লেখা আছে, ফলনশীল

['HHHHH',
 'eeee',
 'Hlll',
 'ell',
 'Hlo',
 'el',
 'Hl',
 'e',
 'H'
]

ইনপুট স্ট্রিং এবং স্ট্রিং অ্যারের প্রথম কলামের বাম পাশে কী ব্যবহৃত হত তা এখন প্রথম স্ট্রিংয়ে পরিণত হয় ।

এখন ¦উঁকি দেয় 1এবং একটি একক সূচক খুঁজে পায়: 1 । সুতরাং আসল স্ট্রিং অ্যারেতে প্রথম স্ট্রিং এর রিটার্ন ভ্যালুতে প্রথম স্ট্রিংয়ের সাথে প্রতিস্থাপিত হয় Z; অন্যান্য সূচকগুলিতে স্ট্রিংগুলি প্রভাবিত থাকে না।

['HHHHH',
 'H',
 'HeH',
 'HeleH',
 'HellleH',
 'HellolleH'
]

এর এই অ্যারের কল করা যাক একটি

এর Z⁻¦পরিবর্তে আমরা ব্যবহার করেছি Z1¦, তবে এতে কোনও পার্থক্য নেই: বৈষম্যের জন্য ইনপুট স্ট্রিংয়ের সাথে স্ট্রিং অ্যারের তুলনা করে, তারা সমান নয় বলে 1 ফলন করে । Z⁻¦উভয়ের মধ্যে পার্থক্যটি হ'ল ডায়াডিক কারণ এটি আমাদের œṗZ⁻¦পরিবর্তে লিখতে দেয় œṗ¹Z1¦। এটি কারণ একটি ডায়াড ( œṗ) এর পরে একটি মোনাদ ( œṗ¹Z1¦) একটি কাঁটাচামচ (মোনাডটি শৃঙ্খলার আর্গুমেন্ট / ইনপুট স্ট্রিংয়ের সাথে প্রয়োগ করা হয়, এবং প্রত্যাবর্তিত মানটি সঠিক যুক্তি হিসাবে প্রেরণ করা হয় œṗ), অন্যদিকে একটি ডায়াড পরে অন্য ডায়াড হয় (বা চেইনের শেষে) একটি হুক , অর্থাত্, এর ডান আর্গুমেন্টটি চেইনের যুক্তি।

যা করার বাকি তা হল প্যালিনড্রোমিসনেস পরীক্ষা করা। µএকটি নতুন (monadic) শৃঙ্খলা শুরু হয় যার যুক্তি Upend পরমাণু Uসমস্ত স্ট্রিং reverses একজন (কিন্তু একজন নিজেই), তারপর ফলাফল নিয়ে তুলনা একটি সমতার জন্য। প্রত্যাবর্তিত বুলিয়ান 1 সম্পূর্ণ প্যালিনড্রমিক ত্রিভুজ নির্দেশ করে; অন্যান্য স্ট্রিং 0 ফিরে আসবে ।


আমার সত্যিই জেলি কীভাবে পড়তে হবে তা শিখানো উচিত। (ব্যাখ্যা, দয়া করে?)
CAD97

1
আমি আমার উত্তর সম্পাদনা করেছি।
ডেনিস

6

জাপট , 25 21 17 বাইট

@ ওবরকনকে 2 বাইট সংরক্ষণ করা হয়েছে

ò@°T ¬v1
pUmg)eêP

এটি অনলাইন পরীক্ষা!

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

 ò@  ° T ¬ v1   // Implicit: U = input string, T = 0
UòXY{++T q v1}  // First line; reset U to the result of this line.
UòXY{        }  // Partition U at indices where
     ++T q      //   the square root of T incremented
           v1   //   is divisible by 1.
                // This breaks U at square indices, giving rows of 1, 3, 5, ... chars.
 pUmg)eêP
UpUmg)eêP
  Umg           // Take the first char of every item of U.
Up   )          // Append this to U.
      e         // Check that every item in the resulting array
       êP       // is a palindrome.
                // Implicit: output result of last expression

নোট করুন যে আমাদের উভয় পক্ষের পরীক্ষা করার প্রয়োজন নেই ; যদি পক্ষগুলি সমান না হয় তবে কমপক্ষে একটি সারি একটি প্যালিনড্রোম নয়।


এই মাল্টলাইন জিনিসটি জাপটের নতুন বৈশিষ্ট্য?
লুক

@ লুক হ্যাঁ, আমি মঙ্গলবার এটি যুক্ত করেছি। এটি দেখানোর জন্য এটি আমার প্রথম সুযোগ :-)
ইটিএইচ প্রোডাকশনগুলি

আমার গল্ফ টিপ কিছু মনে করবেন না। এটি কেবল প্রতিটি লাইনটি প্যালেন্ড্রোমিক ছিল কিনা তা যাচাই করে, যা সঠিক ফলাফল দেওয়ার জন্যও ঘটেছিল ...
লূক

4

05 এ বি 1 ই , 18 বাইট

gÅÉ£õÜÐíQs€¬āÈÏÂQ*

05AB1E এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


আপনি এটিকে কিছুটা সংশোধন করে একটি বাইট সংরক্ষণ করতে পারেনgÅÉ£ÐíQs€¬āÈÏJÂQ*
kalsowerus

gÅÉ£আপনি শিয়াল শোক ... আমি এগুলি অবমূল্যায়ন করিlist-commands.py
ম্যাজিক অক্টোপাস উরন

4

জেলি , 18 16 বাইট

J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ

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

জোনথন অ্যালানকে ন্যূনতম হলেও এতটা সুস্পষ্ট নয় -২ বাইট সঞ্চয় করার জন্য ধন্যবাদ ।


আমার ত্রিভুজ নির্মাণটি ব্যবহার করুন এবং একটি বাইট সংরক্ষণ করুন:JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
জোনাথন অ্যালান

... আসলে এই ধারণাটিকে অসত্যের সাথে একত্রিত করুন এবং অন্য একটি বাইট সংরক্ষণ করুন, যেহেতু বিভাজনটি "জিপ সবচেয়ে সংক্ষিপ্ত" হবে:J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
জোনাথন অ্যালান

@ জোনাথন অ্যালান উম্মে ... আমার মোটেই কেন দরকার ½? এখন Jআরও বুদ্ধিমান
হয়ে উঠেছে

3

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

f=(s,n=1,t='',u='',g=([...a])=>''+a==a.reverse())=>s?g(s.slice(0,n))&f(s.slice(n),n+2,t+s[0],u+s[n-1]):g(t)&g(u)

tএবং uপাশগুলি সংগ্রহ করুন যাতে সেগুলি শেষে পরীক্ষা করা যায়।


2

সি #, 184 বাইট

using System.Linq;
b=a=>string.Concat(a.Reverse())==a
f=>{string c=f[0]+"",d=c,e="";for(int i=1,k=1,s=f.Length;i<s;)
{c+=f[i];d+=f[(i+=k+=2)-1];e=f.Substring(s-k);}return b(c)&b(d)&b(e);}

ভেবেছিলাম সমাধানটি পলিনড্রোম অংশে না আসা পর্যন্ত ভাল দেখাচ্ছে

অবরুদ্ধ সংস্করণ:

Func<string, bool> b = a => string.Concat(a.Reverse()) == a;
        Func<string, bool> func = f => {

            string c = f[0] + "", d = c, e = "";

            for (int i = 1, k = 1, s = f.Length; i < s;) {
                c += f[i];
                d += f[(i += k += 2) - 1];
                e = f.Substring(s - k);
            }

            return b(c) & b(d) & b(e);
        };

e=..বাইট সংরক্ষণের জন্য আপনি লুপ লাইনে যেতে পারেন ? বাইট গণনায় নিউলাইনগুলি গণনা করার দরকার নেই তাই আমি ধরে নিচ্ছি আপনি নন।
TheLethalCoder

না আমি নিউলাইনগুলি গণনা করছি না, রিটার্ন স্টেটমেন্টে আমার প্রয়োজন লুপের মধ্যে আমি ইটি স্থানান্তর করতে পারি না।
LiefdeWen

আমি এর অর্থ বুঝিয়েছি....; i < s;e = f.Substring(s - k)){c+=....
TheLethalCoder

2

জাভা 8, 358 301 বাইট

import java.util.*;s->{List<String>l=new Stack();for(int i=0,p=1,t=1;p<=s.length();p+=t+=2)l.add(s.substring(i,i=p));String a="",b=a;for(String q:l){a+=q.charAt(0);b+=q.charAt(q.length()-1);}return p(a)&p(b)&p(l.get(l.size()-1));}boolean p(String s){return s.equals(new StringBuffer(s).reverse()+"");}

ইনপুট একটি String, আউটপুট একটি boolean

ব্যাখ্যা:

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

import java.util.*;               // Required import for List and Stack

s->{                              // Method (1) with String parameter and boolean return-type
  List<String>l=new Stack();      //  Create a String-list
  for(int i=0,p=1,t=1;            //  Initialize some index/counter integers
      p<=s.length();              //  Loop (1) over the String in sections
      p+=t+=2)                    //    And increase `p` like this after every iteration: 1,4,9,16,25,etc.
    l.add(s.substring(i,i=p));    //   And add a substring-section to the list (0,1 -> 1,4 -> 4,9 -> 9,16 -> etc.)
                                  //  End of loop (1) (implicit / single-line body)
  String a="",b=a;                //  Two temp Strings
  for(String q:l){                //  Loop (2) over the list
    a+=q.charAt(0);               //   And append the first character to String `a`
    b+=q.charAt(q.length()-1);    //   And the last character to String `b`
  }                               //  End of loop (2)
  return p(a)                     //  Return if String `a` is a palindrome
        &p(b)                     //   as well as String `b`
        &p(l.get(l.size()-1));    //   as well as the last String in the list
}                                 // End of method (1)

boolean p(String s){              // Method (2) with String parameter and boolean return-type
  return s.equals(new StringBuffer(s).reverse()+"");
                                  //  Return if this String is a palindrome
}                                 // End of method (2)

1

জেলি ,  20  21 বাইট

+2 বাইট - আমি বাগি কোড প্রকাশ করেছি :(
-1 বাইট - বিজোড় পূর্ণসংখ্যার মতো ছাঁচনির্মাণ থেকে স্কোয়ার সূচকগুলিতে বিভাজনে সরানো হয়েছে

JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ

অক্ষরগুলির তালিকা স্বীকার করে প্রত্যাবর্তনকারী 1(সত্যবাদী) বা 0( ফালসি) একটি মোনাডিক লিঙ্ক ।
দ্রষ্টব্য: এটি স্পেসিফিকেশনের অংশটি ব্যবহার করে যা ইনপুটটিকে বর্গক্ষেত্রের দৈর্ঘ্যে সীমাবদ্ধ করে।

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

এটি 17 বাইটে সরল করে উল্লেখ করা যেতে পারে যে যদি সমস্ত সারিগুলি প্যালিনড্রোমগুলি কেবল একটি "পক্ষের" পরীক্ষা করা প্রয়োজন ( JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ) তবে এরিক আউটগল্ফার ইতিমধ্যে এই সত্যটি লক্ষ্য করেছে এবং তাদের উত্তরে এটি ব্যবহার করেছে তাই আমি তাদের ত্রিভুজ নির্মাণের পদ্ধতিটি সংরক্ষণ করে দিয়েছি সেখানে একটি বাইট।

অতিরিক্ত হিসাবে, পরিবর্তে এটি 16 বাইটে উন্নত হতে পারে তা উল্লেখ করে যে সত্যবাদী সূচকগুলিতে পার্টিশনটি বাম আর্গুমেন্টের অতিরিক্ত ( J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ) যুক্ত হলে কিছু মনে করে না ।

কিভাবে?

JƲ0;œṗµ2BịЀ⁸Z;⁸ŒḂ€Ạ - Link: list, a      e.g. "abcbazxza"
J                     - range of length of a  = [1,2,3,4,5,6,7,8,9]
 Ʋ                   - is square? (vectorises) [1,0,0,1,0,0,0,0,1]
   0;                 - prepend a zero        [0,1,0,0,1,0,0,0,0,1]
     œṗ               - partition a at 1s     ["a","bcb","azxza"]
       µ              - monadic chain separation, call that t
        2B            - 2 in binary = [1,0]
             ⁸        - chain's left argument, t
          ịЀ         - map with index into    ["aa","bb","aa"] (1st and last of each of t)
              Z       - transpose              ["aba","aba"] (left and right "sides" of t)
               ;⁸     - concatenate t          ["aba","aba","a","bcb","azxza"]
                 ŒḂ€  - palindromic? for €ach  [1,1,1,1,1]
                    Ạ - all?                   1

1
ডার্ন, আমি কেবল জেলি উত্তর দিতে যাচ্ছিলাম। যদিও প্রযুক্তিগতভাবে আমার ভুল এবং দ্বিগুণ দীর্ঘ ... ভালো কাজ :): পি
হাইপারনিট্রিনো

"সত্য যে সূচকে বিভাজন বাম আর্গুমেন্টের মধ্যে অতিরিক্ত থাকলে কিছু মনে করে না" পড়ার আগে খুব খেয়াল করেছেন।
এরিক আউটগল্ফার

1

গণিত, 156 বাইট

B=StringTake;Count[PalindromeQ/@Join[A=Table[B[#,{i^2+1,(i+1)^2}],{i,0,(s=Sqrt@StringLength@#)-1}],{StringJoin@Table[B[A[[i]],1],{i,Length@A}]}],True]==s+1&


ইনপুট

[ "1101"]


আপনি প্রতিস্থাপন করতে পারবেন না If[<stuff>, True, False]শুধু সঙ্গে <stuff>? এবং আমি মনে করি And@@(...)এটির চেয়েও খাটো Count[...,True]==s, যার অর্থ হল আপনাকে sভেরিয়েবল হিসাবে সংজ্ঞা দিতে হবে না ।
একটি গাছ

অপেক্ষা করুন, এটি কি আসলে কর্ণগুলি পরীক্ষা করে? আমি বেশ কয়েকটি পরীক্ষার কেস ( "1202"এবং "160625052") এর জন্য মিথ্যা পজিটিভ পাচ্ছি ।
একটি গাছ

সমস্ত সমস্যার সমাধান
J42161217

1

পিএইচপি , 97 বাইট

for($t=1;~$s=substr($argn,$i**2,$i++*2+1);$d.=$s[0])$t&=strrev($s)==$s;$t&=strrev($d)==$d;echo$t;

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


অপেক্ষা করুন, এটি কি আসলে কর্ণগুলি পরীক্ষা করে? আমি বেশ কয়েকটি পরীক্ষার কেস ("1202" এবং "160625052") এর জন্য মিথ্যা ধনাত্মক পাচ্ছি।
J42161217

@ জেনি_ম্যাথি এখন এটি কাজ করে
জার্গ হালসারম্যান

1

জাভা, 136 বাইট

l->{for(int i=0,j,k=1;i<l.size();i=j,k+=2)if(!l.subList(i,j=i+k).equals(l.subList(i,j).asReversed().toList()))return false;return true;}

MutableList<Character>Eclipse সংগ্রহ থেকে একটি ব্যবহার করে

Function<MutableList<Character>, Boolean> func = l->{
   for(int i=0,j,k=1;i<l.size();i=j,k+=2)  // `i` is the start index, `j` is the end index, `k` increments by 2
       if(!l.subList(i,j=i+k).equals( //Check that the first partition equals
           l.subList(i,j).asReversed().toList())  // The same sublist reversed
       )
       return false;
   return true;
};


0

এক্সেল ভিবিএ, 87 বাইট

বেনামে VBE অবিলম্বে উইন্ডো ফাংশন যা ঘর থেকে ইনপুট নেয় [A1]এবং ভিবিই তাত্ক্ষণিক উইন্ডোতে আউটপুট নেয়

k=1:For i=1To[Len(A1)^.5]:s=Mid([A1],j+1,i*2-1):j=j+i*2-1:k=k*(s=StrReverse(s)):Next:?k

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