Skip to content

Golfen Sie ein Anagramm für viel Gutes!

Lösung:

Gelee, 15 Byte

“v0¡µṾ;ḢŒ!QḊX”v

Nur um die Dinge anzufangen; das ist fast sicher schlagbar. Dies ist im Grunde nur eine Kombination aus einem universellen Quine-Konstruktor und einer Funktion "wähle eine andere zufällige Permutation als die Eingabe"; Letzteres mag verbesserungsfähig sein, ersteres mit ziemlicher Sicherheit.

Erläuterung

Universeller Quine-Konstruktor

“v0¡µṾ;Ḣ”v
“       ”v   Evaluate the following, given {itself} as argument:
 v0¡µ          No-op (which starts with "v")
     Ṿ         Escape string
      ;Ḣ       Append first character of {the argument}

Dies kann als eine Quine angesehen werden, wenn sie allein betrieben wird. Es ist auch nach den meisten Definitionen, die ich kenne, eine richtige Quine; es liest nicht seine eigene Quelle (stattdessen enthält es ein Literal, das "eval"ed ist, und erhält eine Kopie von sich selbst als Argument), es kann eine Nutzlast tragen (wie hier zu sehen!), und die v außerhalb des String-Literals wird durch den . kodiert v Innerhalb.

Wähle ein zufälliges Anagramm

Œ!QḊX
Œ!     All permutations
  Q    Discard duplicates
   Ḋ   Discard the first (i.e. the string itself)
    X  Choose random element

Dies ist bei einer so langen Zeichenfolge wirklich ineffizient, daher konnte ich das Programm nicht als Ganzes testen, aber ich habe es bei kürzeren Zeichenfolgen getestet und es scheint richtig zu funktionieren.

CJam, 17 Byte

{`"_~"+m!(a-mR}_~

Dies wird in absehbarer Zeit nicht abgeschlossen sein, daher diesmal kein TIO-Link.

Zum Trost hier eine 20-Byte-Lösung, die sehr schnell terminiert:

{`"_~"+:S{mr_S=}h}_~

Probieren Sie es online aus!

Erläuterung

{`"_~"+   e# Standard quine framework, leaves a string equal to the source
          e# code on the stack.
  m!      e# Get all permutations. The first one will always be the original order.
  (a      e# Remove that copy of the source code and wrap it in a new list.
  -       e# Remove all copies of the source code from the list of permutations.
  mR      e# Pick a random permutation.
}_~

Die 20-Byte-Lösung mischt stattdessen den Quellcode, bis er sich vom Original unterscheidet.

Python 2, 117 Byte

Überraschenderweise ist diese Lösung kürzer als ich erwartet hatte. Mischt den Quellcode, bis er sich vom Original unterscheidet.

-2 Byte, danke an @mbomb007
-3 Byte, danke an @Wondercricket

Probieren Sie es online aus

s=r"""from random import*;R='s=r"""'+s+'"""'+';exec s';L=R
while L==R:L=''.join(sample(R,len(R)))
print L""";exec s

Dies ist eine der grundlegenden Quines in Python, die ich modifiziert habe

s = r"print 's = r"' + s + '"' + 'nexec(s)'"
exec(s)

Das Generieren von Anagrammen erfolgt durch ein zufälliges Modul

L=R
while L==R:L=''.join(sample(L,len(L)))

Wo R Quellcode enthält

s=...
R='s=r"""'+s+'"""'+'nexec s'

Dreifache Anführungszeichen waren erforderlich, da ich gezwungen war, tatsächliche Zeilentrennzeichen im Code zu halten. Anagramme haben sowieso 3 Zeilen.

Click to rate this post!
[Total: 0 Average: 0]



Anderer Beitrag

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.