এনকোড - সাফল্য - ডিকোড


23

চ্যালেঞ্জ

আপনার কাজটি হ'ল ASCII অক্ষরের একটি স্ট্রিং হিসাবে একটি পূর্ণসংখ্যা এনকোড করা হয় , তারপরে স্ট্রিং এলোমেলোভাবে পরিবর্তিত হওয়ার পরে সাফল্যের সাথে ডিকোড করুন।

আপনি দুটি প্রোগ্রাম / ফাংশন লিখবেন , যা এনকোডার এবং ডিকোডার হিসাবে উল্লেখ করা হবে ।

এনকোডার

  • ইনপুট: একটি পূর্ণসংখ্যা n সীমার মধ্যে [0,2311]
  • আউটপুট: একটি স্ট্রিং এর হওয়া ASCII অক্ষর (অগত্যা মুদ্রণযোগ্য নয়)।s

সঙ্কেতমোচক

  • ইনপুট: একটি র্যান্ডম বিন্যাস স্ট্রিং এর ।ss
  • আউটপুট: পূর্ণসংখ্যা ।n

স্কোরিং

যাক হতে সর্বোচ্চ দৈর্ঘ্য এর গুলি সব সম্ভাব্য মান জুড়ে এন । তাহলে এনকোডার কাজ অ deterministically (যা অনুমোদিত হয়, নীচে দেখুন), তারপর একটি সর্বাধিক দৈর্ঘ্য হতে হবে গুলি করে (সম্ভবত ঘটতে পারে )।AsnAs

যাক LE হতে দৈর্ঘ্য এনকোডার বাইট এবং LD দৈর্ঘ্য সঙ্কেতমোচক বাইটে।

তারপরে আপনার স্কোর A(LE+LD)

বিজয়টি সর্বনিম্ন স্কোর জমা দেওয়া হয় ।

সময় সীমা

একক টেস্টকেস (অর্থাত্ n এর একক মান ) এর জন্য এনকোডার এবং ডিকোডার উভয়কেই কার্যকর করার সময় কিছুটা নির্বিচার সময়সীমা থাকেn

লক্ষ্যটি হ'ল সমাধানটি এড়ানো যে এটি নির্দিষ্ট বৈশিষ্ট্য সহ সমস্ত সিকোয়েন্স গণনা করে এনক্রোডিংকে জোর-জোর করে find যদি আপনার সমাধানটি এর চেয়ে আরও চালাক কিছু করে তবে সম্ভবত এটি সময়ের সীমাবদ্ধতার সাথে মানিয়ে যাবে এবং এটি বৈধ হিসাবে বিবেচিত হবে। তেমনিভাবে, এটি এন এর কয়েকটি এলোমেলোভাবে নির্বাচিত মানগুলির জন্য টিআইওতে কাজ করলে এটি বৈধ বলে বিবেচিত হবে। অন্যথায় আমি এটি আমার মেশিনে পরীক্ষা করে দেখব তবে নোট করুন যে আপনার সমাধানটি যদি নিখরচায় কার্যকর হয় তবে এটি অবশ্যই ব্যর্থ হবে।n

বিধি

  • এনকোডার এবং সঙ্কেতমোচক লেখা আবশ্যক একই ভাষায়
  • সঙ্কেতমোচক আবশ্যক আউটপুট সঠিক পূর্ণসংখ্যা n প্রতি সম্ভব বিন্যাস জন্য s স্ট্রিং এর s দ্বারা ফিরে এনকোডার
  • এনকোডার এবং সঙ্কেতমোচক হয় না করার অনুমতি দেওয়া ভাগ তথ্য (গ্লোবাল ভেরিয়েবল বা ফাইল মাধ্যমে যেমন) কোন উপায়।
  • এনকোডারটির আউটপুট ডিটারমিনিস্টিক হওয়া দরকার না (অর্থাৎ, এনকোডার একাধিকবার চালিত হলে একই ইনপুট এন বিভিন্ন আউটপুট স্ট্রিং তৈরি করতে পারে ), তবে ডিকোডারটি অবশ্যই সর্বদা সঠিক পূর্ণসংখ্যা এন অনুমান করতে পারে ।nn
  • এনকোডার এবং সঙ্কেতমোচক গ্রহণ করা এবং পূর্ণসংখ্যা ফেরত দিতে পারেন n মধ্যে কোন সুবিধাজনক উপায় (যেমন যদি n=14 এটা জরিমানা ইনপুট হতে জন্য 14, "14"বা [1,4])।
  • এনকোডার may আউটপুট স্ট্রিং s দ্বারা পারেন মুদ্রণ তে এটি stdout বা দ্বারা ফিরে একটি স্ট্রিং, একটি তালিকা / অ্যারের অক্ষরের বা একটি তালিকা / সীমার মধ্যে পূর্ণসংখ্যার অ্যারের [0,127] ; দয়া করে মনে রাখবেন সঙ্কেতমোচক একটি বিন্যাস ইনপুট হিসাবে পাবেন s যেমন দ্বারা ফিরে এনকোডার , তাই এটি স্ট্রিং গ্রহণ করা উচিত s মধ্যে একই বিন্যাসে যেমন s
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে আপনার কোডটি কীভাবে কাজ করে এবং আপনার দাবি করা স্কোরটি সঠিক কেন তা ব্যাখ্যা করুন

উদাহরণ

ধরুন n=14

  • এনকোডার পায় 14ইনপুট হিসাবে। এটি আউটপুট হতে পারে "qwerty"
  • সঙ্কেতমোচক একটি বিন্যাস পায় "qwerty"উদাহরণস্বরূপ, যেমন ইনপুট "tweyqr"। এটি অবশ্যই আউটপুট 14(কোনও সুবিধাজনক বিন্যাসে)।

এনকোডার ফিরে পারতেন [113,119,101,114,116,121]পাশাপাশি, যে ক্ষেত্রে সঙ্কেতমোচক পেয়েছি হবে (উদাহরণস্বরূপ) [116,119,101,121,113,114]

নোট করুন যে এনকোডার দ্বারা ফিরে আসা স্ট্রিং -এ প্রিন্টযোগ্য ASCII অক্ষরও অন্তর্ভুক্ত থাকতে পারে (তবে সর্বদা সীমার মধ্যে থাকে [0x00, ..., 0x7F])।


অবশ্যই আউটপুট দৈর্ঘ্য অসীম হতে পারে না, আপনি একটি অসীম স্ট্রিং এলোমেলো করতে পারবেন না
H.PWiz

@ H.PWiz কোন এটা হতে পারে না, কিন্তু দৈর্ঘ্য সীমাবদ্ধ হতে পারে যদি এনকোডার অ নির্ণায়ক হয়
Delfad0r

"এনকোডার এবং ডিকোডারকে কোনওভাবেই তথ্য ভাগ করে নেওয়ার অনুমতি নেই" এর মধ্যে কী সহায়ক সহায়ক রয়েছে? অর্থ্যাৎ একটি কাস্টম ফাংশন যা এন ফ্যাকটোরিয়াল প্লাস থ্রি গণনা করে (এলোমেলো উদাহরণ)
পিজ্জাপ্যান্টস 184

আমাদের এনকোডার কি খালি স্ট্রিং / তালিকাটি ফিরিয়ে দিতে পারে?
pizzapants 184

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

উত্তর:


12

জেলি , (17 বাইট + 18 বাইট) × দৈর্ঘ্য 6 = 210 পয়েন্ট

b36μỤỤ + + × 3μŒ¿b3U + S
S: 3_J
S% 3Uḅ3œ? Çḅ36

এটি অনলাইন চেষ্টা করুন! (বা অতিরিক্ত ডিবাগ তথ্য সহ)

উল্লিখিত বিজয় শর্তটি লক্ষ্য করে এই চ্যালেঞ্জটি সমাধান করতে গিয়ে আমি ভেবেছিলাম যে অনুমানের বিকল্প জয়ের শর্তটি গ্রহণ করা আকর্ষণীয় হবে: আউটপুটটির জন্য সর্বনিম্ন সম্ভাব্য সর্বোচ্চ দৈর্ঘ্য দেয়।

ব্যাখ্যা

এনকোডিং

এনকোডিংয়ের প্রথম ধাপটি ইনপুটটি বেস 36 ( b36) হিসাবে উপস্থাপন করা হয় । 36 6 = 2176782336> 2147483647, সুতরাং ফলাফলের ক্ষেত্রে সর্বাধিক 6 ডিজিট থাকবে, যার প্রতিটিই 0-35 এর মধ্যে রয়েছে।

এরপরে, আমরা এটিকে একটি উপস্থাপনায় রূপান্তর করি যাতে different টি ভিন্ন অঙ্ক থাকে। এর জন্য একাধিক সম্ভাব্য অ্যালগরিদম রয়েছে তবে এখানে যেটি ব্যবহার করা হয়েছে তা হ'ল ক্ষুদ্রতম সংখ্যায় 1 যুক্ত করা, দ্বিতীয়-সর্বকনিষ্ঠে 2, তৃতীয়-ক্ষুদ্রতমতে 3 যোগ করা ইত্যাদি। এর অর্থ হ'ল যদি দুটি অঙ্ক একই থাকে তবে তাদের মধ্যে একটির যথেচ্ছভাবে ছোট হিসাবে বিবেচনা করা হবে এবং এইভাবে তারা আলাদা হয়ে যাবে; এবং স্পষ্টতই, এই অ্যালগরিদম দুটি পৃথক অঙ্ক একই হয়ে উঠতে পারে না। জেলিতে এটি উপস্থাপন করার জন্য, আমরা সাজানো ক্রম অনুসারে সূচকের তালিকা পেতে ("মান অনুসারে সূচিগুলি সাজান") ব্যবহার করি ; আবার এটিকে উল্টাতে, কার্যকরভাবে মূলটির প্রতিটি উপাদানকে যথাযথভাবে সাজানো স্থানে ম্যাপিং; এবংµ…+ নতুন তালিকায় মূলটি যুক্ত করতে । ফলাফলটি ইনপুট সংখ্যার 1-141 সীমার ছয়টি ভিন্ন অঙ্ক হিসাবে উপস্থাপন (সর্বনিম্ন 0 + 1, সর্বোচ্চ 35 + 6)।

A: আমরা তখন আরেকটি ফর্ম মধ্যে এই বিভক্ত সাজানো 1-41 সীমার মধ্যে ডিজিটের তালিকা প্রতিনিধিত্ব যা 720 সম্ভব একাধিক বিন্যাসন ডিজিটের ছিল 720 1 থেকে একটি সংখ্যা পাশাপাশি (। Œ¿এবং বিন্যাস সংখ্যা বের হবে এবং সাজানো যথাক্রমে তালিকা।)

পরিশেষে, আমরা সংখ্যাটি 1 থেকে 720 কে বেস 3 ( b3) এ রূপান্তর করি , এটি বিপরীত ( U) করে এবং বিপরীত ডিভোমড (মানটির মান) ব্যবহার করে প্রতিটি একক ASCII অক্ষরে প্যাকিংয়ের মাধ্যমে ছয় বেস 3 সংখ্যা এবং ছয় 1–41 অঙ্কগুলি এনকোড করি Finally মোড 3 অক্ষরটি বেস 3 ডিজিট, 3 দ্বারা বিভক্ত মানটি 1–41 সংখ্যা)। ফলাফলের সম্ভাব্য পরিসীমাটি হ'ল নূন্যতমে (1 + 3) + 0 = 3, এবং (41 × 3) + 2 = 125 সর্বাধিক, আমাদের ASCII সীমার মধ্যে উপযুক্ত। প্যাকিং মাধ্যমে সম্পন্ন করা হয় ×3এবং +একটি অতিরিক্ত সঙ্গে, একসঙ্গে µনিশ্চিত যে প্রতি কমান্ড ডেটার অধিকার বিট করে পরিচালিত করা। (এখানে একটি গল্ফিং ট্রিকস কিছুটা আছে, এর মধ্যে আমরা অনুমান প্রত্যাহার করার আগে 3 দ্বারা গুণ করি ; এটি একটি গ্রুপিং চরিত্রের উপর একটি বাইট ব্যয় করার প্রয়োজনীয়তা সংরক্ষণ করে))

ঘটনাক্রমে, বেস 3 নম্বরটি বিপরীত করার কারণ হ'ল এটির 1-141 সংখ্যার চেয়ে কম সংখ্যা থাকতে পারে। (এর চেয়ে বেশি সংখ্যা থাকতে পারে না; যার জন্য সবচেয়ে কম সংখ্যার জন্য এন !> 3 এন কিছুটা উপরে is এর উপরে থাকে।) জেলি কার্যকরভাবে দুটি লম্বা সংখ্যক সংখ্যক দৈর্ঘ্য যুক্ত করার সময় পিছনে শূন্যগুলি সন্নিবেশ করায় যাতে তাদের মিল মেলে; পেছনের শূন্যগুলি সংখ্যার ব্যাখ্যাকে প্রভাবিত করবে, তবে নেতৃস্থানীয় শূন্যগুলি তা করবে না, তাই অতিরিক্ত শূন্যগুলি কোথাও যাতে আমাদের উত্তর জঞ্জাল না করে তা নিশ্চিত করতে বিপরীতটি ব্যবহার করা হয়।

গঠনের কথা মাথায় রেখে

ডিকোডিংয়ের প্রথম পদক্ষেপটি হ'ল দুটি সংখ্যা বের করা (বেস 3 নম্বর এবং 1 number41 নম্বর)। আমরা যথাক্রমে বিভাগ ( :3) এবং মডিউলো ( %3) দিয়ে তাদের সংখ্যাগুলি সহজেই পেতে পারি , তবে কীভাবে জানতে হবে যে তারা কোন ক্রমে ছিল? ঠিক আছে, 1–41 সংখ্যাটির সাজানো ক্রমে এর অঙ্কগুলি ছিল এবং দুটি সংখ্যার অনুরূপ পজিশনে অঙ্কগুলি একই অক্ষরে সংরক্ষণ করা হয়েছিল; সুতরাং, 1–41 সংখ্যার অঙ্কগুলি কী অর্ডারে পরিবর্তিত হয়েছিল (তাদের আপেক্ষিক মানগুলি দেখে) আমরা কাজ করতে পারি এবং জানি যে বেস -3 সংখ্যার অঙ্কগুলি অবশ্যই একইভাবে বদলে গেছে। প্রকৃতপক্ষে, কারণ আমাদের ASCII এনকোডিংয়ের অক্ষরগুলি 1–41 সংখ্যাটির অঙ্কগুলির মতো একইভাবে বাছাই করে (এগুলি সমস্ত স্বতন্ত্র ছিল এবং তারা বেস 3 সংখ্যার চেয়ে আরও উল্লেখযোগ্য),। সুতরাং উভয় নিষ্কাশন শুরু হয় %3বা এর পরে:3 যথাযথ হিসাবে ।

1-141 সংখ্যার অঙ্কগুলি এখনও সাজানো ক্রমে থাকা অবস্থায়, বেস 36 এর 0-35 অঙ্কগুলিতে ফিরে যাওয়ার জন্য আমাদের খুব সুবিধাজনক / ক্ষুদ্র উপায় আছে; কেবল প্রথম থেকে 1 টি, দ্বিতীয় থেকে 2, তৃতীয়টি থেকে 3 এবং আরও অনেক কিছু বিয়োগ করুন। জেলিতে, আমরা এটি _J("বিয়োগের সূচক") দিয়ে করতে পারি ।

এদিকে, ডিকোডের অন্যান্য শাখায়, আমরা বেস 3 সংখ্যার অঙ্কগুলি পুনরায় ক্রম ( U) তে বিপরীত করি এবং এটি বেস 3 থেকে পিছনে একটি অনুক্রম সূচকে রূপান্তর করি ḅ3

এরপরে আমরা দুটি শাখা একত্রিত করতে পারি œ?Ç; œ?"" এই পারমিটেশন সূচকে প্রদত্ত পারমিট " Çঅর্থ , এবং এর অর্থ" উপরের লাইনটি প্রয়োগের ফলাফল ", অর্থাৎ এটি যা জেলিকে একই ইনপুটটিতে দুটি লাইন পৃথকভাবে চালনা করতে বলে।

আমাদের কাছে এখন যা আছে তা মূল সংখ্যার অঙ্কগুলি, বেস 36 (কারণ কারণে _J) এবং মূল ক্রমে (কারণ কারণে œ?), তাই আমরা কেবল ḅ36বেস 36 থেকে একক পূর্ণসংখ্যায় রূপান্তর করতে একটি করতে পারি ।

ভাষ্য

টিআইও! উপরের লিঙ্কটি এনকোড করতে নম্বর হিসাবে 312699167 ব্যবহার করে। বেস ৩ 36-তে এই সংখ্যাটি [5, 6, 6, 8, 7, 35], এবং এইভাবে এনকোডিংয়ের সমস্ত দিকগুলি দেখায়: 35 টি 0 -127 সীমার সীমাবদ্ধতার পরীক্ষা করে; সদৃশ 6s মূল বেস 36 এ অভিন্ন সংখ্যার রেজোলিউশন পরীক্ষা করে; এবং অঙ্কগুলি প্রায় (তবে যথেষ্ট নয়) অনুসারে বাছাই করা হয়েছে তার অর্থ হ'ল ক্রম সংখ্যাটি খুব সামান্য, এটি বেস ৩ number সংখ্যার চেয়ে অনেক কম অঙ্ক দেয় এবং এইভাবে এটি মূলতে যুক্ত করার আগে এটি বিপরীত করার প্রয়োজন দেখায়।

এখানকার সমস্ত ধ্রুবক একসাথে ফিট করে এটি সত্যিই সুবিধাজনক। 36 6 শুধুমাত্র মাত্র যথেষ্ট উচ্চ 2 মাপসই 31 , 3 6 শুধুমাত্র মাত্র যথেষ্ট উচ্চ 6 মাপসই !, এবং (36 + + 6) × 3 শুধুমাত্র মাত্র যথেষ্ট উচ্চ 128 সম্ভাবনার আমরা আছে মধ্যে মাপসই করা হবে। (এখানে সর্বশেষ প্রতিবন্ধকতা সবচেয়ে কম শক্ত, কারণ আমরা 0-2 পরিসরে অক্ষরের ব্যবহার করতে 1-সূচীকরণের পরিবর্তে 0-সূচক ব্যবহার করতে পারতাম Still তবুও, এটি কেবল বেস হিসাবে 37 ব্যবহার করার জন্য পর্যাপ্ত জায়গা দিতে চাই ৩ 36 এর চেয়ে বেশি)


9

জেলি , ( 4 3 বাইট + 6 5 বাইট) × দৈর্ঘ্য 8 = 80 64 পয়েন্ট

b⁴Ä
ṢŻIḅ⁴

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

জেলি , ( 2 1 বাইট + 4 3 বাইট) দৈর্ঘ্য 10 = 60 40 পয়েন্ট

একটি
ṢŻI

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

ব্যাখ্যা

সমাধান 1

এটি অন্যান্য উত্তরগুলির বেশিরভাগ থেকে পৃথক অ্যালগরিদম ব্যবহার করছে। আমরা b⁴অন্যান্য উত্তরগুলির মতো হেক্সাডেসিমাল ( ) তে মানটি এনকোড করে শুরু করি , তারপরে একটি সংখ্যক যোগফল নেওয়া ( Ä)। প্রতিটি ইনপুট স্পষ্টতই আলাদা আউটপুট দেবে (যেহেতু এই উভয় ক্রিয়াকলাপগুলি বিপরীতমুখী) এবং হেক্সাডেসিমাল এনকোডিংয়ে সর্বাধিক 8 টি সংখ্যার সমন্বয়ে থাকবে যার সর্বাধিক 7 (8 তম-শেষ সংখ্যাটির জন্য) এবং 15 (সর্বশেষ থেকে 7 তম- শেষ সংখ্যাগুলি), আউটপুট তালিকার সর্বাধিক সংখ্যাটি 7+ (7 × 15) = 112, প্রশ্নের প্রয়োজনে 127 এর চেয়ে কম হবে। অতিরিক্তভাবে, আউটপুটটি অগত্যা বাছাই করা হবে যাতে আমাদের এলোমেলো পরিবর্তনের সুযোগ দেয়।

ডিকোডারের জন্য, আমরা প্রথমে একটি বাছাই ( ) দিয়ে শফলটিকে বিপরীত করি ; তারপরে একটি শূন্য ( Ż) প্রদান করে এবং একটানা জোড়ার পার্থক্য গ্রহণ করে ( I); তারপরে হেক্সাডেসিমাল ( ḅ⁴) থেকে ফিরে রূপান্তর করুন ।

সমাধান 2

প্রশ্নটি আসলে আমাদের সংখ্যার (সম্ভবত দশমিক) সংখ্যার তালিকা হিসাবে ইনপুট নিতে দেয়, সুতরাং আমরা কেবল বেস রূপান্তরটি সরিয়ে "প্রতারণা" করতে পারি; আউটপুটে ব্যবহৃত সর্বাধিক সংখ্যাটি তখন 2 + (9 × 9) = 83 হবে (আসলে 82 কারণ 2999999999 সীমার বাইরে রয়েছে, তাই সবচেয়ে খারাপ সম্ভাব্য ইনপুটটি 1999999999)। এই সমস্যাটির এনকোডিংগুলির ফলে ফলাফলযুক্ত এনকোডিংটি বেশ ভয়ঙ্কর, তবে এটি উত্পন্ন করার জন্য খুব ক্ষুদ্র হওয়ার সুবিধা রয়েছে যা এনকোডিংয়ের ক্রিয়াটি ছাড়িয়ে যায়।

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

ভাষ্য

আমার দৈর্ঘ্যের 8 এর নিচে পাওয়ার জন্য কিছু অ্যালগরিদম মনে আছে তবে আপনি you9 বাইট (নন-প্রতারণামূলক) বা ≤5 বাইট (প্রতারণা) দ্বারা দৈর্ঘ্য -7 অ্যালগরিদমটি প্রয়োগ করতে পারছেন বলে মনে হয় না, সুতরাং প্রশ্নের স্কোরিংয়ের দ্বারা এটি সম্ভবত এটি করার সর্বোত্তম উপায়। (বিকল্পের জন্য "এনকোডিংয়ের দৈর্ঘ্য হ্রাস করুন" যাইহোক, কেবল মজাদার জন্য চ্যালেঞ্জের সমাধানে আমি যেতে পারি))

কিছু সমাধানের থেকে পৃথক, এখানে বেস হিসাবে 16 ব্যবহার সমালোচনা নয়; অন্যান্য সংখ্যা রয়েছে যা দৈর্ঘ্য 8 সমাধানের জন্য কাজ করবে (উদাঃ 18)। আমি প্রথম সমাধানের জন্য 16 বেছে নিলাম কেবল কারণ জেলি এর প্রতিনিধিত্ব করার জন্য 1-বাইট উপায় রয়েছে এবং অন্যান্য টেকসই বেসগুলিকে প্রোগ্রাম থেকে একাধিক বাইট ব্যবহার করা প্রয়োজন। অবশ্যই, দ্বিতীয় সমাধানটি লুফোলটি শোষণের জন্য বেস হিসাবে 10 ব্যবহার করা দরকার।

@ ডেনিসকে ধন্যবাদ নতুন কিছু জেলি কমান্ডগুলি নির্দেশ করার জন্য যা এই অ্যালগরিদমকে এমনকি লেখার জন্য আরও ক্ষুদ্র করে তুলেছে।


3
Äসংক্ষিপ্ত +\, Żজন্য সংক্ষিপ্ত 0;
ডেনিস

7

শেক্সপিয়র প্রোগ্রামিং ভাষা , 10 * (264 + 494) = 8650 7910 7580 79

এনকোডার: 264 বাইট

,.Ajax,.Ford,.Act I:.Scene I:.[Exeunt][Enter Ajax and Ford]Ajax:Open mind.Be you nicer zero?You be the sum ofyou the product ofthe sum ofI a big big pig the sum ofa big big big big cat a big big pig.If soSpeak thy.Ford:You are the sum ofyou a cat.If soLet usAct I.

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

ডিকোডার: 494

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Exeunt][Enter Ajax and Ford]Ajax:Open mind.Is you nicer a pig?If soRemember you.If soLet usAct I.Scene V:.Ford:Remember I.Ajax:Recall.Is you worse the sum ofPage twice the sum ofa big big cat a cat?If soYou be the difference betweenyou Page.If soOpen heart.If notlet usScene V.Scene X:.Ford:Recall.Ajax:Be I nicer zero?If soRemember I.If soLet usScene X.[Exit Ajax][Enter Page]Ford:You be the sum ofyou twice twice the sum ofa big big cat a pig.Let usAct I.

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

এটি একটি জিনিস ছিল।

এনকোডার প্রতিটি অঙ্ককে এনকোড করে অঙ্ক হিসাবে আরও বারের বারের অঙ্কের সূচক। ডিকোডার ফোর্ডের স্মৃতিতে সমস্ত ইনপুট সংরক্ষণ করে এবং তারপরে একটি কাউন্টারের উপরে লুপ করে আউটপুট দেয় এবং তারপরে কাউন্টার * 12 + 10 এর চেয়ে কম প্রতিটি অঙ্ক মুছবে।

ব্যাখ্যা:

এনকোডার

,.Ajax,.Ford,.Act I:.Scene I:.      Boilerplate introducing the two characters
[Exeunt][Enter Ajax and Ford]       Enter the two characters Ajax and Ford
                                    Ford will be handling the input
                                    Ajax will be the counter
Ajax:Open mind.                     Set Ford to the next character of input
Be you nicer zero?                  Check if it is EOF
You be the sum of                   Set Ford to the sum of 
    you                             His original value (48 to 58)
    the product of                 
          the sum of               
              I                     Ajax's value
              a big big pig         Minus 4 (this handles the offset of 48)
          the sum of                Multiplied by
              a big big big big cat 2^4
              a big big pig.        + -2^2 = 12
                                    This essentially sets Ford to (F+12*(A-4))
If soSpeak thy.                      If not EOF, print Ford's value
Ford:You are the sum ofyou a cat.   Increment Ajax's value
If soLet usAct I.                   If not EOF, Repeat again.

সঙ্কেতমোচক

,.Ajax,.Ford,.Page,.Act I:.Scene I:.  Boilerplate introducing three characters
                                      Ajax is the spare stack
                                      Ford is the storage stack
                                      Puck is the counter, increasing by 12
[Exeunt][Enter Ajax and Ford]            Enter Ajax and Ford onto the stage
Ajax:Open mind.                          Get the next character of input
Is you nicer a pig?                      If not EOF
If soRemember you.                         Store the value in Ford's memory
If soLet usAct I.                          And repeat the loop
Scene V:.                                Otherwise move to the next scene
Ford:Remember I.                         Store Ford's value (initially -1 from EOF) in Ajax's memory
Ajax:Recall.                             Get the next value from Ford's memory
Is you worse the sum of                  Is the value smaller than
        Puck                                  Puck's value
        twice the sum ofa big big cat a cat?  + 10 ?
                                              i.e. is it the next digit?
If soYou be the difference betweenyou Puck.   If so, subtract Puck's value from Ford
If soOpen heart.                              And print Ford's value
If notlet usScene V.                     If that was not the digit, repeat
Scene X:.
Ford:Recall.                             Get the next value from Ajax's memory
Ajax:Be I nicer zero?                    Until the -1
If soRemember I.                         Returning the values to Ford's memory
If soLet us Scene X.                     Repeat until Ajax's memory is exhausted
[Exit Ajax][Enter Page]                  Swap Ajax and Page
Ford:You be the sum of                   Set Puck's value to
              you                        Puck +   
              twice twice the sum of     2*2*(
                           a big big cat      4
                           a pig.             -1) = 12
Let usAct I.                             And start from the beginning again, having removed one number

5

পাইথন 2.7, 31 * (52 + 37) = 2759

এনকোডার ( 69 52 বাইট):

lambda n:[chr(i)if n&(1<<i)else""for i in range(32)]

ডিকোডার ( 41 37 বাইট):

lambda s:sum([1<<(ord(c))for c in s])

ইনপুট নম্বরটিতে সমস্ত অ-শূন্য বিটকে ascii মান হিসাবে সঞ্চয় করে। আসকি চরিত্রের মান সেট বিটের অবস্থান সঞ্চয় করে। উদাহরণস্বরূপ 'a' মানটির অর্থ would৯ তম বিট সেট হয়েছে।

কয়েকটি উন্নতি, @ ডেলফ্যাড0r কে ধন্যবাদ

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


পিপিজিসিতে আপনাকে স্বাগতম! আপনি শুরুতে e = এবং ড্রপ করতে পারেন d = - বেনামে ফাংশনগুলি পুরোপুরি ভাল। এছাড়াও, নোট করুন যে সমস্যার বিবৃতিটি পরিষ্কারভাবে বলেছে যে এনকোডার অক্ষরের পরিবর্তে পূর্ণসংখ্যার একটি তালিকা ফিরিয়ে দিতে পারে, তাই আপনি রূপান্তর পূর্ণসংখ্যার-> চরিত্র-> পূর্ণসংখ্যার এড়াতে পারেন। তাছাড়া, আপনি এর n&(1<<i)পরিবর্তে n&(1<<i)>02 টি বাইট ব্যবহার করতে পারেন এবং সংরক্ষণ করতে পারেন । অবশেষে, i(127) এর জন্য উপরের সীমানাটি খুব বেশি, 32 যথেষ্ট এবং 1 বাইট সংরক্ষণ করে।
ডেল্ডাড0

1
সমস্যা বিবৃতিতে স্কোরিং বিভাগ অনুযায়ী আপনার স্কোর লিখুন ।
ডেল্ডাড0

@ ডেল্ডাড0r এখন স্কোরিংটি কি সঠিক? এবং টিপস জন্য ধন্যবাদ।
হেইন ওয়েসেলস

আমি মনে করি স্কোরটি (52+37)*31=2759দীর্ঘতম যেহেতু সমস্ত 31 বিট সেট করা হয়।
জোনাথন অ্যালান

এনকোডারটি lambda n:[chr(i)*(n&1<<i>0)for i in range(32)]6 বাইট সংরক্ষণ করতে পারে ।
মাইপটেলিয়ন

5

স্ট্যাক্স , স্কোর 8 × (10 + 9) = 152

এনকোডার, 10 বাইট

Ç·MÉJ'♀τ│½

এটি চালান এবং এটি ডিবাগ করুন

16|E{i16*+m Full program, implicit input
16|E        Get hexadecimal digits
    {     m Map:
     i16*+    Add 16 * loop index
            Implicit output as string

এনকোডার একটি ক্রমবর্ধমান ক্রমে স্ট্রিং আউটপুট করে।

ডিকোডার, 9 বাইট

üL∟n╫k∞‼9

এটি চালান এবং এটি ডিবাগ করুন

o{16%m16|E Full program, implicit input
o          Sort string
 {16%m     Module each element by 16
      16|E Interpret as array of hex digits


5

পাইথন 3 , 8 * (45 + 38) = 664

এনকোডার (45 বাইট):

lambda n:[16*i+(n>>4*i)%16 for i in range(8)]

ডিকোডার (38 বাইট):

lambda l:sum(x%16<<x//16*4 for x in l)

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


1
আপনি "জন্য" এর আগে স্পেসগুলি সরিয়ে ফেলতে পারেন, lambda l:sum(x%16<<x//16*4for x in l)ঠিকঠাক কাজ করে :)
ফ্যাটালরর

4
এটা কাজ করে না. আউটপুট সরল ASCII নয় (০.১২২ the এর মধ্যে রয়েছে)
জিবি

2
@ জিবি আমার ভুল আমি আমার শেষ সম্পাদনা দিয়ে এটি ভেঙেছি। এখনই ফেরানো হচ্ছে
কার্টিস বেচটেল

এনকোডার 3 বাইট সংরক্ষণ করুন: lambda n:[n>>4*i&15|i<<4for i in range(8)]এবং 1 ডিকোডার মধ্যে: lambda l:sum(x%16<<x//16*4for x in l)632 মোট স্কোর জন্য
হারুন

4

জাভাস্ক্রিপ্ট (ES6), 8 * (40 + 32) = 576

এনকোডার একটি অ্যারের আউটপুট করে 0 থেকে 8পূর্ণসংখ্যার। ডিকোডারটি ইনপুট হিসাবে একই বিন্যাস গ্রহণ করে।

এনকোডার (40 বাইট)

E=(n,k=0)=>n?[k|n&15,...E(n>>4,k+16)]:[]

ডিকোডার (32 বাইট)

s=>s.map(c=>s|=c%16<<(c/4&~3))|s

ডেমো

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

কিভাবে?

ইনপুটটি 4 টি বিটের 8 টি ব্লকে বিভক্ত এবং প্রতিটি ব্লক 16 টি অক্ষরের মধ্যে 1 দিয়ে এনকোড করা হয়েছে। সর্বশেষ ব্লকের সবচেয়ে উল্লেখযোগ্য বিটটি কখনও সেট করা হয় না।

       3222222222211111111110000000000
bit:   0987654321098765432109876543210
       \_/\__/\__/\__/\__/\__/\__/\__/
block:  7  6   5   4   3   2   1   0

block #0 is encoded with char. 00 to 0F (NUL to SI)
block #1 is encoded with char. 10 to 1F (DLE to ES)
block #2 is encoded with char. 20 to 2F (' ' to '/')
block #3 is encoded with char. 30 to 3F ('0' to '?')
block #4 is encoded with char. 40 to 4F ('@' to 'O')
block #5 is encoded with char. 50 to 5F ('P' to '_')
block #6 is encoded with char. 60 to 6F ('`' to 'o')
block #7 is encoded with char. 70 to 77 ('p' to 'w')

4

জেলি , (8 + 9) বাইট * 8 সর্বাধিক দৈর্ঘ্য = 136

b⁴+J’Ɗ⁴¡

এনকোডার (ফুটারটি পাইথনের হিসাবে তালিকাটি ফর্ম্যাট করে যা স্পষ্টতার জন্য)

Ṣ_J‘Ɗ⁴¡ḅ⁴

সঙ্কেতমোচক

তাত্ত্বিকভাবে সর্বাধিক ছয় দৈর্ঘ্য থাকা সম্ভব, এটি কি 22 বাইট বা তার চেয়ে কম ক্ষেত্রে করা যেতে পারে?

যেহেতু সর্বোচ্চ দৈর্ঘ্যের পাঁচটি এটি অসম্ভব Σআমি=0আমি=5(127+ +আমি127)=321402081<231-1

কিভাবে?

থেকে 231-18 টি হেক্সাডেসিমাল ডিজিটের ( 7fffffffবা [7,15,15,15,15,15,15,15]) হিসাবে এনকোডেবল আমরা এরপরে ডানদিকের মানটিও (যেমন ) রাখার সময় এই জাতীয় রূপান্তরটি সর্বদা সাজানো ক্রমে থাকে তা নিশ্চিত করার জন্য আমরা 16 দ্বারা গুণিত প্রতিটি হেক্স-অঙ্কের শূন্য-ভিত্তিক সূচক যুক্ত করতে পারি [7,15,15,15,15,15,15,15] + [0,16,32,48,64,80,96,112] = [7,31,47,63,79,95,111,127]। ডিকোডিং এর পরে এই একই প্রক্রিয়াটি বিপরীত হয়।

এনকোডার :

b⁴+J’Ɗ⁴¡ - Link: integer, n    e.g. 1234
 ⁴       - literal 16               16          
b        - convert to base          [4,13,2]
       ¡ - repeat...
      ⁴  - ...16 times:
     Ɗ   -   last 3 links as a monad:
   J     -     range of length        [1,2,3]     iter 2    iter 3    ...  iter 16
  +      -     add                    [5,15,5]   [5,16,7]   [5,17,9]  ...  [5,30,35]
    ’    -     decrement              [4,14,4]   [4,15,6]   [4,16,8]  ...  [4,29,34]
         -                                                                 [4,29,34]

ডিকোডার :

Ṣ_J‘Ɗ⁴¡ḅ⁴ - Link: list of integers   e.g. [29,34,4]
Ṣ         - sort                          [4,29,34]
      ¡   - repeat...
     ⁴    - ...16 times:
    Ɗ     -   last 3 links as a monad:
  J       -     range of length           [1,2,3]
 _        -     subtract                  [3,27,31]   [3,26,29]   [3,25,27]  ...  [3,12,1]
   ‘      -     increment                 [4,28,32]   [4,27,30]   [4,26,28]  ...  [4,13,2] 
        ⁴ - literal 16                    16
       ḅ  - from base                     1234

"হেক্সাডেসিমাল ডিজিটস", নিশ্চিত। ("প্লেইন হেক্সাডেসিমাল ব্যবহার করে অঙ্কগুলি" দীর্ঘতর এবং একক "অঙ্কগুলি "ই
দশমিককে

আমি তখনই পরিবর্তন করেছি যদিও এটি প্রসঙ্গে থেকে স্পষ্ট হওয়া উচিত ছিল কারণ আমি তত্ক্ষণাত্ হেক্স-অঙ্কগুলি উল্লেখ করেছি।
জোনাথন অ্যালান

আপনার গণনা এক এক বন্ধ আছে: সর্বাধিক দৈর্ঘ্যের 5, এবং 7177979809 সর্বাধিক 6 দৈর্ঘ্যের সাথে প্রতিস্থাপনের সাথে 321402081 সংমিশ্রণ রয়েছে
অ্যান্ডারস কাসেরগ

@ আন্ডারস ক্যাসরগ উফ্, তাই এটি - সুতরাং এটি সর্বোচ্চ সর্বাধিক দৈর্ঘ্যের 6 টি দিয়ে ... 22 টি বাইট দিয়ে খেলতে দেওয়া সম্ভব!
জোনাথন অ্যালান

4

শেক্সপিয়ার প্রোগ্রামিং ল্যাঙ্গুয়েজ , 31 * (472 + 383 379 344) = 26505 26381 25296

পূর্ববর্তী স্কোর: 16909322 * (246 + 217) = 7829016086

এটি এখনও খুব বেশি, তবে আমি এই মুহূর্তে সবচেয়ে কম চিন্তা করতে পারি।

এনকোডার:

,.Ajax,.Ford,.Act I:.Scene I:.[Enter Ajax and Ford]Ajax:Remember a pig.Ford:Listen tothy.Scene V:.Ajax:Remember the remainder of the quotient betweenI a big cat.Ford:You be the quotient betweenyou a big cat.Be you nicer zero?If solet usScene V.Remember a pig.Scene X:.Ajax:Recall.Ford:Am I worse zero?If notremember I.If notlet usScene X.Ajax:You zero.Scene L:.Ford:Recall.Ajax:You be the sum ofyou a cat.Am I nicer zero?If sospeak thy.Am I worse zero?If notlet usScene L.

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

সঙ্কেতমোচক:

,.Ajax,.Ford,.Page,.Act I:.Scene I:.[Exeunt][Enter Ajax and Ford]Ajax:You cat.Ford:Open mind.Remember the sum ofyou I.Scene V:.Ajax:Am I nicer a cat?If soyou be twice you.Ford:If soyou be the sum ofyou a pig.If solet usScene V.[Exit Ford][Enter Page]Page:Recall.Ajax:Am I worse a cat?If notyou be the sum ofyou Ford.If notlet usAct I.Open heart

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

মূলত, যদি স্ট্রিংটিতে ASCII কোড (এন + 1) এর সাথে একটি অক্ষর থাকে তবে নবম বাইনারি অঙ্ক সেট করা হয়।


ডিকোডারের জন্য 344 বাইট
জো কিং

3

পাইথন 3, (208 বাইট + 200 বাইট) * 6 দৈর্ঘ্য = 2448

এটি অনলাইন চেষ্টা করুন! (উভয়ই রয়েছে, অতিরিক্ত বাইট হ'ল তাদের মধ্যে নতুন লাইন)।

-4 বাইট (-24 স্কোর) খালি তালিকা ব্যবহার করে (যা আরও বেশি কিছু 0 থেকে শুরু করতে দেয়)

এনকোডার (208 বাইট)

def E(n,h=128):
    T=lambda n,d:n*T(n+1,d-1)//d if d>1else d and n or 1
    d=l=0
    s=[]
    while n>=T(h,d):
        n-=T(h,d)
        d+=1
    for i in range(d):
        while n>=T(h-l,d+~i):
            n-=T(h-l,d+~i)
            l+=1
        s+=[l]
    return s

ডিকোডার (২০০ বাইট)

def D(s):
    T=lambda n,d:n*T(n+1,d-1)//d if d>1else d and n or 1
    s.sort()
    l=0
    d=len(s)
    n=sum(T(128,D)for D in range(d))
    for i in s:
        for j in range(l,i):
            n+=T(128-j,d-1)
        l=i
        d-=1
    return n

পর্যবেক্ষণ:

  • কঠোরভাবে বৃদ্ধি না করার জন্য (অর্থাৎ বাছাই করা) তালিকার জন্য শফলিং ক্ষতিহীনভাবে বিপরীত হতে পারে।

  • কঠোরভাবে একই দৈর্ঘ্যের সংখ্যাবৃদ্ধির তালিকা সম্পূর্ণরূপে অর্ডার করা যেতে পারে (তারা পাইথন হিসাবে রয়েছে)।

  • আমরা সংজ্ঞায়িত করতে পারি যে তালিকাগুলিকে প্রথমে সমস্ত সাজানো তালিকার মোট ক্রম গঠনের জন্য দৈর্ঘ্য অনুসারে আদেশ করা হয়েছে।

  • যদি আমরা সংজ্ঞায়িত করে এমন একটি তালিকায় শুধুমাত্র বৈধ মান থেকে পূর্ণসংখ্যা আমরা এই তালিকার একটি সূচিযোগ্য ক্রম গঠন করতে পারেন 0করতে 127সমেত (অর্থাত দৈর্ঘ্য সঙ্গে বৈধ তালিকা একটি সসীম সংখ্যা বিদ্যমান আছে L)।

কৌশল:

  • এনকোডার: একটি নম্বর দেওয়া N, এটি সঠিকভাবে Nক্রমবর্ধমান তালিকাটি সন্ধান করুন।

  • ডিকোডার: একটি (বদলে দেওয়া) বৈধ তালিকা দেওয়া হয়েছে, এটি বাছাই করুন এবং বৈধ তালিকাগুলির ক্রম অনুসারে এর সূচকটি ফেরত দিন।

সাধারণ কোড ব্যাখ্যা:

  • T=lambda n,d:n*T(n+1,d-1)//d if d>1else d and n or 1

  • গণনা nd-simplex সংখ্যা

    • জন্য d=0, সর্বদা1

    • জন্য d=1, n(দৈর্ঘ্যের সাথে বিন্দুগুলির একটি লাইনে বিন্দুর সংখ্যা n)

    • জন্য d=2,Σআমি=1এনআমি, (পাশের দৈর্ঘ্যের সাথে বিন্দুর ত্রিভুজের বিন্দুর সংখ্যা n)

    • জন্য d=3,Σ=1এনΣআমি=1আমি, (পাশের দৈর্ঘ্যের সাথে বিন্দুর একটি টেট্রহেড্রনে বিন্দুর সংখ্যা n)

এনকোডার ব্যাখ্যা:

  • def E(n,h=128): d=l=0, s=[]

  • nইনপুট নম্বরটি hহ'ল "উচ্চ মান" (অর্থাৎ সর্বোচ্চ সংখ্যা অনুমোদিত + 1), dআউটপুট হবে দৈর্ঘ্য, sআউটপুট, l"নিম্ন মান" (আরও পরে ব্যাখ্যা করা হয়েছে)

  • while n>=T(h,d):, n-=T(h,d),d+=1

  • এখানে T(h,d)বৈধ দৈর্ঘ্য- dতালিকাগুলি রয়েছে এবং যদি আমাদের প্রকৃত সূচকের পরিবর্তে nতালিকার [0]*dসাথে সূচক (সূচকে 0) সম্পর্কিত হয় তবে আমাদের গণনা আরও সহজ naccording এটি প্রদত্তের dজন্য সঠিক হতে অ্যাডজাস্ট (দৈর্ঘ্য) n

  • for i in range(d):

  • কার্যকরভাবে: "তালিকার i+1তম সংখ্যাটির জন্য "

    • এইখানেই আমি ব্যাখ্যা করব l, "কম মান"

    • একটি সংখ্যা তালিকায় রাখার পরে, তালিকাতে এটি সংখ্যার চেয়ে কম কোনও সংখ্যা রাখা যাবে না (এটিকে সাজানোর জন্য), lতালিকায় যুক্ত হওয়া শেষ সংখ্যাটিও তাই ।

    • while n>=T(h-l,d+~i):, n-=T(h-l,d+~i),i+=1

    • যদি এই "অঙ্ক" এ nএনকোড করা খুব বড় হয় l, তবে nসেই অনুযায়ী এবং বর্ধিত করুনl

    • s+=[l]

    • এই "অঙ্ক" এ nএকটি দিয়ে এনকোড করুন l

    • প্রথমে, আমাদের hপরবর্তী "অঙ্ক" রাখার বিকল্প রয়েছে, তবে একবার আমরা "অঙ্ক" রাখি (যা নির্ধারিত হয় l) আমরা h-lপরবর্তী "অঙ্ক" এর বিকল্পগুলির মধ্যে সীমাবদ্ধ ।

    • প্রথমে T(h,d)বৈধ তালিকাগুলি ছিল, তবে আমরা একটি "অঙ্ক" যুক্ত করেছি l, "অঙ্ক" বামে রেখেছি d-1এবং বৈধ পরবর্তী "অঙ্কগুলি" এর সংখ্যা হ্রাস করবh-l হ'ল বৈধ , সুতরাং এর পরে বৈধ তালিকার সংখ্যাT(h-l,d-1)

ডিকোডার ব্যাখ্যা:

  • def D(s):, s.sort(),l=0 ,d=len(s)

  • s(শিফলেড) ইনপুট তালিকা, তাই s.sort()এটি; lহ'ল "নিম্ন মান" ( h"উচ্চ মানের" 128কোডটি বাইট সংরক্ষণ করার জন্য কেবল আক্ষরিক s), nআউটপুট নম্বর, dদৈর্ঘ্য।

  • n=sum(T(128,D)for D in range(d))

  • nএর অনুক্রমের বিন্দুটি সামঞ্জস্য করুন[0]*length

  • for i in s:

  • প্রতিটি অঙ্কের জন্য:

    • for j in range(l,i):, n+=T(128-j,d-1)

    • nএর অনুক্রমের বিন্দুটি সামঞ্জস্য করুন[...prevdigits, thisdigit, 0...]

      • l=i: "সর্বনিম্ন অঙ্কে" কম মান "সেট করুন

      • d-=1: যেহেতু আমরা একটি ডিজিট ব্যবহার করেছি দৈর্ঘ্য হ্রাস করুন

  • return n: পরে nসমস্ত অঙ্কের জন্য সামঞ্জস্য করা হয়েছে, এটি সঠিক সংখ্যা; দাও.

দুঃখিত যদি এটি পরিষ্কার না হয় তবে এখানে আমার আসল নংলোগল্ড ডিবাগ সংস্করণটি এটি অনলাইনে চেষ্টা করুন! , যা খালি তালিকা ব্যবহার করে না, তাই এই সংস্করণে ব্যবহৃত সমস্ত সংখ্যা থেকে 1 টি বন্ধ


3

রুবি , (36 + 29 বাইট) * 8, স্কোর 520

এনকোড:

->n{(0..7).map{|x|(n>>x*=4)%16+x*4}}

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

ডিকোড:

->a{a.sum{|x|x%16<<(x/4&28)}}

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

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

সংখ্যাটি 4-বিট খণ্ড এবং 3-বিট সূচক ব্যবহার করে এনকোড করা হয়।

ডিকোডার ইনপুট অ্যারে নেয় এবং প্রতিটি স্তন্যপানটিকে তার জায়গায় আবার রাখে।


3

কাঠকয়লা , স্কোর 10 * (10 + 15) = 250।

দশমিক ব্যবহার করে; পূর্ববর্তী বেস 16-ভিত্তিক সমাধান 328 296 264 স্কোর করেছে ।

মুদ্রণযোগ্য অক্ষরগুলি আউটপুট করতে পারে। বিশেষত, চরিত্র দশটি চারকোলে ইনপুট দেওয়ার জন্য জটিল।

এনকোডার, 10 বাইট:

⭆⮌S℅⁺Iι×χκ

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।

ডিকোডার, 15 বাইট:

IΣES×﹪℅ιχXχ÷℅ιχ

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।

পূর্ণসংখ্যার স্কোর 360 এর তালিকা ব্যবহার করে সংস্করণ 296 (বেস 16; দশমিক 310 হবে):

এনকোডার, 19 বাইট:

NθIE⁸⁺﹪÷θX¹⁶ι¹⁶×¹⁶ι

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।

ডিকোডার, 18 বাইট:

IΣEE⁸N×﹪ι¹⁶X¹⁶÷ι¹⁶

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।

মুদ্রণযোগ্য অক্ষরগুলির স্কোর 360 ব্যবহার করে সংস্করণ (যা ছিল 416 384 বেস 16 368 ):

এনকোডার, 19 বাইট:

⭆⮌S℅⁺Iι×χ⁺κ×⁵⊕׳÷κ⁵

এটি অনলাইন চেষ্টা করুন!লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।

ডিকোডার, 17 বাইট:

Fθ⊞υ⌈Φθ¬№υκ⭆υ﹪℅ιχ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ।


2

ব্র্যাচল্যাগ , 17 + 18 বাইট * 8 দৈর্ঘ্য = 280

এনকোডার:

ḃ₁₆I∧7⟧₁;Iz₁~ḃ₁₆ᵐ

সঙ্কেতমোচক:

ḃ₁₆I∧7⟧₁;Iz₁~ḃ₁₆ᵐp

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

যদি কোনও (সঠিকভাবে প্রয়োগ করা হয়) संचयी যোগফলের পূর্বাভাস থাকে তবে স্কোরটি 20 এ নেমে যেতে পারে

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


@ ডেলফ্যাড0r এনকোডারে পি যুক্ত করা এটি এনকোডিং এবং ডিকোডিংয়ের জন্য একই কোড হিসাবে তৈরি করবে
ক্রপ্পেব

2

05 এ বি 1 ই , স্কোর: (2 + 2 বাইট ) * 11 সর্বোচ্চ দৈর্ঘ্য = 44

এনকোডার (2 বাইট ):

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

ডিকোডার (2 বাইট ):

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

এনকডারের ইনপুট এবং ডিকোডারের আউটপুট হল অঙ্কগুলির একটি তালিকা।

@ আইস 523 এর দ্বিতীয় জেলি উত্তরটির পোর্ট ।

ব্যাখ্যা:

    # Undelta (automatically prepends a 0)
      #  i.e. [3,0,4,7,8,2,0,1,9] → [0,3,3,7,14,22,24,24,25,34]

{     # Sort
      #  i.e. [14,7,22,25,24,3,0,24,34,3] → [0,3,3,7,14,22,24,24,25,34]
 ¥    # Deltas
      #  i.e. [0,3,3,7,14,22,24,24,25,34] → [3,0,4,7,8,2,0,1,9]

কারণ prepends আউটপুট করার জন্য একটি শূন্য, আউটপুট দৈর্ঘ্য ইনপুট + 1 যেহেতু এর দৈর্ঘ্য হল231-1 10 ডিজিট দৈর্ঘ্য আছে, আউটপুট সর্বোচ্চ দৈর্ঘ্য 11।


2

গোল> <> , 8 * (14 + 13) = 216

এনকোডার এটি অনলাইনে চেষ্টা করুন! , 14 বাইট:

I8FfPSD8*L+o|;

ডিকোডারটি অনলাইনে চেষ্টা করে দেখুন! , 13 বাইট:

iEh8SD4*2$X*+

যেহেতু এটি ছাপানো অ্যাস্কি অক্ষরগুলি আউটপুট দিতে পারে, সুতরাং ডিকোডারের সাথে জগাখিচুড়ি, আউটপুট / ইনপুটটিতে সংখ্যা ব্যবহার করে এখন একটি সংস্করণ রয়েছে:

এনকোডার এটি অনলাইনে চেষ্টা করুন! , 14 বাইট:

I8FfPSD8*L+N|;

ডিকোডারটি অনলাইনে চেষ্টা করে দেখুন! , 13 বাইট:

IEh8SD4*2$X*+

এনকোডিং:

প্রদত্ত সংখ্যাটি 8 x 4 বিট খণ্ডে বিভক্ত করে এনকোডিং কাজ করে। এই অংশগুলি ঠিক তখন 3 বিট দ্বারা স্থানান্তরিত হয় এবং খণ্ডটির মূল অবস্থানটি 0 এবং 7 এর মধ্যে একটি সংখ্যা হিসাবে শেষে সংযোজন করা হয় Thus সুতরাং এনকোডিংটি দেখে মনে হচ্ছে:

0AAAABBB
 |__|    -> the original part of the number
     |_| -> the position of the chunk inside the original number 0 = LSB and 7 = MSB

2

পার্ল 6 , 10 * (10 + 12) = 340 220

এনকোডার:

{^@_ Z~@_}

সঙ্কেতমোচক:

{.sort X%10}

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

এনকোডার ফাংশনটি সংখ্যার 0-সূচী সহ প্রতিটি সংখ্যা জিপ করে। তারপরে এনকোডার সংখ্যার তালিকাকে বাছাই করে এবং 10 দ্বারা মডুলো পায়, অন্য কথায় সংখ্যার দ্বিতীয় সংখ্যা।

মোটটি 10, যেহেতু এটি সর্বোচ্চ দৈর্ঘ্য 2 31 -1।


1

হাস্কেল , 10 * (23 + 51) = 740

এখানে এমন একটি প্রোগ্রাম যা এনকোড, পরিবর্তন, ডিকোড এবং মানগুলি বৈধ করে: এটি অনলাইনে চেষ্টা করুন!

এনকোডার, 23 বাইট

zipWith((+).(10*))[0..]

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

ডিকোডার, 51 বাইট

map snd.sortOn fst.map(`divMod`10)
import Data.List

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

ব্যাখ্যা

যেহেতু আমাদেরকে দশমিক অঙ্ক হিসাবে ইনপুট ব্যবহার করার অনুমতি দেওয়া হয়েছে, আমরা এটি ব্যবহার করব .. এনকোডারটি প্রতিটি সংখ্যাকে ম্যাপ করে যা ঘটেছিল 10*index + digit, নোট করুন যে digitসমস্তগুলি এতে থাকবে[0..9] তাই আমরা ব্যবহার করে উপরেরটি বিপরীত করতে পারিdivMod । সূচকগুলি এবং অঙ্কগুলি পুনরুদ্ধার করার পরে সূচকগুলি অনুসারে বাছাই করা এবং সেগুলি থেকে মুক্তি পাওয়ার বিষয়টি।

সমাধানটি পর্যন্ত মানগুলির জন্য কাজ করবে বলে আশা করা হচ্ছে 231-1=2147483647 যা 10 সংখ্যার দীর্ঘ, সুতরাং আমাদের পাওয়া সর্বোচ্চ কোড-পয়েন্ট হবে 99=81<128। এছাড়াও প্রতিটি সংখ্যা একটি "চরিত্র" এ রূপান্তরিত হবে, সুতরাং আমরা সর্বোচ্চ 10 এর দৈর্ঘ্য সহ শেষ করব।


1

ভুট্টা , 10 * (7 + 8) = 150

কেবলমাত্র পর্যবেক্ষণের সাথে আমার হাস্কেল দ্রবণটির সোজা বন্দর 109=90<128(হুস্কস N1-ভিত্তিক):

এনকোডার, 7 বাইট

zo+*10N

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

ডিকোডার, 8 বাইট

m→Ö←m‰10

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


1

এপিএল (ডায়ালগ ইউনিকোড) ,এল+ +এলডি=36;একজন=8288

d←{16n-16×⍳≢n←⍵[⍋⍵]}
e←(⊢+16×⍳∘≢)16⊥⍣¯1

এটি অনলাইন চেষ্টা করুন! (অ্যাসাইনমেন্ট এবং নতুন লাইনের জন্য 5 অতিরিক্ত বাইট রয়েছে)।

ব্যবহারসমূহ ⎕IO←0

কিভাবে:

(⊢+16×⍳∘≢)16⊥⍣¯1  Encoder; input 1234
          16⊥⍣¯1  Convert input to base 16  4 13 2
      ⍳∘≢           [0..length of the list-1]  0 1 2
   16×              times 16  0 16 32
 ⊢+                 plus the original list  4 29 34

{16n-16×⍳≢n←⍵[⍋⍵]}  Decoder; input   34 4 29
              [⍋⍵]   Grade  up  2 0 1
                    Index  with that list  4 29 34
           n        assign that to n
      16×⍳≢          16×[0..length(n)-1]  0 16 32
    n-               subtract that from n  4 13 2
 16                 Decode from base 16  1234

1

পিএইচপি, 8 * (44 + 53) = 776

এনকোডার, 44 বাইট:

for(;$n=&$argn;$n>>=4)echo$n&15|16*$i++," ";

পূর্ণসংখ্যার স্থান পৃথকীকরণের তালিকা মুদ্রণ করে। পাইপ হিসাবে চালান -nR

4 ডেটা বিট (নিম্ন স্তনবৃন্ত) এবং 3 ওজন বিট (উচ্চ স্তম্ভিত) সহ সর্বাধিক 8 বাইট


সোজা কথায় : প্রতিটি হেক্স ডিজিটকে একটি নিজস্ব চরিত্রে রাখুন এবং অঙ্কের অবস্থান সঞ্চয় করতে বাইটের উপরের অর্ধেকটি ব্যবহার করুন।

উদাহরণ:

1457893891( 0x56e5b203) পরিণত হবে
0x03, 0x10, 0x22, 0x3b, 0x45, 0x5e, 0x66, 0x75
3 16 34 59 69 94 102 117

ডিকোডার, 53 বাইট:

while($i++<8)$n+=(15&$x=$argv[$i])<<($x>>4)*4;echo$n;

অথবা

while($i++<8)$n+=(15&$x=$argv[$i])<<($x/4&~3);echo$n;

অথবা

for(;$i<9;$x=$argv[++$i])$n+=$x%16<<($x/4&~3);echo$n;

কমান্ড লাইন আর্গুমেন্ট থেকে পূর্ণসংখ্যার নিতে। সাথে চালাও -nr


অনলাইনে এগুলি ব্যবহার করে দেখুন


0

পাইথন 2 , 10 * (68 + 54) = 1220

e=lambda n:"".join(chr(int(`i`+j))for i,j in enumerate(`n`)if j<'L')
d=lambda s:int("".join(`ord(c)%10`for c in sorted(s)))

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

সম্পাদনা: পয়েন্টারগুলির জন্য জো কিংকে ধন্যবাদ - আমি কেন 32 জনের পিছনে পিছনে ফিরে আসছি তা নিশ্চিত নয়।

[স্থান] (পজিশন 0, মান 0) দিয়ে শুরু করে একক অক্ষর হিসাবে প্রতিটি জায়গার অবস্থান এবং মানকে এনকোড করে NUL বাইট 0x0 ।

ডিকোড দ্বারা:

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

আপনার কি 32অফসেট দরকার ? এছাড়াও, পরিবর্তে সঠিক জায়গায় [-1]হতে পারে%10
জো কিং

0

সি (জিসিসি) , 10 * 112 = 1120

c,i;e(i,s)char*s;{for(c=1;i;c+=10,i/=10)*s++=c+i%10;*s=0;}
d(char*s){for(i=0;c=*s++;i+=--c%10*pow(10,c/10));s=i;}

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

আমার কাছে গ্লোবাল ভেরিয়েবল রয়েছে তবে তারা দুটি ফাংশনের মধ্যে কোনও তথ্যই দিচ্ছে না। এর জন্য পরিবর্তনীয় ঘোষণাটি cকোডের দৈর্ঘ্যে আমাকে 2 বাইট সংরক্ষণ করে উভয় ফাংশনে ব্যবহৃত হয়।

একটি সংস্করণ যা কেবলমাত্র 3 5 বাইট জরিমানার জন্য প্রিন্টযোগ্য ASCII ব্যবহার করে তা এখানে:

c,i;e(i,s)char*s;{for(c=32;i;c+=10,i/=10)*s++=c+i%10;*s=0;}
d(char*s){for(i=0;c=*s++;i+=(c-=32)%10*pow(10,c/10));s=i;}

70 পয়েন্ট উন্নতির জন্য @ সাইলিংক্যাট ধন্যবাদ।

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