তার কান, আঙুল এবং মাথা থেকে কোনও অপরাধীকে সন্ধান করুন


17

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

নীচের চিত্রটিতে এই রেকর্ডগুলি দ্রুত অ্যাক্সেস করতে পুলিশ ব্যবহৃত একটি ফাইলিং সিস্টেম দেখায়।

টেবিল চিত্র 1: নম্বরযুক্ত ড্রয়ার সহ একটি ফাইলিং সিস্টেম।
দ্রষ্টব্য: আপনি যদি চিত্রটি দেখতে না পান তবে ইমাগার আয়নাটি চেষ্টা করুন বা নিজেই এটি সঙ্কলন করুন

ফাইলিং ক্যাবিনেটে 81 টি নম্বরযুক্ত ড্রয়ার রয়েছে। প্রতিটি ড্রয়ারে কার্ড থাকে এবং প্রতিটি কার্ডে একজন অপরাধীর শরীরের নির্দিষ্ট অংশগুলির পরিমাপ থাকে:

  • তাদের মাথার দৈর্ঘ্য ( H)
  • তাদের মাথার প্রস্থ (B )
  • তাদের ডান কানের প্রস্থ (E )
  • তাদের তর্জনীর দৈর্ঘ্য ( F)

প্রতিটি পরিমাপ ছোট, মাঝারি বা বড় হিসাবে শ্রেণিবদ্ধ করা হয়।

ছোট এইচ, বড় বি, মাঝারি ই, এবং ছোট এফ এই অক্ষর ব্যবহার করে notated করা যেতে পারে: উদাহরণস্বরূপ, ড্রয়ারের 56 নিম্নলিখিত বৈশিষ্ট্য সঙ্গে কার্ড রয়েছে S, Mএবং Lছোট, মাঝারি স্থানে, এবং বড়:

SH,LB,ME,SF

নোট করুন যে আকারের অক্ষরটি প্রথমে যায়, তারপরে পরিমাপটি কী। তদ্ব্যতীত, একটি বিস্ময়বোধক পয়েন্টটি !একটি নেতিবাচক কারণের জন্য সামনে রাখা যেতে পারে:

!SH,LB,!ME,SF

এই কার্ড আছে যে নিম্নলিখিত বৈশিষ্ট্য নির্দেশ করে: না ছোট এইচ, বড় বি, না - 58, 60, 61, ও 63 মাঝারি ই, এবং ছোট এফ চার ড্রয়ার যে এই বৈশিষ্ট্য সঙ্গে কার্ড ধারণ আছে।

আপনার টাস্কটি একটি প্রোগ্রাম লিখতে হয়, যখন কিছু স্ট্রিংকে কিছু বৈশিষ্ট্যযুক্ত একটি স্ট্রিং দেওয়া হয়, তখন সেই বৈশিষ্ট্যগুলির সাথে কার্ড থাকা সমস্ত ড্রয়ারকে আউটপুট করে দেয়। যদি এমন কোনও ড্রয়ার না থাকে যা প্রদত্ত বৈশিষ্ট্যগুলি, আউটপুট সহ কার্ডগুলি ধারণ করে0

এখানে কিছু নমুনা ইনপুট এবং আউটপুট রয়েছে।

  1. ইনপুট: SH,LB,ME,SF
    আউটপুট:56
  2. ইনপুট: !SH,LB,!ME,SF
    আউটপুট:58,60,61,63
  3. ইনপুট: SB,!MF,!LF
    আউটপুট:1,2,3,4,5,6,7,8,9
  4. ইনপুট: MH,!MH
    আউটপুট:0

এটি কোড গল্ফ, তাই স্বল্পতম এন্ট্রিতে জয়ী হয়। স্পেসিফিকেশন পরিষ্কার না হলে মন্তব্যে প্রশ্ন জিজ্ঞাসা করুন।


নির্ভুলতার জন্য একটি ঐতিহাসিক নোট হিসাবে, bertillonnage সিস্টেম আসলে ছিল অনেক এই সরলীকৃত সংস্করণ চেয়েও বেশি জটিল, 4 পরিবর্তে 9 পরিমাপ ব্যবহার, এবং এইভাবে বেশি জড়িত ফাইলিং সিস্টেম ব্যবহার এখানে চিত্রিত এক।
সোমরস

4
ওহ না! অন্য কোনও সুডোকু প্রশ্ন নয় ;-)
স্তরের নদী

1
আমি আসলে একজন সুডোকু টেমপ্লেট থেকে ডায়াগ্রাম তৈরি @steveverrill, তাই যে কিছু সত্য, হে
সোমরস

উত্তর:



6

রুবি 1.9.3 - 173 157 143

x=(1..81).select{|j|$*[0].split(?,).all?{|y|i=j-1
z='SML'
[z[i%9/3]+?H,z[i%3]+?E,z[i/27]+?B,z[i/9%3]+?F].member?(y[-2,2])^y[?!]}}
p x==[]?[0]:x

সম্পাদনা:

  • হুইস্কির পরামর্শ অনুসারে থ্রি প্রয়োগ করা হয়েছে ।
  • আরও কিছু অক্ষর সংরক্ষণ করতে কমান্ড লাইন থেকে প্যারামিটার নিয়েছে

অনলাইন ডেমো: http://ideone.com/lodTLt


selectএর জন্য একটি সংক্ষিপ্ত প্রতিশব্দ find_all। আপনি প্রতিস্থাপন দ্বারা অন্য দুটি অক্ষর ছাঁটা পারে y[-2..-1]সঙ্গে y[-2,2]ব্যবহার করে এখনো, এবং আরও তিনজন ==[]পরিবর্তে .empty?
তিনটি হুইস্কি দ্বারা

@ থ্রিআইফবিওয়াইস্কি দুর্দান্ত টিপস, ধন্যবাদ! আমি আমার উত্তর সম্পাদনা করেছি।
ক্রিশ্চিয়ান লুপাস্কু

2

স্কালা - 951

মূলত আমার মনে হয় ফাংশনগুলিতে নির্মিত নামগুলির কারণে এটি অবশ্যই জিতবে না।

def m(a: List[Int]) = 0 to 8 flatMap (x => a map (_ + 9*x)) toSet
var SH = m(List(1,2,3))
var MH = m(List(4,5,6))
var LH = m(List(7,8,9))
var SE = m(List(1,4,7))
var ME = m(List(2,5,8))
var LE = m(List(3,6,9))
var SB = 1 to 27 toSet
var MB = 28 to 54 toSet
var LB = 55 to 81 toSet
def l(a: List[Int]) = 0 to 2 flatMap (x => a map (_+27*x)) toSet
var SF = l(1 to 9 toList)
var MF = l(10 to 18 toList)
var LF = l(19 to 27 toList)

var j = Map(("LH",LH),("MH",MH),("SH",SH),("LB",LB),("MB",MB),("SB",SB),("LF",LF),("MF",MF),("SF",SF),("LE",LE),("ME",ME),("SE",SE))

def f(x : String) = {
  def h(i : List[String], k : Set[Int]) : Set[Int] = {
      if(i isEmpty) k
      else if(i.head.startsWith("!")) h(i.tail, k filterNot (j(i.head.replace("!","")) contains _))
      else h(i.tail, k intersect j(i.head))
  }
  h(x split "," toList, 1 to 81 toSet) mkString ","
}

তর্কটি কার্যক্রমে প্রেরণ করা হয় f

f("SH,LB,ME,SF") = 56


2

টি-এসকিউএল - 547 544

বিজয়ী এন্ট্রি নয়, তবে এই ধরণের সমস্যার জন্য উপযুক্ত।

গ্রিড টেবিল সেটআপ - 254

SELECT ROW_NUMBER()OVER(ORDER BY (SELECT $))I,LEFT(Z,1)E,RIGHT(Z,1)H,LEFT(Y,1)F,RIGHT(Y,1)B INTO G FROM(VALUES('SS'),('MS'),('LS'),('SM'),('MM'),('LM'),('SL'),('ML'),('LL'))FB(Y),(VALUES('SS'),('MS'),('LS'),('SM'),('MM'),('LM'),('SL'),('ML'),('LL'))EH(Z)

প্রশ্ন - 293 290

DECLARE @S CHAR(400)='SELECT ISNULL(SUBSTRING(O,2,99),0)FROM (SELECT CONCAT('','',I)FROM G WHERE '+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REVERSE(@i),',',' AND '),'S!','!S'),'M!','!M'),'L!','!L'),'S','=''S'''),'M','=''M'''),'L','=''L''')+' FOR XML PATH(''''))O(O)';EXEC(@S)

কোয়েরির আগে @i ঘোষণা করে ইনপুট সম্পন্ন করা হয়

DECLARE @I VARCHAR(50) = 'SB,!MF,!LF';

আমি যদি আরও 89 টি অক্ষর সংরক্ষণ করতে পারি তবে যদি আউটপুটটি কমা বিস্মৃত সারিতে না হয়

DECLARE @S CHAR(400)='SELECT I FROM G WHERE '+REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REVERSE(@i),',',' AND '),'S!','!S'),'M!','!M'),'L!','!L'),'S','=''S'''),'M','=''M'''),'L','=''L''')

1

গণিত 191 235

বেস 3 প্রতিটি সেল নম্বর প্রতিনিধিত্ব করে প্রতিটি অঙ্কের অবস্থান একটি শারীরিক বৈশিষ্ট্য উপস্থাপন করে। অঙ্কটির মান, {0,1,2। যথাক্রমে "ছোট", "মাঝারি", "বৃহত্তর" উপস্থাপন করে।

বৈশিষ্ট্যগুলি নিম্নলিখিত সংখ্যার সাথে মিলে যায়:

bread "ব্রেডথঅফহেড", "ইনডেক্সফিংগারলেন্থথ", "দৈর্ঘ্যফয়হিড", "প্রস্থআফ্রাইটইয়ার"}

উদাহরণস্বরূপ, ইনপুট,

{"SH","LB","ME","SF"}

প্রকাশ করে:

"এলবি" বোঝায় প্রশস্ততা = 2 (বৃহত্তর)

"এসএফ" সূচকটি ফিফারলাইংথ = 0 (ছোট) বোঝায়

"এসএইচ" বোঝায় দৈর্ঘ্যফিশ = = ছোট (ছোট)

"এমই" ইঙ্গিত দেয় প্রস্থঅফ্রাইটইয়ার = 1 (মাঝারি)

2001বেস 3 3 বেস বেস 10 হয়।

আমাদের একটি যুক্ত করতে হবে কারণ আমরা 1 থেকে ঘর গণনা করছি, শূন্য নয়।


কোড

c=Characters;t=Table[IntegerDigits[k,3,4],{k,0,80}];
f@i_:=1+FromDigits[#,3]&/@Intersection@@(Cases[t,#]&/@(ReplacePart[{_,_,_,_},{#}]&/@(c/@i
/.Thread[c@"BFHESML"-> {1,2,3,4,0,1,2}]/.{{"!",v_,n_}:> (n-> Except[v]),{v_Integer,n_}:> n-> v})))
/.{}:>0

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

f[{"SH","LB","ME","SF"}]

{56}


f[{"!SH","LB","!ME","SF"}]

{58, 60, 61, 63}


f[{"SB","!MF","!LF"}]

{1, 2, 3, 4, 5, 6, 7, 8, 9}


f[{"MH","!MH"}]

0



1

পাইথন 2 - 194

from itertools import*
n=map(set,['012']*4)
for x in raw_input().split(','):n['BFHE'.find(x[-1])]&=set(`'SML'.find(x[-2])`)^set('012'*(x<'"'))
print[1+int(''.join(x),3)for x in product(*n)]or[0]

আউটপুটটির বন্ধনী রয়েছে, এবং আউটপুট ক্রম সম্পর্কে চিন্তা করবেন না
ফালকো থেকে কিছু পরামর্শ এবং নিজের কাছ থেকে 10 দফার জন্য দম্পতি।


হ্যাঁ, বন্ধনীগুলিতে ইনপুট আবৃত করা ঠিক আছে।
সোমরস

তাদের কি ক্রমযুক্ত হওয়া দরকার?
বাইজাঙ্গলস

ভাল প্রশ্ন. আসলে, আউটপুট অনুক্রমে হতে হবে তা নয় - যদিও আমি নিশ্চিত কিভাবে একটি ভিন্ন অর্ডার অক্ষর বাঁচাতে হবে তাদের outputting নই।
সোমরস

আমি পাইথন সেট () গুলি ব্যবহার করছি, সেগুলিকে তালিকায় ফিরিয়ে আনছি, পণ্য পাচ্ছি, 3 সংখ্যাকে বেসগুলিতে ফিরিয়ে আনছি। এই সমস্ত ক্ষেত্রে, ক্রমটি কিছুটা ঝাঁকুনি পেয়েছে এবং আমি যদি সঠিক ক্রমে ফিরে চাই তবে আমার বাছাই করা () ব্যবহার করতে হবে।
বাইজাঙ্গলস

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