কতগুলি পার্টিশনে কেবলমাত্র নিখুঁত স্কোয়ার থাকে?


16

একটি অ-নেতিবাচক পূর্ণসংখ্যা বা অঙ্কগুলির একটি তালিকা দেওয়া, নির্ধারণ করুন বর্গ সংখ্যা সংখ্যায়িত করে সংখ্যাটি কতটি উপায়ে গঠন করা যেতে পারে, যার মধ্যে নেতৃস্থানীয় শূন্যগুলি থাকতে পারে।

উদাহরণ

input -> output # explanation
164 -> 2 # [16, 4], [1, 64]
101 -> 2 # [1, 01], [1, 0, 1]
100 -> 3 # [100], [1, 00], [1, 0, 0]
1 -> 1 # [1]
0 -> 1 # [0]
164900 -> 9 # [1, 64, 9, 0, 0], [1, 64, 9, 00], [1, 64, 900], [16, 4, 900], [16, 4, 9, 0, 0], [16, 4, 9, 00], [16, 49, 0, 0], [16, 49, 00], [16, 4900]

বিধি

  • স্ট্যান্ডার্ড লুফোলস প্রয়োগ করুন
  • এটি তাই বাইটের মধ্যে সংক্ষিপ্ত উত্তর w


আমরা কি অঙ্কের তালিকা হিসাবে ইনপুট নিতে পারি?
সম্পূর্ণমানবিক

1 -> 1 তবে 0 -> 0 কেন?
জোনা

@ জোনাঃ টাইপো ... এক্সডি
হাইপার নিউট্রিনো

1
পছন্দ করুন
হাইপারনিউটারিনো

উত্তর:



7

জেলি , 8 বাইট

ŒṖḌƲẠ€S

একটি মোনাডিক লিঙ্কটি ডিজিটের তালিকা নিয়ে এবং অ-নেতিবাচক পূর্ণসংখ্যাকে ফেরত দেয়।

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

কিভাবে?

ŒṖḌƲẠ€S - Link: list of digits              e.g. [4,0,0,4]
ŒṖ       - all partitions                         [[4,0,0,4],[4,0,[0,4]],[4,[0,0],4],[4,[0,0,4]],[[4,0],0,4],[[4,0],[0,4]],[[4,0,0],4],[4,0,0,4]]
  Ḍ      - convert from decimal list (vectorises) [[4,0,0,4],[4,0,   4 ],[4,    0,4],[4,      4],[   40,0,4],[   40,    4],[    400,4],     4004]
   Ʋ    - is square? (vectorises)                [[1,1,1,1],[1,1,   1 ],[1,    1,1],[1,      1],[    0,1,1],[    0,    1],[      1,1],        0]
     Ạ€  - all truthy? for €ach                   [        1,          1,          1,          1           0,            0,          1,        0]
       S - sum                                    5

6

হাস্কেল , 88 বাইট

f x=sum[0.5|y<-mapM(\c->[[c],c:" "])x,all((`elem`map(^2)[0..read x]).read).words$id=<<y]

একটি ফাংশন সংজ্ঞা দেয় fযা একটি স্ট্রিং নেয় এবং একটি ফ্লোট ফেরত দেয়। খুব ধীর. এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

আমি এবং এর সাথে একটি স্ট্রিংয়ের সমস্ত পার্টিশন গণনা করার জন্য আমার হাস্কেল টিপটি ব্যবহার করছি । স্নিপেট একটি স্ট্রিংয়ের প্রতিটি চরিত্রকে এক-মৌল স্ট্রিং বা দ্বি-উপাদান স্ট্রিংয়ের সাথে প্রতিস্থাপন করে এবং সম্ভাব্য সমস্ত সংমিশ্রনের তালিকা প্রদান করে। যদি আমি ফলাফলগুলির মধ্যে একটি গ্রহণ করি , এটির সাথে একত্রীকরণ করি এবং ফলাফলটি কল করি, তবে এটি sertedোকানো ফাঁকা জায়গায় বিভক্ত হবে । এইভাবে আমি সমস্ত পার্টিশনগুলির সাথে সংলগ্ন সাবস্ট্রিংগুলিতে প্রাপ্ত হই । তারপরে আমি কেবল সেই ফলাফলগুলি গণনা করি যেখানে প্রতিটি বিভাজন উপাদান একটি নিখুঁত বর্গ (তালিকায় এটি সন্ধান করে )। একটি সতর্কবাণী হ'ল প্রতিটি পার্টিশন দু'বার গণনা করা হয়, পেছনের জায়গার সাথে এবং ছাড়াও, তাই আমি যোগফলটি গ্রহণ করিmapMwordsmapM(\c->[[c],c:" "])x'c'x"c""c "ywordsmapMx[0,1,4,9,..,x^2]0.5s এর পরিবর্তে 1s; এই কারণেই ফলাফলের ধরনটি একটি ভাসা।

f x=                       -- Define f x as
 sum[0.5|                  -- the sum of 0.5 for
  y<-                      -- every y drawn from
  mapM(\c->[[c],c:" "])x,  -- this list (explained above)
                           -- (y is a list of one- and two-element strings)
  all(...)                 -- such that every element of
                 id=<<y]   -- concatenated y
          .words$          -- split at spaces satisfies this:
                           -- (the element is a string)
   (...).read              -- if we convert it to integer
    `elem`                 -- it is an element of
    map(^2)                -- the squares of
    [0..read x]            -- the numbers in this list.


4

পাইথন 3 , 148 139 135 134 বাইট

আর্নল্ড পামারকে 10 বাইট ধন্যবাদ

def f(a):
 s=[a[:1]]
 for i in a[1:]:s=sum([[x+[i],x[:-1]+[x[-1]*10+i]]for x in s],[])
 return sum({n**.5%1for n in x}=={0}for x in s)

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


আমি এটি দুটিবার পরীক্ষা করে দেখতে চাই, তবে আমি বিশ্বাস করি এটি কার্যকর হয়। 140 টি অক্ষর।
আর্নল্ড পামার 12

আমি goofed মধ্যে একটি স্থান বাম %1এবং for...
আর্নল্ড পামার

প্রতিস্থাপন করা হচ্ছে [[a[0]]]সঙ্গে [a[:1]]একটি বাইট সংরক্ষণ করতে হবে
আর্নল্ড পামার

একসাথে আমরা হাস্কেলকে ছাড়িয়ে গেলাম।
লিকি নুন

সর্বোত্তম অংশটি হ'ল এটি কিছু অংশে সেটগুলির জন্য ধন্যবাদ যা আপনি গতকাল আমার কচ্ছপের উত্তর পোস্ট না করা পর্যন্ত আমি কখনও ব্যবহার করি নি ।
আর্নল্ড পামার 13

2

গণিত, 141 বাইট

Count[FreeQ[IntegerQ/@Sqrt[FromDigits/@#],1<0]&/@(FoldPairList[TakeDrop,s,#]&/@Flatten[Permutations/@IntegerPartitions[Length[s=#]],1]),1>0]&


ইনপুট (সংখ্যার একটি তালিকা)

[{1,6,4}]


আমি মনে করি এটি 1649 এর জন্য ভুল উত্তর দেয়: আমি তিনটি পার্টিশন গণনা করে যা স্কোয়ারগুলি তৈরি করে (যথা {1,64,9}, {16,4,9}এবং {16,49}) তবে আপনার ফাংশনটি ফিরে আসে 4
একটি গাছ নয়

এছাড়াও, আমি লক্ষ্য করেছি আপনি Table[(function of s[[i]]),{i,Length[s=(stuff)]}]কয়েকবারের মতো নির্মাণ ব্যবহার করছেন ; আপনি সাধারণত এটিকে গল্ফ করতে পারেন (function of #)&/@(stuff)
একটি গাছ নয়

1
@ নোট্যাট্রি আপনি একদম ঠিক আছেন! আমি অনেক পরিবর্তন করেছি, আপনার নির্দেশাবলী অনুসরণ করেছি এবং এটি একটি কবজির মতো কাজ করে! ধন্যবাদ
J42161217

2

পাইথন 2 , 173 163 বাইট

lambda s:len([l for l in[''.join(sum(zip(s,[','*(n>>i&1)for i in range(len(s))]+['']),())).split(',')for n in range(2**~-len(s))]if {int(x)**.5%1for x in l}=={0}])

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

সম্পাদনা: আর্নল্ডপালারের কারণে 10 বাইট সংরক্ষণ করা হয়েছে


1
আপনি কি এর .5পরিবর্তে ব্যবহার করে একটি বাইট সংরক্ষণ করতে পারেন 0.5?
নম্বরমানিয়াক

আপনি পারেন। লিকি নুনের পাইথন 3 পোস্টে আমি একই কৌশলটি দিয়ে কিছু বাইট সংরক্ষণ করতে পারি। এছাড়াও, আপনার উত্তর উপাদানগুলির সংখ্যা মুদ্রণ করে নি, তবে উপাদানগুলি নিজেরাই, তাই আমি এতে যুক্ত করেছি you আপনি যদি আউটপুটটি রাখতে চান তবে এটি অতিরিক্ত 5 বাইট বিয়োগ করে। 163 বাইট
আর্নল্ড পামার

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