Wydrukuj quine, która zawiera dane wejściowe


15

Zadanie

Otrzymasz ciąg wejściowy składający się tylko ze znaków od ado z, tzn. Dane wejściowe będą pasować do wyrażenia regularnego /^[a-z]*$/.

Twój wynik powinien być kompletnym programem w tym samym języku, którego kod źródłowy zawiera dane wejściowe i jest poprawnym quine.

Przykład

Twój program otrzyma dane wejściowe abci wyjściowe:

...abc...

Powyższe powinno być kompletnym programem w tym samym języku, który nie wymaga żadnych danych wejściowych i wyjściowych:

...abc...

tzn. wyprowadza się sam.

Punktacja

To jest . Najkrótsza odpowiedź w bajtach wygrywa.

Bibliografia


3
Hmm .. Więc jak „quat” (quine + cat)?
Matthew Roh

Odpowiedzi:


7

Python 3, 57 61 bajtów

lambda x:"s='s=%r;print(s%%s)';print(s%s)".replace('s',x+'x')

Wykonuje podstawowe python 3 Quine'a od tu i zastępuje nazwę zmiennej z wejścia.

Uwaga: Jak podkreślił Hyper Neutrino w komentarzach, to nie działa dla zastrzeżonych słów kluczowych, takich jak for, ifitp

Rozwiązuje to dodanie znaku, którego żadne z zastrzeżonych słów kluczowych nie kończy się na takim 'x'lub innym numerze (Ørjan Johansen).


Bardzo kreatywny w użyciu nazwy zmiennej.
Leaky Nun

3
Nie działa na dane wejściowe "for"ani inne zastrzeżone słowa w Pythonie.
HyperNeutrino

Potwierdzam Nie działa dla wszystkich możliwych danych wejściowych. Wypróbuj online
mbomb007

@HyperNeutrino, zauważono, również nie mam pojęcia, jak się obejść
c ..

Możesz dodać dodatkowy znak, który nie znajduje się na końcu żadnego słowa kluczowego, na przykład 'x'.
Ørjan Johansen

6

Galaretka , 9 bajtów

Generator

;“¶Øv”ṾØv

Wypróbuj online!

Jak to działa

;“¶Øv”ṾØv  Main link. Argument: s (string of letters)

;“¶Øv”     Concatenate s and the string "\nØv".
      Ṿ    Uneval; get its string representation.
           (implicit) Print the previous return value since the next link is an
           otherwise unparsable nilad.
       Øv  Set the return value to "Ṙv".

Quine

Jeśli dane wejściowe to quine, generowany jest następujący program.

“quine
Øv”Ṙv

Wypróbuj online!

Jak to działa

To jest standardowa galaretka. Pierwszy,

“quine
Øv”

ustawia lewy argument i zwracaną wartość do łańcucha "quine\nØv".

Następnie drukuje reprezentację ciągu (kod z poprzedniego bloku) i zwraca niezmieniony ciąg.

Następnie vpobiera lewy argument i przekazuje go jako dane wejściowe do programu Jelly

quine
Øv

We wszystkich programach Jelly wykonywany jest tylko główny link (zdefiniowany w ostatnim wierszu), więc pierwszy wiersz jest całkowicie ignorowany.

Na koniec Øvustawia wartość zwracaną na "Ṙv", która jest drukowana domyślnie po zakończeniu programu zewnętrznego.



4

Haskell , 51 bajtów

q pobiera ciąg i zwraca ciąg.

q s|t<-"main=putStr$fst`mappend`show$"=t++show(t,s)

Wypróbuj online!

Przykładowe dane wyjściowe dla putStr$q"test":

main=putStr$fst`mappend`show$("main=putStr$fst`mappend`show$","test")

Wypróbuj online!

  • Umieszcza główny tekst quine i żądany ciąg w krotce.
  • Używa fstdo wyodrębnienia głównego tekstu.
  • Używa, showaby zmienić całą krotkę w ciąg.
  • Wykorzystuje mappenddo połączenia dwóch poprzednich funkcji. Dogodnie mappendw przypadku dwóch funkcji daje funkcję, która stosuje każdą funkcję do argumentu i łączy wyniki z mappendtypem wyniku (tutaj konkatenacja ciągów).

4

Niedociążenie , 14 bajtów

(~aSaS(:^)S):^

Wypróbuj online!

Użyj jako (test)(~aSaS(:^)S):^- który sam jest quine.

Jak to działa

  • Niedociążenie jest ezoterycznym językiem konkatenatywnym (opartym na stosie). Nie obsługuje odczytu danych wejściowych, więc początkowo wszystkie argumenty są umieszczane na stosie.
  • (test)i (~aSaS(:^)S)są literałami ciągów, więc umieszczaj się na stosie, z tym ostatnim na górze.
  • :duplikuje (~aSaS(:^)S)ciąg na górze stosu, a następnie ^uruchamia jego zawartość jako podprogram.
  • ~zamienia dwa górne elementy na stosie, więc teraz (test)jest najwyższy.
  • azawija się (test)w dodatkowe nawiasy.
  • Sbierze ciąg ((test))na wierzch stosu i wypisuje go bez zewnętrznych nawiasów (które są dosłowną składnią).
  • Teraz aSdrukuje pozostałe (~aSaS(:^)S)na stosie w podobny sposób (w nawiasach).
  • W końcu (:^)Sdrukuje finał :^.

)(Myślę, że tak naprawdę nie działa jako wejście.
Rɪᴋᴇʀ

@Riker Prawda, Niedociążenie niestety nie obsługuje niedopasowanych nawiasów. Ale pytanie określa a- z.
Ørjan Johansen

Ah, dobrze. Nie zauważyłem tego.
Rɪᴋᴇʀ

4

Niedociążenie , 14 bajtów

a(aS(:^)S)~*:^

Wypróbuj online!

Inne podejście niż inne odpowiedzi niedociążenia; zamiast być quine, konstruuje quine. Co ciekawe, wychodzi na tę samą liczbę bajtów. Jest to funkcja, która przenosi swój argument ze stosu i wyświetla na standardowe wyjście.

Wyjaśnienie

a(aS(:^)S)~*:^
a               Generate a string literal containing the input
 (aS(:^)S)~*    Prepend "aS(:^)S"
            :^  Mockingbird: run the resulting function with itself as argument

Wynikowa funkcja wygląda następująco:

aS(:^)S(input)
aS              Print a string literal containing the argument
  (:^)S         Print ":^"
       (input)  Push "input" onto the stack

Innymi słowy, wypisuje literał łańcuchowy zawierający sam, a następnie :^. Jest to wyraźnie quine (ponieważ to, co właśnie wydrukowaliśmy, jest tym samym, co kod, który wykonaliśmy, aby go uruchomić).


Wygląda to tak, jak w TIO, możesz upuścić wartość początkową a, o ile nie przeszkadza ci błąd błędu segmentacji drukowany na stderr, gdy dane wejściowe zawierają a.
Ørjan Johansen

Nie pomyślałem nawet o wykonaniu dosłownego ciągu znaków, który podaje użytkownik, na podstawie tego, że praca programu jest już w tym momencie zakończona i bez (bycia znakiem, który pojawia się na wejściu, wszystkie programy koniecznie nic nie zrobią ani się nie zawieszą. Nawet nie sądzę, że jest to specyficzne dla TIO; program jest nieprawidłowy, ale w momencie awarii już wygenerował pożądany wynik.

2

V , 9 bajtów

ñ"qPxÉÑ~j

Wypróbuj online!

To modyfikacja standardowej litery V i jestem dumny, że jest to tylko jeden bajt dłużej.

Hexdump:

00000000: f122 7150 78c9 d17e 6a                   ."qPx..~j

Wyjaśnienie:

ñ           " Record the following commands into register 'q'
 "qP        " Paste register 'q' before all input
    x       " Delete the last character of what we just pasted (this will be a 'ÿ')
     ÉÑ     " Insert 'Ñ' at the beginning of this line
       ~    " Toggle the case of this character
        j   " Move down a line. During playback, this will cancel playback of the current macro,
            " So everything after here is a NOOP

Następnie nagrywanie domyślnie zatrzymuje się i jest odtwarzane. Spowoduje to wygenerowanie następującego wyniku:

ñ"qPxÉÑ~jHello

Ponieważ jodtwarzanie makra zostanie przerwane, nic Hellosię nie uruchomi.


2

Python 2, 38 bajtów

Chociaż dane wejściowe są wymagane tylko do obsługi a-z, powinny działać z każdym wejściem jednokreskowym, który nie zawiera bajtów NUL.

s='s=%r;print s%%s#'+input();print s%s

Wypróbuj online

Na wejściu abcpowstały Quine jest:

s='s=%r;print s%%s#abc';print s%s#abc

Wypróbuj online


1

RProgN 2 , 15 bajtów

"{']C'.%q[}]C"F

Wyjaśniono

Korzystanie z formatu

{']C'.%q[}]C}

gdzie %qjest qouted input, buduje quine smaku

{']C'."Some Text"[}]C

który jest standardową quine RProgN2, {']C'.}]C która przed zakończeniem dołącza i niszczy wprowadzony ciąg.

Wypróbuj online!


1

Siatkówka oka , 14 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.

\(\`^
¶\(*S1`|

Wypróbuj online!

W przypadku danych wejściowych dane xwyjściowe:


\(*S1`|x
\(*S1`|x

Wyjaśnienie

Wyjście jest niewielką modyfikacją standardowego quine . Po prostu używamy wyrażenia regularnego |xzamiast pustego wyrażenia regularnego. Ponieważ |nadal pozwala (i priorytety) i puste dopasowanie, nie ma to wpływu na samą funkcjonalnośćx będzie zawierać tylko litery, gwarantuje się, że sama jest poprawna składnia wyrażenia regularnego.

Drukowanie tego faktycznie używa techniki, która jest podobna do samego quine. Aby uniknąć duplikacji quine, wstawiamy ¶\(*S1`|tylko raz na początku łańcucha. To dokładnie połowa kodu źródłowego. Aby wydrukować go dwa razy bez wysuwu wiersza, używamy konfiguracji \(\, która otacza cały program w grupę i sprawia, że ​​zarówno sam stolik, jak i grupa zawierająca go wypisują wynik bez wysuwu wiersza.


1

Japt , 14 bajtów

"\"iQ ²ª`"+U ²

Przetestuj online! Dla wejścia abc, wyjść

"iQ ²ª`abc"iQ ²ª`abc

która sama się wyprowadza. Przetestuj online!

Wyjaśnienie

Jest to rozszerzenie standardowej, przystosowanej do ładunku bazy Japt:

"iQ ²"iQ ²

"iQ ²"      // Take this string.  iQ ²
      iQ    // Insert a quote.    "iQ ²
         ²  // Repeat this twice. "iQ ²"iQ ²
            // Implicit: output result of last expression

Jedyną różnicą jest to, że dodajemy ª`abcna końcu, co w JavaScript jest w zasadzie ||"abc". Ponieważ wynikiem pierwszej części jest zawsze niepusty ciąg (prawda), ||nigdy się nie uruchamia.

Istnieje kilka alternatywnych wersji tej samej długości:

"iQ ²ª`abc"iQ ²ª`abc   quine||"abc"
"iQ ²ª$abc"iQ ²ª$abc   quine||abc
"iQ ²ª{abc"iQ ²ª{abc   quine||function(){ ... }
"iQ ²ªXabc"iQ ²ªXabc   quine||X.a(...) (X could be any uppercase letter or digit)
"iQ ²//abc"iQ ²//abc   quine//abc      (// is a comment in JS/Japt)
"iQ ²;[abc"iQ ²;[abc   quine;          (unmatched [ causes a parsing error)

0

CJam , 16 14 bajtów

"`_~"q`';++`_~

Wypróbuj online!

Jak to działa

"`_~"           e# Push "`_~"
     q`         e# Push a string representation of the input (input wrapped in quotes)
       ';       e# Push a semicolon
         ++     e# Concatenate all this together
           `    e# Get the string representation of the resulting string
            _~  e# Duplicate it and eval it (pushing the original string on the stack again)

Które generuje coś podobnego "`_~\"test\";"`_~"test";.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.