মাতাল বিশপ


42

পাবলিক-কী ক্রিপ্টোগ্রাফিতে, একটি সর্বজনীন কী ফিঙ্গারপ্রিন্ট একটি দীর্ঘতর পাবলিক কী সনাক্ত করতে ব্যবহৃত বাইটের সংক্ষিপ্ত ক্রম ence

বিশেষত এসএসএইচে তাদের যাচাই করার জন্য ব্যবহার করা যেতে পারে যে কোনও সার্ভার আসলে যে সার্ভারের সাথে আমি যোগাযোগের প্রত্যাশা করছিলাম এবং আমি মাঝারি-মধ্যবর্তী আক্রমণ দ্বারা লক্ষ্যবস্তু নই।

এগুলি সাধারণত হেক্সাডেসিমাল ডিজিটগুলির একটি স্ট্রিং হিসাবে উপস্থাপিত হয়, সুতরাং এটি আশা করা ফিংগারপ্রিন্টের সাথে এটির তুলনা করা বরং বিরক্তিকর এবং ক্লান্তিকর হতে পারে:

37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e

এটিকে কিছুটা সহজ করার জন্য, ওপেনএসএইচ আঙুলের ছাপগুলিকে ASCII শিল্প হিসাবে কল্পনা করার জন্য একটি পদ্ধতি চালু করেছে, যা নীচের মত দেখাবে:

+-----------------+
|                 |
|                 |
|          .      |
|     .   o       |
|o . o . S +      |
|.+ + = . B .     |
|o + + o B o E    |
| o .   + . o     |
|         .o      |
+-----------------+

এটির সাহায্যে আমি ASCII আর্টের রুক্ষ আকৃতিটি মনে করার চেষ্টা করতে পারি এবং সার্ভারের আঙুলের ছাপটি পরিবর্তিত হয়ে চিত্রটি আলাদা দেখায় তখন (তাত্ত্বিকভাবে) এটি সনাক্ত করতে পারি।

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

ডার্ক লস, টোবিয়াস লিমার, আলেকজান্ডার ভন জার্নার থেকে নেওয়া ২০০৯. মাতাল বিশপ: ওপেনএসএসএইচ ফিঙ্গারপ্রিন্ট ভিজুয়ালাইজেশন অ্যালগরিদম বিশ্লেষণ

গ্রিডটির প্রশস্ততা 17 টি অক্ষর এবং উচ্চতা 9 টি অক্ষর রয়েছে। "বিশপ" সারি 4 / কলাম 8 (কেন্দ্র) থেকে শুরু হয়। বিশপের প্রারম্ভিক অবস্থানের জন্য প্রতিটি অবস্থানকে [x, y], অর্থাৎ [8,4] হিসাবে চিহ্নিত করা যেতে পারে।

            1111111
  01234567890123456
 +-----------------+
0|                 |
1|                 |
2|                 |
3|                 |
4|        S        |
5|                 |
6|                 |
7|                 |
8|                 |
 +-----------------+

বিশপ চারদিকে ঘোরাতে আঙুলের ছাপ ব্যবহার করে। এটি এটিকে বাম দিক থেকে বাম থেকে ডানে এবং কমপক্ষে উল্লেখযোগ্য বিট থেকে সবচেয়ে গুরুত্বপূর্ণ বিট পর্যন্ত পড়বে:

Fingerprint      37      :       e4      :       6a      :  ...  :       5e
Bits        00 11 01 11  :  11 10 01 00  :  01 10 10 10  :  ...  :  01 01 11 10
             |  |  |  |      |  |  |  |      |  |  |  |              |  |  |  |
Step         4  3  2  1      8  7  6  5     12 11 10  9             64 63 62 61

বিশপ নিম্নলিখিত পরিকল্পনা দ্বারা সরানো হবে:

Bits   Direction
-----------------
00     Up/Left
01     Up/Right
10     Down/Left
11     Down/Right

বিশেষ ক্ষেত্রে:

  • বিশপ যদি কোনও কোণে থাকে এবং আবার কোণে চলে যায় তবে সে কিছুতেই সরবে না। অর্থ: বিশপ উপস্থিত [0,0]এবং তার পরবর্তী পদক্ষেপ হবে 00। তিনি থাকেন[0,0]
  • বিশপ যদি কোনও কোণে বা কোনও দেয়ালে থাকে এবং কোনও এক দেয়ালের মধ্যে চলে যায় তবে তিনি অনুভূমিকভাবে বা উল্লম্বভাবে কেবল চলে যান। অর্থ: বিশপ উপস্থিত [0,5]এবং তার পরবর্তী পদক্ষেপ হবে 01। তিনি না করে ছেড়ে যেতে পারেন তাই তিনি শুধু আপ চলে আসে [0,4]

বিশপ এই ক্ষেত্রটি কতবার পরিদর্শন করেছেন তার প্রতিটি অবস্থানের একটি মূল্য রয়েছে:

Value      | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15| 16|
Character  |   | . | o | + | = | * | B | O | X | @ | % | & | # | / | ^ | S | E |

15 (এস) এবং 16 (ই) মানগুলি বিশেষ যে তারা যথাক্রমে বিশপের শুরু এবং শেষের অবস্থান চিহ্নিত করে এবং সম্মানজনক অবস্থানের আসল মানটিকে ওভাররাইট করে।

লক্ষ্য

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

উদাহরণ

Input:
16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48

Output:
+-----------------+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+

Input:
b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b

Output:
+-----------------+
|            o.o  |
|            .= E.|
|             .B.o|
|              .= |
|        S     = .|
|       . o .  .= |
|        . . . oo.|
|             . o+|
|              .o.|
+-----------------+

Input:
05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47

Output:
+-----------------+
|       o=.       |
|    o  o++E      |
|   + . Ooo.      |
|    + O B..      |
|     = *S.       |
|      o          |
|                 |
|                 |
|                 |
+-----------------+

বিধি

  • এটি । অল্প বাইটের কোডটি জয়ী।
  • আপনি কোনও বিদ্যমান লাইব্রেরি ব্যবহার করতে পারবেন না যা চিত্রটি তৈরি করে।
  • আপনি যে কোনও ভাষা ব্যবহার করুন!
  • আপনার জমা দেওয়ার একটি সম্পূর্ণ প্রোগ্রাম হতে হবে

3
আমরা কি ধরে নিতে পারি যে কোনও কোষ 14 বারের বেশি দেখা হবে না?
মার্টিন ইন্ডার

2
ন্যূনতম কভারেজের কয়েকটি কর্নার কেস রয়েছে যার ফলস্বরূপ কয়েকটি ক্ষেত্র 14 বারের বেশি দেখা হয়েছে। 33:33:33:...:33, cc:cc:cc:...:ccএটির জন্য উদাহরণ হতে পারে। ফিঙ্গারপ্রিন্টটি সাধারণত একটি এমডি 5 হ্যাশ হয়, সুতরাং আপনি এরকম ফল পাওয়ার পক্ষে খুব বেশি সম্ভাবনা। এইগুলি কীভাবে মোকাবেলা করতে হবে তার জন্য আমি কোনও নির্ভরযোগ্য উত্স খুঁজে পাইনি, সুতরাং আপাতত আমি বলেছি: ধরুন কোনও সেল 14 বারের বেশি দেখা হবে না।
পাদারাম

উত্তর:


2

পাইথ, 125 বাইট

Jj*17\-"++"JVc9XXsm@"^ .o+=*BOX@%&#/"hdrS+*U9U17K.u.e@S[0b*8hk)1.b+tNyYNYsm_c4.[08jxsM^.HM16 2d2cz\:,4 8 8ieK17\E76\SjN"||")J

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা টেস্ট-স্যুট

আমি কিছু দিন আগে লিখেছিলাম, তবে এটি পোস্ট করিনি, কারণ আমি এটি সম্পর্কে সত্যই খুশি ছিলাম না।

ব্যাখ্যা:

মৌলিক ধারণা নিম্নোক্ত। আমি জুটি দিয়ে শুরু (4, 8)। প্রতিটি পদক্ষেপের মাধ্যমে (m1,m2)আমি থেকে যেতে (x, y)করার (x-1+2*m1, y-1+2*m2)। নিশ্চিত করতে, যে এই স্থানাঙ্ক boarders বাহিরে যেতে না, আমি সাজানোর তাদের কিছু তালিকা করতে হবে, বিশেষ করে মধ্যবর্তী উপাদান ফিরে (sorted(0,8,newx)[1], sorted(0,16,newy)[1])

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


9

ডায়ালগ এপিএল (178)

{⎕ML←3⋄F←9 17⍴0⋄5 9{(⍺⌷F)+←1⋄×⍴⍵:(1 1⌈9 17⌊⍺-1 1-2×↑⍵)∇1↓⍵⋄(⍺⌷F)←16⋄F[5;9]←15⋄K⍪(M,' .o+=*BOX@%&#/^SE'[1+F],M←'|')⍪K←'+','+',⍨17⍴'-'}⊃,/{↓⊖4 2⍴⍉(4/2)⊤¯1+⍵⍳⍨⎕D,'abcdef'}¨⍵⊂⍨':'≠⍵}

এটি এমন একটি ফাংশন যা স্ট্রিংটিকে তার সঠিক আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ASCII শিল্পের উপস্থাপনা সমন্বিত একটি অক্ষর ম্যাট্রিক্স প্রদান করে, যেমন:

      F←{⎕ML←3⋄F←9 17⍴0⋄5 9{(⍺⌷F)+←1⋄×⍴⍵:(1 1⌈9 17⌊⍺-1 1-2×↑⍵)∇1↓⍵⋄(⍺⌷F)←16⋄F[5;9]←15⋄K⍪(M,' .o+=*BOX@%&#/^SE'[1+F],M←'|')⍪K←'+','+',⍨17⍴'-'}⊃,/{↓⊖4 2⍴⍉(4/2)⊤¯1+⍵⍳⍨⎕D,'abcdef'}¨⍵⊂⍨':'≠⍵}


      F '16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48'
+-----------------+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+
      F 'b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b'
+-----------------+
|            o.o  |
|            .= E.|
|             .B.o|
|              .= |
|        S     = .|
|       . o .  .= |
|        . . . oo.|
|             . o+|
|              .o.|
+-----------------+

ব্যাখ্যা:

  • ⎕ML←3: SET ⎕MLকরতে 3। এটি স্ট্রলিং স্ট্রিংয়ের জন্য আরও দরকারী করে তোলে ।

  • F←9 17⍴0: জিরোগুলির 17-বাই -9 ম্যাট্রিক্স তৈরি করুন। Fপ্রতিটি অবস্থান কতবার পরিদর্শন করা হয়েছে তা উপস্থাপন করে।

  • ⍵⊂⍨':'≠⍵: বিভক্ত উপর :অক্ষর।

  • {... : প্রতিটি গ্রুপের জন্য:
    • ¯1+⍵⍳⍨⎕D,'abcdef': স্ট্রিংয়ে প্রতিটি চরিত্রের সূচকটি সন্ধান করুন '01234567890abcdef'। বিয়োগ 1, কারণ এপিএল 1-ইনডেক্সড ডিফল্ট।
    • (4/2)⊤: মানগুলিকে তাদের 4-বিট উপস্থাপনায় রূপান্তর করুন (এখন 2-বাই -4 ম্যাট্রিক্স থাকা উচিত)।
    • ↓⊖4 2⍴⍉: ম্যাট্রিক্সটি ঘোরান, পরিবর্তে 2-বাই -4 ম্যাট্রিক্স পূরণ করতে উপাদানগুলি ব্যবহার করুন, ম্যাট্রিক্স অনুভূমিকভাবে মিরর করুন এবং তারপরে প্রতিটি লাইন পৃথকভাবে পান। এটি আমাদের প্রয়োজনীয় 4 2-বিট মান দেয়।
  • ⊃,/: 2-বিট পদক্ষেপের একটি তালিকা প্রদান করে ফলাফলের তালিকাগুলি একসাথে যোগ দিন।
  • 5 9{... }: পদক্ষেপের তালিকা দেওয়া হয়েছে এবং অবস্থান থেকে শুরু হচ্ছে [9,5]:
    • (⍺⌷F)+←1: বর্তমান অবস্থানে বৃদ্ধি F
    • ×⍴⍵:: পদক্ষেপের তালিকাটি খালি না হলে:
      • ↑⍵: তালিকা থেকে প্রথম পদক্ষেপ গ্রহণ করুন
      • ⍺-1 1-2×: সেই পদক্ষেপের জন্য ব-দ্বীপ পান এবং এটি বর্তমান অবস্থান থেকে বিয়োগ করুন
      • 1 1⌈9 17⌊: মাঠের মধ্যে চলাচলকে সীমাবদ্ধ করুন
      • (... )∇1↓⍵: নতুন অবস্থান এবং বাকি পদক্ষেপগুলি দিয়ে চালিয়ে যান
    • যদি হয় খালি:
      • (⍺⌷F)←16: Fচূড়ান্ত অবস্থান 16 এ সেট
      • F[5;9]←15: Fশুরুতে 15 এ সেট করুন
      • ' .o+=*BOX@%&#/^SE'[1+F]: প্রতিটি চরিত্রের সাথে সংশ্লিষ্ট চরিত্রের মানচিত্র করুন
      • K⍪(M,... ,M←'|')⍪K←'+','+',⍨17⍴'-': ফলকে লাইনে মুড়ে দিন

8

পার্ল, 300 + 1 (-n) = 301 বাইট

perl -ne 'sub b{$b=$_[0]+$_[1];$_[0]=$b<0?0:$b>$_[2]?$_[2]:$b}$v=pack"(H2)*",/\w\w/g;($x,$y)=(8,4);$a[b($y,($_&2)-1,8)*17+b($x,($_&1)*2-1,16)]++for map{vec$v,$_,2}0..63;@a[76,$y*17+$x]=(15,16);$c=" .o+=*BOX@%&#/^SE";print$d="+".("-"x17)."+\n",(map{+"|",(map{substr$c,$_,1}@a[$_*17..($_+1)*17-1]),"|\n"}0..8),$d'

এই উত্তরটি ঘৃণ্য, কিন্তু এটি এই ধাঁধার জন্য প্রথমটিও, তাই এটি এখনই করা হবে।

-nSTDIN এ একটি লাইন ইনপুট নিতে এবং পূরণ করতে $_

# b($v, -1 or 1, max) modifies $v within 0..max
sub b{$b=$_[0]+$_[1];$_[0]=$b<0?0:$b>$_[2]?$_[2]:$b}

# turn $_ into a binary string
$v=pack"(H2)*",/\w\w/g;

# initialize cursor
($x,$y)=(8,4);

# find an element of single-dimensional buffer @a
$a[
    # y += (bitpair & 2) - 1, within 8
    b($y,($_&2)-1,8) * 17
    # x += (bitpair & 1) * 2 - 1, within 17
  + b($x,($_&1)*2-1,16)
# and increment it
]++
# for each bit pair (in the right order!)
  for map{vec$v,$_,2}0..63;

# overwrite the starting and ending positions
@a[76,$y*17+$x]=(15,16);

# ascii art lookup table
$c=" .o+=*BOX@%&#/^SE";

# output
print
  # the top row, saving it for later
  $d="+".("-"x17)."+\n",
  # each of the eight middle rows
  (map{+
    # converting each character in @a in this row as appropriate
    "|",(map{substr$c,$_,1}@a[$_*17..($_+1)*17-1]),"|\n"
  }0..8),
  # the bottom row
  $d

7

আর, 465 459 410 393 382 357 বাইট

f=function(a){s=strsplit;C=matrix(as.integer(sapply(strtoi(el(s(a,":")),16),intToBits)[1:8,]),2);C[!C]=-1;n=c(17,9);R=array(0,n);w=c(9,5);for(i in 1:64){w=w+C[,i];w[w<1]=1;w[w>n]=n[w>n];x=w[1];y=w[2];R[x,y]=R[x,y]+1};R[]=el(s(" .o+=*BOX@%&#/^",""))[R+1];R[9,5]="S";R[x,y]="E";z="+-----------------+\n";cat(z);for(i in 1:9)cat("|",R[,i],"|\n",sep="");cat(z)}

ইনডেন্টেশন এবং নিউলাইনগুলি সহ:

f=function(a){
    s=strsplit
    C=matrix(as.integer(sapply(strtoi(el(s(a,":")),16),intToBits)[1:8,]),2)
    C[!C]=-1
    n=c(17,9)
    R=array(0,n)
    w=c(9,5)
    for(i in 1:64){
        w=w+C[,i]
        w[w<1]=1
        w[w>n]=n[w>n]
        x=w[1]
        y=w[2]
        R[x,y]=R[x,y]+1
    }
    R[]=el(s(" .o+=*BOX@%&#/^",""))[R+1]
    R[9,5]="S"
    R[x,y]="E"
    z="+-----------------+\n"
    cat(z)
    for(i in 1:9)cat("|",R[,i],"|\n",sep="")
    cat(z)
}

ব্যবহার:

> f("16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48")
+-----------------+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+
> f("37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e")
+-----------------+
|                 |
|                 |
|          .      |
|     .   o       |
|o . o . S +      |
|.+ + = . B .     |
|o + + o B o E    |
| o .   + . o     |
|         .o      |
+-----------------+

আপনি 'ম্যাট্রিক্স' ফাংশনটিকে একবার 'মি' হিসাবে সংজ্ঞায়িত করে গল্ফ করতে পারবেন না? 'ফাংশন' একই?
কাজিনকোচেন

আমার মনে হয় 'বিড়াল' ফাংশনে আপনার '
সেপ

সেপের জন্য ডিফল্টটি একটি স্থান, তাই আমার এটি ওভাররাইড করা দরকার, তবে প্রকৃতপক্ষে আমি ম্যাট্রিক্সের ওরফে থাকতে পারি।
প্ল্যানাপাস

সংযোজন, যতদূর আমি জানি, আপনি উপনাম করতে পারবেন না function
প্লানাপাস

5

অক্টাভা, 277

d=reshape(rot90(dec2bin(hex2dec(strsplit(input('','s'),':'))))>'0',2,[])*2-1;p=[9;5];for m=1:64 p=[max(min(p(:,1)+d(:,m),[17;9]),1) p];end;A=' .o+=*BOX@%&#/^SE';F=A(sparse(p(2,:),p(1,:),1,9,17)+1);F(5,9)='S';F(p(2,1),p(1,1))='E';[a='+-----------------+';b=['|||||||||']' F b;a]

ব্যাখ্যা:

%// convert the input to binary and rearrange it to be
%//   an array of vectors: [x_displacement; y_displacement]
d=reshape(rot90(dec2bin(hex2dec(strsplit(input('','s'),':'))))>'0',2,[])*2-1;

%// start position array with vector for the start position
p=[9;5];
%// for each move, add displacement, clamping to valid values
for m=1:64 p=[max(min(p(:,1)+d(:,m),[17;9]),1) p];end;

%// alphabet for our fingerprint
A=' .o+=*BOX@%&#/^SE';

%// create a sparse matrix, accumulating values for duplicate
%// positions, and replace counts with symbols
F=A(sparse(p(2,:),p(1,:),1,9,17)+1);

%// correct the start and end symbols and construct the final output
F(5,9)='S';F(p(2,1),p(1,1))='E';
[a='+-----------------+';b=['|||||||||']' F b;a]

নমুনা রান:

>> bish
b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b
ans =

+-----------------+
|            o.o  |
|            .= E.|
|             .B.o|
|              .= |
|        S     = .|
|       . o .  .= |
|        . . . oo.|
|             . o+|
|              .o.|
+-----------------+

3

পাইথ, 145 143 140

Jm*17]09A,4K8FYcz\:V4AmhtS[0^2d+@,HGdtyv@+_.BiY16*7\0+-4dyN),3 4 X@JGHh@@JGH; X@J4K15 X@JGH16
=Y++\+*17\-\+VJ++\|s@L" .o+=*BOX@%&#/^SE"N\|)Y

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

পাইথ পুনরাবৃত্তি সহ চ্যালেঞ্জগুলিতে সত্যিই ভাল নয়। আমি আশা করছি সিজেএম এটি সহজেই পরাজিত করবে।


3

জাভাস্ক্রিপ্ট (ES6) 249 208

অনুপস্থিত সীমানা সম্পাদনা করুন

যে কোনও ইকামাস্ক্রিপ্ট 6 অনুবর্তী ব্রাউজারে নীচে স্নিপেট চালনা পরীক্ষা করুন

B=f=>f.replace(/\w+/g,b=>{for(b=`0x1${b}`;b-1;b>>=2)++g[p=(q=(p=(q=p+~-(b&2)*18)>0&q<162?q:p)+b%2*2-1)%18?q:p]},p=81,z=`+${'-'.repeat(17)}+`,g=Array(162).fill(0))&&g.map((v,q)=>q?q-81?q-p?q%18?' .o+=*BOX@%&#/^'[v]:`|
|`:'E':'S':z+`
|`).join``+`|
`+z

// TEST
console.log=x=>O.innerHTML+=x+'\n'

;['37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e'
,'16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48'
,'b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b'
,'05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47'  
].forEach(t=>console.log(t+'\n'+B(t)+'\n'))


// Less golfed

BB=f=>(
  p = 81,
  g = Array(162).fill(0),
  f.replace(/\w+/g, b => {
    for(b = `0x1${b}`;b != 1; b >>= 2)
      q = p+~-(b&2)*18,
      p = q>0&q<162?q:p,
      p = (q=p+b%2*2-1)%18?q:p,
      ++g[p]
  }),
  g.map((v,q) => q-81?q-p?q%18?' .o+=*BOX@%&#/^'[v]:'\n':'E':'S')
  .join``
)
pre { font-family: menlo,consolas; font-size:13px }
<pre id=O></pre>


আপনার গল্ফযুক্ত কোড নিজেই সীমানাগুলি মুদ্রণ করতে সক্ষম হওয়া উচিত। বর্তমানে কেবলমাত্র আপনার পরীক্ষার কেসটি উপরের এবং নীচের সীমানাগুলি মুদ্রণ করে forEach, উল্লম্ব সীমানাগুলি এখনও অনুপস্থিত।
পাদারাম

@ পাদারাম আমি আপনার "যুক্তিসঙ্গত" মন্তব্যটি ভুল বুঝেছিলাম, এই ভেবে যে সীমান্তটির অনুরোধ করা হয়নি
edc65

আপনি ইনপুট এবং আউটপুট কোন পদ্ধতিটি ব্যবহার করবেন তা আমি যুক্তিযুক্ত হতে চাইছি। আমার ক্ষমা যদি এটি বিভ্রান্তিকর হয় তবে আমি এটিকে সম্পাদনা করব
প্যাডারম

3

পাইথন, 381 328

-51 @ জোনাথানফ্রেচকে ধন্যবাদ

def h(f):
 s=[f'{int(o,16)>>s&3:02b}'for o in f.split(':')for s in(0,2,4,6)];r=[0]*153;p=76;w=17
 for d in s:r[p]+=1;p+=(-(p%w!=0),p%w!=16)[int(d[1])]+(-w*(p//w!=0),w*(p//w!=8))[int(d[0])]
 r[76]=15;r[p]=16;b='+'+'-'*w+'+';print(b);i=0
 while i<153:print(f"|{''.join(' .o+=*BOX@%&#/^SE'[c]for c in r[i:i+w])}|");i+=w
 print(b)

ব্যাখ্যার খাতিরে কিছুটা নাড়িত:

def h_(f):
 #Alias 17 because it gets used enough times for this to save bytes
 w=17

 #Input parsing
 s=[f'{int(o,16)>>s&3:02b}'for o in f.split(':')for s in(0,2,4,6)]

 #Room setup
 r=[0]*153
 p=76

 #Apply movements
 for d in s:
  r[p]+=1
  p+=(-(p%w!=0),p%w!=16)[int(d[1])]+(-w*(p//w!=0),w*(p//w!=8))[int(d[0])]
 r[76]=15 #Set start position
 r[p]=16 #Set end position

 #Display result
 b='+'+'-'*w+'+'
 print(b)
 i=0
 while i<153:
  print(f"|{''.join(' .o+=*BOX@%&#/^SE'[c]for c in r[i:i+w])}|")
  i+=w
 print(b)

একটি লাইনের এই জগাখিচুড়ি:

r[p]+=1;p+=(-(p%w!=0),p%w!=16)[int(d[1])]+(-w*(p//w!=0),w*(p//w!=8))[int(d[0])]

কার্যত এটির সমতুল্য:

if int(d[0]): #Down, Y+
  if p//17!=8:
    p+=17
else: #Up, Y-
  if p//17!=0:
    p-=17
​
if int(d[1]): #Right, X+
  if p%17!=16:
    p+=1
else: #Left, X-
  if p%17!=0:
    p-=1

তবে গল্ফ শর্টকাটের এই স্টাইলে সমস্ত শর্তসাপেক্ষে বাসা বাঁধে: (false_value,true_value)[condition] আশা করি বাকিগুলি মোটামুটি স্ব-বর্ণনামূলক

টেস্ট

h('16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48')
+-----------------+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+

h("b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b")
+-----------------+
|            o.o  |
|            .= E.|
|             .B.o|
|              .= |
|        S     = .|
|       . o .  .= |
|        . . . oo.|
|             . o+|
|              .o.|
+-----------------+

h("05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47")
+-----------------+
|       o=.       |
|    o  o++E      |
|   + . Ooo.      |
|    + O B..      |
|     = *S.       |
|      o          |
|                 |
|                 |
|                 |
+-----------------+
```

হ্যালো এবং পিপিসিজিতে আপনাকে স্বাগতম। আপনি একটি কোডের ভেরিয়েবলের নাম ব্যবহার করে এবং একটি লাইনে একক-লাইন-ফর লুপ রেখে আপনার কোডটি গল্ফ করতে পারেন। (1,0)[p%17==16]হয় +(p%17!=16), বা সম্ভবত এমনকি p%17!=16
জোনাথন ফ্রেচ

তদ্ব্যতীত, এখানে একটি অতিরিক্ত অতিরিক্ত স্থান রয়েছে ] for
জোনাথন ফ্রেচ

আমার মনে হয় fpহওয়া উচিত f
জোনাথন ফ্রেচ


2
আমি কেন ব্যবহার করলাম ~16? কিছুটা উদাসীনতা কখনই আপনার গল্ফকে আঘাত করতে পারে না!
জোনাথন ফ্রেচ

2

রুবি 288

->k{w=17
r=[z=?++?-*w+?+]
(0...w*9).each_slice(w).map{|o|r<<?|+o.map{|x|c=76
q=0
k.split(?:).flat_map{|b|(0..7).map{|i|b.to_i(16)[i]}}.each_slice(2){|h,v|v<1?(c>w&&c-=w):c<w*8&&c+=w
c+=h<1?c%w>0?-1:0:c%w<16?1:0
c==x&&q+=1}
x==76?'S':c==x ?'E':' .o+=*BOX@%&#/^'[q]}.join+?|}
(r+[z]).join'
'}

এটি অনলাইনে ব্যবহার করে দেখুন: http://ideone.com/QOHAnM

পঠনযোগ্য সংস্করণ (যেটি থেকে আমি গল্ফ করা শুরু করেছি) তা এখানে: http://ideone.com/XR64km


2

সি - 488

এটি আরও ছোট করার একটি উপায় অবশ্যই আছে ....

#include<stdio.h>
#define H ++p;h[i]|=(*p-(*p>58?87:48))<<
#define B ((h[j]>>n*2)&3)
#define L puts("+-----------------+")
#define F(m,s)for(m=0;m<s;m++)
int h[16],m[17][9],i,j,n,x=8,y=4;main(w,v)char**v;{char*p=v[1]-1,c[17]={32,46,111,43,61,42,66,79,88,64,37,38,35,47,94,83,69};for(;*p;p++,i++){H 4;H 0;}F(j,16)F(n,4){if(B&1)x+=!(x==16);else x-=!(x==0);if(B&2)y+=!(y==8);else y-=!(y==0);m[x][y]++;}m[8][4]=15;m[x][y]=16;L;F(i,9){printf("|");F(j,17)printf("%c",c[m[j][i]]);puts("|");}L;}

0

মরিচা - 509 বাইট

fn b(s:&str)->String{let(mut v,mut b)=([[0;11];20],[9,5]);v[19]=[19;11];for i in 0..16{let mut c=usize::from_str_radix(&s[i*3..i*3+2],16).unwrap();for k in 0..4{for j in 0..2{v[j*18][i%9+1]=18;v[i+k][j*10]=[17,3][(i+k+17)%18/17];b[j]=match(if c&(j+1)==j+1{b[j]+1}else{b[j]-1},j,){(0,_)=>1,(18,0)=>17,(10,1)=>9,x@_=>x.0 as usize,}}v[b[0]][b[1]]+=1;c>>=2;}}v[9][5]=15;v[b[0]][b[1]]=16;(0..220).fold("\n".to_string(),|s,i|{format!("{}{}",s," .o+=*BOX@%&#/^SE-|\n".chars().nth(v[i%20][i/20] as usize).unwrap())})}

বৃহত্তর তবে ... সি এর কাছাকাছি কাছাকাছি স্বাভাবিকভাবেই রাস্ট যেভাবে স্বয়ংক্রিয়ভাবে একে অপরের মধ্যে প্রকারগুলি না ছড়িয়ে দেয় তার কারণে অনেকগুলি বাইট ব্যবহৃত হয়। তবে উন্নতিরও সম্ভবত জায়গা আছে .... সম্ভবত অন্যান্য সমাধান থেকে কিছু ধারণা ব্যবহার করা যেতে পারে।

অরগোল্ফড সংস্করণটি মরচে খেলার মাঠে অনলাইনে রয়েছে

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