Trotz Ihres Protests wurden Sie von Ihrem Chef mit einem Programm beauftragt, das eine einzelne vorzeichenlose Ganzzahl als Eingabe verwendet und die Zeichenfolge "prime" ausgibt, wenn diese Ganzzahl prim ist, und "not prime", wenn dies nicht der Fall ist. Sie können wählen, in welcher Sprache Sie dies tun, solange das resultierende Programm kurz ist. Ihr Chef schätzt eine geringe Anzahl von Charakteren sehr. (Er zählt die Zeichen tatsächlich manuell , nachdem er den Quellcode ausgedruckt hat.)
Damit es besser geht, gewinnt die niedrigste Anzahl an Charakteren.
Der lustige Teil
Dies ist nur zwischen Ihnen und mir, aber Ihr Programm sollte auch in einer anderen Sprache gültig sein. In dieser Sprache sollte jedoch die Zeichenfolge "Wenn der Chef dies findet, kündige ich." Gedruckt werden. Stellen Sie sicher, dass Ihr Chef nicht herausfindet, dass es eine versteckte Beleidigung gibt, wenn er den Code immer wieder liest, da er immer wieder vergisst, ob er bis jetzt mit 17 oder 18 gezählt hat. Aus diesem Grund dürfen Sie keines der Wörter in "Der Chef findet das Ende" in einem Teil des Codes verwenden, und Sie können auch keine Anagramme dieser 5 Wörter verwenden.
Bonus-Herausforderung, für die ich ein Kopfgeld angelegt habe
Schreiben Sie ein Programm, das tatsächlich so aussieht, als würde es nur die erste Frage für das ungeübte Auge lösen und keine unnötigen Zeichen enthalten. Dazu gehören Kommentare und Codesegmente, die offensichtlich nichts beitragen. Im Idealfall würde ein Laie glauben, dass Ihr Programm so kurz ist, wie es nur sein kann, ohne nicht verwaltbar zu sein. Ein hilfreicher Kommentar hier und da ist aber okay.
Die Regeln für die Bonusherausforderung sind etwas lockerer, anstatt nach leicht messbaren Kriterien beurteilt zu werden, wird Ihr Programm mehr danach beurteilt, wie es mir (und den Wählern natürlich) entgegenkommt.
Ich werde der endgültige Richter sein, welcher Eintrag dieser Prämie am nächsten kommt.
Bearbeiten:
Nach ein paar Minuten, in denen Ihr Chef gezählt hat, ließ er von einem Ihrer Kollegen ein Charakterzählprogramm für ihn schreiben. So zählen auch Zeichen, die nicht sichtbar sind, zu Ihrer Zeichenanzahl.
Antworten:
CJam ( GolfScript ),
6059 BytesVielen Dank an @mnbvmar für das Golfen ab 1 Byte!
Wie es funktioniert (CJam)
Probieren Sie es online!
Wie es funktioniert (GolfScript)
Probieren Sie es online!
quelle
Python 2 / Python 3 - 128
Identifiziert Primzahlen mit Python 2 und bringt Sie in Schwierigkeiten mit Python 3 .
Bonus
Probieren Sie es mit Python 2 oder Python 3 ! (Im Gegensatz zur obigen Golfversion haben sich die Rollen geändert: Python 3 ist die Primzahlkennung. Python 2 enthält das Osterei.)
Entschuldigen Sie bitte mein schlechtes Englisch im Hilfetext! ;)
Und ich benutze das Wort "quit". Aber irgendwie muss ich beschreiben, wann mein Programm endet. ;)
quelle
/
Problem"? (Ganzzahlige Division vs. Gleitkommadivision)Bonuseinreichung (C / C ++ 11)
Primalitätstests unter Verwendung der üblichen naiven Methode sind so Mainstream. Deshalb habe ich eine brandneue randomisierte naive Methode erfunden! Dieser Test ist wie folgt:
sqrt(n)
.not prime
.20sqrt(n)
mal gemacht haben, ausgebenprime
, sonst wiederholen.Wenn die Zahl zusammengesetzt ist, besteht nur eine sehr geringe Wahrscheinlichkeit (etwa 10 -9 ), dass sie nicht funktioniert. Natürlich glaube ich nicht, dass der C / C ++ - Pseudozufallszahlengenerator leistungsfähig genug ist. Deshalb verwende ich meinen eigenen 256-Bit- LFSR-Generator !
C ++ 11 funktioniert ordnungsgemäß. Der C-Compiler scheint jedoch ein fehlerhaftes Programm für n> 2 auszugeben ...
Hinweis : Denken Sie daran, dass C die
-lm
Option (Link Math Library) benötigt, um erfolgreich kompiliert zu werden.Wenn Sie die folgende fehlerhafte Ausgabe finden:
falsch, entfernen Sie einfach die entsprechende
fprintf
Zeile.quelle
Mathematica / Brainfuck, 260
quelle
Golfscript / Javascript (126
125129130132134205207)Versuchen Sie Golfscript hier und Javascript hier .
Ich würde sagen, es ist erschreckend nah an den Mathematica-Lösungen, die schließlich eine eingebaute Prüfung auf Primzahlen haben.
Edit: Danke an Peter für das Speichern von
zweiweiteren sechs Bytes!Hier sind einige Details:
1.
ist erforderlich, da das folgende//
ein Kommentar in Javascript ist, aber die Division in Golfscript zweimal durchführt. Dies wird fehlschlagen, wenn sich nichts auf dem Stapel befindet, daher müssen wir ihm zwei Zahlen geben. Im Übrigen1.
ist die Syntax in Javascript vollkommen gültig und wird einfach ignoriert."…"{(}%
Nimmt die Zeichenfolge, dekrementiert ihre Zeichencodewerte um eins und schiebt sie als Zeichenfolge. Dies führt zu der Zeichenfolge, die wir drucken müssen.'
Startet eine Zeichenkette in Golfscript, die sich standardmäßig über mehrere Zeilen erstreckt, wodurch das unten stehende Javascript nur in die Zeichenkette eingefügt wird.';#'
Schließt die mehrzeilige Zeichenfolge in Golfscript, verwirft sie und ignoriert den Rest der Zeile. In Javascript ist dies einfach ein String-Literal, das ignoriert wird.quelle
1+
ist)
. Und1 1
ist1.
, mit dem ich vermute, dass der JS so glücklich wäre wie1
{)}/]""+
könnte es auch sein{)}%
.C ++ / C99 / C90 - 248
Der Code läuft in C90 einwandfrei, kann aber in C99 / C ++ etwas anderes anzeigen.
Der Übersichtlichkeit halber nicht golfen:
So funktioniert es: Da C90 einzeilige Kommentare nicht erkennt, wird die Problemzeichenfolge nicht mehr mit Null multipliziert.
quelle
for
. Bei Eingabe von 6 wird "not not prime"prime
n
am Anfang setzt die zu findende Primzahl.prime
für null und eins gedruckt, wie pqnet zuvor bemerkt hat.CJam / Ruby,
132959187Meine vorherige Lösung war erheblich überarbeitet. dieser war stark von Martin Büttners Lösung inspiriert, einschließlich seiner Erkenntnis, dass die
#bytes
Methode anscheinend einen Block einnehmen kann.Wie funktioniert es?
Rubys Kommentarzeichen (
#
) ist der Potenzierungsoperator in CJam, daher benötigen wir mindestens zwei Zahlen auf dem Stapel, bevor wir beginnen, aber zwei leere Zahlen (0 0
) sind ein Syntaxfehler in Ruby. Eines ist jedoch in Ordnung, und Ruby-Zahlen können als Trennzeichen Unterstriche enthalten (1_234
)._
ist der Duplizierungsoperator von CJam, daher müssen wir 2x (;;
) einfügen, sobald wir im Kommentar sind.limp
Liest eine Zeile von der Standardeingabe, konvertiert sie in eine Ganzzahl, fügt sie ein und legt fest, ob es sich um eine Primzahl handelt oder nicht.Um in den Ruby-Modus zu gelangen, öffnen wir eine Zeichenfolge und fahren mit der nächsten Zeile fort, sodass wir nicht mehr im Ruby-Kommentar enthalten sind (daher ist die neue Zeile wichtig und muss gezählt werden). Jedes Zeichen der Nachricht wird dekodiert und gedruckt. Anschließend beginnen wir mit einem weiteren Ruby-Kommentar, damit wir die CJam-Zeichenfolge sicher schließen können, bevor wir sie einfügen. Was auf dem Stapel übrig bleibt, ist, ob die Eingabe prim war oder nicht, was beim Beenden des CJam-Programms gedruckt wird.
CJam / Whitespace, 353 (25 beim Drucken sinnvolle) Zeichen
Angesichts der Hinterhältigkeit der Herausforderung und der Tatsache, dass der Chef unsere Programme druckt, um die Charaktere zu zählen, nahm ich den Vorschlag an, eine Lösung mit Whitespace zu finden .
Entgegen meiner vorherigen Behauptung, dass das kürzestmögliche Whitespace-Programm "Wenn der Chef dies findet, kündige ich" ausgibt. wären 372 Zeichen, dies tut man in 330. Der Trick besteht darin, die
copy
Anweisung zu verwenden, um Wiederholungszeichen von irgendwo auf dem Stapel abzurufen, anstatt alle ASCII-Werte zu verschieben, die immer viel größer werden und daher mehr Leerzeichen erfordern und zu codierende Tabulatoren. Hier ist eine Pseudo-Assembler-Darstellung des Programms für Neugierige:quelle
#chars
und#lines
auch, was ich bei zukünftigen Herausforderungen berücksichtigen muss.chars
und es hat aus irgendeinem Grund nicht funktioniert.limp4*"not prime">
, um es noch kürzer zu machenEinreichung des Bonuspreises (Perl / B? F? N? E-? 3)
Bearbeiten: Ich habe ursprünglich vergessen, den Satz tatsächlich auszudrucken, und dann festgestellt, dass er in umgekehrter Reihenfolge gedruckt wird. Ich habe das bemerkt, nachdem ich fertig war. Ich war kurz davor, ein Kätzchen zu töten, aber ich habe es jetzt behoben.
Dies ist in keiner Weise mehr kurz, aber ich glaube, dass es eine verdammt schwierige Aufgabe ist, es unauffällig und kurz zu machen. Ich habe meistens eine meiner tatsächlichen Golfunterlagen wiederverwendet, aber in dieser würde ich sagen, dass die zweite Sprache wirklich schwer zu erkennen ist.
Wenn der Chef das findet, höre ich wirklich auf, weil ich ihn niemals heimlich beleidigen kann, und wenn ich das nicht kann, worum geht es dann?
Biegen
und Brechender Regeln:Ich benutze dort das Wort "the", aber es ist nicht das "the", das gedruckt wird. Es könnte technisch ungültig sein, ich werde das OP entscheiden lassen, ob die Regeln für die Bonusherausforderung so streng sein müssen. Wenn ja, dann soll es so sein.quelle
^
= nach oben bewegen). Bestimmte Buchstaben von Kommentaren werden auf einen Stapel gelegt, der am Ende ausgedruckt wird. DruckenIf the boss finds this, I quit.
Siehe das Beispiel über die URL in"!dlrow olleH">:#,_@
Mathematica / Ruby,
115106 BytesDer Mathematica-Teil wurde leicht von Peter Olsons Beitrag inspiriert, aber das Polyglotten mit Ruby ist hier etwas ausgefeilter.
Ruby funktioniert, weil die beiden
#
alles auskommentieren, was Mathematica ist. Der Grund, warum Mathematica funktioniert, ist etwas interessanter. Der Code, den ich ausführen möchte, ist:Aber das ist kein gültiger Ruby, also muss ich
#
irgendwo einen hinzufügen .#
ist der Parameter von Mathematica für anonyme Funktionen. Also habe ich#
vorne gesetzt, was das Argument mit dem Ergebnis des multipliziertIf
. Ja, es multipliziert das mit einer Zeichenkette , was auch immer das bedeutet. Dann mache ich daraus eine anonyme Funktion mit&
und rufe sie sofort mit argument auf1
. Nun, Mathematica ist klug genug zu wissen, dass die Multiplikation mit 1 immer die Identität ist und nur den String ausgibt. Anschließend wird der Ruby-Code einfach in einen Blockkommentar eingefügt.quelle
C (Bonuseinreichung)
Bei der C-Version handelt es sich um einen Prime Checker, bei dem das Eingabearray oben steht. Versuchen Sie zu erraten, welche Sprache sich ergibt
If the boss finds this, I quit.
(es handelt sich nicht um Whitespace).Die andere Sprache:
quelle
Perl / Befunge-93 (108
106110)Meine zweite Vorlage, nur weil. Verwendet auch reguläre Ausdrücke. Ich wette, es gibt eine bessere Wahl als Perl, zum Beispiel Octave, aber ich konnte nicht herausfinden, wie man auf kurze Weise bedingt druckt.
Ich missbrauche die Regel für den Ausdruck der Zeichenfolge, da ich Anagramme vermeide, indem ich sie in mehrere Zeichenfolgen aufteile.
Die zu überprüfende Nummer wird von stdin übernommen.
if
stattunless
4 Bytes gespeichert.quelle
Lua / PBrain (prozedurales Brainf * ck) - 813
Tut mir leid, dass ich versucht habe, hinterlistig zu sein. PBrain ist genau wie BF, aber es ermöglicht Ihnen, wiederverwendbare Blöcke von BF-Code auszulösen und zu definieren. Die Verwendung war völlig unnötig.
quelle
Python 2 / Rot13 - 270 Bytes (69 ohne Kommentare)
Dies verwendet einen sehr einfachen (dh ineffizienten) Algorithmus. Wenn es mit rot13 (vermutlich keine Programmiersprache) ausgeführt wird, wird der erforderliche Satz (zusammen mit anderem Unsinn) erzeugt.
Das Schlimmste ist, dass die Kommentare das Offensichtliche angeben und sowieso ziemlich nutzlos sind.
Dies ist ein Polyglott auf eine andere Weise, indem es sowohl Englisch als auch "Esperanto" enthält. Ich hoffe, der Chef ist selbst kein Polyglott.
quelle
05AB1E / Jelly , 28 Bytes
Nicht eine, sondern ZWEI Golfsprachen!
Erklärung in 05AB1E:
Erklärung in Jelly:
Probieren Sie es online! (Gelee) Probieren Sie es online! (05AB1E)
quelle
Python, 403 Bytes
Dies ist für die Bonusherausforderung vorgesehen. Die Kommentare zählen nicht zum bytecount.
Die Tests am unteren Rand des Codes drucken:
Diese von mir definierte maximale Ganzzahl (mi) verbirgt das Geheimnis. Wenn es in Hex umgewandelt wird, lautet die ASCII-Buchstaben-Darstellung für alle zwei Hexadezimalstellen "Wenn der Chef dies findet, beende ich". Der hinterhältige Teil benutzt die chr-Funktion. Wenn der Chef weiß, was das tut, und genau genug nachschaut, weiß er, dass der Code eine geheime Nachricht verbirgt. Allerdings habe ich das ein wenig verschleiert und genug Erklärungen für die ganze Max-Integer-Sache geliefert, um dem Chef hoffentlich zu versichern, dass es ein legitimer Teil des Programms ist
Beachten Sie, dass es für die meisten Parameter so funktioniert, wie der Chef es wünscht, aber wenn die Eingabe keine Ganzzahl ist oder die Zahl irgendwie größer als mi ist, gibt p den Fehler zurück, der die verborgene Zeichenfolge enthält. Ich hätte einen Druckaufruf in die Funktion einfügen können, aber ich dachte, es würde realer aussehen, wenn es zurückgegeben würde.
quelle
C # - 288
Sicherlich nicht die kürzeste, aber es könnte von vielen Chefs passieren:
Eine lesbare Version:
quelle