sql - शनल - पीएल/एसक्यूएल में एक वर्णमाला पिरामिड छपाई




रिलेशनल डेटाबेस क्या है (4)

मेरे पास एक प्रोग्राम लिखना है जो इस तरह वर्णमाला पिरामिड को प्रिंट करता है:

    A
   ABA
  ABCBA
 ABCDCBA
ABCDFDCBA

कार्य INSTR, एलपीएडी, यूपीईआर का भी सुझाव देता है।

मुझे पिरामिड में रखना है जिसमें वर्णमाला के सभी अक्षर शामिल हैं I हालांकि, मुझे लगता है कि पहले संख्या में इसे बनाना आसान है:

IF x in 0..25 loop
dbms_output.put_line(x);
end loop;
end; 

परिणाम 0-25 से संख्याओं की सीधी रेखा है। मैं नहीं जानता कि संख्याओं से पहले रिक्त स्थान कैसे जोड़ना है, जो आखिरकार अक्षरों की आवश्यकता है, ताकि पिरामिड आकार बना सके। कृपया पूरा जवाब न दें, मुझे इस कार्य को हल करने के लिए कुछ सुझाव और गंभीरताएं की आवश्यकता है।

https://code.i-harness.com


ऐसा करने का एक तरीका पिरामिड के आधार को उत्पन्न करना है:

  • CHR(n) एक एएससीआईआई वर्ण पैदा करेगा; तथा
  • आप तार के साथ जोड़ सकते हैं || इतना str := str || CHR(65) str := str || CHR(65) स्ट्रिंग के अंत में A को जोड़ देगा।
  • FOR i IN [REVERSE] 1 .. repetitions LOOP स्टेटमेंट का प्रयोग मूल्यों के माध्यम से लूप के लिए किया जा सकता है।

यदि आप बेस जनरेट कर सकते हैं तो TRANSLATE फ़ंक्शन 1-से-1 पत्राचार में अन्य वर्णों के साथ कई अक्षर को बदल सकता है:

  • TRANSLATE( 'ABC', 'ABC', ' A' ) आउटपुट ' A'
  • TRANSLATE( 'ABC', 'ABC', ' AB' ) आउटपुट ' AB'
  • TRANSLATE( 'ABC', 'ABC', 'ABC' ) आउटपुट 'ABC'

यदि आपने पिरामिड का आधार बनाया है, तो आपके पास एक स्ट्रिंग है जहां उप-स्ट्रिंग उन अक्षरों से शुरू होती है और आपको बस रिक्त स्थान के साथ उचित लंबाई के उप-स्ट्रिंग की आवश्यकता होती है।

DBMS_OUTPUT.PUT_LINE( string ) कंसोल में एक स्ट्रिंग प्रिंट करेंगे

पूर्ण समाधान - लिंक का अनुसरण न करें यदि आप यह जानना नहीं चाहते हैं कि यह कैसे हुआ


दो सुझाव:

पहली पंक्ति में 1 अक्षर हैं, दूसरी पंक्ति 3 अक्षरों में, तीसरे पंक्ति में 5 अक्षरों ... तो 1,3,5,7,9 .... अनंत के लिए मैं समझ नहीं पाया कि आप क्या चाहते हैं:

IF x in 0..25 loop

आपके dbms_output के लिए ब्रेक लाइन वर्ण है:

chr(13)||chr(10) -> Windows
chr(10) -> Unix

आदर्श खंड का उपयोग करते हुए शुद्ध एसक्यूएल

select lpad(x1, 26, ' ') || substr(x2, 2) x from dual
model
dimension by (1 id)
measures (cast(null as varchar2(26)) x1, cast(null as varchar2(26)) x2)
(x1[for id from 1 to 26 increment 1] = x1[cv(id)-1] || chr(64+cv(id)),
x2[for id from 1 to 26 increment 1] = chr(64+cv(id)) || x2[cv(id)-1]);

X
---------------------------------------------------
                         A
                        ABA
                       ABCBA
                      ABCDCBA
                     ABCDEDCBA
                    ABCDEFEDCBA
                   ABCDEFGFEDCBA
                  ABCDEFGHGFEDCBA
                 ABCDEFGHIHGFEDCBA
                ABCDEFGHIJIHGFEDCBA
               ABCDEFGHIJKJIHGFEDCBA
              ABCDEFGHIJKLKJIHGFEDCBA
             ABCDEFGHIJKLMLKJIHGFEDCBA
            ABCDEFGHIJKLMNMLKJIHGFEDCBA
           ABCDEFGHIJKLMNONMLKJIHGFEDCBA
          ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
         ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
 ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA

26 rows selected.

अद्यतन करें। मस्ती के लिए, एकल नियम के साथ एक ही परिणाम

select lpad(' ', 26 - ceil(length(x)/2), ' ')  || x as x from dual
model
dimension by (1 id)
measures (cast(null as varchar2(51)) x)
(x[for id from 1 to 26 increment 1] = substr(x[cv(id)-1], 1, cv(id)-1) || chr(64+cv(id)) || substr(x[cv(id)-1], cv(id)-1));

select lpad(' ', 26 - ceil(length(x)/2), ' ')  || x as x
from (select 'A' x from dual union all select 'ABA' from dual)
model
dimension by (rownum id)
measures (cast(x as varchar2(51)) x)
(x[for id from 3 to 26 increment 1] = regexp_replace(x[cv(id)-1], '(.)(.)\1', '\1\2' || chr(64+cv(id)) || '\2\1'));

आप एसक्यूएल में यह सब कर सकते हैं। यह टॉड में काम करता है (एक स्क्रिप्ट के रूप में चला जाता है; F5) नोट मुझे "अमान्य संख्या" त्रुटि मिली जब तक कि दूसरे regexp_substr कॉल में TO_NUMBER () कॉल में "स्तर -1" लपेट नहीं किया।

संकेत: पंक्तियों के माध्यम से लूप का निर्माण करके कनेक्ट करें का उपयोग करें। कनेक्ट द्वारा स्वचालित रूप से एक वेरिएबल level उपलब्ध कराया जाता level जो प्रत्येक पुनरावृत्तियों के लिए बढ़ता है।

पैटर्न के लिए देखो कितने पंक्तियों की अपेक्षा की जाती है? प्रत्येक पंक्ति के लिए पहले अक्षर के सामने कितने स्थान हैं? क्या चर उपलब्ध हैं जो आप गणना में हेरफेर कर सकते हैं? अन्य जवाब भी संकेत प्रदान करते हैं

क्या आपने फिबोनैकी अनुक्रम देखा? प्रत्येक पंक्ति में वर्णों की संख्या उस पंक्ति संख्या का एक योग है, साथ ही पूर्ववर्ती पंक्ति की संख्या (उत्तर के साथ कुछ नहीं करना (कम से कम मेरा जवाब), मैंने देखा कि सिर्फ एक पैटर्न)।

एसक्यूएल बेल्ड उदाहरण यहां उत्तर देते हैं, लेकिन अग्रणी रिक्त स्थान नहीं दिखाएगा। आपको समाधान को टोड या एसक्यूएलप्लस में पेस्ट करना होगा और "सेट" लाइनों को हटाना होगा।

संपादित करें: मैं कुछ कोशिश करने के लिए एसक्यूएल फिल्ड गया और पाया कि यह लटक गया था। जैसा कि मैं नहीं चाहता था कि मेरा जवाब खो जाए और हर कोई पूरी तरह जवाब पोस्ट कर रहा था, यहां यह उपनिवेश के लिए है:

SQL> set heading off;
SQL> set feedback off;
SQL> set pagesize 0;
SQL>
SQL> select lpad(' ', 26-level, ' ') ||
     regexp_substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '(.{' || level ||'})', 1, 1, NULL, 1) ||
     reverse(regexp_substr('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '(.{' || to_number(level-1) ||'})', 1, 1, NULL, 1)) pyramid
     from dual
     connect by level <= 26;

                         A
                        ABA
                       ABCBA
                      ABCDCBA
                     ABCDEDCBA
                    ABCDEFEDCBA
                   ABCDEFGFEDCBA
                  ABCDEFGHGFEDCBA
                 ABCDEFGHIHGFEDCBA
                ABCDEFGHIJIHGFEDCBA
               ABCDEFGHIJKJIHGFEDCBA
              ABCDEFGHIJKLKJIHGFEDCBA
             ABCDEFGHIJKLMLKJIHGFEDCBA
            ABCDEFGHIJKLMNMLKJIHGFEDCBA
           ABCDEFGHIJKLMNONMLKJIHGFEDCBA
          ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
         ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
 ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
SQL>




plsql