এএসসিআইআই বিভক্ত করা হচ্ছে


33

এএসসিআইআই প্লাস নিউলাইনে 95 টি মুদ্রণযোগ্য অক্ষর দেওয়া হয়েছে, এটি দুটি সমান, 48 টি চরিত্রের গোষ্ঠীতে বিভক্ত করুন (এরপরে গ্রুপ এ এবং গ্রুপ বি নামে পরিচিত)। দুটি গ্রুপের মধ্যে আপনার পছন্দের এক থেকে এক ম্যাপিং তৈরি করুন (আপনার সম্পূর্ণ বিচক্ষণতা রয়েছে)। অন্য কথায়, Aমানচিত্র করতে পারে aএবং তদ্বিপরীত Aহতে পারে , তবে মানচিত্র >এবং এর বিপরীতে হতে পারে, যদি এটি আপনার প্রোগ্রামের জন্য আপনার প্রয়োজন হয়।

একবার আপনি ASCII কে দুটি গ্রুপে ভাগ করে নিলে, প্রতিটি গ্রুপের কেবলমাত্র অক্ষর ব্যবহার করে যথাক্রমে দুটি প্রোগ্রাম এবং / অথবা ফাংশন লিখুন। অন্য কথায়, একটি প্রোগ্রাম / ফাংশন লিখুন যা কেবলমাত্র গ্রুপ এ এর ​​অক্ষর ব্যবহার করে এবং অন্য প্রোগ্রাম / ফাংশন যা কেবলমাত্র গ্রুপ বি এর অক্ষর ব্যবহার করে write

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

এটি এতটা পরিষ্কার নাও হতে পারে, সুতরাং এখানে একটি উদাহরণ দেওয়া হল। আপনি যদি ধরে নেন যে সমস্ত বড় হাতের অক্ষর A গ্রুপে রয়েছে এবং সমস্ত ছোট অক্ষর বি গ্রুপে রয়েছে এবং আপনি বেছে নিয়েছেন যে এই বর্ণগুলির জন্য আপনার এক-এক-এক ম্যাপিং হ'ল: তবে এখানে কিছু দেওয়া হল নমুনা ইনপুট / আউটপুট:

প্রোগ্রাম এ:

Input    Output
A        A
D        D
a        A
q        Q

প্রোগ্রাম বি:

Input    Output
A        a
D        d
a        a
q        q

অন্যান্য নিয়ম:

  • দুটি প্রোগ্রাম একই ভাষায় হওয়ার দরকার নেই।
  • তাদের উভয় প্রোগ্রাম বা উভয় ফাংশন হওয়ার দরকার নেই; একটি প্রোগ্রাম হতে পারে, অন্যটি একটি ফাংশন, এটি ভাল।
  • তাদের একইভাবে কাজ করার দরকার নেই, একই দৈর্ঘ্যের হতে হবে, এরকম কিছু হতে পারে; তাদের অবশ্যই উপরের অন্যান্য বিধিগুলি মেনে চলতে হবে।
  • হ্যাঁ, আপনার প্রোগ্রামগুলির মধ্যে একটিতে নিউলাইনগুলি ব্যবহার করা যেতে পারে এবং কেবল একটিই স্পেস ব্যবহার করতে পারে (এটি একই বা অন্য কোনও প্রোগ্রাম হতে পারে)।
  • আপনার প্রতিটি প্রোগ্রামে সমস্ত 48 টি অক্ষর ব্যবহার করার দরকার নেই।

স্ট্যান্ডার্ড লুফোলগুলি স্বাভাবিক হিসাবে নিষিদ্ধ করা হয়। সমস্ত প্রোগ্রাম অবশ্যই স্বত: অন্তর্ভুক্ত থাকতে হবে, আপনার পছন্দমতো ম্যাপিংয়ের ফাইল নেই।

স্কোরিং মানদণ্ড: । বিশেষত, দুটি প্রোগ্রামের পাঠ্যের বাইটের যোগফল।

আপনার উত্তর পোস্ট করুন:

ভাষা - # বাইট + ভাষা - # বাইট = # বাইট

আপনার ম্যাপিংয়ের একটি দ্ব্যর্থহীন বর্ণনা। যদি এটি জটিল হয় তবে এর মতো একটি চার্ট ব্যবহার করুন:

ABCDEFGHIJKLMNOPQRSTUVWXYZ (etc.)
zyxwvutsrpqonmlkjihgfedcba (etc.)

অথবা, আপনি কেবল এটি ব্যাখ্যা করতে পারেন (প্রথম 48 টি মানচিত্র যথাক্রমে 48 টি থেকে শেষ পর্যন্ত), আপনার উত্তরটি যথারীতি অনুসরণ করার পরে।


আমি উভয়ের জন্য একই ভাষা ব্যবহার করার চেষ্টা করতে যাচ্ছি। :)
mbomb007

আমি সত্যই বলেছি যে "উভয় প্রোগ্রামের একই ভাষা হওয়া উচিত" এটিকে সীমাবদ্ধ করে আপনার নিয়মগুলি পরিবর্তন করা উচিত। অন্যথায় এটি সম্ভবত খুব সহজ / বিস্তৃত।
mbomb007

আমি আসলেই ভাবছি যদি স্ব-সংশোধনকারী ব্রেইনফাকের ক্ষেত্রে এটি সম্ভব হয়। আপনি মাত্র এক প্রোগ্রাম ব্যবহার আছে +এবং >, এবং অন্যান্য ব্যবহার -এবং <। তারপরে আপনাকে অনুপস্থিত অপারেটরগুলি তৈরি করার চেষ্টা করতে হবে, যেমন একটি ,বা .প্রোগ্রামে এটি ব্যবহার করতে পারে না।
mbomb007

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

4
Hardest। চ্যালেঞ্জ। কখনো।
ব্ল্যাকহোল

উত্তর:


6

সিজে্যাম - 11 বাইট + সিজোম - 25 বাইট = 36 বাইট

অক্ষরগুলি 16 টি বিকল্প গ্রুপে নির্বাচিত হয়:

 !"#$%&'()*+,-./@ABCDEFGHIJKLMNO`abcdefghijklmno
0123456789:;<=>?PQRSTUVWXYZ[\]^_pqrstuvwxyz{|}~\n

এটি শীতল যে শিফট কী সহ কয়েকটি ম্যাপিং পাওয়া যায় :)

প্রোগ্রাম এ:

lL,H-f&'o+c

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

প্রোগ্রাম বি:

q_S<\_0=16|_127<\S0=42^??

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

ব্যাখ্যা:

প্রোগ্রাম এ:

l      read a line from the input, this is a 1-character string
        or the empty string if the input was a newline
L,     get the length of an empty string/array (0)
H-     subtract 17, obtaining -17 (~16)
f&     bitwise-"and" each character (based on the ASCII code) with -17
'o+    append the 'o' character
c      convert to (first) character
        the result is the "and"-ed character, or 'o' for newline

প্রোগ্রাম বি:

q_       read the whole input and duplicate it
S<\      compare with " " and move the result before the input
_0=      duplicate the input again, and get the first (only) character
16|      bitwise-"or" with 16 (based on the ASCII code)
_127<    duplicate and compare (its ASCII code) with 127
\        move the result before the "or"-ed character
S0=      get the space character (first character of the space string)
42^      xor with 42, obtaining a newline character
          stack: (input<" ") (input) ("or"-ed char<127) ("or"-ed char) (newline)
?        if the "or"-ed character is less than 127, use the "or"-ed character
          else use the newline character
?        if the input was smaller than space (i.e. it was a newline),
          use the input, else use the character from the previous step

নিস! খুশী যে "এমনকি / বিজোড়" একমাত্র উত্তর নয়।
durron597

এখনও 1 বিট টগল ... চিত্তাকর্ষক আকার! 'ও' এর দ্বিতীয় প্রোগ্রাম ডাব্লু / ইনপুটটি output n ... প্রোগ্রামে বা অনলাইনে সিজামে আউটপুট দেবে বলে মনে হচ্ছে না?
ব্রায়ান টাক

@ ব্রায়ানটাক এটি একটি নতুন লাইন আউটপুট দেয় (আক্ষরিক নয় \n), এইচটিএমএল পরীক্ষা না করে দেখা খুব সহজ নয়। iপরিবর্তে ASCII কোডটি দেখতে প্রোগ্রামের শেষে আপনি একটি সংযোজন করতে পারেন (বা ciএটি একটি নতুন লাইনের ইনপুটও ব্যবহার করতে পারেন, যেহেতু এটি সেই ক্ষেত্রে একটি চরিত্রের পরিবর্তে একটি নতুন লাইনের স্ট্রিংকে আউটপুট দেয়)
aditsu

ওহ, বা আপনি / আমি এমন পরিবর্তন _0=করতে পারি 0=_যাতে এটি সর্বদা একটি চরিত্রকে আউটপুট করে দেয়
aditsu

16

সিজেম - 46 44 26 11 বাইট + গল্ফস্ক্রিপ্ট - 142 125 115 93 68 47 40 36 বাইট = 47 বাইট

গল্ফস্ক্রিপ্ট প্রোগ্রামটি বন্ধ 6 বাইট (এবং আরও অনেকের জন্য পথ সুগম করার জন্য) পিটার টেলরকে ধন্যবাদ জানাই)

ডেনিসকে সিজেএম প্রোগ্রাম থেকে 15 বাইট এবং গল্ফস্ক্রিপ্ট প্রোগ্রামটি থেকে 4 বাইট গল্ফ করার জন্য ধন্যবাদ।

গ্রুপ এ: এমনকি অক্ষর কোড সহ সমস্ত অক্ষর।
গ্রুপ বি: বিজোড় অক্ষর কোড সহ প্লাস নিউলাইন সহ সমস্ত অক্ষর।

আমি উভয়ের মধ্যে সুস্পষ্ট ম্যাপিং ব্যবহার করছি, অর্থাত্ সেই অক্ষরগুলি যুক্ত করুন যা কেবলমাত্র কমপক্ষে উল্লেখযোগ্য বিটের মধ্যে পৃথক হয়, পাশাপাশি ~এবং \n। এখানে সম্পূর্ণ মানচিত্র (কলাম):

 "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~
!#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}\n

প্রোগ্রাম এ (সিজেএম, এটি এখানে পরীক্ষা করুন ):

lX~f&"~"|X<

প্রোগ্রাম বি (গল্ফস্ক্রিপ্ট, এটি এখানে পরীক্ষা করুন ):

{1}'{-'{)}%'115)%11-[9)ie'9/{))}%++%

ব্যাখ্যা

প্রোগ্রাম এ

(পুরানো, আগামীকাল আপডেট হবে।)

এই প্রোগ্রামটি বিজোড় চরিত্রের কোডগুলি সমানকে রূপান্তরিত করা উচিত, উদাহরণস্বরূপ সর্বনিম্ন উল্লেখযোগ্য বিটটি 0 এ সেট করুন this এটি করার সুস্পষ্ট উপায়টি বিটওয়াইজ এবং 126 (বা 254 ইত্যাদি) সহ, তবে এটি 1তে সেট করা আরও ছোট (বিটওয়াইসের মাধ্যমে বা এর মাধ্যমে) 1) পরিবর্তে এবং তারপরে ফলাফল হ্রাস করুন। শেষ পর্যন্ত, আমাদের ম্যানুয়ালি নতুন লাইনগুলি ঠিক করতে হবে:

"r"(  e# Push the string "r" and pull out the character.
(~    e# Decrement to q and eval to read input.
(     e# Pull out the character from the input string.
2(|(  e# (input OR (2-1))-1 == input AND 126
0$    e# Copy the result.
N&    e# Set intersection with a string containing a newline.
"~"   e# Push "~".
"@@"( e# Push "@@" and pull out one @.
(|    e# Decrement to ?, set union with the other string to give "@?".
~     e# Eval to select either the computed character or "~" if it was a newline.

প্রোগ্রাম খ

(পুরানো, আগামীকাল আপডেট হবে।)

এই প্রোগ্রামটি কেবল বিটওয়াইজের মাধ্যমে বা এখন 1 দিয়ে কমপক্ষে গুরুত্বপূর্ণ বিটটিকে 1 এ সেট করতে পারে। তবে এটি উভয় \v(অক্ষর কোড 0x0B) এবং <DEL>(অক্ষর কোড 0xFF) উভয়ের জন্য পরীক্ষা করতে ~হবে এবং তার পরিবর্তে সেগুলি সেট করতে হবে। গল্ফস্ক্রিপ্টে আমার কাছে খোলার অ্যাক্সেস ছিল না, তবে এর পরিবর্তে আপনি একটি ব্লকে একটি স্ট্রিং যুক্ত করতে পারেন (যা পরে সেই ব্লকের কোডের অংশ হয়ে যায়), যা আমি ইনপুটটিতে ম্যাপ করতে পারি %:

{1}    # Push this block without executing it.
'{--'  # Push this string.
{)}%   # Increment each character to get '|..'.
')1)7?=[11=+9)?ie'
       # Push another string...
7/     # Split it into chunks of 7: [')1)7?=[' '11=+9)?' 'ie']
{))}%  # For each chunk, split off the last character and increment it.
+      # Add the array to the string, flattening the array: '|..)1)7?=\11=+9)@if'
+      # Add it to the block: {1|..)1)7?=\11=+9)@if}
%      # Map the block onto the input, i.e. apply it to the single character.

এবং ব্লকে উত্পন্ন কোড হিসাবে:

1|..   # Bitwise OR with 1, make two copies.
)1)7?= # Check if the result is one less than 2^7 == 128 (i.e. if it's <DEL>).
\11=   # Check with the other copy if it's equal to 11 (i.e. if it's \v).
+      # Add them to get something truthy either way.
9)     # Push a 10 (i.e. \n).
@      # Pull up the original value.
if     # Select the correct result.

15

জাভা - 1088 বাইট + জাভা - 1144 বাইট = 2232 বাইট

প্রথম প্রোগ্রাম থেকে 1090 বাইট গল্ফ সাহায্য করার জন্য @ durron597 ধন্যবাদ

প্রমাণ যে এটি একটি ভাষায় করা সম্ভব (এবং এটিতে একটি নন-এসোলাং)।

প্রথমটিকে সমস্ত ইউনিকোড অক্ষরে রূপান্তর করতে ইউনিকোড ট্রিকটি ব্যবহার করুন। দ্বিতীয়টি স্ট্যান্ড-এ প্রিন্ট করার জন্য System.out এ অ্যাক্সেস পেতে প্রতিবিম্ব ব্যবহার করে। বাইরে। এটি আপনাকে ব্যবহার করতে পারেনি কারণ এটি প্রথম প্রোগ্রামটিতে ব্যবহৃত হয়েছিল। আমি জানি এটি আরও গল্ফ করা যেতে পারে তবে আমি প্রথমে একটি বৈধ সমাধান পোস্ট করতে চেয়েছিলাম।

গোষ্ঠীগুলি মোটামুটি নির্বিচারে ম্যাপ করা হয়, তবে মূলত, প্রথমটির জন্য কেবলমাত্র ইউ, \ এবং হেক্সাডেসিমাল ডিজিট (যে কোনও ক্ষেত্রে) প্রয়োজন হয়।

দলগুলি:

!#7$&89'0123456>fB@UXZ\^AKCDEGH_JL`NOkQRxzVWYu~\n
 "%()*+,-./:;<=?FIMPST[]abcdeghijlmnopqrstvwy{|}

প্রথম প্রোগ্রাম:

\u0076\u006F\u0069\u0064
k\u0028\u0069\u006E\u0074
x\u0029\u007B\u0069\u006E\u0074\u005B\u005Du\u003D\u007B33\u002C33\u002C35\u002C35\u002C36\u002C55\u002C38\u002C39\u002C36\u002C38\u002C56\u002C57\u002C39\u002C48\u002C49\u002C50\u002C48\u002C49\u002C50\u002C51\u002C52\u002C53\u002C54\u002C55\u002C56\u002C57\u002C51\u002C52\u002C53\u002C54\u002C62\u002C62\u002C64\u002C65\u002C66\u002C67\u002C68\u002C69\u002C102\u002C71\u002C72\u002C66\u002C74\u002C75\u002C76\u002C64\u002C78\u002C79\u002C85\u002C81\u002C82\u002C88\u002C90\u002C85\u002C86\u002C87\u002C88\u002C89\u002C90\u002C92\u002C92\u002C94\u002C94\u002C95\u002C96\u002C65\u002C75\u002C67\u002C68\u002C69\u002C102\u002C71\u002C72\u002C95\u002C74\u002C107\u002C76\u002C96\u002C78\u002C79\u002C107\u002C81\u002C82\u002C120\u002C122\u002C117\u002C86\u002C87\u002C120\u002C89\u002C122\u002C117\u002C126\u002C10\u002C126\u007D\u003B\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006Fu\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0028x>10\u003F\u0028\u0063\u0068\u0061\u0072\u0029u\u005Bx\u002D32\u005D\u003A'\u005C\u006E'\u0029\u003B\u007D

সমতুল্য

void
k(int
x){int[]u={33,33,35,35,36,55,38,39,36,38,56,57,39,48,49,50,48,49,50,51,52,53,54,55,56,57,51,52,53,54,62,62,64,65,66,67,68,69,102,71,72,66,74,75,76,64,78,79,85,81,82,88,90,85,86,87,88,89,90,92,92,94,94,95,96,65,75,67,68,69,102,71,72,95,74,107,76,96,78,79,107,81,82,120,122,117,86,87,120,89,122,117,126,10,126};System.out.print(x>10?(char)u[x-32]:'\n');}

দ্বিতীয় প্রোগ্রাম:

void n(int r)throws Throwable{int p=(int)Math.PI;int q=p/p;int t=p*p+q;int w=q+q;int[]g={t*p+w,t*p+w,t*p+q+p,t*p+q+p,t*(q+p),t*p+t-p,t*(q+p)+q,t*(q+p)+q+p,t*(q+p),t*(q+p)+q,t*(q+p)+w,t*(q+p)+p,t*(q+p)+q+p,t*(q+p)+p+w,t*(q+p)+p+p,t*(q+p)+t-p,t*(q+p)+p+w,t*(q+p)+p+p,t*(q+p)+t-p,t*(p+w)+t-w,t*(p+w)+t-q,t*(p+p),t*(p+p)+q,t*p+t-p,t*(q+p)+w,t*(q+p)+p,t*(p+w)+t-w,t*(p+w)+t-q,t*(p+p),t*(p+p)+q,t*(p+p)+p,t*(p+p)+p,t*(t-p)+t-p,t*(t-q)+t-p,t*(t-p)+p,t*(t-q)+t-q,t*t,t*t+q,t*(t-p),t*t+p,t*t+q+p,t*(t-p)+p,t*t+p+p,t*(t-q)+t-w,t*t+t-w,t*(t-p)+t-p,t*(t+q),t*(t+q)+q,t*(t-w),t*(t+q)+p,t*(t+q)+q+p,t*(t-w)+p,t*(t-w)+q+p,t*(t-w),t*(t+q)+t-w,t*(t+q)+t-q,t*(t-w)+p,t*(t+w)+q,t*(t-w)+q+p,t*(t-q)+q,t*(t-q)+q,t*(t-q)+p,t*(t-q)+p,t*t+p+w,t*t+t-q,t*(t-q)+t-p,t*(t-q)+t-w,t*(t-q)+t-q,t*t,t*t+q,t*(t-p),t*t+p,t*t+q+p,t*t+p+w,t*t+p+p,t*(t+q)+w,t*t+t-w,t*t+t-q,t*(t+q),t*(t+q)+q,t*(t+q)+w,t*(t+q)+p,t*(t+q)+q+p,t*(t+q)+p+w,t*(t+q)+p+p,t*(t+w)+p,t*(t+q)+t-w,t*(t+q)+t-q,t*(t+q)+p+w,t*(t+w)+q,t*(t+q)+p+p,t*(t+w)+p,t*(t+w)+q+p,t*(t+w)+p+w,t*(t+w)+q+p};java.io.PrintStream o=(java.io.PrintStream)System.class.getFields()[p/p].get(p);o.print((r<=t)?"}":(char)g[r-t*p-w]);}

এগুলি এখানে চেষ্টা করে দেখুন: https://ideone.com/Q3gqmQ


এমন কোনও অক্ষর নেই যা আপনি প্রথম প্রোগ্রামটি থেকে বের করতে পারবেন যা ইউনিকোড পালানোর দরকার নেই? আপনি কিছু নম্বর বের করতে পারবেন না? আপনি যদি করেন তবে কী void x(int z), এগুলি প্রথম
চরসেটেও

আমি নিশ্চিত এটি সম্ভব আমি কিছু ভেরিয়েবলের নাম পরিবর্তন করতে এবং নতুন স্পেস এবং ট্যাবগুলির সাথে সমস্ত স্পেস প্রতিস্থাপন করতে পারি। আমি বাড়িতে এলে তা করবো। আমি কেবল প্রথমে একটি একক ভাষার সমাধান প্রমাণ করতে চেয়েছিলাম।
bmarks

5

সংশোধন করা হয়েছে! পাইথ - 23 বাইট + পাইথ - 30 বাইট = 53 বাইট

উফ ফিক্সিং ত্রুটি --- দয়া করে ধৈর্য ধরুন

একই ASCII মার্টিনের হিসাবে বিভক্ত:

1: "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfhjlnprtvxz|~
2:!#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}\n

অগ্রগতি # 1: অনলাইন পরীক্ষা

.xhft<zT.Dr\¡b:Z140 2\~

অগ্রগতি # 2: অনলাইন পরীক্ষা

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