পিগপেন সাইফার এনক্রিপশন


11

পিগপেন সাইফার এনক্রিপশন

আপনার মিশনটি সহজ: একটি প্রোগ্রাম লিখতে যা পাঠ্যটিকে ইনপুট হিসাবে গ্রহণ করে এবং এটি পিগপেন সিফারে একটি ASCII প্রতিনিধিত্ব করে ।

ইনপুট

কেবলমাত্র ASCII (কোনও ইউনিকোড নেই) অক্ষর। আপনার অবশ্যই কমপক্ষে 16384 টি অক্ষর এবং 256 টি লাইন পরিচালনা করতে সক্ষম হবেন।

আউটপুট

  • সমস্ত অক্ষর প্রতিস্থাপন করুন যা নতুন লাইন নয় ABCDEFGHIJKLMNOPQRSTUVWXYZবা abcdefghijklmnopqrstuvwxyzফাঁকা স্থান নয়।
  • কেস-সংবেদনশীলভাবে, প্রতিটি অক্ষরকে তার এনক্রিপ্ট করা ফর্মের সাথে প্রতিস্থাপন করুন (পরবর্তী বিভাগটি দেখুন), প্রতিটির পরে তিনটি লাইনের প্রতিটিটিতে একটি স্থান অনুসরণ করে। প্রতিটি এনকোডযুক্ত অক্ষর ASCII আর্টের 3 * 3 ব্লক। স্থানগুলি 3 * 3 ব্লকের স্পেস দিয়ে প্রতিস্থাপন করুন।
  • সমস্ত নতুন অক্ষর একই তিনটি লাইনে হওয়া উচিত (এই তিনটি লাইনের একটি পিপ্পেন-লাইন কল করুন), যদি না কোনও নতুন লাইন থাকে, যা একটি নতুন পিগপেন-লাইন শুরু করে। পিগপেন-লাইনের মধ্যে একটি সাধারণ লাইন ফাঁকা ছেড়ে যান।

সাইফার

  |       | |       |
 .|       |.|       |.
--+ for J +-+ for K +-- for L

--+       +-+       +--
 .|       |.|       |.
--+ for M +-+ for N +-- for O

--+       +-+       +--
 .|       |.|       |.
  | for P | | for Q |   for R

(ABCDEFGHI are the same as JKLMNOPQR, but with the . replaced by a space)

\./
 V  for W (note the row of 3 spaces on the top)

 ^
/.\ for Z (note the 3 spaces on the bottom)


 \
 .>
 /  for X (note the leading spaces)

 /
<.
 \  for Y (note extra trailing spaces)

(STUV are like WXYZ, but with the . replaced by a space)

উদাহরণ

"HEllo, WORLd" ইনপুটটি তৈরি করা উচিত:

+-+ +-+ |   |   +--         +-- +-- |   --+
| | | | |.  |.  |.      \./ |.  |.  |.    |
| | +-+ +-- +-- +--      V  +-- |   +-- --+

উপরের বেস 64 এনকোডিংটি একটি নতুন নতুন লাইনের সাথে নীচে রয়েছে। এমডি 5sum হয় 6f8ff1fed0cca4dd0492f9728ea02e7b

Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW
ICArLS0gfCAgICstLSAtLSsK

পেছনের নতুন লাইন ছাড়াই, এমডি 5সামটি 581005bef7ee76e24c019d076d5b375fএবং বেস 64:

Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8

LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW ICArLS0gfCAgICstLSAtLSs =

বিধি

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • এটি কোড গল্ফ। সংক্ষিপ্ততম কোড জিতেছে।
  • যে ভাষাগুলি একসাথে একাধিক লাইন ইনপুট গ্রহণ করতে পারে না (যেমন জাভাস্ক্রিপ্ট সহ prompt()) *একটি লাইন বিভাজক হিসাবে ব্যবহার করুন ।

Erranda

  • উদাহরণটি কয়েকটি স্পেস হারিয়েছিল (একটি স্পেসে পূর্বের অক্ষরের পূর্ববর্তী অক্ষর, যদি কোনও হয়, এবং তার নিজস্ব চলমান স্থানগুলি থাকা উচিত)। এই এখন সংশোধন করা হয়েছে।

1
আমি মনে করি এটি একটি শিশু হিসাবে খেলছিলাম, তবে এর নামটি কখনই জানত না। ধন্যবাদ!
জিওবিটস

আমি কি একটি কাস্টম ফন্ট ব্যবহার করতে পারি? :-)
ফ্লোরিয়ান এফ


জাভাস্ক্রিপ্টে কোডিং। সাধারণত promptইনপুট জন্য ব্যবহৃত হয়, তবে এটি কেবল একটি একক লাইন গ্রহণ করে। ইনপুটটিতে নতুন লাইন চিহ্নিত করতে কি আমি একটি বিশেষ চর ('*' এর মতো) ব্যবহার করতে পারি?
edc65

@ edc65 হ্যাঁ, আপনি হতে পারেন

উত্তর:


4

জাভাস্ক্রিপ্ট (ES6) 312 327 340 372 446

ইন্ডেন্টেশন সাদা স্থান এবং নিউলাইনগুলি গণনা করা না - আরও গল্ফ করা যেতে পারে । ইনপুটটিতে নতুন রেখাগুলি চিহ্নিত করতে একটি '*' ব্যবহার করে যেমন promptএকটি একক লাইন গ্রহণ করে।

console.log(prompt().split('*').map(s=>
  [0,1,2].map(r=>
  [...s].map(c=>o+=n+
    '   \\1/ \\ /1\\ /  V  ^  1><1 --++-++-- 1||1||1 '.substr(
    (c=(32|c.charCodeAt())-97)<0|c>25?0:c<18
     ?27+3*'330441552030141252033144255'[f=8,c%9*3+r]
     :3*'482630015274'[f=21,c%4*3+r],3,n=' ')
  .replace(1,' .'[r&c>f])
  ,n='\n'),o=''
)&&o).join('\n'))

টেস্ট ফায়ারফক্স / Firebug কনসোলে

ইনপুট: এবিসিডিডিএফজিআই জে কেএলএমএনওপিকিআর * এসটিইউভি * ডাব্লু এক্সওয়াইজেড * হেলো ওওআরএলডি!

  | | | |   --+ +-+ +-- --+ +-+ +--
  | | | |     | | | |     | | | |  
--+ +-+ +-- --+ +-+ +--   | | | |  

  | | | |   --+ +-+ +-- --+ +-+ +--
 .| |.| |.   .| |.| |.   .| |.| |. 
--+ +-+ +-- --+ +-+ +--   | | | |  

     \   /   ^ 
\ /   > <   / \
 V   /   \     

     \   /   ^ 
\./  .> <.  /.\
 V   /   \     

+-+ +-+ |   |   +--         +-- +-- |   --+    
| | | | |.  |.  |.      \./ |.  |.  |.    |    
| | +-+ +-- +-- +--      V  +-- |   +-- --+      

আপনার oএবং w"হ্যালো ওয়ার্ল্ড" এর মধ্যে 5 টি স্পেস রয়েছে , ওপিতে কেবল 4
ক্লদিউ

@ ক্লাডিউ প্রতিটি অক্ষর (এমনকি ফাঁকা, চর 32) 3 স্পেস, অক্ষরের 1 স্পেসের মধ্যে বিভাজক। 1 + 3 + 1 == 5. আমি ওপি
edc65

হ্যাঁ এটি স্পষ্টতই 5 এর সাথে আরও অর্থবোধ করে I
ক্লদিউ

3

সি # - 921 720

স্পষ্টতই কোনও বিজয়ী এন্ট্রি নয়, তবে এটি পাস করতে খুব মজাদার মনে হয়েছিল :)

প্রোগ্রামটি একক হিসাবে ইনপুট নেয়, তারপরে পিগপেন মুদ্রণ করে। একাধিক লাইন ইনপুট করতে আউটপুট হিসাবে দেখা হিসাবে একটি আন্ডারস্কোর (_) ব্যবহার করুন ।

কোড

using System;class P{static void Main(){
int i,y,j,k,w,z;string[]g=Console.ReadLine().ToLower().Split('_');
var d="_________  |b .|b--+_| |b|.|b+-+_|  b|. b+--_--+b .|b--+_+-+b|.|b+-+_+--b|. b+--_--+b .|b  |_+-+b|.|b| |_+--b|. b|  _____   b\\./b v _ \\ b .>b / _ / b<. b \\ _ ^ b/.\\b   _  b  b  ".Replace('b','\n').Split('_');
for(i=0;i<d.Length;i++){if(d[i]==""){d[i]=i<17?d[i+9]:d[i+4];d[i]=d[i].Replace('.',' ');}}
for(y=0;y<g.Length;y++){string o="",s,e=g[y];var r=new string[z=e.Length][];
for(i=0;i<z;i++){if(e[i]-97<0|e[i]-97>25)e=e.Replace(e[i],'{');
o+=d[e[i]-97]+'_';r[i]=(o.Split('_')[i].Split('\n'));}
for(j=0;j<3;j++)for(k=0;k<(w=r.Length);k++){
s=r[k][j];Console.Write(k==w-1?s+'\n':s+' ');}}
Console.ReadLine();}}

ধারণা

সাইফার কয়েকটি চরিত্রের অনুক্রম ব্যবহার করে যা বেশ কিছুটা নকল হয়ে যায়। উদাহরণস্বরূপ, '-' 16 বার দেখায় এবং '__' (দুটি স্পেস) 20 বার দেখায়। আমি এই সিকোয়েন্সগুলি একক-অক্ষর চিহ্নগুলির সাথে প্রতিস্থাপন করেছি এবং রানটাইমের সময় এগুলিকে স্যুইচ আউট করে পিগপেন সাইফারটি অর্ধেক সংরক্ষণ করার জন্য প্রয়োজনীয় অক্ষরের সংখ্যা কেটেছি। একইভাবে, একটি নিউলাইন সাধারণত দুটি অক্ষর প্রয়োজন, কিন্তু একটি চিহ্ন (এন) দ্বারা প্রতিস্থাপিত হয় এবং পরে পরিবর্তন করা হয়।

প্রোগ্রামটি ইনপুটটিকে একটি অ্যারেতে বিভক্ত করে একাধিক লাইন ইনপুট পরিচালনা করে যেখানে প্রতিটি উপাদানই ইনপুটটির একক লাইন। প্রোগ্রামটি তখন প্রতিটি লাইনে আলাদাভাবে পৃথকভাবে চালিত হয়।

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

আউটপুট

hEllo,wORLd
+-+ +-+ |   |   +--        +-- +-- |   --+
| | | | |.  |.  |.     \./ |.  |.  |.    |
| | +-+ +-- +-- +--     v  +-- |   +-- --+

code_golf
|   +-- --+ +-+
|   |.    | | |
+-- +-- --+ +-+
--+ +-- |   +--
  | |.  |.  |
  | +-- +-- +--

multi_line_input
--+  /  |    \  +--
 .| <   |.    > |
--+  \  +--  /  |
|   +-- +-+ +-+
|.  |   |.| | |
+-- |   +-+ +-+
+-- +-+ --+  /   \
|   |.|  .| <     >
|   +-+   |  \   /

1
আমি সি # জানি না, তবে সেখানে for(int i=0;i<p.Length; i++)(মাঝের কাছে) একটি অপ্রয়োজনীয় স্থান রয়েছে বলে মনে হচ্ছে

ধন্যবাদ
অধ্যাপকফিশ

1
ইন m♥lti \n lin♣e \n input, আমার ফোনটি উপস্থাপন করে যে মাল্টিগুলিতে আপনার পরিবর্তে হৃদয় এবং এন এবং ই লাইনের মধ্যে একটি ক্লাব। কেন এমন?
বিটা ক্ষয়

2
@ বেটাডেহে আমি মনে করি কম আস্কি চরগুলি পরিচালনা করা
এডসি 65

চ্যালেঞ্জগুলির নিয়ম মেনে চলার জন্য হার্ট এবং ক্লাবটি সেখানে রাখা হয়েছিল: নতুন লাইন নয় এমন সব অক্ষর প্রতিস্থাপন করুন বা
এবিসিডিইফজিআইজিএইচএমএমওপিকিএসএসইউইউডাব্লুএক্সইজেড

2

পাইথন 2, 180 + 78 + 1 + 3 = 262 টি অক্ষর

180 বাইট প্রোগ্রাম (শেষ দুটি নতুন লাইনগুলি ট্যাবগুলি রয়েছে):

L=open('f','rb').read().decode('zip')
while 1:
 n=raw_input()
 for s in(0,3,6):
    for c in n:w=ord(c.lower())-97;print''.join(L[w+(s+i)*26]for i in(0,1,2))if-1<w<27 else'  ',
    print

একই ডিরেক্টরি হতে 'f' নামক একটি 78-বাইট ফাইলের প্রয়োজন হয় (ফাইলের জন্য +1 বাইট), এতে নিম্নলিখিত রয়েছে:

$ hexdump f
0000000 9c78 a853 d1a9 d6d5 2206 3805 0103 c174
0000010 c100 8b88 07d1 9ae1 051a 4ab0 385d ae03
0000020 2803 8a82 3a80 406c ae18 0f42 6006 0c1c
0000030 0a2d 31fa 6076 ee8c a030 0e14 2987 8428
0000040 7501 3080 c39a 5a10 0014 21c7 7333
000004e

ফাইলের বেস 64 এনকোডিংটি fহ'ল:

eJxTqKnR1dYGIgU4AwF0wQDBiIvRB+GaGgWwSl04A64DKIKKgDpsQBiuQg8GYBwMLQr6MXZgjO4w
oBQOhykohAF1gDCawxBaFADHITNz

প্রোগ্রামটি একটি ব্যতিক্রম সহ প্রস্থান 2>_করে, ত্রুটিটি দমন করে (+3 বাইট):

$ echo "hEllo,wORLd" | python pigpen.py 2>_| ./md5.py
7ed49b7013a30cc3e84aa807f6585325

ব্যাখ্যা :

আমি Lএকটি সন্ধানের টেবিল তৈরি করেছি, এটি একটি ম্যাপিং যা {position_in_3x3_block: {letter_being_encrypted: symbol_for_letter_at_position}}ফ্ল্যাট অ্যারেতে সঞ্চিত। প্রোগ্রামটি প্রতিটি পজিশনের জন্য একটি সরল লুক-আপ করে চিঠিগুলি মুদ্রণ করে।


আপনার জন্য একটি বাইট fএবং তিনটি বাইট যুক্ত করা উচিত2>_

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