প্রচুর 8 টি পেতে নম্বর যুক্ত করার সঠিক উপায়


16

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

 _        _   _         _    _   _    _    _
| |   |   _|  _|  |_|  |_   |_    |  |_|  |_|
|_|   |  |_   _|    |   _|  |_|   |  |_|   _| 

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

  | 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9

দরকারী পর্যবেক্ষণ:

  • যে কোনও ডিজিট প্লাস নিজেই সমান
  • 8 প্লাস যে কোনও অঙ্ক 8 এর সমান
  • 2 যোগ 1, 3, বা 7 'a' অক্ষরের সমান (অবশ্যই লোয়ার-কেস হতে হবে)
  • 4 প্লাস 7 আপনার পছন্দ হিসাবে 'কিউ' বা 'কিউ' এর সমান
  • নম্বরগুলি ডান-প্রান্তিক হওয়া উচিত, সুতরাং অঙ্কগুলি ডান থেকে বামে যুক্ত করা উচিত। যদি একটি সংখ্যার অপরটির চেয়ে বেশি সংখ্যা থাকে তবে শুরুতে অতিরিক্ত সংখ্যাগুলি অপরিবর্তিত হওয়া উচিত। সংখ্যাটি ঠিক 0 না হলে কোনও শীর্ষস্থানীয় 0 নেই।
  • সমস্ত সংখ্যা 0 বা ততোধিক হবে। আপনাকে কোনও '-' চিহ্নটি হ্যান্ডেল করার দরকার নেই। (মূলত কারণ '-' এবং '' 1 'বা' 7 'এর যোগফলের পক্ষে উপযুক্ত নয়))

আপনার প্রোগ্রামটি আপনার চয়ন করা যে কোনও বিন্যাসে 2 পূর্ণসংখ্যা গ্রহণ করবে এবং এই পদ্ধতিতে গণনা করা হলে তাদের "যোগ" যুক্ত স্ট্রিং আউটপুট করা উচিত। এটি কোড-গল্ফ, সুতরাং আপনার প্রোগ্রামটি যতটা সম্ভব ছোট হওয়া উচিত।

উদাহরণ:

  • ইনপুট: 12345, 123. আউটপুট: 12389
  • ইনপুট: 88888, 42. আউটপুট: 88888
  • ইনপুট: 0, 23. আউটপুট: 28
  • ইনপুট: 120, 240. আউটপুট: a80
  • ইনপুট: 270, 42. আউটপুট: 2Q8 (বা 2 কি 8)
  • ইনপুট: 1234567890, 1234567890. আউটপুট: 1234567890

4
আকর্ষণীয় চ্যালেঞ্জ, তবে এটি কিছু পরীক্ষার কেস ব্যবহার করতে পারে যাতে লোকেরা তাদের উত্তরগুলি যাচাই করতে পারে।
অ্যাডমবর্কবার্ক

3
Qছোট হাতের না হওয়া উচিত? আসল আকৃতিটি qতার চেয়ে বেশি মনে হচ্ছেQ
লুইস মেন্ডো

ইনপুট পূর্ণসংখ্যাগুলি কি একক-অঙ্ক, সীমিত সংখ্যার সংখ্যা বা সীমাহীন থাকবে?
ডিজিটাল ট্রমা

1
@ লুইস মেন্ডো - আমি মনে করি এটি কোনওভাবেই যেতে পারে। আমি আপনার বিবেচনার ভিত্তিতে এটি ছেড়ে দেব। aস্পষ্টভাবে ছোট হাতের যদিও হওয়া উচিত, যেহেতু Aসৌন্দর্য সম্পূর্ণ ভিন্ন।
ড্যারেল হফম্যান

2
@ অ্যাডাম - হ্যাঁ, আমি এটি সম্পর্কে ভেবেছিলাম, তবে অনুমান করেছি যে প্রত্যেকেরই পছন্দ অনুযায়ী তাদের গল্ফ করা ভাষায় ইউনিকোডের অক্ষরগুলির অ্যাক্সেস নেই, তাই তাদের এটি পরিচালনা করা আশা করা অন্যায় হবে না।
ড্যারেল হফম্যান

উত্তর:


7

ব্যাশ + কমন লিনাক্স ইউটিলিটিস, 80

s=~0my3[_p^?{}s
h()(tr 0-9 $s<<<$1|xxd -p)
dc -e$[0x`h $1`|0x`h $2`]P|tr $s 0-9aQ

নোটটি ^?উত্সটিতে ASCII 0x7f অক্ষর দ্বারা প্রতিস্থাপন করা উচিত Note

স্ট্রিংটি sপ্রতিটি 0-9, a, Qএএসসিআইআই চরের সাথে সামঞ্জস্যপূর্ণ প্রতিটি বিভাগের সাথে এনকোডযুক্ত প্রতিটি 7 সেগমেন্ট ডিজিট ।

h()ফাংশন এনকোডিং দ্বারা নির্দিষ্ট দশমিক থেকে ইনপুট সংখ্যা transliterates s, তারপর কাঁচা হেক্স স্ট্রিং হিসেবে ফলাফলের আউটপুট।

দুই ফলে কাঁচা হেক্স স্ট্রিং হয় ORনিয়মিত ব্যাশ গাণিতিক, তারপর আউটপুট ব্যবহার একসঙ্গে ed dcএর Pএকটি bytestream যেমন কমান্ড। এই বাইটাস্টিমটি পরে দশমিক + এ + কিউ এবং আউটপুটে ট্রান্সলিট্রেটেড হয়।

আরও মনে রাখবেন যে <<<ফাংশনে বাশ এইস্ট্রিং কন্সট্রাক্ট ব্যবহার করার সময় h()একটি নতুন লাইন স্পষ্টভাবে পুনঃনির্দেশিত স্ট্রিংয়ে সংযুক্ত করা হয়। এটি কোনও বিষয় নয় - 0x0aপ্রতিটি হেক্স স্ট্রিংয়ের শেষে এটি অনুবাদ করা হয়; যখন দুটি হেক্স সংখ্যার ORএকসাথে সম্পাদনা করা হয়, ফলাফলটি এখনও 0x0aসর্বশেষ চরে থাকে যা অনুলিপি হয় না এবং এভাবে কেবল একটি নতুন লাইনে অনুবাদ করে যা ফলাফলের পরে ফলাফল হয়।

পরীক্ষার আউটপুট:

$ for testcase in \
> "12345 123" \
> "88888 42" \
> "0 23" \
> "1234 56789" \
> "4 7"; do 
> ./7segadd.sh $testcase
> done
12389
88888
28
58a89
Q
$ 

1
আমি এগিয়ে যাব এবং এই পুরষ্কার দেব যেহেতু কেউই আর এটি চেষ্টা করে বলে মনে হচ্ছে না।
ড্যারেল হফম্যান

ধন্যবাদ ড্যারেল - এটি একটি মজাদার, আকর্ষণীয় চ্যালেঞ্জ ছিল। আপনি যদি আরও উত্তর চান তবে আপনি এটিতে অনুগ্রহ করা বিবেচনা করতে পারেন।
ডিজিটাল ট্রমা

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

3

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

def f(a,b):exec"a=[ord('?(u|j^_,♥~'[int(c)])for c in a];a=max(len(b)-len(a),0)*[0]+a;a,b=b,a;"*2;print`['214567q3a980'[(c|d)%13]for c,d in zip(a,b)]`[2::5]

একটি DELঅক্ষর (0x7F) দিয়ে প্রতিস্থাপন করুন ।

কল করা হচ্ছে f("12345", "123")কপি করে প্রিন্ট 12389


মানটির তিনটি সেট রয়েছে যার জন্য সেই %13কৌশলটি কাজ করে। স্পষ্টতই আপনি সেই সেটটির জন্য গিয়েছিলেন যার 40 এর নিচে কোনও অক্ষর নেই, তবে আমার জাভাস্ক্রিপ্ট অনুবাদের জন্য আমি সবচেয়ে সংক্ষিপ্ত সেটটি বেছে নিয়েছি। তৃতীয় সেটটি জাভাস্ক্রিপ্টের সবচেয়ে দীর্ঘতম, এটি হত 111,5,118,117,29,121,123,37,127,125
নীল

2

জাভাস্ক্রিপ্ট (ES6), 158 144 বাইট

f=(s,t)=>t[s.length]?f(t,s):s[t.length]?f(s,' '+t):s.replace(/./g,(c,i)=>"540q9361278a"[(a[c]|a[t[i]])%13],a=[119,20,47,31,92,91,123,22,127,95])

@ লিনের %13কৌশলটি নির্লজ্জভাবে চুরি করে 14 বাইট সংরক্ষণ করা হয়েছে ।

f=(s,t)=>t[s.length]?f(t,s):s[t.length]?f(s,' '+t):s.replace(/./g,(c,i)=>"540q9361278a"[(a[c]|a[t[i]])%13],a=[119,20,47,31,92,91,123,22,127,95])
;o.textContent=[...s="0123456789"].map(c=>f(c.repeat(10),s)).join`
`;
<pre id=o></pre>


1

জাভা, 170 বাইট

এটি মারাত্মকভাবে দীর্ঘ ... তবে এটি যাইহোক জাভা।

String A(int a,int b){String c="|HgmY=?h}oy",r="";for(;a>0|b>0;a/=10,b/=10)r="0123456789aq".charAt(c.indexOf((a>0?c.charAt(a%10):0)|(b>0?c.charAt(b%10):0)))+r;return r;}

পুরো প্রোগ্রাম, অবিকৃত কোড সহ

public class Q80716 {
    String A(int a,int b){String c="|HgmY=?h}oy",r="";for(;a>0|b>0;a/=10,b/=10)r="0123456789aq".charAt(c.indexOf((a>0?c.charAt(a%10):0)|(b>0?c.charAt(b%10):0)))+r;return r;}
    String Add(int a,int b){
        String c = "|HgmY=?h}oy", d = "0123456789aq";
        String r = "";
        for(;a>0|b>0;a/=10,b/=10){
            r = d.charAt(c.indexOf((a>0?c.charAt(a%10):0)|(b>0?c.charAt(b%10):0))) + r;
        }
        return r;
    }
    public static void main(String[]args){
        int[][] testcases = new int[][]{
            {12345,123},
            {88888,42},
            {0,23},
            {120,240},
            {270,42},
            {1234567890,1234567890}
        };
        for(int i=0;i<testcases.length;i++){
            System.out.println(new Q80716().Add(testcases[i][0],testcases[i][1]));
            System.out.println(new Q80716().A(testcases[i][0],testcases[i][1]));
        }
    }
}

সমস্ত আউটপুট (সমস্ত একবারে নকল)

12389
88888
23
a80
2q8
1234567890

আমি প্রতিশ্রুতি দিচ্ছি যে এই সমস্যাটি সমাধান করার জন্য আমি গল্ফল্যাংগুলি ব্যবহার করব না (এটির জন্য সম্ভবত 50 বাইটের বেশি দাম পড়বে না)
Leaky Nun

আমি কখনও বলিনি যে লোকেরা এর জন্য গল্ফ ভাষা ব্যবহার করতে পারে না - আমি সত্যই অবাক হয়েছি যে এখনও কেউ করেনি। যাইহোক, এমনকি এটি ছাড়া আপনি সম্ভবত একটি জাভা 8 লাম্বদা ব্যবহার করে কিছু বাইট সংরক্ষণ করতে পারেন?
ড্যারেল হফম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.