विस्तारित सत्य मशीन


17

बहुत से लोग जानते हैं कि प्रोग्रामिंग में एक सत्य मशीन क्या है। लेकिन क्या हम चीजों को एक पायदान ऊपर लात मार रहे हैं। प्रस्तुत है, विस्तारित सत्य मशीन! एक विस्तारित सत्य मशीन दो चीजों को इनपुट के रूप में लेती है, एक पूर्णांक nऔर एक गैर-रिक्त स्ट्रिंग s। यह s nवैकल्पिक अनुगामी व्हाट्सएप के साथ कई बार आउटपुट करता है । हालाँकि, यदि nइसके बराबर है 0, तो आपको sतब तक आउटपुट करना होगा जब तक प्रोग्राम मैन्युअल रूप से बंद न हो जाए अर्थात इसे कभी समाप्त न किया जाए।

इसके अलावा, यदि nएक ऋणात्मक संख्या है, तो स्ट्रिंग को उल्टा करने की आवश्यकता है। उदाहरण के लिए s=helloऔर n=-1, आउटपुट होगा olleh

इनपुट के मानक तरीके, किसी भी तरह का आउटपुट जब तक यह अनंत को संभाल सकता है। यदि आपके पास एक उत्तर है जो अनंत को नहीं संभालता है, तो इसे पोस्ट करने के लिए स्वतंत्र महसूस करें यदि यह दिलचस्प है या ऐसी भाषा में जो अनंत आउटपुट को संभाल नहीं सकती है।

परीक्षण के मामलों

n, s, output

5, "hello world", "hello worldhello worldhello worldhello worldhello world"
0, "PPCG", "PPCGPPCGPPCGPPCG..."
-2, "truThY", "YhTurtYhTurt"
2000, "o", "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"

यह , इसलिए सबसे छोटा कोड जीतता है!

यहाँ मूल सैंडबॉक्स पोस्ट है। इसके लिए संपादन किए गए हैं। इस चुनौती के विचार को बनाने के लिए धन्यवाद @ComradeSparklePony पर जाएं

जवाबों:


3

हास्केल, 57 54 बाइट्स

f 0=cycle
f n|n<0=f(-n).reverse|n>0=concat.replicate n

स्पष्टीकरण:

f 0           -- If n=0 ..
 =cycle       -- infinitely repeat the input
f n|n<0       -- Otherwise, if n<0 ..
 =f(-n)       -- call f with the negative of n ..
 .reverse     -- and the reverse of the input
 |n>0         -- Finally, if n>0 ..
 concat       -- concatenate the result of ..
 .replicate n -- repeating the input n times

-3 बाइट्स @ @ मिमी के लिए धन्यवाद


आप उपयोग कर सकते हैं -nके बजाय abs n
निम्मी


2

MATL , 37 बाइट्स

jXJiXI0=?`1wtwDw]}I0>?I:"t]x}PI|:"t]x

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

स्पष्टीकरण:

j            % input string
XJ           % copy to clipboard J
i            % input
XI           % copy to clipboard I
0            % number literal
=            % is equal? (element-wise, singleton expansion)
?            % if
  `          % do...while
    1        % number literal
    w        % swap elements in stack
    t        % duplicate elements
    w        % swap elements in stack
    D        % convert to string and display / string representation
    w        % swap elements in stack
  ]          % end
}            % else
  I          % paste from clipboard I
  0          % number literal
  >          % is greater than? (element-wise, singleton expansion)
  ?          % if
    I        % paste from clipboard I
    :        % range; vector of equally spaced values
    "        % for
      t      % duplicate elements
    ]        % end
    x        % delete
  }          % else
    P        % flip the order of elements
    I        % paste from clipboard I
    |        % absolute value / norm / determinant
    :        % range; vector of equally spaced values
    "        % for
      t      % duplicate elements
    ]        % end
    x        % delete
             % (implicit) end
             % (implicit) end
             % (implicit) convert to string and display

1

पायथन 3, 71 बाइट्स

def f(n,s,k=1):
 if n<0:s=s[::-1];n=-n
 while n|k:print(end=s);n-=1;k=0

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

चर kगारंटी देता है कि लूप हमेशा कम से कम एक बार चलाया जाता है। इसका मतलब है कि अगर n=0, तो nलूप के अगले पुनरावृत्ति पर नकारात्मक होगा, इसलिए लूप को हमेशा के लिए चलाया जाएगा।


1

मतलाब, 87 बाइट्स

n=input('')
s=input('','s')
a=repmat(s,1,abs(n))
while~n s=[s s]
end
if n<0,flip(a)
end

कोड-गोल्फ में मेरा पहला प्रयास! गोल्फ के लिए किसी भी सुझाव का स्वागत है।


साइट पर आपका स्वागत है! :)
डीजेमैकेम

1

05AB1E , 17 16 14 बाइट्स

0‹iR}¹Ä×¹_i[²?

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

स्पष्टीकरण:

0‹iR}¹Ä×¹_i[²?
0‹             Is the input negative?
  iR}          If so, reverse the second input.
     ¹Ä        Get the absolute value of the first input.
       ×       Repeat the string that many times.
        ¹_     Boolean NOT the first input. (Is the first input 0?)
          i    If so...
           [   Do forever...
            ²? Print the second input without a newline.

2 बाइट्स @EriktheOutgolfer की बदौलत सहेजे गए


आप के '-åसाथ 0‹और 0Qसाथ बदल सकते हैं _
आउटगोल्फर

@EriktheOutgolfer धन्यवाद, संपादित।
कॉमरेड स्पार्कलेपनी

1

क्यूबिक्स , 41 चालीस चार 45 बाइट्स

के रूप में इनपुट लेता है <N> <String>

.uq.sB.p$IA;p?;ouu(..!q/o()uq?..@<w?q<<_)

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

Cubified:

      . u q
      . s B
      . p $
I A ; p ? ; o u u ( . .
! q / o ( ) u q ? . . @
< w ? q < < _ ) . . . .
      . . .
      . . .
      . . .

इसे चलाते हुए देखो

कोड में अभी भी नो-ऑप्स की एक राशि है जिसे मैं कुछ और बाइट्स प्राप्त करने में सक्षम हो सकता हूं, लेकिन मैं इसे तोड़ने से पहले इसे प्राप्त करना चाहता था।

मूल प्रक्रिया है

  • I इनपुट से काउंटर प्राप्त करें
  • A शेष इनपुट को वर्णों के रूप में लें
  • ;p? स्थान हटाएं, नंबर लाएं और उसका परीक्षण करें
    • psuqB$)यदि काउंटर नकारात्मक है, तो स्टैक को उल्टा करें। इसमें इनपुट नंबर और EOI मार्कर (-1) को हैंडल करना शामिल है। काउंटर बढ़ाना।
    • ;p;ouqu यदि काउंटर शून्य है, तो काउंटर और ईओआई मार्कर को हटा दें और स्थायी आउटपुट लूप शुरू करें।
    • ( अगर सकारात्मक गिरावट काउंटर है
  • <<q?/o()uआउटपुट लूप। यह EOI मार्कर (-1) तक पहुंचने तक स्टैक के प्रत्येक चरित्र को आउटपुट करेगा।
  • ... _ ... ?wq!अंत ईओआई मार्कर पर, क्यूब के चारों ओर जाएं और वापस परावर्तित करें ?, लेन बदलें, ईओआई मार्कर को नीचे की ओर गिराएं और काउंटर का परीक्षण करें।
  • @ अगर शून्य, हाल्ट
  • ?u( यदि सकारात्मक यू-टर्न और डिक्रीमेंट होता है, तो थ्योरी लूप की शुरुआत को रोकती है
  • ? ... <) यदि नकारात्मक हो, तो घन के चारों ओर घूमें, एक वृद्धि पर गुजरते हुए लूप की शुरुआत में पुनर्निर्देशित करें।
  • /)< अगर नकारात्मक वृद्धि और उत्पादन पाश पर ले जाने के लिए

यदि स्ट्रिंग एक संख्या से शुरू होती है तो यह काम करने में विफल नहीं होती है?
विनाशकारी नींबू

@DestructibleLemon फिक्स्ड
मिकट

0

जावास्क्रिप्ट (ईएस 6), 79 बाइट्स

 f=(n,s)=>n<0?f(-n,[...s].reverse().join``):(alert(!n?s:s.repeat(n)),!n&&f(n,s))

स्निपेट:

f=(n,s)=>n<0?f(-n,[...s].reverse().join``):(alert(!n?s:s.repeat(n)),!n&&f(n,s))

f(5, "hello world")
//f(0, "PPCG")  //uncomment this at your peril!!!
f(-2, "truThY")
f(2000, "o")


मैं इस तरह से कुछ पुनरावर्ती करने की कोशिश कर रहा था, लेकिन मैंने !n&&असीम रूप से लूपिंग के लिए नहीं सोचा था । हालांकि, यह एक StackOverflow अंततः मारा जाएगा? it should never terminate.
स्टीफन

यह स्ट्रिंग पीपीसीजी को बार-बार अलर्ट करेगा। क्रोम में (कम से कम), मुझे इसे रोकने के लिए ब्राउज़र को मारना होगा।
रिक हिचकॉक

मैं आपकी बात समझता हूं। मुझे लगता है कि मेरा कोड उन ब्राउज़र में पूंछ कॉल पुनरावृत्ति अनुकूलन का लाभ उठाएगा जो इसका समर्थन करते हैं।
रिक हिचकॉक

इसे कंसोल.लॉग के साथ टेस्ट करें। मुझे एक त्रुटि मिलती है।
स्टीफन

हम्म, आप बिलकुल सही हैं: (
रिक हिचकॉक

0

जावास्क्रिप्ट (ईएस 6), 98 94 91 83 बाइट्स

n=>s=>{s=n<0?[...s].reverse().join``:s;while(!n)l(s);l(s.repeat(n<0?-n:n))}

-4, -5 बाइट्स अर्जुन को धन्यवाद

रिक हिचकॉक को -3 बाइट्स धन्यवाद

जावा उत्तर की तुलना में अलग शुरू हुआ , लेकिन जल्दी ही गोल्फ के बाद बहुत समान हो गया। चेतावनी अनंत है, लेकिन अगर आप चाहते हैं कि यह अच्छा दिखे, तो स्विच करें console.logl=alert;और बाहर लिखना alertएक ही लंबाई है, लेकिन अगर आप console.logइसे फिर से परिभाषित करने के लिए छोटा है।


1
while(!n)l(s)के बजाय if(!n)for(;;)l(s)
अर्जुन

2
[...s].reverse()के बजायs.split''.reverse()
रिक हिचकॉक

@ रिकहॉककॉक मैं हमेशा उस बारे में भूल जाता हूं :(
स्टीफन

l(s.repeat(Math.abs(n)))के बजाय forपिछले पर लूप।
अर्जुन

0

क्यूबिक , 36 बाइट्स

यहाँ पर लॉट गिंग, और QBIC / QBasic के पास सिर्फ़ सिनैक्स नहीं है कि वह ऐसी परिस्थितियों से प्रभावी ढंग से निपट सके।

~:<0|;=_fA}[abs(a)|Z=Z+A]~a|_X}{?A';

स्पष्टीकरण:

~:<0|       IF cmd line arg 'a' is negative
  ;=_fA         Make cmd line arg A$ into its reverse
}           Close the IF (this eliminates the need for a | fuction terminator on _f)
[abs(a)|    FOR b = 1 to (abs(a) (hammering out negatives)
  Z=Z+A         Add A$ to Z$ (on exit, Z$ is printed explicitly)
]           NEXT
~a|_X       IF a is non-zero, terminate the program
}           END IF
{?A';       If we're here, just start a DO-loop and keep on printing the input.

0

जावा (ओपनजेडके 8) , 137 बाइट्स

void f(String[] a){for(long n=Long.valueOf(a[0]),i=0;n==0|i++<Math.abs(n);)System.out.print(n<0?new StringBuilder(a[1]).reverse():a[1]);}

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


यह एक पूर्ण कार्यक्रम के बजाय एक स्निपेट की तरह दिखता है, जो समुदाय की सहमति से अस्वीकृत है
फल पकना

आपके द्वारा लिंक किए गए पोस्ट के अनुसार, "डिफ़ॉल्ट को 'प्रोग्राम या फ़ंक्शंस' होना चाहिए" । इसलिए, चूंकि ओपी ने स्पष्ट रूप से नहीं बताया कि वे एक पूर्ण कार्यक्रम चाहते हैं, इसलिए मैंने अपना उत्तर अपडेट कर दिया है। यह अब एक विधि के होते हैं ।
बाशफुल बेलुगा

0

str , 30 बाइट्स

I#Lbd0<[_u_][d0='e'u#?]#?xo;db

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

व्याख्या

I#Lbd0<[_u_][d0='e'u#?]#?xo;db
...........................;      preamble
I                                 read number
 #L                               read rest of STDIN
   b                              buffer the STDIN
    d                             duplicate number
     0<[   ]           #?         if the number is less than zero
        _                         negate that number
         u_                       and reverse STDIN from buffer
            [         ]           otherwise
             d0='e  #?            if its 0, push the empty string
                  'u              otherwise, push the unbuffered STDIN untouched
                         x        repeat STDIN by the TOS
                          o       and output
                           ;..    main program (only activates when input = 0)
                            d     duplicate the implicitly unbuffered STDIN
                             b    and rebuffer it
                                  implicitly displayed

0

C (gcc) , 115 112 109 107 104 बाइट्स

f(n,s,l,p,d)char*s;{d=n<0?-1:1;do for(l=1,p=0;p>=0;p+=l)s[p]?d==l&&putchar(s[p]):l--;while(!n||(n-=d));}

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

किसने कहा, हमें जरूरत है strlen?

सी (जीसीसी) , 115 बाइट्स ( #include<string.h>सामने वाला 134 )

#include<string.h>
f(n,s)char*s;{int l=strlen(s),d=n<0?0:2,m=d--,p;do for(p=m?0:l-1;p!=(m?l:-1);p+=d)putchar(s[p]);while(!n||(n-=d));}

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

बिना #include<string.h>हम के लिए एक अंतर्निहित प्रोटोटाइप मिलता strlenहै कि रिटर्न int, लेकिन strlenहै size_t(कम से कम आजकल, न कश्मीर एंड आर या C89 के बारे में पूरी तरह से यकीन है कि है, लेकिन मुझे विश्वास है, यह वापस आ intपुराने दिनों में)।

लापता #include <stdio.h>को कोई समस्या नहीं है, क्योंकि पूर्णांक प्रचार के कारण, डिफ़ॉल्ट प्रोटोटाइप वह होगा int putchar(int)जो हम चाहते हैं।


0

रेटिना , 49 बाइट्स

/¶-/&V`^.+
/¶0/&//+>G0`
~`(.+)¶-*(\d+)
.-$2+>K`$1

इनपुट प्रारूप: स्ट्रिंग में लेता है, उसके बाद एक नई लाइन, उसके बाद नंबर।

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

स्पष्टीकरण:

/¶-/&V`^.+

/¶-/&इस लाइन को केवल तभी संख्या ऋणात्मक है चलाता है। Vरिवर्स चरण है, और यह उलट होता है ^.+, जो स्ट्रिंग से .मेल खाता है ( हर चरित्र को अलग-अलग रूप से मेल खाता है)।

/¶0/&//+>G0`

/¶0/&केवल तभी संख्या 0. है इस लाइन चलाता //+>अनंत लूप है, जो प्रत्येक यात्रा के बाद काम करना स्ट्रिंग प्रिंट शुरू होता है। G0स्ट्रिंग लेता है और नंबर को डिस्क्राइब करता है; यह यह असीम रूप से, हर बार छपाई करता है।

~`...

यह कोड एक स्ट्रिंग उत्पन्न करेगा; कार्यक्रम रेटिना कोड के बाद स्ट्रिंग का मूल्यांकन करता है।

(.+)¶-*(\d+)
.-$2+>K`$1

(.+)¶-*(\d+)पूरे स्ट्रिंग से मेल खाता है और समूह 1 को कैप्चर करने की संख्या में स्ट्रिंग डालता है और समूह 2 को कैप्चर करने की संख्या है। .-$2+>K` $1चलाने के लिए रेटिना कोड उत्पन्न . करता है : निहित आउटपुट को बंद कर देता है (अन्यथा स्ट्रिंग को n + 1 बार प्रिंट किया जाएगा), -$2+एक दोहराव लूप सेट करता है वह {कैप्चरिंग ग्रुप 2} बार दोहराता है। शुरुआत में माइनस संख्या को ऋणात्मक संख्या में बदल देता है, क्योंकि यह लूप में अभिसरण कार्यक्षमता को निष्क्रिय कर देता है, जो 1 पुनरावृत्ति के बाद इसे रोक देगा।>प्रत्येक लूप के बाद प्रिंट करने के लिए इस लूप को सेट करता है। बाकी कोड सिर्फ स्ट्रिंग को प्रिंट करने के लिए है।


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