Erstellen Sie ein Katzenprogramm, auch bekannt als ein Programm, das Eingaben aufnimmt und druckt.
... Außer, das Programm entfernt zufällig Zeichen aus Ihrer Eingabe und druckt diese stattdessen aus.
Jedes Zeichen in der Eingabe sollte im Allgemeinen die gleichen Quoten haben, die mit dem Programm entfernt werden können. Da dies jedoch schwierig ist, können die Quoten für jedes Zeichen um höchstens 10% variieren.
Ihr Programm sollte die Eingabe übernehmen, dann zufällig Zeichen aus der Eingabe entfernen und diese Version erneut drucken. (Sie können mit abschließenden Zeilenumbrüchen oder anderen Zeichen drucken, falls Ihre Sprache Zeilenumbrüche drucken muss.)
Wenn die Eingabe war BOOOWL
, sollte sie nicht alle Os mit der gleichen Chance entfernen: Jedes Zeichen (nicht eindeutig) sollte berücksichtigt werden, sodass anstelle einer 1/5-Chance für jedes O (zum Beispiel) eine 1 für jedes O angegeben werden sollte / 5 Chance, so, statt es eine 1/5 Chance, BWL
gibt es eine 1/5 Chance sein sollte BOWL
, BOOWL
.
Die Eingabe ist auf STDIN oder das nächstgelegene Äquivalent beschränkt.
Jeder Charakter muss eine Chance von mindestens 10% und höchstens 30% haben, um entfernt zu werden.
Die Gewinnchancen jedes Charakters sollten individuell berechnet werden.
Sie können jede Komponente Ihrer Sprache verwenden, die zufällige Aktionen unterstützt, sei es Funktionen oder etwas anderes.
Die Ausgabe muss über STDOUT oder das nächstgelegene Äquivalent erfolgen. Wenn Ihre Sprache über STDOUT verfügt, geben Sie diese nicht auf andere Weise aus. Wenn Ihre Sprache keine Zeichenfolgen als Text ausgeben kann, verwenden Sie das nächste Äquivalent (die Ausgabe des Zeichenarrays in C ist hier OK).
Das ist Code Golf. Kürzeste Sendung gewinnt.
BOWL OF SOUP
möglicherweise alle Einträge aufO
einmal gelöscht.Output must be through STDOUT, as a text. Do not output a character array.
<- Ich habe eine Sprache, mit der Sie ein Zeichenarray ausgeben können (es wird vor der Ausgabe abgeflacht). Ist das nicht erlaubt? Wie wäre es mit Sprachen wie C, bei denen ein String im Grunde ein Zeichenarray ist?Antworten:
Japt
-f
, 2 BytesDas
-f
Flag "führt das Programm für jedes Element in der ersten Eingabe aus und gibt ein Array der Elemente aus, die einen Wahrheitswert zurückgeben."5ö
Gibt eine Zufallszahl zwischen 0 (einschließlich) und 5 (ausschließlich) zurück. Wie JavaScript ist 0 in Japt falsch.Versuch es
quelle
-f
, im Titel.Python 3 , 63 Bytes
Probieren Sie es online!
Python 2 ,
6765 BytesProbieren Sie es online!
Jeder Charakter hat eine Chance von 20%, fallengelassen zu werden.
Anderer Ansatz, gleiche Länge:
Probieren Sie es online!
quelle
Create a cat program, a.k.a a program that takes an input and prints it.
Kohle , 4 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Sie können eine beliebige Zahl von
4
bis verwenden10
, um die Chancen von25%
bis zu10%
erhalten.quelle
Befunge-98 (PyFunge) , 11 Bytes
Probieren Sie es online!
Jeder Charakter hat eine Chance von 25%, entfernt zu werden. Diese Entscheidung wird nach den drei
?
Anweisungen getroffen.?
Setzt den Programmzähler mit gleicher Wahrscheinlichkeit auf eine der vier Richtungen. In diesem Fall wird nach oben und unten wieder dieselbe Anweisung ausgeführt, sodass wir diese als Optionen ignorieren können.Es gibt zwei Wege aus dem Wald vonp2=1/2 p 3 = 1 / 2 * 1 + 1 / 2 * p 2 = 3 / 4p3=1/2∗1+1/2∗p2=3/4
?
s heraus: nach rechts (Ausgabe) und nach links (keine Ausgabe). Diese Situation ist symmetrisch. Wenn Sie also von der Mitte ausgehen?
, besteht eine Chance für die Ausgabe. Die Ausgabewahrscheinlichkeit von rechts ist . Daher springen wir nach dem Lesen eines Zeichens ganz nach rechts , um zu bestimmen, ob eine Ausgabe erfolgen soll oder nicht.?
?
quelle
Oktave , 23 Bytes
Erzeugt ein Array mit der gleichen Größe wie die Eingabe (Strings in Octave sind Zeichen-Arrays), prüft jede der Zufallszahlen, ob sie größer ist als
0.2
und extrahiert dann die Zeichen an den entsprechenden Positionen durch logische Indizierung.Probieren Sie es online!
quelle
Gelee ,
95 BytesProbieren Sie es online!
Eine Monade, die eine Jelly-Zeichenfolge als Argument verwendet und die verarbeitete Jelly-Zeichenfolge zurückgibt. Bei Verwendung als vollständiges Programm wird die Ausgabe implizit gedruckt. Jeder Charakter hat eine Chance von 20%, entfernt zu werden.
Erläuterung
quelle
Japt , 3 Bytes
Jeder Charakter hat eine 1: 5-Chance, entfernt zu werden. Das
5
kann zwischen beliebig geändert werden4
und9
, einschließlich, oderA
für10
die Chancen zu ändern.Versuch es
quelle
Wolfram Language (Mathematica) , 24 Byte
Probieren Sie es online!
Nimmt eine Liste von Zeichen als Eingabe. Jeder Charakter hat eine
.2
Chance, entfernt zu werden.quelle
05AB1E ,
54 Bytes-1 Byte dank @Grimy .
Probieren Sie es online aus oder führen Sie das gleiche Programm 10 Mal aus .
Jeder Charakter hat eine 25% ige Änderung des Abwurfs.
Erläuterung:
≠
könnte auch sein_
(==0
).quelle
5L
kann₄
für -1 sein (ändert die Chance von 20% auf 25%, was immer noch akzeptabel ist).MATL , 9 Bytes
Exaplanation:
Probieren Sie es online!
quelle
Pyth ,
85 BytesProbieren Sie es online!
Vorherige Version, 8 Bytes:
Probieren Sie es online!
quelle
Q
wird einen Fehler auslösen, wenn die Eingabe nicht python-artig ist. Fehler zum Beispiel von[1
odera/b
.Q
,w
undz
funktionieren nur für einzeilige Eingaben, die beste Option wäre also wahrscheinlichj.z
Cubix , 20 Bytes
Probieren Sie es online!
Länger als ich gehofft hatte, da ich eine Reihe von No-Ops hatte, die ich anscheinend nicht loswerden kann. Die Chance, einen Charakter fallen zu lassen, beträgt 25%. Ich gehe davon aus, dass das in Ordnung ist.
Schau es dir an
Kurze Erklärung:
A|A
Dies initialisiert den Stack, Input all, Reflect back, Input all (nur ein EOI -1);?
Pop-to-of-Stack, Test auf EOI (-1)._?@
wenn negativ, reflektiere zurück in den Test und beende auf Halt$D
springe mit dem\
in die zufällige richtung setzer.o
for ausgang dann zurück in die schleife, man verfehlt deno
in seinem weg und geht direkt in die schleife.quelle
APL (dzaima / APL) ,
109 Byte SBCSAnonyme implizite Präfixfunktion. Jeder Charakter hat eine Chance von genau 20%, entfernt zu werden.
Probieren Sie es online!
5¨
Null für jedes Zeichen?
zufälliger ganzzahliger Bereich 1–5 für jedes Zeichen4≥
Boolesche Maske für Ganzzahlen kleiner oder gleich 4⊢⌿⍨
Filtern Sie das Argument mit dieser Maskequelle
Retina , 15 Bytes
Probieren Sie es online! Erläuterung:
Verarbeite jeden Charakter einzeln.
Führen Sie eine Auswechslung nach dem Zufallsprinzip durch. Die erste Ersetzung löscht das Zeichen, während die anderen drei es unverändert lassen, wodurch die
25%
Möglichkeit besteht, das Zeichen zu löschen. Dies kann nach Bedarf verringert werden, indem zusätzliche Zeilenumbrüche angehängt werden.quelle
R ,
3223 BytesProbieren Sie es online!
Eine Funktion, die einen Zeichenvektor als Eingabe verwendet und einen verarbeiteten Zeichenvektor zurückgibt. Jeder Charakter hat eine Chance von 20%, entfernt zu werden.
Vielen Dank an @Roland und @Giueseppe für die Unterstützung beim Speichern von 7 Bytes und an @JDL für weitere 2!
quelle
function(x)x[!rbinom(x,1,0.2)]
function(x)x[rf(x,1,1)>1]
;df(1,1,1)
geht es darum,0.16
was den Trick macht.rt(x,3)>1
(Chance von ca. 20%)<1
, aber danke! Weitere 2 gerettet.T-SQL 2012, 83 Byte
Durchlaufen der Eingabe von rechts nach links, wobei 0 oder 1 Zeichen entfernt werden.
25% Chance, dass jeder Charakter entfernt wird.
Erläuterung:
Probieren Sie es online aus
quelle
STR
, daran werde ich mich erinnern müssen. Ich bin mir nicht sicher, ob es fair ist, Ihren (ungezähltenDECLARE
) Code in Ihrem (gezählten) Code abzuziehen . Aber das zu ändern würde Sie nur 1 Byte kosten, da Sie das ExtraSET
mitDECLARE @ INT=len(@i)
J 10 Bytes
Probieren Sie es online!
Ähnlich wie Adams APL-Antwort, obwohl ich sie tatsächlich geschrieben habe, bevor ich seine angeschaut habe.
6.. $~ #
Nehmen Sie die Länge der Eingabe#
und formen Sie$~
die Zahl 6 in eine so lange Liste.?@
Behandle jede Sechs in dieser Liste als Würfel und wirf?
sie.>5
Ist der Würfel kleiner als 5 (mögliche Werte sind 0..5)? Verwenden Sie dieses boolesche Ergebnis, um eine Bitmaske zu erstellen.#~
Filtern Sie die Eingabe mit dieser Maske.quelle
Perl 5
-p
, 18 BytesProbieren Sie es online!
Jeder Charakter hat eine Chance von 20%, fallengelassen zu werden.
quelle
Javascript,
464451 Bytes+7 Byte aufgrund der zusätzlichen STDOUT-Anforderung
-2 Bytes danke an Birjolaxew
ursprüngliche Antwort: 44 Bytes ohne die STDOUT-Anforderung
quelle
f=
Sie auf 44 Byte reduziert. Sie können auch als Array ein- / ausgeben, wodurch Sie einiges sparen sollten.join``
bedeutet Kann es nicht in der Spezifikation finden (weil ich nicht wirklich weiß, was es ist)join("")
mdn revelent page
Scala ,
514630 BytesProbieren Sie es online!
PS. Wie bei vielen anderen Lösungen liegt die Wahrscheinlichkeit für das Fallenlassen von Holzkohle bei 20%.
Aktualisieren:
-5 Bytes unter Verwendung von String anstelle von Option [String] in flatMap
30 Bytes mit Filter
quelle
scala.math.random
zumath.random
und0.2
zu wechseln.2
. Netter Trick mit ^ so.C # (Visual C # Interactive Compiler) , 71 Byte
Probieren Sie es online!
quelle
new Random().Next(5)
direkt möglich?new Random().Next(5)
, alles, was Sie bekommen, ist der gesamte Input oder nichts.new Random()
ist der Standardstartwert Environment.TickCount, der jede Millisekunde erhöht. Wenn sie alle im gleichen Millisekunden-Tick erstellt wurden, haben sie alle den gleichen Startwert. Die Antwort verwendet nur eine einzelne Instanz von Random und aktualisiert beim Aufruf den internen Startwert. Bei jedem Aufruf von Next () wird ein anderer Ausgabewert erstellt. .Net Core verwendet jedoch ein Singleton-RNG, um den Startwert zu generieren, sodass dieses Problem nichtSTDIN
, aberrestricted to STDIN or closest equivalent
, und Funktionsargumente möglicherweise das nächste Äquivalent sind, aber ich werde das nicht tunPHP ,
4342 BytesProbieren Sie es online!
Jeder Charakter hat eine Chance von 20%, entfernt zu werden.
quelle
C (gcc) , 50 Bytes
Dieses Programm hat eine 20% ige Chance, einen Brief fallen zu lassen. Leider ist der Zufallszahlengenerator nicht gesetzt, sodass Sie bei jedem Lauf die gleiche Sequenz erhalten. Grundsätzlich besteht der einzige Trick darin, das eingegebene Zeichen zu invertieren, um die EOF-Schleife anzuhalten.
Probieren Sie es online!
C (GCC) ,
6459 BytesDanke an ceilingcat für die -5 Bytes.
Wenn Sie möchten, dass der RNG bei jedem Lauf ausgesät wird.
Probieren Sie es online!
quelle
main()
für Code Golf-Einreichungen verwenden, sondern können auch eine beliebige Funktion definieren, die das tut, was erforderlich ist. Du kannst also schreibenf(c){...}
.Lua ,
6968 BytesProbieren Sie es online!
Ein bisschen unkompliziert, aber es scheint die kürzeste Version zu sein: Iterieren Sie über stdin char by char (mit
io.lines
... dieser Name ist irreführend), und geben Sie dann basierend auf einem Zufallswert entweder eine oder eine leere Zeichenfolge aus (z. B. nichts).quelle
Java
Nicht terminierend: 82 Bytes
Abschluss (TIO): 105 Byte
quelle
s->s.filter(c->Math.random()<.2)
ist dies auch der Fall.Input is restricted to STDIN or closest equivalent.
undOutput must be through STDOUT or the closest equivalent. If your language does have STDOUT, do not output in any other way.
Also nein, diese Antwort ist nicht gültigZsh ,
5341 Bytes-12 , dank GammaFunction
41 bytes: online ausprobieren!
Wandelt die Eingabe in ein Array von Zeichen um und versucht dann, jedes Element zu drucken
c
, es sei denn, es wird von der((RANDOM%4))
Auswertung zu false gefressen !53 Bytes: Probieren Sie es online!
Eine einfachere, aber ausführlichere Iteration über die Länge der Zeichenfolge.
quelle
\c
, daran hätte ich mich nicht erinnert! Es müssen noch einige Optimierungen vorgenommen werden ...RANDOM
und Array-KonvertierungZsh , 50 Bytes
Probieren Sie es online!
Entspricht der Antwort von RobLogic, folgt jedoch den Eingabeanforderungen und funktioniert für Eingaben mit umgekehrten Schrägstrichen.
"$(<&0)"
anstelle von"<&0"
oder$(<&0)
weil der erste nicht in Substitutionen funktioniert und der zweite Zeilenvorschub isst. Die-nE
Flags sind erforderlich, um zu verhindern, dass Backslashes als Escape-Sequenzen analysiert werden, und um das Einfügen von Zeilenumbrüchen zu verhindern.echo -nE
quelle
MathGolf , 5 Bytes
Probieren Sie es online!
Erläuterung
Jedes Zeichen wird je nach Zufallswert 0 oder 1 Mal wiederholt. Da der erwartete Wert nach der Verschiebung der Quadratwurzel liegt, besteht eine Wahrscheinlichkeit von 25%, dass jedes Zeichen entfernt wird.
Alternative 5-Byte
Filtern Sie die Zeichen nach einer Zufallszahl in [0, 4]. Aufgrund der Funktionsweise des Filters muss das tatsächliche Zeichen in der Filterschleife verworfen werden, wodurch 1 Byte hinzugefügt wird.
quelle
GFortran , 120 Bytes
Nicht schlecht, wenn wir die veraltete
RAN()
Funktion verwenden, die pseudozufällig ist, dh Sie erhalten jedes Mal die gleiche Sequenz. Die richtige Art, Zufallszahlen in GFortran zu generieren, ist mitCALL RANDOM_SEED()
undCALL RANDOM_NUMBER(R)
das sind viele Bytes!Probieren Sie es online!
quelle
Oracle SQL, 133 Byte
Es wird davon ausgegangen, dass die Eingabedaten in einer Tabelle t (x) gespeichert sind, z
quelle