রুম নম্বর লোকেটার


24

রুম নম্বর লোকেটার

কোনও মিটিংয়ের জন্য সহকর্মীর কাছ থেকে ভুল ঘর নম্বর দেওয়া হলে আমি আমার কাজটিতে একটি আকর্ষণীয় সমস্যা সমাধানের কৌশলটি পেয়েছি। প্রতিবার এবং পরে, একটি সভার পথে, আমার দলের একজন সদস্য আমাকে ভুল কক্ষ নম্বর প্রেরণ করবেন, সাধারণত কারণ তারা তাদের ডেস্কে ভিড় করে এবং ভুল কীটি ফ্যাট করে।

মজার বিষয় হচ্ছে, ভুল ঘরে পৌঁছানোর পরে, আমি সাধারণত অনুমান করতে পারি যে তারা আসলে কোন সংখ্যাটি কীপ্যাডের কল্পনা করেই কোন ঘরটি বোঝায় :

এবং একটি সংলগ্ন সংখ্যা অনুমান করে তারা চাপতে চেয়েছিল।

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল একটি ফাংশন লিখুন যা কোনও বিল্ডিং অফিস নম্বর নেয় (000-999) এবং আপনার সহকর্মীকে কেবল একটি অঙ্কের ভুল টাইপ করে ধরে নিয়ে সম্ভাব্য টাইপো সমাধানগুলি আউটপুট করে

নীচের সারণিতে একটি সংখ্যা কীপ্যাডে কোন সংখ্যা একে অপরের সাথে সংলগ্ন তা দেখায়:

0 -> 1,2
1 -> 0,2,4
2 -> 0,1,3,5
3 -> 2,6
4 -> 1,5,7
5 -> 2,4,6,8
6 -> 3,5,9
7 -> 4,8
8 -> 5,7,9
9 -> 6,8

ইনপুট

একটি 3 অঙ্ক সংখ্যা: 000-999। ঠিক 3 ডিজিটের ইনপুট ধরুন। সংখ্যাটি যদি 100 এরও কম বা 10 এর চেয়ে কম হয় তবে আপনাকে নেতৃস্থানীয় শূন্য দেওয়া হবে। (যেমন 004 & 028)।

আউটপুট

সম্ভাব্য কক্ষগুলির একটি তালিকা। এটি আপনি যে কোনও ফর্মটিতে থাকতে পারেন, যতক্ষণ না রুম সংখ্যার মধ্যে একটি সীমানা থাকে iter (যেমন স্পেস, কমা, নতুন লাইন, ইত্যাদি ..) সংখ্যাটি যদি 100 এর চেয়ে কম বা 10 এর চেয়ে কম হয়, তবে আউটপুট হিসাবে আপনি নেতৃস্থানীয় শূন্য করতে বা করতে পারবেন না, এটি আপনার উপর নির্ভর করে। (যেমন 004 হতে পারে 004 04 4, এবং 028 হতে পারে 028 28)

পরীক্ষার কেস (শীর্ষস্থানীয় শূন্যগুলি alচ্ছিক):

008 -> 108, 208, 018, 028, 005, 007, 009 
123 -> 023, 223, 423, 103, 113, 133, 153, 122, 126
585 -> 285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588
777 -> 477, 877, 747, 787, 774, 778
963 -> 663, 863, 933, 953, 993, 962, 966
555 -> 255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558

এটি , তাই প্রতিটি ভাষার জন্য বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।


1
আমরা কি তিন অঙ্কের (0-9) তালিকা হিসাবে ইনপুট নিতে পারি?
হাইপারনিউটারিনো

9
... এবং এই কারণেই সভাগুলির নাম থাকা উচিত।
জনাথন অ্যালান

2
@ জোনাথান অ্যালান নতুন লোকের পক্ষে "ডলফিন রুম" খুঁজে পাওয়া "রুম 218" এর চেয়ে অনেক বেশি কঠিন (ধরে নিবেন যে রুমের নম্বরগুলি সাজানো হয়েছে)। একটি আপসটি বর্ণানুক্রমিকভাবে নামগুলি অর্ডার করা হবে, তবে তারপরে আপনার কেবল ২ 26 বছর রয়েছে
অ্যান্ড্রু বলেছেন মনিকাকে

1
@ কেলিলাউডারটি হওয়া উচিত ছিল 933তাই আমি এটি ঠিক করেছি।
জোনাথন অ্যালান

4
সম্পর্কিত, আমি একবার আইটি-তে কাজ করেছি যেখানে এমন একজন অধ্যাপক ছিলেন যাঁর বেশিরভাগ সপ্তাহ চলার ঘর প্রযুক্তি নিয়ে সমস্যা হয়েছিল। তিনি ব্র্যাডলে 210 তে ছিলেন (যা আমি জানতাম, ব্র্যাডলি হ'ল বিল্ডিংয়ের নাম The পাশের বিল্ডিং - ম্যাথসন - তৃতীয় তলায় একটি আকাশের ব্রিজের মাধ্যমে সংযুক্ত ছিল B ব্র্যাডলি ছিল 5 তলা লম্বা, ম্যাথসন 4)। তিনি কোন ঘরে সঠিকভাবে ছিলেন তা আমাকে কখনও বলতে পারেনি। একবার তিনি আমাকে বলেছিলেন যে তিনি "ম্যাথসন 605" -তে রয়েছেন যা প্রকাশ্যে উপস্থিত ছিল না, এবং কোনও অঙ্কই সঠিকভাবে পায় নি।
ড্রাকো

উত্তর:


13

ওল্ফ্রাম ভাষা (গণিত) , 112 106 বাইট

একটি সংখ্যার কীপ্যাড মূলত GridGraph0 এর জন্য প্রান্ত যুক্ত একটি 3x3 বলে স্বীকৃতি পেয়ে আমরা প্রতিটি ইনপুট সংখ্যার সাথে সংলগ্ন অঙ্কগুলি পাই AdjacencyList

এটি নীচে দেখা যাবে:

EdgeAdd[GridGraph[{3,3},VertexLabels->"Name",GraphLayout->"SpringEmbedding"],{0<->1,0<->2}] উৎপাদনের:

এখানে চিত্র বর্ণনা লিখুন

তারপর আমি ব্যবহার Tuplesসব সম্ভব ভুল জিনিসটা সঙ্গে ঠিক একটি ত্রুটি যাদের বাছাই আউট Selectএবং EditDistance। যাইহোক, এটি রুমের দীর্ঘ সংখ্যার জন্য কাজ করবে এবং EditDistanceএকাধিক ত্রুটির জন্য আপনি প্যারামিটারটি বাড়িয়ে দিতে পারেন । এটিকে আরও কিছুটা এগিয়ে যেতে পারে তবে আমার পন্থাটি প্রদর্শন করতে চেয়েছিল।

h@u_:=Select[Tuples[AdjacencyList[EdgeAdd[GridGraph[{3,3}],{0<->1,0<->2}],#]~Join~{#}&/@u],#~EditDistance~u==1&]

হালকাভাবে আরও গল্ফযুক্ত সংস্করণ 3 রুম সংখ্যা (106 বাইট) দৈর্ঘ্যে হার্ডকোড করা হয়েছে। এটি প্রতিটি অঙ্কের সাথে সম্পর্কিত 3 র‌্যাঙ্কের তালিকা হিসাবে আউটপুট দেবে:

Thread/@ReplacePart[#~Table~3,{i_,i_}:>(AdjacencyList[GridGraph@{3,3}~EdgeAdd~{0<->1,0<->2},#]&/@#)[[i]]]&

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


একজন অন্য দূরত্বের ফাংশনগুলিও ব্যবহার করতে পারে যেমন DamerauLevenshteinDistanceপরিবর্তে EditDistanceপরিবহন ত্রুটিও অন্তর্ভুক্ত করে।
কেলি লোদার

9

পাইথন 2 , 89 বাইট

lambda r:[r[:i]+[c]+r[i+1:]for i,n in enumerate(r)for c in`ord(u'ÌЋ>তŧ0ɃD'[n])`]

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

1 এবং 5 অক্ষরগুলি এখানে প্রদর্শিত হবে না (ব্রাউজার নির্ভর), তবে সম্পূর্ণ স্ট্রিং এর সমতুল্য[21, 204, 1035, 62, 157, 2468, 359, 48, 579, 68]



3

আর , 190 বাইট

function(x){l=list(c(1,2),c(0,2,4),c(0,1,3,5),c(2,6),c(1,5,7),c(2,4,6,8),c(3,5,9),c(4,8),c(5,7,9),c(6,8))
a=do.call(expand.grid, mapply(c,l[x+1],x))
a[apply(a,1,function(y){sum(x==y)==2}),]}

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


কোডগল্ফে আমার দ্বিতীয় প্রচেষ্টা! বেশ লম্বা, ১৯০ বাইট, তবে অন্যের মতামত আছে কি না আরও ভাল করতে পারে তা দেখার জন্য আমি আর। কৌতূহলের সাথে সবচেয়ে ভাল পরিচালনা করতে পারি!


1
সামান্য জিনিসগুলির পুরো গুচ্ছ: আপনার দ্বিতীয় লাইনে একটি অতিরিক্ত জায়গা রয়েছে; :ওভারের নজির অপব্যবহার করা */+-প্রথম লাইনে কয়েকটি বাইট ছাঁটাই করতে পারে, পরিত্রাণ পেতে do.call, aএকটি হিসাবে চিকিত্সা করা matrixএবং এটি ট্রান্সপোস করে প্রায় 39 বাইট সংরক্ষণ করে: অনলাইনে চেষ্টা করে দেখুন!
জিউসেপ

আপনি এই ভাল! সাহায্য করার জন্য ধন্যবাদ.
ফ্লোরিয়ান

2

জাভাস্ক্রিপ্ট (ফায়ারফক্স 30-57), 115 109 বাইট

f=([c,...a],p=``)=>c?[...(for(n of``+[12,240,1350,26,157,2468,359,48,579,68][c])p+n+a.join``),...f(a,p+c)]:[]

সম্পাদনা করুন: @ এডক 65 এর জন্য 6 টি বাইট সংরক্ষণ করা হয়েছে (যদিও প্রস্তাবিত 0গুলি এখন অন্যান্য পরামর্শের পরে উপস্থিত হয়)। ES6 সংস্করণ, 118 112 বাইট:

f=([c,...a],p=``)=>c?[...[...``+[12,240,1350,26,157,2468,359,48,579,68][c]].map(n=>p+n+a.join``),...f(a,p+c)]:[]
<input oninput=o.textContent=f(this.value).join`\n`><pre id=o>


আমি এটি প্রচুর কোড গল্ফগুলিতে ([...)] দেখতে পাচ্ছি, তবে আমি এটি পুরোপুরি বুঝতে পারি না এবং এটি কোনও নথিতে পাওয়া যায় না বলে মনে হয়। আপনি কি এটি ব্যাখ্যা করতে পারেন বা কোনও ব্যাখ্যার লিঙ্ক পোস্ট করতে পারেন?
আন্তন বলমেয়ার

6 বাইট সংরক্ষণ করুন[...[12,240,1350,26,157,2468,359,48,579,78][c]+'']
21c14

1
@ আন্তনবালমায়ার [for(...)]হ'ল একাধিক অ্যারে বোধগম্য সিনট্যাক্স প্রস্তাব যা একে কখনও ইসিএমএসক্রিপ্টে রূপ দেয়নি। এটি আপনাকে পুনরাবৃত্তির উপর দিয়ে লুপ করতে এবং সাফল্যের সাথে ফিল্টার করতে এবং / অথবা ফলাফলগুলিতে মানচিত্রের অনুমতি দেয়। (ডাবল পুনরাবৃত্তি করার সময় আমি এটি বিশেষভাবে দরকারী বলে মনে করেছি))
নীল

2

জাভা, 205 177 বাইট

b->{for(int c=0;c<3;c++){char[]d=b.toCharArray();for(char e:"12,024,0135,26,157,2468,359,48,579,68".split(",")[new Byte(""+d[c])].toCharArray()){d[c]=e;System.out.println(d);}}}

আমি জানি এটি অন্যান্য উত্তরগুলির সাথে তুলনা করে দীর্ঘ। আমার অজুহাত: এটি জাভাতে।
ওরাকল এর toCharArrayমতো নতুন কিছু নামকরণ করা উচিত getCrs

ক্রেডিট

কেভিন ক্রুইজসেন -২৮ টি চরিত্র


1
গল্ফ কিছু ছোট জিনিস। (String b)->ন্যায়সঙ্গত হতে পারে b->, এবং আপনি চলার স্থানটি মুছে ফেলতে পারেন ;। গল্ফের আসল জিনিসগুলির জন্য: আপনি কেবল aএকবার ব্যবহার করেন , যাতে আপনি সরাসরি সরিয়ে String[]a=...;এবং ব্যবহার করতে পারেন "12,024,0135,26,157,2468,359,48,579,68".split(",")[...]। এছাড়াও, Byte.parseByteহতে পারে new Byte। মোট: 177 বাইট
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুইজসেন ধন্যবাদ, সেগুলি আমার কাছে শিখতে হবে এমন কিছু কৌশল :)
রিনিস মাজেইক্স

1
জাভা golfing জন্য টিপস এবং <সমস্ত ভাষা> এ golfing জন্য টিপস ক্ষেত্রে মাধ্যমে পড়তে আগ্রহপূর্ণ হতে পারে এমন আপনি যদি এখনো না। :)
কেভিন ক্রুইজসেন 22'18


2

সি (জিসিসি) , 136 বা 114 বাইট

এএসসিআইআই সংস্করণ 136 বাইট

m[]={12,240,1350,26,157,2468,359,48,579,68},p,i,X=10;f(n){for(i=100;i;i/=X)for(p=m[n/i%X];p;p/=X)printf("%d ",n/(i*X)*(i*X)+p%X*i+n%i);}

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

ইউনিকোড 114 108 বাইট (টিও এটির জন্য অদ্ভুতভাবে গণনা করছে বলে মনে হচ্ছে)

এই সংস্করণটির জন্য @ সেলিংক্যাটকে ধন্যবাদ।

p,i,X=10;f(n){for(i=1e3;i/=X;)for(p=L"\fðՆ\32\x9dতŧ0ɃD"[n/i%X];p;p/=X)printf("%d ",n/i/X*i*X+p%X*i+n%i);}

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


নিবন্ধন করুন টিআইও 108 বাইট বলে।
গ্যাস্ট্রোপনার

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

@ সিলিংক্যাট হ্যাঁ, স্থানীয়ভাবেও এটি খুব খারাপ ছিল। সংরক্ষিত ফাইলটি 114, যথেষ্ট সত্য।
গ্যাস্ট্রোপনার



1

পাইথন 2 , 103 বাইট

-লাইটকে -4 বাইটের জন্য ধন্যবাদ

lambda n:{n[:i]+r+n[i+1:]for i,v in enumerate(n)for r in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10]}

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


এর সাথে 4 বাইট সংরক্ষণ করুন: in`0x134cd9a07d1e58feab643f7db24102`[int(v)::10](আমি int('…',36)খুব চেষ্টা করেছি তবে এটি আরও একটি বাইট দীর্ঘকালীন।)
লিন

1

জুলিয়া 0.6 , 93 বাইট

~r=[(R=copy(r);R[j]=i;R)for i=0:9,j=1:3 if(big(1)<<(i+10r[j]))&0x502A044228550A21102B05406>0]

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

  • অঙ্কগুলির একটি ভেক্টর নেয় এবং একই ফর্ম্যাটে একটি তালিকা ফেরত দেয়।
  • 0x502A044228550A21102B05406এটি এমন একটি UInt128যা নামপ্যাডের পাশে 1+10jiff সেট করা থাকে ।ij
  • big(1)একটি BigInt। এটা তোলে ওভারফ্লো চেয়ে ব্যবহারসমূহ কম অক্ষর প্রতিরোধ করতে ব্যবহৃত হয় Int128(1)বা UInt128(1)

1

এসকিউএল (এসকিউলাইট), 533 বাইট

with m as (select 0 as i, 1 as o union values (0,2),(1,0),(1,2),(1,4),(2,0),(2,1),(2,3),(2,5),(3,2),(3,6),(4,1),(4,5),(4,7),(5,2),(5,4),(5,6),(5,8),(6,3),(6,5),(6,9),(7,4),(7,8),(8,5),(8,7),(8,9),(9,6),(9,8))select o || substr('008', 2, 1) || substr('008', 3, 1)from m where substr('008', 1, 1) = cast(i as text)union select substr('008', 1, 1) || o || substr('008', 3, 1)from m where substr('008', 2, 1) = cast(i as text)union select substr('008', 1, 1) || substr('008', 2, 1) || o from m where substr('008', 3, 1) = cast(i as text)

Ungolfed

with m as (
    select 0 as i, 1 as o
    union
    values
    /*(0,1),*/(0,2),
    (1,0),(1,2),(1,4),
    (2,0),(2,1),(2,3),(2,5),
    (3,2),(3,6),
    (4,1),(4,5),(4,7),
    (5,2),(5,4),(5,6),(5,8),
    (6,3),(6,5),(6,9),
    (7,4),(7,8),
    (8,5),(8,7),(8,9),
    (9,6),(9,8)
)
select o || substr(s, 2, 1) || substr(s, 3, 1)
from m, t
where substr(s, 1, 1) = cast(i as text)
union
select substr(s, 1, 1) || o || substr(s, 3, 1)
from m, t
where substr(s, 2, 1) = cast(i as text)
union
select substr(s, 1, 1) || substr(s, 2, 1) || o
from m, t
where substr(s, 3, 1) = cast(i as text)

ব্যাখ্যা

ইনপুটটি tকলাম সহ টেবিলের একক পাঠ্য সারি s। আমার বোধগম্যতা এই মেটা উত্তর অনুসারে এটি ইনপুট গ্রহণযোগ্য ফর্ম form ইনপুট নীচের হিসাবে তৈরি করা যেতে পারে।

drop table if exists t;
create table t (s text);
insert into t values('555'); -- Your input here

টিকা সমাধান

with m as ( -- Using this in the "with" allows us to only type is once
    select 0 as i, 1 as o -- The first pair is here and it names the columns
    union
    values
    /*(0,1),*/(0,2),
    (1,0),(1,2),(1,4),
    (2,0),(2,1),(2,3),(2,5),
    (3,2),(3,6),
    (4,1),(4,5),(4,7),
    (5,2),(5,4),(5,6),(5,8),
    (6,3),(6,5),(6,9),
    (7,4),(7,8),
    (8,5),(8,7),(8,9),
    (9,6),(9,8)
)
select o || substr(s, 2, 1) || substr(s, 3, 1) -- concat the first wrong char with two correct chars
from m, t
where substr(s, 1, 1) = cast(i as text) -- when the first char is in the i (input) column from above
union
select substr(s, 1, 1) || o || substr(s, 3, 1)
from m, t
where substr(s, 2, 1) = cast(i as text)
union
select substr(s, 1, 1) || substr(s, 2, 1) || o
from m, t
where substr(s, 3, 1) = cast(i as text)

1

কোটলিন , 117 বাইট

mapIndexed{i,c->"12,024,0135,26,157,2468,359,48,579,68".split(",")[c-'0'].map{replaceRange(i,i+1,it+"")}}.flatMap{it}

শোভিত

mapIndexed { i, c ->
    "12,024,0135,26,157,2468,359,48,579,68"
        .split(",")[c - '0']
        .map { replaceRange(i, i + 1, it + "") }
}.flatMap { it }

পরীক্ষা

fun String.f(): List<String> =
mapIndexed{i,c->"12,024,0135,26,157,2468,359,48,579,68".split(",")[c-'0'].map{replaceRange(i,i+1,it+"")}}.flatMap{it}

data class Test(val input:Int, val answers: List<Int>)

val tests = listOf(
    Test(8, listOf(108, 208, 18, 28, 5, 7, 9)),
    Test(123, listOf(23, 223, 423, 103, 113, 133, 153, 122, 126)),
    Test(585, listOf(285, 485, 685, 885, 555, 575, 595, 582, 584, 586, 588)),
    Test(777, listOf(477, 877, 747, 787, 774, 778)),
    Test(963, listOf(663, 863, 933, 953, 993, 962, 966)),
    Test(555, listOf(255, 455, 655, 855, 525, 545, 565, 585, 552, 554, 556, 558))
)

fun main(args: Array<String>) {
    for (r in tests) {
        val input = r.input.toString().padStart(3, '0')
        val expected = r.answers.map { it.toString().padStart(3, '0') }.sorted()
        val actual = input.f().sorted()
        if (expected != actual) {
            throw AssertionError("$input -> $actual | $expected")
        }
    }
}

Tio

TryItOnline


0

জেলি , 35 বাইট

ḷþị“-ⱮⱮVḟ|żṣ~ẋ³ɱgẆ’ḃ⁽¦ḳ¤$ṛ¦DŒp$¥"JẎ

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

-1 জনাথন অ্যালানকে ধন্যবাদ ।

ব্যাখ্যা আপডেট করা হচ্ছে ...


3
এটি কীভাবে পার্স করা হয় সে সম্পর্কে আমার সত্যতার কোনও ধারণা নেই, কীভাবে এটি কাজ করে তা ছেড়ে দিন। একটি ব্যাখ্যা ব্যাপকভাবে প্রশংসা করা হবে।
কায়ার্ড কইনিরিংহিংহিং

@cairdcoinheringaahing দুঃখিত, এখন সময়
এরিক Outgolfer

-1 বাইট: Wẋ3->ḷþ
জোনাথন অ্যালান

0

টি-এসকিউএল , 322 বাইট

WITH m AS(SELECT LEFT(value,1)i,RIGHT(value,1)o FROM STRING_SPLIT('01,02,10,12,14,20,21,23,25,32,36,41,45,47,52,54,56,58,63,65,69,74,78,85,87,89,96,98',','))SELECT o+RIGHT(s,2)FROM t,m WHERE i=LEFT(s,1)UNION SELECT LEFT(s,1)+o+RIGHT(s,1)FROM t,m WHERE i=SUBSTRING(s,2,1)UNION SELECT LEFT(s,2)+o FROM t,m WHERE i=RIGHT(s,1)

ইনপুটটি sনামক একটি একক-সারি টেবিলের কলাম থেকে নেওয়া হয়েছে t:

DROP TABLE IF EXISTS t
CREATE TABLE t (s CHAR(3))
INSERT INTO t VALUES('008')

Ungolfed:

WITH m AS (
    SELECT LEFT(value,1) i, RIGHT(value,1) o
    FROM STRING_SPLIT('01,02,10,12,14,20,21,23,25,32,36,41,45,47,52,54,56,58,63,65,69,74,78,85,87,89,96,98',',')
)
SELECT o+RIGHT(s,2) FROM t,m WHERE i=LEFT(s,1)
UNION
SELECT LEFT(s,1)+o+RIGHT(s,1) FROM t,m WHERE i=SUBSTRING(s,2,1)
UNION
SELECT LEFT(s,2)+o FROM t,m WHERE i=RIGHT(s,1)

SQLFiddle

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