হেক্সাগল্ফ: ভ্যালিডাগনস


13

চ্যালেঞ্জ

একটি এএসসিআইআই আর্ট শেপ দেওয়া হয়েছে, আপনাকে অবশ্যই শেপটি নিয়মিত ষড়ভুজ কিনা তা খুঁজে বের করতে হবে।

hexagons

একটি নিয়মিত ষড়ভুজ দুটি নিয়ম ব্যবহার করে সংজ্ঞায়িত করা হয়:

  • এর ছয়টি দিক রয়েছে
  • প্রতিটি পক্ষের সমান সংখ্যক অক্ষর রয়েছে

উদাহরণস্বরূপ, নিম্নলিখিত আকারটি নিয়মিত তবে এর ছয়টি দিক নেই এবং তাই এটি নিয়মিত ষড়ভুজ নয় :

B a a h
s a i d
y o u r
g a o t

একইভাবে, নীচের আকারটির ছয়টি দিক রয়েছে তবে এর দৈর্ঘ্যের দিক রয়েছে এবং তাই এটি নিয়মিত ষড়ভুজ নয়:

  * *
 * * *
* * * *
 * * *
  * *

তবে নীচের আকারের ছয়টি দিক রয়েছে এবং সমস্ত পক্ষের সমস্তটিরই একই সংখ্যা রয়েছে, তাই এটি একটি নিয়মিত ষড়্ভুজ:

  T h e
 h e x a
g o n s a
 r e c o
  m i n

বিধি

আউটপুটটি সত্যবাদী বা মিথ্যা মান হওয়া উচিত (আকৃতিটি যদি নিয়মিত ষড়্ভুজ হয় তবে সত্য নয়)

আকারগুলিতে কেবল প্রিন্টযোগ্য এএসসিআইআই অক্ষর থাকবে।

আকৃতির সীমানায় কখনও ফাঁকা স্থান থাকবে না। যদি এটি হয়, আপনি মিথ্যা ফিরে আসতে পারেন।

আকারের আগে এবং / অথবা পরে স্বতঃস্ফূর্ত পরিমাণে নির্বিচারে পরিমাণ থাকতে পারে।

আকারের সমস্ত কোণ সমান নাও হতে পারে উদাহরণস্বরূপ, নিম্নলিখিত আকারটি বৈধ ইনপুট:

  . . .
   . . .
. . . . .
 . . . .
  . . .

এটি একটি মিথ্যা মান প্রদান করবে।

সমস্ত আকারের ইনপুটগুলি একটি স্পেস বিভাজিত গ্রিডে থাকবে। ষড়ভুজীয় ইনপুট অচল গ্রিডে থাকবে (প্রতিটি লাইন পরবর্তী থেকে অফসেট করা হবে)।

উদাহরণ

Truthy

নিম্নলিখিত আকারগুলিতে সত্যবাদী মানগুলি ফেরত দেওয়া উচিত:

 # _
+ + +
 9 :

  5 6 7
 8 9 0 1
2 3 4 5 6
 7 8 9 0
  1 2 3

    t h i s
   i       s
  a         h
 e           x
  a         g
   o       n
    ! ! ! !

    5 6 7
   8 9 0 1
  2 3 4 5 6
   7 8 9 0
    1 2 3

Falsey

নিম্নলিখিতটি ভুয়া মানগুলি ফিরিয়ে আনতে হবে

r e c t a
n g l e s

  h e l l o
 w o r l d s
t h i s i s b
 e t a d e c
  a y n o w

  *
 * *
* * *

  .....
 .......
.........
 .......
  .....

এই আকৃতিটি কোনও স্থান পৃথকীকৃত গ্রিডে নেই এবং কোনও স্তম্ভিত নয়।


   * * * *
  ---------
 * * * * * *
-------------
 * * * * * *
  ---------
   * * * *

5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3

একক চরিত্রের ইনপুটগুলির জন্য, আপনার প্রোগ্রামটি সত্যবাদী বা মিথ্যা ফলাফল দিতে পারে:

&

জয়লাভ

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


4
ম্যাথমেটিকায় এক লাইনার ইনকামিং।
থ্রিএফএক্স

1
আমার মনে হয় আপনি দুই পরীক্ষার বিষয় জুড়তে চাইতে পারেন: যেমন নেতৃস্থানীয় স্পেস ছাড়া এক,: 5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3এবং অতিরিক্ত সারি এক জন্য নেতৃস্থানীয় স্থান সঙ্গে এক: ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3(নেতৃস্থানীয় স্পেস দিয়ে প্রতিস্থাপিত হয় sএই অবিন্যস্ত আকারে এটি একটি বিট আরো পরিষ্কার করতে করতে) । আপনার পরীক্ষার সমস্ত দশটিই বর্তমানে আমার কোডের সাথে সঠিকভাবে যাচাই করছে, তবে এই দুটি ক্ষেত্রে আমার ব্যবহার করা পদ্ধতির সাথে ব্যর্থ হবে।
কেভিন ক্রুইজসেন

পিরিয়ডের সাথে উদাহরণটি কি অগত্যা মিথ্যা? অনুপস্থিত সময়কালে একটি স্থান যা ষড়ভুজ তৈরি করতে পারে এমন বৈধ অক্ষরের একটি,
টন হসপেল

1
@ টনহোপেল আমার ধারণা মতামতটি হচ্ছে যে রূপরেখাটি একটি অবিচ্ছিন্ন নিয়মিত ষড়ভুজ।
মার্টিন ইন্ডার

আকারের সমস্ত কোণ সমান নাও হতে পারে উদাহরণস্বরূপ, নিম্নলিখিত আকারটি বৈধ ইনপুট: এই ফ্রেসিংটি বিভ্রান্তিকর বলে মনে হচ্ছে। নিশ্চয়ই আমরা নিয়মিত ষড়যন্ত্র শনাক্ত করছি? আপনি কি বোঝাতে চেয়েছেন যে প্রতীকগুলি অগত্যা কৌণিক প্রতিসাম্য ধারণ করে না?
লিন

উত্তর:


2

আর, 184 বাইট

গল্ফড, সম্ভবত কয়েক বাইট দ্বারা গল্ফ করা যেতে পারে

function(m){e=min;f=max;l=length;v=which(m!=" ",T);a=v[,1];n=l(v[a==1,2]);u=(v[a==e(a),2]);all(u==v[a==f(a),2])&all(c(e(d<-v[a==ceiling(f(v[,1])/2),2]),f(d))==c(u[1]-n+1,u[l(u)]+n-1))}

অর্গলফড, খুব অগোছালো, আরও অর্ধেক মত গল্ফড

f=function(m) {
  v = which(m!=" ",T)
  a = v[,1]
  n = length(v[a==1,2])
  u=(v[a==min(a),2])
  c1 = all(u==v[a==max(a),2])
  d = v[a==ceiling(max(v[,1])/2),2]
  c2 = all(c(min(d), max(d))==c(u[1]-n+1,u[length(u)]+n-1))
  c1 & c2
}

ইনপুট ফর্ম্যাটটি অনির্দিষ্ট না থাকায় ইনপুটটিকে আর আরে বিন্যাসে নির্দিষ্ট করা দরকার, এটির মতো কিছু খুঁজছেন।

         [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] " "  " "  "5"  " "  "6"  " "  "7"  " "  " " 
[2,] " "  "8"  " "  "9"  " "  "0"  " "  "1"  " " 
[3,] "2"  " "  "3"  " "  "4"  " "  "5"  " "  "6" 
[4,] " "  "7"  " "  "8"  " "  "9"  " "  "0"  " " 
[5,] " "  " "  "1"  " "  "2"  " "  "3"  " "  " " 

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

generate = function(x) {
  s = strsplit(strsplit(x, "\n")[[1]], "")
  m = max(sapply(s, length))
  dput(do.call(rbind, lapply(s, function(x) c(x, rep(" ", m-length(x))))))
}

উদাহরণস্বরূপ, উত্পন্ন কোডটি structure(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), .Dim = c(5L, 9L ))হ'ল : যা অনুরূপarray(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9))

আশা করি এই ইনপুট পদ্ধতিটি নিয়ম মেনে চলে।

এখানে পরীক্ষার মামলা রয়েছে

x1 = 
"  5 6 7
 8 9 0 1
2 3 4 5 6
 7 8 9 0
  1 2 3"

x2 =
" # _
+ + +
 9 :"

x3 = 
"    t h i s
   i       s
  a         h
 e           x
  a         g
   o       n
    ! ! ! !"

x4 ="    5 6 7
   8 9 0 1
  2 3 4 5 6
   7 8 9 0
    1 2 3"

x5 = "r e c t a
n g l e s"

x6 = "  h e l l o
  w o r l d s
t h i s i s b
 e t a d e c
  a y n o w"

x7 ="  *
 * *
* * *"

x8 ="   .....
  .......
.........
  .......
   ....."

ইনপুট অ্যারে তৈরি করুন

sapply(mget(paste("x", 1:8, sep = "")), generate)

ষড়ভুজ জন্য পরীক্ষা

sapply(.Last.value , f)

   x1    x2    x3    x4    x5    x6    x7    x8 
 TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE 

@DLosc- এ আপনার উত্পন্ন ফাংশনটি সংজ্ঞায়িত করা হয়নি। এই লিঙ্কটি ব্যবহার করে দেখুন: goo.gl/9MtCLg আপনি একটি ম্যানুয়াল ইনপুট এর সাথেও পরীক্ষা করতে পারেনf(array(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9)))
Vlo

আহ, আমি সেই অংশটি মিস করেছি। ধন্যবাদ।
ডিএলকস

1

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

(s,a=s.split`\n`,n=a[l=a.length>>1].match(r=/(?=\S).*\S/),i=n.index)=>!/\S(  )*\S/.test(s)&&!a.some((s,j)=>(m=r.exec(s))&&(k=m.index)<i+(j<l?j=l-j:j-=l)|k+(m=m[0].length)+j>i+n[0].length|k+i+j&1|j%l<1&m+j+j!=l*4+1)

যেখানে \nএকটি আক্ষরিক নিউলাইন চরিত্র উপস্থাপন করে। Ungolfed:

function validhex(s) {
    if (/S(  )*/S/.test(s)) return false;
    var a = s.split("\n");
    var l = Math.floor(a.length / 2);
    var n = a[l].match(/(?=\S).*\S/);
    for (var j = -l; j <= l; j++) {
        var m = a[j+l].match(/(?=\S).*\S/);
        if (!m) continue;
        if (m.index < n.index + Math.abs(j)) return false;
        if (m.index + m[0].length + Math.abs(j) > n.index + n[0].length) return false;
        if ((m.index + n.index + j) % 2) return false;
        if (j % l) continue;
        if (m[0].length != l * 4 + 1 - 2 * Math.abs(j)) return false;
    }
    return true;
}

আমি একটি ত্রুটি পেয়েছি: ইনপুটটি " x\n g g\ng g g\n g g"মিথ্যা দেওয়া উচিত, তবে সত্য দেয়।
ডিএলকস

@DLosc আমি কি এটির আগে দু'টি ফাঁকা জায়গা নেব x?
নিল

@DLosc আমার মনে হয় আমার এখনই এটি ঠিক করা হয়েছে, আমার জন্য 30 বাইট খরচ পড়বে ...
নীল

1

স্নেকএক্স , 200 বাইট

কাজের জন্য সঠিক ভাষা ... সাজানো।

m:{v<>}{r<RF>2P}{r<R>2P}{h<RF>1P}{w<>}{l<RF>2P}{l<R>2P}{h<.>1}
w:{u<>P}{v<>}
v:{e<L>}{u<R>1}
u:.*{e<>}
e:.$
r:[^ ]+
h:([^ ] )+
l:({c<.>}[^ ])+{c<.>}
c:{b<B>}(. )+{x<>LP}{s<>}
b:.{s<>}
s:[^\!-\~]*$
x:.

স্নেকএক্স 2-ডি প্যাটার্ন ম্যাচিং চ্যালেঞ্জের একটি ভাষা । এই কাজটি করাতে এটি অবশ্যই ভাল হওয়া উচিত, তবে দুর্ভাগ্যক্রমে সমস্ত কোণার কেস সত্যই কোডটি স্ফূত করেছে। আমি দু'জন দোভাষী বাগও করেছিলাম। তবুও, এটি একটি মজাদার চ্যালেঞ্জ ছিল।

mহ'ল প্রধান সাপ যা অন্য সকলকে প্রকৃত কাজ করতে বলে। এটি ষড়ভুজটির উপরের ডান কোণে শুরু হয়ে ঘড়ির কাঁটার দিকে মেলে। ত্রিভুজ পাশের দৈর্ঘ্য সমস্ত সমান এবং অনুভূমিক দিকের দৈর্ঘ্য পুরো চিত্রের উচ্চতার সাথে মেলে তা যাচাই করতে সংখ্যাযুক্ত গোষ্ঠীগুলি ব্যবহৃত হয়। আমি আরও বিশদ ব্যাখ্যা লিখতে পারি, তবে আমি কর্নারের কেসগুলি মোকাবেলা করতে গত দুই দিন অতিবাহিত করেছি, তাই কেবল এখানে নিজের জন্য চেষ্টা করে দেখুন । : ^)


1

পার্ল, 127 125 124 121 বাইট

জন্য +4 অন্তর্ভুক্ত -0p

STDIN এ ইনপুট দিন

#!/usr/bin/perl -0p
/ *(.*\S)/;$a=join'\S *
\1',map$"x(abs).'\S '.(/$n/?'\S ':'. ')x(2*$n-1-abs),-($n=$1=~y/ //)..$n;$_=/^$`( *)$a\S\s*$/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.