अद्वितीय वर्णों की कम से कम संख्या का उपयोग करके पूर्णांक की सीढ़ी बनाएँ (C ++ में)


13

मैं कोड गोल्फ के खेल में नया हूं। मैं C ++ में अद्वितीय वर्णों की न्यूनतम संख्या का उपयोग करके पूर्णांकों की एक सीढ़ी बनाने की कोशिश कर रहा हूं।

मान लीजिए कि हमें एक पूर्णांक 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 का उपयोग करता है। मुझे यकीन नहीं है कि इसे आगे कैसे अनुकूलित किया जाए।

क्या कोई मुझे यह सलाह दे सकता है कि इसे आगे कैसे अनुकूलित किया जाए (उपयोग किए गए अद्वितीय वर्णों की संख्या के संदर्भ में)? कृपया ध्यान दें कि केवल C ++ का उपयोग किया जा सकता है।


5
कोड-गोल्फ की तुलना में किसी अन्य स्कोरिंग मानदंड के बारे में युक्तियों के लिए पूछना निश्चित रूप से उपन्यास है , लेकिन afaict, यह ऑन-टॉपिक है, क्योंकि टिप्स पेज कहते हैं कि यह एक प्रोग्रामिंग चुनौती का बेहतर जवाब है जो ऑन-टॉपिक है
शाम

8
@LuisMendo मुझे नहीं लगता कि इस मामले में यह सच है, क्योंकि कई भाषाएँ पूरी तरह से इस स्कोरिंग योजना को तुच्छ बनाती हैं। यदि यह उपयोगकर्ता "अद्वितीय गोल्फ" सीखने में मदद करना चाहता है, तो यह केवल भाषाओं के सबसेट में ही समझ में आता है, इसलिए मुझे लगता है कि यह एक सामान्य चुनौती की तुलना में एक टिप के रूप में बहुत बेहतर है। कहा कि अगर कोई इसे पोस्ट करना चाहे तो आधार समस्या एक चुनौती हो सकती है।
FryAmTheEggman

3
मुझे लगता है कि आप घुंघराले ब्रेसिज़ के बजाय डिग्राफ <% और%> का उपयोग कर सकते हैं, और मुझे लगता है कि मैंने कुछ याद किया।
मेरा सर्वनाम

2
मैं निश्चित रूप से कुछ याद किया। #% :, है, इसलिए आप तीन वर्णों से छुटकारा पा सकते हैं और एक ({=> <%,} =>%>, # =>% :) का परिचय कर सकते हैं और 25 से प्राप्त कर सकते हैं। यदि आप इसे नीचे दिए गए उत्तर के साथ जोड़ते हैं, तो मैं लगता है कि आप 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>सभी को समाप्त कर सकते हैं :। महान कोडिंग अभ्यास नहीं है, लेकिन यह बिंदु के बगल में है।
डारेल हॉफमैन

3
@DarrelHoffman मुझे वह काम नहीं मिल सकता है, आपको ऐसा करने की ज़रूरत नहीं है using namespace std;जो इसके लिए एक अतिरिक्त पी का उपयोग करेगा: तो एक शुद्ध 0
एक्सपायर डेटा

हम्म। हो सकता है, मेरा C ++ एक बालक जैसा हो। इसके अलावा g, मुझे लगता है कि एक शुद्ध नुकसान कहते हैं । यदि यह कोड सोने थे, हम नाम बदलकर बाइट गिनती कम कर सकता है ii, iiiऔर iiiiअन्य एकल पत्र के नाम करने के लिए (किसी अन्य पहले से ही इस्तेमाल किया पत्र लेने), लेकिन यह इस चुनौती के बारे में, क्या है तो मैं नहीं लगता है कि नहीं है। मैं सोच रहा था कि अगर कोई लाभ होगा getcऔर putcइसके बजाय cin/ का उपयोग coutकरना होगा, तो उसे करने की कोशिश करनी होगी।
डारेल हॉफमैन

1
मेरी गलती। मैं बस फिर से चेकर के माध्यम से पढ़ता हूं। ऐसा लगता है कि न्यूलाइन वर्ण को अनदेखा किया गया है। इसलिए वास्तव में नई खबरों को हटाने की जहमत उठाने की जरूरत नहीं है। लेकिन आपकी रणनीति और टिप्पणियों में @someone द्वारा समाधान के साथ संयुक्त, मैं इसे 24 वर्णों में लाने में कामयाब रहा। मैंने इंट के बजाय शॉर्ट का उपयोग करके कार्यक्रम को और भी तेज कर दिया। इसलिए मुझे एक अतिरिक्त 'एच' चरित्र मिला। लेकिन यह मुझे अतिरिक्त लागत के बिना चार डेटाटाइप का उपयोग करने देता है। इसलिए मैंने चरित्र कोड का उपयोग करके "चरित्र" से छुटकारा पा लिया।
डोनाल्ड

@ लांसहाओ: ध्यान दें कि हस्ताक्षर किए गए पूर्णांक ओवरफ्लो में C ++ में अपरिभाषित व्यवहार है, जिसमें सभी हस्ताक्षरित प्रकार शामिल हैं signed char। यदि आप सक्षम किए गए अनुकूलन के साथ संकलित करते हैं, तो यह कोड आधुनिक संकलक के साथ टूट सकता है, जब तक कि आप gcc -fwrapvहस्ताक्षरित अतिप्रवाह को 2 के पूरक रैप-अराउंड के रूप में अच्छी तरह से परिभाषित करने के लिए उपयोग न करें । -fwrapvभी समर्थन करता है। ( unsignedपूर्णांक प्रकारों unsigned charमें ISO C ++ में अच्छी तरह से परिभाषित व्यवहार (रैप-अराउंड) शामिल है)। यह ABI पर निर्भर करता है कि क्या charहै signed charया unsigned charहै, तो charठीक हो सकता है।
पीटर कॉर्ड्स

10

मुझे आख़िरकार @ExpiredData और @someone के उत्तरों को मिलाकर 24 अद्वितीय वर्ण मिले। इसके अलावा, इंट के बजाय शॉर्ट डेटा टाइप का उपयोग करने से मेरे प्रोग्राम को गति देने में मदद मिली क्योंकि शॉर्ट डेटा टाइप को ओवरफ्लो करने में कम समय लगता है।

मेरा कोड इस प्रकार है।

%: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
@ केविनक्रूजसेन यह सच है। लेकिन इससे मुझे "चरित्र को हटाने की अनुमति मिलती है क्योंकि मैं अंतरिक्ष वर्ण का प्रतिनिधित्व करने के लिए चरित्र कोड का उपयोग कर सकता हूं। इसलिए उपयोग किए गए अद्वितीय वर्णों में शुद्ध अंतर = 0.
डोनाल्ड

9

Digraphs का उपयोग करते हुए 23 अद्वितीय वर्ण। (25 बिना)। कोई यूबी नहीं।

int var{};बचने के लिए शून्य के साथ एक पूर्णांक को सूचीबद्ध करने के लिए C ++ 11 लटके हुए आरंभिक सिंटैक्स का उपयोग करें= और 0। (या आपके मामले में, वैश्विक से बचनाiiii )। यह आपको वैश्विक चरों के अलावा शून्य का स्रोत देता है (जो स्थानीय लोगों के विपरीत शून्य से आरंभिक होता है)।

वर्तमान संकलक डिफ़ॉल्ट रूप से इस वाक्यविन्यास को स्वीकार करते हैं, बिना किसी विशेष विकल्प को सक्षम किए।

(पूर्णांक रैपराउंड चाल मजेदार है, और अनुकूलन अक्षमता के साथ गोल्फ के लिए ठीक है, लेकिन हस्ताक्षरित अतिप्रवाह आईएसओ सी ++ में अपरिभाषित व्यवहार है। अनुकूलन को सक्षम करने से उन रैपराउंड छोरों को अनंत छोरों में बदल दिया जाएगा, जब तक कि आप जीसीसी / क्लैंग के लिए संकलन नहीं करते। -fwrapv हस्ताक्षरित पूर्णांक को अच्छी तरह से देने के लिए को निर्धारित व्यवहार: 2 का पूरक आवरण।

मजेदार तथ्य: ISO C ++ std::atomic<int>में अच्छी तरह से परिभाषित 2 का पूरक रैप-अराउंड है! int32_t2 के पूरक होने की आवश्यकता है अगर सभी पर परिभाषित किया गया है, लेकिन अतिप्रवाह व्यवहार अपरिभाषित है, इसलिए यह अभी भी किसी भी मशीन के लिए intया longजहां किसी भी प्रकार का 32 बिट्स है, कोई पैडिंग नहीं है, और 2 का पूरक है, एक टाइपराइफ हो सकता है ।)


इस विशिष्ट मामले के लिए उपयोगी नहीं:

आप एक मौजूदा चर की एक प्रति के रूप में या तो ब्रेसिज़ (या एक गैर-खाली इनिशलाइज़र के साथ) के रूप में एक नया वेरिएबल इनिशियलाइज़ कर सकते हैं, डायरेक्ट इनिशियलाइज़ेशन के लिए
int a(b)या के int a{b}बराबर हैंint a = b;

लेकिन int b();शून्य के लिए एक चर के बजाय एक फ़ंक्शन की घोषणा करता है।

इसके अलावा, आप एक शून्य के साथ int()या char(), एक अनाम वस्तु के शून्य-आरंभीकरण प्राप्त कर सकते हैं ।


हम आपकी <=तुलना को <एक साधारण तर्क परिवर्तन द्वारा तुलना के साथ बदल सकते हैं : लूप के नीचे के बजाय लूप-काउंटर वेतन वृद्धि की तुलना करें। IMO यह उन लोगों की तुलना में सरल है, जिन्हें लोगों ने प्रस्तावित किया है, जैसे ++कि for()0 का 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;)लेकिन IMO मनुष्य के लिए पढ़ना आसान है। हम कुल बाइट गिनती के लिए अनुकूलन नहीं कर रहे हैं।


हम पहले से ही उपयोग कर रहे थे 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++11वैकल्पिक है। यह कानूनी और पोर्टेबल आईएसओ सी ++ 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;के तल पर सशर्त छलांग लिखने के लिए एक असेंबली-भाषा शैली में लूप को फिर से लिख सकते हैं, या जो भी हो। (लेकिन orइसके बजाय का उपयोग कर ||)। नहीं, यह काम नहीं करता है। gotoयह एक कथन की तरह है ifऔर यह पर्ल में एक अभिव्यक्ति का उप-घटक नहीं हो सकता है। अन्यथा हम इसका इस्तेमाल चरित्र (और )चरित्र को हटाने के लिए कर सकते थे ।

हम व्यापार कर सकता है fके लिए gके साथ if(stuff) goto label;के बजाय for, और दोनों छोरों हमेशा कम से कम 1 यात्रा को चलाने इसलिए हम केवल एक सामान्य एएसएम की तरह, तल पर एक पाश शाखा आवश्यकता होगी do{}whileपाश संरचना। उपयोगकर्ता इनपुट को पूर्णांक मानते हुए> 0 ...


डिग्राफ और ट्रिग्राफ

सौभाग्य से, ट्रिग्राफ को ISO C ++ 17 के रूप में हटा दिया गया है , इसलिए हमें इसका उपयोग ??>करने की आवश्यकता नहीं है }यदि हम सबसे हालिया C ++ संशोधन के लिए अद्वितीय-गोल्फिंग कर रहे हैं।

लेकिन केवल विशेष रूप से trigraphs: आईएसओ सी ++ 17 अभी भी तरह द्वि आलेख है :>के लिए ]और %>के लिए} । का उपयोग कर की कीमत पर तो %, हम दोनों से बच सकते हैं {और }, और उपयोग %:के लिए# 2 कम अनन्य पात्रों का शुद्ध बचत के लिए।

और सी ++ की तरह ऑपरेटर कीवर्ड शामिल हैं notके लिए !ऑपरेटर, या bitorके लिए |ऑपरेटर। साथ xor_eqके लिए ^=, आप के साथ एक चर शून्य सकता हैi xor_eq i , लेकिन यह कई पात्रों आप प्रयोग नहीं कर रहे थे है।

वर्तमान g++पहले से ही बिना डिफ़ॉल्ट रूप से ट्रिगर को अनदेखा करता है -std=gnu++17; आपको -trigraphsउन्हें सक्षम करने के लिए उपयोग करना है, या -std=c++11आईएसओ मानक के अनुरूप होने के लिए कुछ है जो उन्हें शामिल करता है।

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। शायद यह कुछ करने के लिए? शायद एक []बाइट के साथ पहले बाइट को मान के लिए सेट करने के लिए32 , एक निर्माण के दौरान लंबाई 1 के साथ एक बनाने के बाद?

जोहान ने 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केवल एक समतुल्य समतुल्य है &, विशेष रूप से बिटवाइज़-एंड ऑपरेटर के रूप में नहीं। यह एड्रेस-ऑफ़ ऑपरेटर के रूप में भी काम करता है।) हम्म, कुछ टेम्पलेट या लैम्ब्डा सामान हैं जो एक सदस्य फ़ंक्शन को पॉइंटर प्राप्त कर सकते हैं। कि हम ()का उपयोग कर .या बिना कर सकते हैं ->?
पीटर कॉर्डेस

1
केवल एक चीज जो मुझे मिली वह यह है कि std::ios::left32 को gcc में परिभाषित किया गया है, लेकिन मैं वास्तव में इसका लाभ उठाने का तरीका नहीं खोज सका। मुझे लगता है कि मैं इसे जाने
जोहान डू टेट

@JohanduToit: int32 बनाना कोई समस्या नहीं है, मेरा जवाब पहले से ही दिखाता है कि ऐसा कैसे करना है जो ++एक int c{};शून्य से शुरू होता है। लेकिन हाँ, मैं भेड़ के बच्चे को लैंबडास, टेम्प्लेट, या में देखने के खरगोश के छेद के नीचे नहीं जा रहा हूं std::function। या std::stringविचार है। लेकिन हम उपयोग नहीं कर gरहे हैं हम वास्तव में std::stringबिना खोए घोषित नहीं कर सकते हैं ; gotoबजाय forबाहर पैन के लिए उपयोग करने के लिए मेरा विचार । decltype(something)हमें एक charप्रकार दे सकता है , लेकिन हमें लागत y
पीटर कॉर्ड्स

1
आप opeator के लिए चार के बजाय ऑटो का उपयोग कर सकते हैं: struct ss : std::ostream { operator auto () { return fill(); } };लेकिन यह ज्यादा मदद नहीं करता है।
जोहान डू टिट

7

C ++ (gcc) 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)();}

इसे ऑनलाइन आज़माएं!

यह इस PPCG उत्तर के विचारों पर आधारित है । एक मशीन भाषा कार्यक्रम को 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

... जो निम्नलिखित C कोड पर आधारित है।

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]। @ ASCII-only और @PeterCordes को उनके सुझावों के लिए धन्यवाद!

Edit4: थोड़ा बेहतर एन्कोडिंग।


-wझंडा कृपया: पी (यह भी आप नाम बदल सकते हैं iiकरने के लिए a)
ASCII-केवल

आपको इसके gcc -zexecstackलिए सही चाहिए? क्योंकि int m[]नहीं है const। (और हाल ही .rodataमें एक गैर-निष्पादन योग्य पेज में डाल दिया गया है, तो यहां तक ​​कि 8.2.1 20181127 और (GNU Binutils) 2.31.1 के const int m[]साथ मेरे आर्क लिनक्स सिस्टम पर भी काम नहीं करता है ।) वैसे भी, आप अपने जवाब में इसका उल्लेख करना भूल गए। लेकिन यह आपके TIO लिंक में है। gccld
पीटर कॉर्ड्स

BTW, ओपी का यूनिक-काउंट स्कोरिंग एल्गोरिथ्म स्पेस और न्यूलाइन की गिनती नहीं करता है, इसलिए आपको पढ़ने के लिए पूरी चीज़ को भयानक बनाने की ज़रूरत नहीं है, बस सरणी: P
पीटर कॉर्डेस

आप मशीन-कोड बाइट्स को दूसरे पुश-तत्काल के 1साथ push %rax/ कॉपी करके बचा सकते हैं pop %rdi। या अधिक बस, उन मानों के लिए जो 64-बिट, यानी नॉन-पॉइंटर्स, 2-बाइट नहीं हैं mov %eax, %edi। इसके अलावा, लिनक्स syscallअपने इनपुट रजिस्टर को नष्ट नहीं करता है, केवल raxरिटर्न वैल्यू और RCX + R11 के साथ सेव किए गए RIP और RFLAGS के syscallनिर्देश के रूप में काम करता है। तो आप छोड़ सकते हैं rdiऔर कॉल भर में rdxसेट कर सकते 1हैं, और विभिन्न रजिस्टरों का उपयोग कर सकते हैं । इसके अलावा, आरबीएक्स कॉल-संरक्षित है, इसलिए यह वास्तव में क्लोबर के मुख्य आरबीएक्स को बचाने के लिए नहीं है। यह काम करने के लिए होता है क्योंकि CRT प्रारंभ कोड परवाह नहीं करता है।
पीटर कॉर्डेस

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()

std :: 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;

सेगफॉल्ट के साथ बाहर निकलता है। खेतों में प्रयुक्त वर्ण: %:include<ostram>;-h

यह 64 बिट लिनक्स पर इस विशिष्ट संकलक संस्करण में काम करता है:

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

पैरामीटर के साथ:

-std=c++17

फिर भी, मुझे यकीन नहीं है कि यह हमेशा काम करेगा। यह बहुत सी अन्य बातों पर भी निर्भर करता है। ciaऔर ciu4 के बीच में विभाजित की गई मेमोरी ऑफ़सेट हैं ia iuऔर i। ( intइस संस्करण में 32 बिट है।) आपको वास्तविक ऑफसेट से मिलान करने के लिए संख्याओं को बदलना पड़ सकता है। यदि वे सभी किसी संरचना में सम्‍मिलित हैं, तो पते बहुत अधिक अनुमानित होंगे। दुर्भाग्य से गैर-स्थिर autoकी संरचना में अनुमति नहीं है।

e(0 32 -1) × 2 32 बाइट्स के आकार वाले तत्व प्रकार का 0-तत्व सरणी है । यदि संबंधित पॉइंटर प्रकार 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;

यहां तक ​​कि यह g ++ के नवीनतम संस्करण में काम नहीं करता है क्योंकि यह mainअब मनमाने ढंग से परिभाषित करने की अनुमति नहीं देता है।

ये दो कार्यक्रम कोष्ठक का उपयोग नहीं करते हैं। लेकिन तब अर्धविराम नहीं लगते।


1

व्हाट्सएप को छोड़कर 22 अनोखे किरदार। NUL वर्ण के साथ संख्याओं को अलग करता है जो विंडोज पर सही ढंग से प्रदर्शित होता है।

%: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.cppreference.com/w/cpp/io/manip/ends । मैंने यह सुनिश्चित करने के लिए अपने लिनक्स डेस्कटॉप पर कोशिश की, और आउटपुट जैसा दिखता है 1234, नहीं 1 2 3 4। यह आपके TIO आउटपुट पर समान दिखता है!
पीटर कॉर्डेस

@PeterCordes, ओपी निर्दिष्ट नहीं करता है कि संख्याओं को कैसे अलग किया जाना चाहिए;;
जोहान डू टिट

क्या तुम सच में लगता है कि वे पर एक चरित्र बर्बाद होता "के लिए " "अगर वे इस्तेमाल किया जा सकता था iiiiके साथ अलग करने के लिए '0'के लिए 10203040? मुझे लगता है कि आप एक ऐसा मामला बना सकते हैं जो प्रोग्राम के बाइनरी आउटपुट में अभी भी एक विभाजक है, लेकिन इस बदलाव को इंगित करना और इसे अंग्रेजी में वर्णन करना आपके उत्तर के लिए महत्वपूर्ण है, क्योंकि यह ड्रॉप-इन प्रतिस्थापन नहीं है! यदि आप अपने उत्तर को विस्तार से बताने और समझाने का औचित्य साबित करते हैं, तो मुझे अपने पतन को दूर करने में खुशी होगी।
पीटर कॉर्डेस

1
@PeterCordes, प्वाइंट लिया गया।
जोहान डू टेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.