সর্বনিম্ন অক্ষর ব্যবহার করে পূর্ণসংখ্যার সিঁড়ি তৈরি করুন (সি ++ এ)


13

আমি কোড গল্ফের খেলাতে নতুন। আমি সি ++ এর সর্বনিম্ন সংখ্যার অনন্য অক্ষর ব্যবহার করে পূর্ণসংখ্যার সিঁড়ি তৈরি করার চেষ্টা করছি।

ধরা যাক আমরা একটি পূর্ণসংখ্যা 4 দেওয়া হয়।

আমরা নিম্নলিখিত মই উত্পাদন করব:

1
1 2
1 2 3
1 2 3 4

সংক্ষেপে, আমার প্রোগ্রামটি স্টিডিন থেকে একটি ধনাত্মক পূর্ণসংখ্যা পড়বে এবং এই মইটি আউটপুটে মুদ্রণ করবে। আমি সম্ভাব্যতম অনন্য চরিত্রের কম সংখ্যা দিয়ে এটি করার চেষ্টা করছি ।

আমার প্রোগ্রামটি নিম্নরূপ:

#include<iostream>

int i;
int ii;
int iii;
int iiii;

main() {
    std::cin >> i;
    for(ii++; ii <= i; ii++) {
        int iii = iiii;
        for(iii++; iii <= ii; iii++) {
            std::cout << iii << " ";
        }
        std::cout << std::endl;
    }
}

আমি আমার প্রোগ্রামে স্বতন্ত্র অক্ষরের সংখ্যা যাচাই করবার জন্য যে পরীক্ষকটি ব্যবহার করেছি তা এখানে:

#include <cstdio>
#include <cstring>
using namespace std;
int check[300],diffcnt=0,cnt=0,t;
char c;
double score;
int main(){

    memset(check,0,sizeof(check));
    FILE *in=fopen("ans.cpp","r");
    while(fscanf(in,"%c",&c)!=EOF){
        cnt++;
        if(!check[c]){
            check[c]=1;
            if(c=='\r'||c=='\n') continue;
            diffcnt++;
        }
    }
    if(diffcnt<25) printf("100\n");
    else if(diffcnt<30){
        printf("%.3lf\n",20.0*100.0/cnt+20.0*(29-diffcnt));
    }
    else{
        score=20.0;
        for(int x=95;x<cnt;x++) score*=0.9;
        printf("%.3lf\n",score);
    }
    printf("Unique Characters: %d\n", diffcnt);
    printf("Total Characters: %d\n", cnt);
    return 0;
}

এই প্রোগ্রামটি সম্পূর্ণ করার জন্য আমি 25 টিরও কম স্বতন্ত্র অক্ষর ব্যবহার করতে চাই (নতুন লাইনের অক্ষরগুলি বাদ দিয়ে তবে হোয়াইটস্পেস সহ) বর্তমানে, আমার প্রোগ্রামটি ২ 27 টি ব্যবহার করে it এটিকে আরও কীভাবে অনুকূল করা যায় সে বিষয়ে আমি নিশ্চিত নই।

কেউ দয়া করে কীভাবে এটি আরও অনুকূল করতে (আমাকে ব্যবহারযোগ্য অনন্য চরিত্রের সংখ্যার ক্ষেত্রে) পরামর্শ দিতে পারেন? দয়া করে মনে রাখবেন যে কেবল সি ++ ব্যবহার করা যেতে পারে।


5
কোড-গল্ফের তুলনায় অন্য কোনও স্কোরিংয়ের মানদণ্ড সম্পর্কে পরামর্শ জিজ্ঞাসা করা অবশ্যই উপন্যাস , তবে আফাক্ট, এটি বিষয়বস্তু, যেহেতু টিপস পৃষ্ঠাগুলি এটিকে বিষয়বস্তুতে থাকা একটি প্রোগ্রামিং চ্যালেঞ্জের আরও ভাল উত্তর দেওয়ার জন্য বলেছে
অ্যাডম

8
@ লুইস মেন্ডো আমি সত্যিই এই ক্ষেত্রে সত্য মনে করি না, যেহেতু অনেক ভাষা এই স্কোরিং স্কিমটিকে সম্পূর্ণরূপে তুচ্ছ করে তোলে। যদি এই ব্যবহারকারী "অনন্য গল্ফ" শিখতে সাহায্য করতে চান তবে এটি কেবলমাত্র ভাষাগুলির একটি উপসেটে সত্যই উপলব্ধি করে, তাই আমি মনে করি যে জেনেরিক চ্যালেঞ্জের চেয়ে টিপ হিসাবে এটি আরও ভাল। এটি বলেছে যে কেউ যদি এটি পোস্ট করতে চায় তবে বেস সমস্যাটি সম্ভবত একটি চ্যালেঞ্জ হতে পারে।
FryAmTheEggman

3
আমি মনে করি আপনি কোঁকড়ানো ধনুর্বন্ধনীগুলির পরিবর্তে ডিগ্রাফগুলি <% এবং%> ব্যবহার করতে পারেন এবং আমার মনে হয় আমি কিছু মিস করেছি।
আমার সর্বনামটি

2
আমি অবশ্যই কিছু মিস করেছি। # হ'ল%:, সুতরাং আপনি তিনটি অক্ষর থেকে মুক্তি পেতে পারেন এবং একটিতে পরিচয় দিতে পারেন ({=> <%,} =>%>, # =>% :) এবং আপনি যদি নীচের উত্তরের সাথে একত্রিত হন তবে আমি আপনি 24 পেতে পারেন বলে মনে করেন
আমার সর্বনাম

2
@ ল্যানসাহো ট্রাইগ্রাফগুলি [আন্ডারহ্যান্ডেড] প্রশ্নগুলিতে অত্যন্ত সাধারণ, এবং ট্রিগ্রাফগুলি পড়ার সময় ডিজিট্রাফগুলি প্রদর্শিত হয়।
আমার সর্বনাম

উত্তর:


12

আমি বিশ্বাস করি যে আমি আপনার কোড থেকে = অক্ষর অপসারণ করতে পেরেছি, যদিও এটি এখন উল্লেখযোগ্যভাবে ধীর

#include<iostream>

int i;
int ii;
int iii;
int iiii;

int main() {
    std::cin >> i;
    i++;
    for(ii++; ii < i;) {
    for(;iii>iiii;iii++);
    for(;iii<iiii;iii++);
    ii++;
        for(iii++; iii < ii; iii++) {
            std::cout << iii << " ";
        }
        std::cout << std::endl;
    }
}

এটি সুন্দর নয়, তবে পূর্ণসংখ্যার ওভারফ্লো অপব্যবহার করে আমরা = ব্যবহার না করে 0 এ ফিরে যেতে পারি

এছাড়াও আমাদের গার্ডদের একটু বদলাতে হয়েছিল। দুর্ভাগ্যক্রমে অন্তর্ভুক্তির কারণে আমি সমস্ত নতুন লাইন চরিত্রগুলি (যদিও এটি ঘনিষ্ঠ) থেকে মুক্তি পেতে পারি না যাতে এটি তদন্তের পরবর্তী উপায় হতে পারে।

সম্পাদনা: আপাতত সময়ের বাইরে চলে গেলেও আপনি যদি স্ট্রাস্ট্রিম এবং অন্যান্য বিভিন্ন গ্রন্থাগারকে অন্তর্ভুক্ত করেন এবং ব্যবহার করেন তবে আমি মনে করি আপনি আবার "অক্ষরটিও মুছে ফেলতে সক্ষম হবেন, আবার স্থানটির সঠিক অক্ষরে উপস্থিত হওয়ার জন্য এবং এটিতে প্রবেশের জন্য পূর্ণসংখ্যার সাহায্যে strstream


2
আপনি #include<std>এবং সমস্ত :এস অপসারণ করতে পারে । দুর্দান্ত কোডিং অনুশীলন নয়, তবে এটি পয়েন্টের পাশে beside
ড্যারাল হফম্যান

3
@ ড্যারেলহফম্যান আমি এটি কাজ করতে পারি না, আপনাকে এমন করার দরকার নেই using namespace std;যা এর জন্য অতিরিক্ত পি ব্যবহার করবে: তাই নেট 0
মেয়াদোত্তীর্ণ ডেটা

হুম। হতে পারে, আমার সি ++ একটি বাজে মরিচা। এছাড়াও এটি একটি যোগ করে g, তাই নেট ক্ষতি আমার ধারণা। তাহলে এই কোড সোনা হত, তাহলে আমরা পুনঃনামকরনের দ্বারা বাইট গণনা কমিয়ে দিতে পারে ii, iiiএবং iiiiঅন্যান্য একক অক্ষর নামের (যে কোন অন্যান্য ইতিমধ্যে ব্যবহৃত অক্ষর বাছাই), কিন্তু যে এই চ্যালেঞ্জ সম্পর্কে, কি তাই আমি না অনুমান নয়। আমি ভাবছি করছি যদি ব্যবহার করার কোনো লাভ হতে চাই getcএবং putcপরিবর্তে cin/ cout, এটা চেষ্টা করতে হবে।
ড্যারেল হফম্যান

1
আমার খারাপ। আমি আবার চেকারের মাধ্যমে পড়েছি। দেখে মনে হচ্ছে যে নিউলাইন চরিত্রটি উপেক্ষা করা হয়েছে। সুতরাং নতুন লাইনগুলি সরাতে আসলে মাথা ঘামানোর দরকার নেই। তবে আপনার কৌশল এবং সমাধানের সাথে মিলিত হয়ে মন্তব্যগুলিতে @ একক দ্বারা, আমি এটি 24 টি অক্ষরে পেয়েছি। আমি ইন্টার এর পরিবর্তে শর্ট ব্যবহার করে প্রোগ্রামটি আরও দ্রুত তৈরি করেছি। সুতরাং আমি একটি অতিরিক্ত 'এইচ' চরিত্র পেয়েছি। তবে এটি আমাকে অতিরিক্ত মূল্য ছাড়াই চর ডেটাটাইপ ব্যবহার করতে দিন। তাই আমি চরিত্রের কোড ব্যবহার করে "চরিত্রটি থেকেও মুক্তি পেয়েছি
ল্যান্সএইচওহ

@ ল্যান্সাহোহ: নোট করুন যে স্বাক্ষরিত পূর্ণসংখ্যার ওভারফ্লো সি সহ +++ সহ সমস্ত স্বাক্ষরিত ধরণের জন্য নির্ধারিত আচরণ signed char। আপনি যদি অপ্টিমাইজেশন সক্ষম করার সাথে সংকলন করেন তবে এই কোডটি আধুনিক সংকলকগুলির সাথে ভেঙে যেতে পারে, যদি না আপনি gcc -fwrapvস্বাক্ষরিত ওভারফ্লোটিকে 2 এর পরিপূরক মোড়কের চারপাশে ভালভাবে সংজ্ঞায়িত করতে ব্যবহার করেন। ঝাঁকুনি সমর্থন করে -fwrapv, খুব। ( unsignedপূর্ণসংখ্যার প্রকার সহ unsigned charআইএসও সি ++ এ সু-সংজ্ঞায়িত আচরণ রয়েছে (মোড়ানো) around এটা তোলে ABI- র উপর নির্ভর করে কিনা charহয় signed charবা unsigned char, তাই charঠিক আছে হতে পারে।
পিটার কর্ডেস

10

@ এক্সপায়ার্ডডেটা এবং @ সামোনের উত্তরগুলি একত্রিত করে আমি অবশেষে 24 টি অনন্য চরিত্র পেয়েছি। এছাড়াও, int এর পরিবর্তে সংক্ষিপ্ত ডেটা টাইপ ব্যবহার করা আমার প্রোগ্রামকে গতি বাড়িয়ে তুলতে সহায়তা করে কারণ একটি সংক্ষিপ্ত ডেটা টাইপকে উপচে ফেলতে খুব কম সময় লাগে।

আমার কোডটি নিম্নরূপ।

%:include<iostream>

short i;
short ii;
short iii;
short iiii;
char iiiii;

main() <%
    std::cin >> i;
    iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;
    iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;
    iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;
    iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;iiiii++;
    i++;
    for(ii++; ii < i; ii++) <%
        for(;iii;iii++);
        for(iii++; iii < ii; iii++)
            std::cout << iii << iiiii;
        std::cout << iii << std::endl;
    %>
%>

কেভিন ক্রুইজসেন তিনি এটি ব্যবহার করেছেন char iiiii;, পরিবর্তনশীল সূচনাতে সর্বশেষ।
Rɪᴋᴇʀ

1
@ কেভিন ক্রুইজসেন এটি সত্য। তবে এটি আমাকে "চরিত্রটি সরিয়ে ফেলতে দেয় কারণ আমি স্পেস ক্যারেক্টারটি উপস্থাপনের জন্য ক্যারেক্টার কোড ব্যবহার করতে পারি So তাই ইউনিক অক্ষরগুলির নেট পার্থক্য = 0 ব্যবহার করা হয়েছে
ল্যান্সএহোহ

9

Digraphs ব্যবহার করে 23 অনন্য অক্ষর। (25 ছাড়া) কোনও ইউবি নেই।

int var{};এড়ানো =এবং এর সাথে একটি পূর্ণসংখ্যা শূন্যের তালিকা-আরম্ভ করতে সি ++ 11 ব্রেসড ইনিশিয়ালাইজার সিনট্যাক্স ব্যবহার করুন0 । (বা আপনার ক্ষেত্রে, বিশ্বব্যাপী এড়ানো iiii) এটি আপনাকে গ্লোবাল ভেরিয়েবলগুলি ব্যতীত শূন্যগুলির উত্স দেয় (যা স্থানীয়দের তুলনায় স্থিরভাবে শূন্যে শুরু হয়)।

বর্তমান সংকলকগণ কোনও বিশেষ বিকল্প সক্ষম না করে ডিফল্টরূপে এই সিনট্যাক্সটি গ্রহণ করে।

(পূর্ণসংখ্যা Wraparound কৌতুক মজা, এবং অক্ষম অপ্টিমাইজেশান সঙ্গে golfing জন্য ঠিক, কিন্তু স্বাক্ষরিত ওভারফ্লো আইএসও C ++ অনির্ধারিত আচরণ। অপ্টিমাইজেশান সক্ষম করা হলে তা অসীম loops মধ্যে যারা Wraparound লুপ চালু হবে, যদি না আপনি কম্পাইল সঙ্গে জিসিসি / ঝনঝন -fwrapvদিতে ভাল ওভারফ্লো পূর্ণসংখ্যা স্বাক্ষরিত সংজ্ঞায়িত আচরণ: 2 এর পরিপূরক wraparound।

মজাদার ঘটনা: আইএসও সি ++ std::atomic<int>2 এর পরিপূরক মোড়কের চারপাশে ভালভাবে সংজ্ঞায়িত করেছে! int32_tএকেবারে সংজ্ঞায়িত হলে 2 এর পরিপূরক হওয়া প্রয়োজন তবে ওভারফ্লো আচরণটি অপরিজ্ঞাত তাই এটি এখনও কোনও টাইপডেফ intবা longকোনও মেশিনে থাকতে পারে যেখানে এই ধরণের একটি 32 বিট, কোনও প্যাডিং এবং 2 এর পরিপূরক নয়))


এই নির্দিষ্ট ক্ষেত্রে কার্যকর নয়:

সরাসরি আরম্ভের জন্য পেরেনগুলি সহ আপনি ব্রেস বা (একটি খালি খালি প্রারম্ভক সহ) বর্তমানের অনুলিপি হিসাবে একটি নতুন পরিবর্তনশীল আরম্ভ করতে পারেন ।
int a(b)বা int a{b}এর সমতুল্যint a = b;

তবে int b();শূন্যের পরিবর্তিত ভেরিয়েবলের পরিবর্তে একটি ক্রিয়া ঘোষণা করে।

এছাড়াও, আপনার সাথে একটি শূন্য পেতে পারেন int()বা char(), অর্থাত্ শূন্য আরম্ভের একটি বেনামী বস্তুর।


আমরা আপনার <=তুলনাগুলি <একটি সাধারণ লজিক রূপান্তর দ্বারা তুলনার সাথে প্রতিস্থাপন করতে পারি: লুপটির নীচে পরিবর্তে তুলনার পরে লুপ-কাউন্টার বৃদ্ধি করুন do আইএমও এই বিকল্পগুলির চেয়ে সহজ, বিকল্পগুলির চেয়ে সহজ, যেমন ++প্রথম অংশটি ব্যবহার করে এটিকে for()1-এ 1 তৈরি করে।

    // comments aren't intended as part of the final golfed version
    int n;
    std::cin >> n;      // end condition

    for(int r{}; r < n;) {      // r = rows from 0 .. n-1
        ++r;
        for(int i{}; i < r;) {
            ++i;
            std::cout << i << ' ';
        }
        std::cout << std::endl;
    }

আমরা এটিকে গল্ফ করতে পারলাম for(int r{}; r++ < n;)কিন্তু আইএমও যা মানুষের পক্ষে পড়া সহজ নয়। আমরা মোট বাইট গণনার জন্য অপ্টিমাইজ করছি না।


যদি আমরা ইতিমধ্যে ব্যবহার করতাম তবে আমরা বা কোনও জায়গার জন্য hসঞ্চয় করতে পারি ।'"

একটি ASCII বা UTF-8 পরিবেশ ধরে, স্থান char32 মান সঙ্গে একটি। আমরা সহজেই যথেষ্ট পরিমাণে একটি চলকটিতে এটি তৈরি করতে পারি, তারপরেcout << c;

    char c{};
    c++; c++;            // c=2
    char cc(c+c+c+c);    // cc=8
    char s(cc+cc+cc+cc); // s=32 = ' ' = space in ASCII/UTF-8

এবং অন্যান্য মানগুলি স্পষ্টতই ++তাদের বাইনারি উপস্থাপনার বিটের উপর ভিত্তি করে এবং দ্বিগুণ করার ক্রম থেকে তৈরি করা যেতে পারে । নতুন ভেরিয়েবলের দ্বিগুণ হওয়ার আগে কার্যকরভাবে একটি 0 (কিছুই নয়) বা 1 (++) এলএসবিতে স্থানান্তরিত করা।


এই সংস্করণটি এর hপরিবর্তে 'বা ব্যবহার করে "

এটা তোলে অনেক দ্রুত বিদ্যমান সংস্করণে (একটি দীর্ঘ লুপ উপর নির্ভর নয়) যেকোন তুলনায়, এবং হয় অনির্ধারিত আচরণ থেকে মুক্ত । এটি কোনও সতর্কতা সহ g++ -O3 -Wall -Wextra -Wpedanticএবং সাথে সংকলন করেclang++-std=c++11alচ্ছিক। এটি আইনী এবং বহনযোগ্য আইএসও সি ++ 11 :)

এটি বৈশ্বিক পরিবর্তনশীলগুলির উপরও নির্ভর করে না। এবং আমি এটিকে পরিবর্তনশীল নামের সাথে আরও অর্থ-পঠনযোগ্য করেছিলাম যার অর্থ রয়েছে।

অনন্য-বাইট গণনা: 25 , আমি যে মন্তব্যগুলি প্রত্যাহার করেছি তা বাদ দিয়েg++ -E । এবং আপনার কাউন্টারের মতো স্থান এবং নিউলাইন বাদ দিচ্ছে। আমি প্রতিটি sed 's/\(.\)/\1\n/g' ladder-nocomments.cpp | sort | uniq -ic আসরের চরিত্রের উপস্থিতি গণনা করতে এই অ্যাসুবুন্টু থেকে ব্যবহার করেছি এবং wcকতটা অনন্য চরিত্র ছিল তা গণনা করতে আমি এটি পাইপ করেছি।

#include<iostream>

int main() {
    char c{};
    c++; c++;            // c=2
    char cc(c+c+c+c);    // cc=8
    char s(cc+cc+cc+cc); // s=32 = ' ' = space in ASCII/UTF-8

    int n;
    std::cin >> n;      // end condition

    for(int r{}; r < n;) {      // r = rows counting from 0
        ++r;
        for(int i{}; i < r;) {
            ++i;
            std::cout << i << s;
        }
        std::cout << std::endl;
    }
}

কেবলমাত্র 2 টি fচরিত্রের for। এর whileপরিবর্তে আমরা লুপগুলি ব্যবহার করতে পারি w

আমরা লুপগুলির i < r || goto some_label;নীচে বা শঙ্কিত শর্তসাপেক্ষে একটি শর্তযুক্ত জাম্প লেখার জন্য লুপগুলি একটি সংসদীয়-ভাষা শৈলীতে পুনরায় লিখতে পারি w (তবে এর orপরিবর্তে ব্যবহার করা হচ্ছে ||)। নাহ, এটি কাজ করে না। পার্লের মতো এটি gotoএকটি বিবৃতিif এবং এর মত প্রকাশের উপ-উপাদান হতে পারে না। অন্যথায় আমরা এটি অক্ষর (এবং )অক্ষরগুলি সরাতে ব্যবহার করতে পারতাম ।

আমরা ট্রেড পারে fজন্য gসঙ্গে if(stuff) goto label;পরিবর্তে for, এবং উভয় লুপ সবসময় অন্তত 1 পুনরাবৃত্তির চালানোর তাই আমরা শুধুমাত্র একটি স্বাভাবিক এ এস এম মতো নীচে এক লুপ-শাখা প্রয়োজন চাই do{}whileলুপ গঠন। ব্যবহারকারী ধরে নেওয়া একটি পূর্ণসংখ্যার ইনপুট> 0 ...


চিত্র এবং ত্রিগ্রাফগুলি

সৌভাগ্যক্রমে, আইএসও সি ++ 17 হিসাবে ট্রিগ্রাফগুলি সরানো হয়েছে সুতরাং আমরা সর্বাধিক সাম্প্রতিক সি ++ রিভিশনের জন্য অনন্য-গল্ফ করছি কিনা তার ??>পরিবর্তে আমাদের ব্যবহার করতে হবে না }

কিন্তু বিশেষভাবে trigraphs: আইএসও সি ++ 17 এখনও মত digraphs হয়েছে :>জন্য ]এবং %>জন্য} । তাই ব্যবহার করে খরচে %, আমরা উভয় এড়াতে পারেন {এবং }, এবং ব্যবহার %:জন্য #2 কম অনন্য অক্ষরের একটি নেট সংরক্ষণ জন্য।

আর সি ++ মত অপারেটর কীওয়ার্ড আছে notজন্য !অপারেটর, অথবা bitorজন্য |অপারেটর। এর xor_eqজন্য ^=, আপনি এর সাথে একটি ভেরিয়েবল শূন্য করতে পারেন i xor_eq iতবে এতে একাধিক অক্ষর রয়েছে যা আপনি ব্যবহার করছেন না।

বর্তমান g++ইতিমধ্যে এমনকি ছাড়া ডিফল্টরূপে trigraphs উপেক্ষা করে -std=gnu++17; -trigraphsএগুলি সক্ষম করার জন্য আপনাকে -std=c++11বা কোনও আইএসও স্ট্যান্ডার্ডের সাথে কড়া ধারণা অর্জনের জন্য এমন কিছু ব্যবহার করতে হবে যা এতে অন্তর্ভুক্ত রয়েছে does

23 অনন্য বাইট:

%:include<iostream>

int main() <%
    int n;
    std::cin >> n;

    for(int r<% %>; r < n;) <%
        ++r;
        for(int i<%%>; i < r;) <%
            ++i;
            std::cout << i << ' ';
        %>
        std::cout << std::endl;
    %>
%>

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

চূড়ান্ত সংস্করণটি স্থান বিভাজকের 'পরিবর্তে hবা তার "জন্য একক-উদ্ধৃতি ব্যবহার করে। আমি স্টাফটি ডিগ্রাফ করতে চাইনি char c{}তাই আমি এটি মুছে ফেললাম। একটি চর মুদ্রণ করা স্ট্রিং প্রিন্ট করার চেয়ে বেশি দক্ষ, তাই আমি এটি ব্যবহার করেছি।

হিস্টোগ্রাম:

$ sed 's/\(.\)/\1\n/g' ladder-nocomments.cpp | sort | uniq -ic  | tee /dev/tty | wc -l
     15         // newline
     95         // space
     11 %
      2 '
      3 (
      3 )
      4 +
      9 :
     10 ;
     14 <
      8 >
      2 a
      4 c
      6 d
      3 e
      2 f
     12 i
      2 l
      2 m
     11 n
      5 o
      7 r
      5 s
     11 t
      3 u
25   // total lines, including space and newline

স্থান বিভাজক (এখনও অমীমাংসিত)

এখন মুছে দেওয়া উত্তরে, জোহান ডু টোইট বিশেষত একটি বিকল্প বিভাজক ব্যবহার করার প্রস্তাব করেছিলেন std::ends। এটি একটি নল চরিত্র, char(0)এবং বেশিরভাগ টার্মিনালগুলিতে শূন্য প্রস্থ হিসাবে মুদ্রণ করে। সুতরাং আউটপুট মত দেখতে হবে 1234, না 1 2 3 4। বা আরও খারাপ, ময়লা-আবর্জনার দ্বারা পৃথক করে এমন কিছু যা নিঃশব্দে ধসে পড়ে না '\0'

আপনি যদি একটি স্বেচ্ছামূলক বিভাজক ব্যবহার করতে পারেন, যখন অঙ্কটি 0তৈরি করা সহজ cout << some_zeroed_var। তবে কেউ চায় না 10203040, এটি কোনও বিচ্ছেদের চেয়েও খারাপ।

আমি স্ট্রিং আক্ষরিক ব্যবহার বা স্ট্রিং ব্যবহার না করে একটি std::stringহোল্ডিং তৈরির" " উপায় সম্পর্কে ভাবতে চেষ্টা করছিলাম char। এতে কিছু যুক্ত হতে পারে? কনস্ট্রাক্টরের মাধ্যমে দৈর্ঘ্য 1 দিয়ে একটি তৈরি করার পরে []কোনও মানকে প্রথম বাইট সেট করার জন্য একটি ডিগ্রাফ দিয়ে 32?

জোহান std::iosফিল () সদস্য ফাংশনটিও প্রস্তাব করেছিলেন যা বর্তমান ভরাট চরিত্রটি প্রদান করে। একটি স্ট্রিমের জন্য ডিফল্ট সেট করা হয় std::basic_ios::init()এবং হয় ' '

std::cout << i << std::cout.fill();প্রতিস্থাপিত << ' ';কিন্তু ব্যবহারের .পরিবর্তে'

সঙ্গে -, আমরা একটি পয়েন্টার নিতে পারেন coutএবং ব্যবহার ->fill()সদস্য ফাংশন কল করতে:
std::cout << (bitand std::cout)->fill()। বা না, আমরা হয় না ব্যবহার করছি bতাই আমরা &এর লেজিকাল সমতুলের পরিবর্তে ব্যবহার করতে পারি bitand,।

.বা ছাড়াই কোনও সদস্য ফাংশন কল করা->

এটি একটি শ্রেণীর ভিতরে রাখুন, এবং সংজ্ঞা দিন operator char() { fill(); }

// not digraphed
struct ss : std::ostream {  // default = private inheritance
//      ss() { init(); }  // ostream's constructor calls this for us
        operator char() { return fill(); }
}

তারপরে ss s{}লুপের আগে এবং লুপের std::cout << i << s;ভিতরে। দুর্দান্ত, এটি সংকলন করে এবং সঠিকভাবে কাজ করে, তবে আমাদেরphoperator char() 1. এর ক্ষয়ক্ষতির জন্য এবং ব্যবহার করতে হয়েছিল , কমপক্ষে আমরা পরিবর্তে ব্যবহার করে bসদস্য ফাংশনগুলি তৈরি করা এড়িয়ে চললাম । (এবং আমরা যে উত্তরাধিকারসূত্রে কখনও সহায়তা করে তাতে উত্তরাধিকারকে ওভাররাইড করতে পারি)।publicstructclassprotected


@JohanduToit সাথে ভাল ধারণা cout.fill()থেকেstd::ios , কিন্তু আমরা পূর্বে ব্যবহার করা হয় নি . হয়তো আমরা এটি একটি পয়েন্টার গ্রহণ এবং ব্যবহার করে একরকম কল করতে পারেন ->fill()সদস্য ফাংশন কিভাবে? কিছু কি কোনও পয়েন্টার coutবা অন্য কোনও প্রবাহকে ফিরিয়ে দেয় ?
পিটার

উফ, << (bitand std::cout)->fill()সংকলন, তবে ব্যবহার -। (টোকেনের নাম থাকা সত্ত্বেও, bitandএটি কেবল একটি সংক্ষিপ্ত সমতুল্য &, বিশেষত বিটওয়াইস এবং অপারেটর নয় It এটি অ্যাড্রেস-অফ অপারেটর হিসাবেও কাজ করে)) হুম, এমন কোনও টেম্পলেট বা ল্যাম্বডা উপাদান রয়েছে যা কোনও সদস্য কার্যের জন্য একটি পয়েন্টার পেতে পারে যে আমরা ()ব্যবহার না করে .বা করতে পারি ->?
পিটার

1
আমি যে অন্য একটি জিনিস পেয়েছি তা হ'ল এটি std::ios::leftজিসিসি-তে 32 হিসাবে সংজ্ঞায়িত করা হয়েছে তবে আমি সেটির সুবিধা নেওয়ার কোনও উপায় খুঁজে বের করতে পারি না। আমি মনে করি আমি এইটিকে যেতে দেব এবং কিছু বাস্তব কাজ করতে যাচ্ছি :-)
জোহান ডু টোইট

@ জোহান্দুয়েট: int32 টি তৈরি করা কোনও সমস্যা নয়, আমার উত্তর ইতিমধ্যে দেখায় যে শূন্য ++থেকে শুরু করে কীভাবে এটি করা যায় int c{};। তবে হ্যাঁ, আমি ল্যাম্বডাস, টেমপ্লেট বা সন্ধানের খরগোশের গর্ত থেকে নামছি না std::function। বা std::stringধারণা। কিন্তু আমরা ব্যবহার করছি না gআমরা std::stringহারানো ছাড়া আসলে একটি ঘোষণা করতে পারি না ; gotoপরিবর্তে forপ্যান আউট না ব্যবহার করার জন্য আমার ধারণা । decltype(something)আমাদের একটি charটাইপ দিতে পারে , কিন্তু আমাদের একটি খরচ y
পিটার

1
অপারেটরের জন্য আপনি চরের পরিবর্তে অটো ব্যবহার করতে পারেন: struct ss : std::ostream { operator auto () { return fill(); } };তবে এটি খুব বেশি কার্যকর হয় না।
জোহান ডু টোইট

7

সি ++ (জিসিসি) x86_64 লিনাক্স কেবল, 9295 8900 8712 6812 5590 বাইট, 18 অনন্য অক্ষর

int m[]={111111111111111+1111111111111+1111111111111+1111111111111+1111111111111+1111111111111+1111111111111+111111111+111111111+1111111+111111+11111+11111+11+11+11+11+11+1+1+1,11111111111+11111111111+11111111111+1111111111+111111111+111111111+111111111+111111+1111+1111+111+111+111+111+11+11+11+11+11+11+11+11+11+1+1+1,111111111111111+111111111111111+111111111111+111111111111+1111111111+1111111+1111111+11111+11111+11111+1111+111+111+11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1+1,111111111111111+111111111111111+1111111111111+1111111111111+11111111111+111111111+111111111+11111111+11111111+11111111+11111111+1111111+1111111+1111111+11111+1111+111+111+11+1+1+1,1111111111111+1111111111111+11111111111+11111111111+1111111111+1111111111+1111111111+111111+11111+11111+11111+11111+1111+1111+1111+1111+111+111+111+11+11+11+11+11+11,11111111111111+1111111111111+11111111111+11111111111+11111111111+1111111111+111111111+11111111+11111111+11111111+11111111+1111+1111+1111+1111+1111+1111+1111+1111+1111+111+1+1+1+1,111111111111111+1111111111111+1111111111111+1111111111111+1111111111111+11111111111+11111111111+1111111+11111+11111+1111+1111+11+11+11+11+11+11+11+1+1+1+1,111111111111+11111111111+1111111111+1111111111+1111111111+1111111111+1111111111+1111111111+11111111+11111+11111+11111+11111+11111+11111+1+1,111111111111111+11111111111111+11111111111+11111111111+1111111111+1111111+1111111+11111+111+111+111+111+111+111+111+111+11+11+1+1+1+1+1+1,11111111111+1111111111+111111111+11111111+11111111+1111111+1111111+1111111+1111111+1111111+1111111+1111111+111111+11+1+1+1+1+1+1+1,111111111111+11111111111+11111111111+11111111+1111111+1111111+111111+111111+111111+111111+111111+111111+111111+111111+111111+11111+11111+111+111+111+111+111+111+111+1+1+1+1+1+1+1,11==1,1111111111+11111111+11111111+11111111+1111111+1111111+1111111+1111111+1111111+1111+1111+1111+1111+1111+1111+1111+1111+1111+111+111+111+11+11+11+1+1+1,1111111111111+111111111111+11111111111+1111111111+111111111+111111111+11111111+111111+111111+111111+11111+1111+111+111+1+1,111111111111+111111111111+11111111111+11111111111+11111111111+11111111111+111111111+111111111+11111111+111111+1111+1111+111+111+111,111111111111+11111111111+1111111111+1111111111+111111111+1111111+111+111+1+1+1+1,111111111111111+11111111111111+1111111111111+1111111111111+111111111111+1111111111+1111111111+1111111111+1111111+111111+111111+111111+11111+11111+11111+1111+1111+111+11+11+1+1+1+1,111111111111111+1111111111111+1111111111111+11111111111+1111111111+11111111+11111111+1111+1111+1111+111+111+111+111+11+11,111111111+111111111+11111111+11111111+11111111+1111111+1111111+111111+11111+1111+1111+1111+1111+111+111+11+11+11+11+11+1+1+1+1+1+1+1+1,11111111111111+111111111111+111111111111+11111111111+111111111+111111+111111+111111+1111+1111+1111+1+1+1+1+1+1+1+1,11111111111+11111111111+11111111111+11111111111+1111111111+1111111111+11111111+1111111+1111111+1111111+1111111+111111+11111+11+11+11+1+1+1+1+1+1+1+1,111111111111111+111111111111111+111111111111+1111111111+1111111111+11111111+11111111+1111111+1111111+111111+111111+11111+11111+111+11+11+1+1+1+1+1+1+1+1+1+1,11111111111111+11111111111111+111111111111+11111111111+11111111111+1111111+1111111+1111111+1111111+1111111+1111111+11+11+11+11+11+11+11+11+1,11111111111111+11111111111111+11111111111+1111111111+11111111+1111111+1111111+1111111+1111111+1111111+1111111+11111+11111+1111+1111+1111+111+111+111+111+111+111+11,111111111111111+1111111111111+111111111111+111111111111+111111111111+11111111111+1111111111+1111111111+111111111+111111+111111+111111+111111+1111+11+1+1,111111111111111+11111111111111+111111111111+111111111111+1111111111+1111111111+111111111+11111111+1111+1111+1111+111+111+111+111+111+11+11+11+11+11+11+11+11+1+1+1+1,11111111111111+11111111111111+11111111111111+11111111111+11111111111+1111111111+11111111+1111111+11111+11111+11111+1111+111+111+111+11+11+11+11+1+1+1+1+1+1,111111111111111+11111111111111+1111111111+111111111+111111111+111111111+11111111+1111111+111111+11111+1111+1111+1111+111+111+111+111+111+111+11+11+11+11+11+11+11+11+11+1+1+1+1,111111111111111+1111111111111+1111111111111+1111111111111+1111111111+111111111+111111111+111111111+11111111+1111111+11111+1111+1111+1111+111+111+111+11,1111111111111+1111111111+11111111+11111111+11111111+11111+1111+111+111+11+11+11+11+11+11+11+11+11+1+1+1+1+1+1+1+1+1+1,11111111111111+1111111111+1111111111+111111111+11111111+1111111+1111111+1111111+111111+11111+11111+11111+11111+11111+1111+1111+1111+111+111+11+11+11+11+11+11+11+1+1+1+1+1+1+1,11111111111111+1111111111+1111111+1111111+1111111+1111111+1111111+1111111+1111111+111111+111111+11111+1111+1111+111+111+111+111+111+111+1+1+1+1+1+1,111111111111111+1111111111111+111111111+111111111+111111111+111111111+11111111+11111111+11111111+11111111+1111111+111111+11111+11111+11111+1111+111+111+111+11+11+11+11+11,1111111111+111111111+1111111+1111111+111111+111111+11111+11111+11111+11111+11111+11111+1111+1111+1111+11+11+11+11+11+11+11+11+11+1+1+1,111111111111111+111111111111+111111111111+111111111111+11111111111+1111111111+1111111111+1111111111+11111111+11111+1111+1111+111+111+111+111+111+111+111+111+1,1111111111+111111111+111111111+11111111+1111111+1111111+1111111+111111+11111+11111+11111+11111+11111+111+111+111+11+11+11+1,11111111111111+11111111111111+1111111111+1111111111+1111111111+1111111111+11111111+11111111+11111111+11111111+1111111+1111111+111+111+111+111+11+11+11+11+11+11+11+1+1,111111111111+11111111111+1111111111+111111111+111111111+111111+111111+111111+111111+11111+11111+11+11+11+11+11+1,111111111+11111+11111+111+11+1+1+1+1+1+1+1+1+1};main(){((int(*)())m)();}

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

এটি এই পিপিসি উত্তর থেকে আসা ধারণার উপর ভিত্তি করে । একটি মেশিন ল্যাঙ্গুয়েজ প্রোগ্রামটি 32 বিট ইন্টের অ্যারে হিসাবে প্রকাশ করা হয়, যার প্রতিটিকে যোগফল হিসাবে উপস্থাপন করা হয় 1+11+111...। এটি সক্রিয় আউট এটা সঙ্কেতাক্ষরে লিখা আরও দক্ষ হতে পারে যে xযেমন yযেমন যে y%(1<<32)==x। এনকোডেড মেশিন ভাষা প্রোগ্রামটি নীচে রয়েছে

0x0000000000000000:  55                         push    rbp
0x0000000000000001:  31 ED                      xor     ebp, ebp
0x0000000000000003:  53                         push    rbx
0x0000000000000004:  48 83 EC 18                sub     rsp, 0x18
0x0000000000000008:  48 8D 74 24 0C             lea     rsi, [rsp + 0xc]
0x000000000000000d:  31 C0                      xor     eax, eax
0x000000000000000f:  31 FF                      xor     edi, edi
0x0000000000000011:  6A 01                      push    1
0x0000000000000013:  5A                         pop     rdx
0x0000000000000014:  0F 05                      syscall 
0x0000000000000016:  89 C3                      mov     ebx, eax
0x0000000000000018:  85 C0                      test    eax, eax
0x000000000000001a:  74 0C                      je      0x28
0x000000000000001c:  6B ED 0A                   imul    ebp, ebp, 0xa
0x000000000000001f:  03 6C 24 0C                add     ebp, dword ptr [rsp + 0xc]
0x0000000000000023:  83 ED 30                   sub     ebp, 0x30
0x0000000000000026:  EB E0                      jmp     8
0x0000000000000028:  C7 44 24 0C 00 00 00 00    mov     dword ptr [rsp + 0xc], 0
0x0000000000000030:  FF C3                      inc     ebx
0x0000000000000032:  8B 44 24 0C                mov     eax, dword ptr [rsp + 0xc]
0x0000000000000036:  8D 78 01                   lea     edi, [rax + 1]
0x0000000000000039:  89 7C 24 0C                mov     dword ptr [rsp + 0xc], edi
0x000000000000003d:  E8 27 00 00 00             call    0x69
0x0000000000000042:  6A 20                      push    0x20
0x0000000000000044:  48 89 E6                   mov     rsi, rsp
0x0000000000000047:  52                         push    rdx
0x0000000000000048:  58                         pop     rax
0x0000000000000049:  50                         push    rax
0x000000000000004a:  5F                         pop     rdi
0x000000000000004b:  0F 05                      syscall 
0x000000000000004d:  5E                         pop     rsi
0x000000000000004e:  39 5C 24 0C                cmp     dword ptr [rsp + 0xc], ebx
0x0000000000000052:  7C DE                      jl      0x32
0x0000000000000054:  6A 0A                      push    0xa
0x0000000000000056:  48 89 E6                   mov     rsi, rsp
0x0000000000000059:  52                         push    rdx
0x000000000000005a:  58                         pop     rax
0x000000000000005b:  0F 05                      syscall 
0x000000000000005d:  5E                         pop     rsi
0x000000000000005e:  39 DD                      cmp     ebp, ebx
0x0000000000000060:  7F C6                      jg      0x28
0x0000000000000062:  48 83 C4 18                add     rsp, 0x18
0x0000000000000066:  5B                         pop     rbx
0x0000000000000067:  5D                         pop     rbp
0x0000000000000068:  C3                         ret     
0x0000000000000069:  85 FF                      test    edi, edi
0x000000000000006b:  74 2C                      je      0x99
0x000000000000006d:  89 F8                      mov     eax, edi
0x000000000000006f:  6A 0A                      push    0xa
0x0000000000000071:  59                         pop     rcx
0x0000000000000072:  48 83 EC 18                sub     rsp, 0x18
0x0000000000000076:  99                         cdq     
0x0000000000000077:  F7 F9                      idiv    ecx
0x0000000000000079:  89 C7                      mov     edi, eax
0x000000000000007b:  8D 42 30                   lea     eax, [rdx + 0x30]
0x000000000000007e:  89 44 24 0C                mov     dword ptr [rsp + 0xc], eax
0x0000000000000082:  E8 E2 FF FF FF             call    0x69
0x0000000000000087:  48 8D 74 24 0C             lea     rsi, [rsp + 0xc]
0x000000000000008c:  6A 01                      push    1
0x000000000000008e:  58                         pop     rax
0x000000000000008f:  50                         push    rax
0x0000000000000090:  5F                         pop     rdi
0x0000000000000091:  50                         push    rax
0x0000000000000092:  5A                         pop     rdx
0x0000000000000093:  0F 05                      syscall 
0x0000000000000095:  48 83 C4 18                add     rsp, 0x18
0x0000000000000099:  C3                         ret

... যা নিম্নলিখিত সি কোডের উপর ভিত্তি করে।

void print(int x){
  if( x ) {
    int y=x%10+'0';
    print(x/10);
    write(1,&y,1);
  }
}
void f() {
  int i=0,j=0,k;
  for( ;read(0,&k,1);i=i*10+k-'0' );
  do {
    for( j++,k=0; print( ++k ), write(1," ",1), k<j; );
    write(1,"\n",1);
  } while(j<i );
}

সম্পাদনা করুন: এখন এর stdinপরিবর্তে ইনপুট গ্রহণ করে argv[1]। তাদের পরামর্শের জন্য কেবলমাত্র @ এএসসিআইআই এবং @ পিটারকর্ডসকে ধন্যবাদ!

সম্পাদনা 4: সামান্যভাবে উল্লেখযোগ্যভাবে উন্নত এনকোডিং।


-wপতাকা, অনুগ্রহ: পি (এছাড়াও আপনি নাম পরিবর্তন করতে পারেন iiথেকে a)
হওয়া ASCII শুধুমাত্র

আপনার gcc -zexecstackএই দরকার , তাই না? কারণ int m[]না const। (এবং সাম্প্রতিক টুলচেনগুলি .rodataযাইহোক কোনও অ-এক্সিকিউটেবল পৃষ্ঠাতে রেখেছিল তাই 8.2.1 20181127 এবং (জিএনইউ বিন্টিলস) ২.৩১.১.১ const int m[]সহ আমার আর্চ লিনাক্স সিস্টেমটিতেও কাজ করে না )) যাইহোক, আপনি নিজের উত্তরে উল্লেখ করতে ভুলে গেছেন, তবে এটি আপনার টিআইও লিঙ্কে রয়েছে। gccld
পিটার

বিটিডাব্লু, ওপি'র অনন্য-গণনা স্কোরিং অ্যালগরিদম স্থান এবং নিউলাইন গণনা করে না, তাই আপনাকে পুরো জিনিসটি পড়ার জন্য ভয়ঙ্কর করে তুলতে হবে না, কেবল অ্যারে: পি
পিটার

আপনি অন্য ধাক্কা-তাত্ক্ষণিকের 1সাথে push %rax/ এর pop %rdiপরিবর্তে অনুলিপি করে মেশিন-কোড বাইটগুলি সংরক্ষণ করতে পারেন । বা আরও সহজভাবে, এমন মানগুলির জন্য যা -৪-বিট নয়, অর্থাত্ নন-পয়েন্টার, 2-বাইট mov %eax, %edi। এছাড়াও, লিনাক্স syscallতার ইনপুট রেজিস্টারগুলি ধ্বংস করে না, কেবল raxনির্দেশটি কীভাবে syscallকাজ করে তার অংশ হিসাবে কেবল রিটার্ন মান এবং আরসিএক্স + আর 11 সংরক্ষণিত আরআইপি এবং আরএফএলএজিএস সহ । সুতরাং আপনি ছেড়ে যেতে পারেন rdiএবং কলগুলি জুড়ে rdxসেট করতে 1পারেন এবং বিভিন্ন রেগ ব্যবহার করতে পারেন। এছাড়াও, আরবিএক্স কল-সংরক্ষিত, তাই এটি ক্লোবার মেইনের আরবিএক্সে সংরক্ষণ করা যায় না। এটি কাজ করার কারণ সিআরটি শুরুর কোডের যত্ন নেই।
পিটার

6

21 টি অনন্য অক্ষর + 1 অপরিবর্তনযোগ্য নিউলাইন

%:include<iostream>
int(n)(int(i))<%
    if(--i)if(n(i))<%%>
    if(i)if(std::cout<<i<<std::addressof(std::cout)->fill())<%%>
%>
int(l)(int(i))<%
    if(n(-(--i)))<%%>
%>
int(m)(int(i))<%
    if(--i)if(m(i))<%%>
    if(i)if(l(-i))<%%>
    if(i)if(std::cout<<std::endl)<%%>
%>
int(c)(int(i))<%
    if(m(-(--i)))<%%>
%>
int(main)(int(i))<%
    if(std::cin>>i)<%%>
    if(c(-i))<%%>
%>

প্রথম নিউলাইন বাদে হোয়াইটস্পেসের প্রয়োজন হয় না। জি ++ 7.3.0 এ সংকলিত।

ব্যবহৃত অক্ষর: %:include<ostram>()f-

অন্যান্য উত্তরের উন্নতি:

  1. forলুপগুলিতে ifএবং পুনরাবৃত্তি পরিবর্তন করে সেমিকোলনগুলি সরানো হয়েছে ।
  2. দ্বারা স্থান অক্ষর পেয়েছেন std::addressof(std::cout)->fill(), ওরফে std::cout.fill()

এসটিডি :: addressof, চমৎকার!
জোহান ডু টোইট

2

21 শ্বেতস্থান বাদ দিয়ে 20 টি অনন্য অক্ষর

সমস্ত সাদা স্পেসগুলিকে নতুন লাইনে পরিবর্তন করা যেতে পারে।

%:include<iostream>
%:include<list>
int n;
const int co<%%>;
const int ci<%not co%>;
const int cmu<%-ci-ci-ci-ci%>;
const char ctd<%-cmu-cmu-cmu-cmu-cmu-cmu-cmu-cmu%>;
const int cia<%-ctd-ctd-ctd-ctd-ctd-cmu%>;
const int ciu<%cia- -ci- -ci%>;

struct<%struct<%struct<%struct<%struct<%struct<%struct<%
int c<:ctd-ci:>;
%>d<:ctd:>;int c<:ctd-ci:>;%>d<:ctd:>;int c<:ctd-ci:>;
%>d<:ctd:>;int c<:ctd-ci:>;%>d<:ctd:>;int c<:ctd-ci:>;
%>d<:ctd:>;int c<:ctd-ci:>;%>d<:-cmu:>;int c<:-ci-cmu:>;
%>e<:co:><:ctd:><:ctd:><:ctd:><:ctd:><:ctd:><:ctd:>;

int i<:co:>;
auto ia<%e%>;
auto iu<%e%>;
int l<%std::cin>>n and co%>;

struct s<%
    int c<%std::cout<<i<:ciu:>- --i<:cia:><<ctd and n%>;
%>;
struct o<%
    int c<%--ia and n%>;
%>;
struct t<%
    std::list<s>c<%- --l%>;
    std::list<o>r<%-l%>;
    int m<%std::cout<<std::endl and n%>;
%>;
std::list<t>a<%n%>;
int main;

Segfault সঙ্গে প্রস্থান করুন। ব্যবহৃত অক্ষর: %:include<ostram>;-h

এটি একটি 64 বিট লিনাক্সের এই নির্দিষ্ট সংকলক সংস্করণে কাজ করে:

g++-5 (Ubuntu 5.5.0-12ubuntu1) 5.5.0 20171010

প্যারামিটার সহ:

-std=c++17

তারপরেও, আমি নিশ্চিত না যে এটি সর্বদা কার্যকর হবে। এটি অন্যান্য অনেক কিছুর উপরও নির্ভর করে। ciaএবং ciuমেমরি অফসেটগুলি 4 ia iuএবং এর মধ্যে 4 দ্বারা বিভক্ত হয় i। ( intএই সংস্করণে 32 বিট।) আসল অফসেটটির সাথে মেলে তুলতে আপনাকে সংখ্যাগুলি পরিবর্তন করতে হতে পারে। এগুলি ঠিকানাগুলি যদি কোনও কাঠামোর মধ্যে থাকে তবে ঠিকানাগুলি আরও অনুমানযোগ্য হবে। দুর্ভাগ্যক্রমে autoকোনও স্ট্রাক্টে অ স্থির থাকার অনুমতি নেই।

e(2 32 -1) 32 2 32 বাইটের আকার সহ একটি উপাদান টাইপের 0-উপাদান অ্যারে ray যদি সম্পর্কিত পয়েন্টার ধরণের eপ্রবণতা হ্রাস পায় তবে পয়েন্টারের উচ্চতর অর্ধেকটি (2 32 -1) দ্বারা হ্রাস পাবে , যা এক দ্বারা বাড়ানোর সমতুল্য। এটি সাম্যতার চিহ্ন ব্যবহার না করে হ্রাস হওয়া কাউন্টারটিকে পুনরায় সেট করতে পারে।

আরও যুক্তিসঙ্গত সংস্করণ যা আরও নির্ভরযোগ্যতার সাথে কাজ করা উচিত, তবে আরও একটি চরিত্র ব্যবহার করে =:

%:include<iostream>
%:include<list>
int n;
int ci<%not n%>;
int cmu<%-ci-ci-ci-ci%>;
char ctd<%-cmu-cmu-cmu-cmu-cmu-cmu-cmu-cmu%>;
int i;
int l<%std::cin>>n and n-n%>;

struct s<%
    int c<%std::cout<<- --i<<ctd and n%>;
%>;
struct t<%
    std::list<s>c<%- --l%>;
    int r<%i=n-n%>;
    int m<%std::cout<<std::endl and n%>;
%>;
std::list<t>a<%n%>;
int main;

এমনকি এটি জি ++ এর সর্বশেষতম সংস্করণেও কাজ করে না কারণ এটি mainআর কোনও স্বেচ্ছাচারিত ধরণের সংজ্ঞায়িত করার অনুমতি দেয় বলে মনে হয় না।

এই দুটি প্রোগ্রামে প্রথম বন্ধনী ব্যবহার করা হয় না। তবে সেমিকোলনগুলি এড়ানো যায় বলে মনে হয় না।


1

22 সাদা জায়গা বাদে অনন্য অক্ষর। উইন্ডোতে সঠিকভাবে প্রদর্শন করা হয় এমন একটি এনওলির অক্ষরের সাথে সংখ্যাগুলি পৃথক করে।

%:include<iostream>
int main(int n)<%
    std::cin>>n;
    for(int r<%%>;r++<n;)<%
        for(int i<%%>;i<r;)
            std::cout<<++i<<std::ends;
        std::cout<<std::endl;
    %>
%>

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

হিস্টোগ্রাম:

[%] 0x25 = 9
[:] 0x3A = 11
[)] 0x29 = 3
[i] 0x69 = 11
[n] 0x6E = 12
[c] 0x63 = 4
[l] 0x6C = 2
[u] 0x75 = 3
[d] 0x64 = 8
[e] 0x65 = 4
[<] 0x3C = 13
[o] 0x6F = 5
[s] 0x73 = 7
[t] 0x74 = 12
[r] 0x72 = 6
[a] 0x61 = 2
[m] 0x6D = 2
[>] 0x3E = 7
[(] 0x28 = 3
[;] 0x3B = 7
[f] 0x66 = 2
[+] 0x2B = 4
Unique Characters: 22
Total Characters: 189

std :: প্রান্তগুলি একটি NUL অক্ষর ( char(0)), কোনও স্থান নয় ( char(32)ASCII / UTF-8 এ)। en.cppreferences.com/w/cpp/io/manip/ends । আমি এটি নিশ্চিত করার জন্য আমার লিনাক্স ডেস্কটপে চেষ্টা করেছিলাম এবং আউটপুটটি দেখে মনে হয় 1234, না 1 2 3 4। এটি আপনার টিআইও আউটপুটে একইভাবে দেখায়!
পিটার কর্ডেস

@ পিটারকর্ডস, ওপি নির্দিষ্ট করে না যে সংখ্যাগুলি কীভাবে আলাদা করা উচিত ;-)
জোহান ডু টোইট

আপনি কি সত্যিই মনে করেন তারা একটি অক্ষর বরবাদ হয়ে যেত "জন্য " "যদি তারা ব্যবহার করতে পারতেন iiiiসঙ্গে আলাদা '0'জন্য 10203040? আমার ধারণা আপনি একটি কেস তৈরি করতে পারেন যে প্রোগ্রামের বাইনারি আউটপুটটিতে এখনও একটি বিভাজক রয়েছে, তবে এই পরিবর্তনটি নির্দেশ করে এবং ইংরেজিতে এটি বর্ণনা করা আপনার উত্তরের জন্য গুরুত্বপূর্ণ, কারণ এটি কোনও ড্রপ-ইন প্রতিস্থাপন নয়! আপনি যদি উত্তরটি এর ব্যাখ্যা ও ন্যায়সঙ্গত করার জন্য প্রসারিত করেন তবে আমার ডাউনটোটটি সরিয়ে ফেলতে আমি খুশি হব।
পিটার

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