Hintergrund
Person of Interest ist ein Krimidrama in CBS und seit kurzem meine Lieblingssendung im Fernsehen.
Die Show handelt von einem Mann namens Harold Finch, einem Milliardärsprogrammierer, und seinem Partner John Reese, einem Veteranen der Special Forces und Ex-CIA-Agenten. Dieser Programmierer hat eine empfindungsfähige KI namens "The Machine" erstellt, die Gewaltverbrechen vorhersagt, bevor sie eintreten. Es verfolgt jeden Menschen auf der Erde zu jeder Zeit, indem es alle Überwachungskameras und die elektronische Kommunikation auf der ganzen Welt überwacht und analysiert.
Harold baute die Maschine für die Regierung der Vereinigten Staaten, um terroristische Aktivitäten im Vorfeld aufzudecken. Es unterteilt die von ihm vorhergesagten Straftaten in Listen, je nachdem, ob sie für die nationale Sicherheit relevant sind oder nicht. Die relevanten Fälle werden von der Regierung behandelt, während die "irrelevante" Liste so programmiert ist, dass sie täglich gelöscht wird.
Harold machte eine kleine Hintertür für sich in der Hoffnung, sich selbst mit der "irrelevanten" Liste zu befassen. Diese Hintertür veranlasst The Machine, den nächstgelegenen Harold anzurufen (etwa einmal täglich) und ihm eine Sozialversicherungsnummer vorzulesen. Diese SSN gehört jemandem, dessen Leben als Teil eines vorsätzlichen Verbrechens in Gefahr ist, oder jemandem, der ein solches Verbrechen plant.
Die Herausforderung
Schreiben Sie ein Programm, das keine Eingaben akzeptiert und 30 zufällige Telefonnummern und SSNs ausgibt (siehe unten).
Ausgabe
Es gibt zwei Textzeilen, die jeden "Tag" gedruckt werden.
Crime predicted: 555-55-5555
Calling: 1-555-555-5555
gefolgt von einem Zeilenumbruch
Dieser Vorgang sollte sich für einen "Monat" (30 "Tage") wiederholen.
Telefonnummern
Jede Telefonnummer muss folgende Elemente enthalten:
Muss den US-amerikanischen Ländercode (die erste Ziffer) haben.
Muss eine zufällige Vorwahl haben (erster dreistelliger Satz).
Die ersten drei Ziffern der Telefonnummer selbst sollten
555
gefolgt von 4 zufälligen Ziffern sein.
Hier ist ein kommentiertes Beispiel:
1-814-555-3857
| | | |
| | | |
| | | +----------> random four digits
| | |
| | +--------------> the set 555
| |
| +------------------> area code
|
+---------------------> country code
Sozialversicherungsnummern
Jede SSN muss aus 9 zufälligen Ziffern im folgenden Format bestehen.
342-98-1613
Beispiel
Crime predicted: 234-72-8311
Calling: 1-633-555-0188
Crime predicted: 135-77-0910
Calling: 1-202-555-4719
Crime predicted: 722-90-6653
Calling: 1-466-555-1069
...
Fortsetzung für 27 weitere Zyklen.
Anzeigetafel
Damit Ihre Partitur auf der Tafel erscheint, sollte sie in folgendem Format vorliegen:
# Language, Bytes
Durchgestrichene Symbole sollten kein Problem verursachen.
1
. Bezüglich der Ortsvorwahl genügen drei beliebige Ziffern für die Zwecke dieser Herausforderung. @minxomatAntworten:
CJam,
686664 BytesDanke an Dennis für das Speichern von 2 Bytes!
Copypasting funktioniert nicht, da es einige nicht druckbare Dateien gibt (eine anstelle jeder zufälligen Gruppe). Hier ist also ein
xxd
Speicherauszug:Um es umzukehren, fügen Sie es in eine Datei ein und starten Sie sie
xxd -r in_file > out_file
. Sie können es auch online ausprobieren .Erläuterung
quelle
Python 2, 129
Eine naive Methode. Nimmt die Nachricht auf
und kopiert es 30 mal. Ersetzt dann jedes Zeichen
x
durch eine zufällige Zifferrandint(0,9)
, wobei alle anderen Zeichen gleich bleiben.quelle
Python 2, 151 Bytes
Danke dem Herrn (und @Dennis) für
%0nd
: Dquelle
Perl, 85 Bytes, danke an Dennis und grc!
Original Perl,
9192 Bytesquelle
$_="..."x30;s/_/0|rand 10/eg;print
was die/r
Flagge rettet .0|rand ...
Trick und den Wiederholungsoperator, den ich jetzt benutze, völlig vergessen, um mir wiederholt auf den Kopf zu schlagen, weil ich das verpasst habe!CJam,
737170 BytesProbieren Sie es online in der CJam-Interpreter aus .
Wie es funktioniert
quelle
ß,
121118112 BytesErsetzt im Grunde genommen jeweils 0 durch eine Zufallszahl und ruft sich selbst 30 Mal auf.
Testen Sie es mit dem Online-Terminal :
Bearbeiten (112B): Mit
$$
(so etwas wie sprintf) und ternärem Operator.quelle
Pyth, 66
Verwendet
X
, um die letzten 5 Buchstaben des Alphabets (>5G == 'vwxyz'
) auf die 5 Zufallszahlen zu übersetzen. Verwendet das gleiche RNG wie Sok.Probieren Sie es hier online aus
quelle
Pyth, 62
Eine Implementierung von Andrea's fantastischer CJam-Antwort.
Beachten Sie, dass sich mehrere nicht druckbare Zeichen in der Quelle befinden und dass kein nachgestelltes Zeichen vorhanden sein sollte
"
. Das wurde für SE hinzugefügt, damit es ein bisschen lesbarer erscheint. Ich konnte noch keinen Hexdump bekommen, aber der unten stehende Link funktioniert und Sie sollten in der Lage sein, ihn zu kopieren und einzufügen.Probieren Sie es hier online aus
quelle
CJam, 74 Bytes
Kein Gewinner, aber es ist zumindest etwas ähnlich zu dem, was Dennis bisher hat, und es verwendet einen anderen Ansatz. Also dachte ich, dass es sich trotzdem lohnt, etwas zu posten.
Dies verwendet den CJam-
e%
Operator, der die Ausgabe mit einer printf- Formatzeichenfolge generiert.quelle
Matlab / Octave, 108
172BytesProbieren Sie es online aus
quelle
JavaScript (ES6), 142
Randnotiz mixmat Antwort in ß zeigt einen besseren Weg, um diese Aufgabe zu erfüllen, und könnte leicht in JS implementiert werden, um eine bessere Punktzahl zu erzielen. Ich wünschte, ich hätte darüber nachgedacht.
Bearbeiten Fehlenden Text hinzugefügt (ich habe die Herausforderung falsch verstanden)
Testen Sie das folgende Snippet in einem EcmaScript 6-kompatiblen Browser
quelle
Fourier,
166142 BytesDies hat eine der höchsten Bytezahlen, aber ich bin ein großer Fan von Fourier und wollte mich an einer Lösung versuchen. Nicht sehr optimiert.
Brechen sie ab:
Setzt die Variable d auf 45, den ASCII-Code für einen Bindestrich. Dieses Zeichen wird so oft gedruckt, dass es einige Bytes spart, um es hier zu deklarieren.
Setzt den Akku auf Null und durchläuft die Klammer, bis 30 erreicht ist.
Print "Verbrechen vorhergesagt:".
Drucken Sie eine völlig zufällige SSN + Newline.
Drucken Sie "Anrufen:".
Drucken Sie eine Telefonnummer, die den Richtlinien entspricht: 1-xxx-555-xxxx
Drucken Sie zwei neue Zeilen, um von vorne zu beginnen.
quelle
Pyth, 67 Bytes
Die Zeilenumbrüche sind wichtig und gehen in die Byteanzahl ein. Probieren Sie es hier aus .
quelle
Haskell, 150 Bytes
quelle
JavaScript (ES6),
130123 ByteNachdem ich die ß-Lösung von minxomat weiterentwickelt habe, habe ich die
0
s durch die Anzahl der0
s ersetzt, die dort gewesen wären. Der Code verwendet diese Zahlen, um die korrekte Anzahl von Ziffern zu ermittelnMath.random()
und dabei ein gutes Stück Bytes zu sparen.Versuch es:
Wie immer sind Vorschläge willkommen!
quelle
Java, 246 Bytes
Mit Zeilenumbrüchen:
Es ist ein Anfang. Anstatt zufällige Ziffern zu erzeugen, habe ich zufällige 3-stellige oder 4-stellige Zahlen verwendet.
quelle
R
151146 oder 144 BytesCode
Testen Sie es online .
Ungolfed
Ich denke, es gibt viel Raum für Verbesserungen, aber ich bin nicht gut darin, mit Streichern in R herumzuspielen.
Edit 1: änderte das
runif(16,max=10)
zurunif(16,,10)
.Ich habe einen anderen Code (
147144 Bytes) mit gemachtsprintf
aber ich denke nicht, dass es viel ein R-ähnlicher Code ist.Ein anderer Ansatz (149 Bytes):
quelle
PHP ,
144143 Bytesquelle
GolfScript, 91 Bytes
Probieren Sie es online aus.
quelle
C #,
280263246 BytesGolf gespielt:
Eingerückt:
Neu bei Codegolf, Tipps sind willkommen!
quelle
h(999)
nach eine Zahl von000
bis998
einschließlich generieren , was bedeutet, dass dies nicht ganz dem Geist der Spezifikationen entspricht. Ich bin auf dasselbe Problem gestoßen .Hassium , 230 Bytes
Erweitert:
quelle
Ruby, 98 Zeichen
Probelauf:
quelle
JavaScript,
146141quelle
JavaScript vor ES6, 128
Ich habe das Gefühl, dass die Striche irgendwie entfernt werden könnten, bin mir aber nicht sicher.
quelle
Pyth, 73 Bytes
Demo
quelle
Julia, 120 Bytes
Ungolfed:
quelle
Ruby,
9088 BytesProbieren Sie es online aus.
quelle
?N
sind ausreichend. Keine Klammern erforderlich, umrand
den Parameter.PowerShell,
120108103102 BytesVerkürzung um einige Bytes, indem die Teilschleife als Codeblock festgelegt wurde, der an ein Array ausgegeben wird@(..)
und wieder verbunden wird.Beseitigt die
@
durch das Erinnern daran(...)
ein vor dem-join''
sowieso ausgeführter Codeblock bezeichnet .Dadurch muss die
$a
Variable nicht mehr zugewiesen werden. Außerdem wurde festgestellt, dass-split
der vorherige Code aufgrund der Funktionsweise zu viele Ziffern für die Telefonnummer ausspuckte, sodass dort durch Verkleinern auf ein freies Byte gespart wurde1-XXX-555-XXX
. Das glich die Fehler ausRandom 9
, die tatsächlich zufällig ausgewählt wurden0-8
, , sodass wir stattdessen angeben müssenRandom 10.
Soooo, fast zweistellig, aber ich bin mir nicht sicher, wo es möglich ist, weitere
vier zu gewinnen3 Bytes ...Zurück, 108
Verkürzte den Code um ein paar Bytes, indem stattdessen eine Zeichenfolge aufgespalten
X
wurde. Anschließend wurde die resultierende Zeichenfolge erneut durchlaufen und jeder Eintrag mit einerRandom
Ziffer verkettet , um die endgültige Ausgabezeichenfolge zu erstellen$a
. Beachten Sie, dass wir so etwas nicht machen konnten,"string".replace("x",$(Random 9))
da dasRandom
dann nur einmal aufgerufen würde, also hätten Sie es1-222-555-2222
zum Beispiel eine Telefonnummer.Vorherige, 120
Ziemlich konkurrenzfähig für eine ausführliche Sprache, dank großzügiger Ausgabespezifikationen (dh
000-00-0001
wird als gültige SSN behandelt) und dem wirklich robusten.ToString()
Formatierungsalgorithmus, den PowerShell verwendet. PowerShell gibt auch\r\n
nach jeder Zeichenfolgenausgabe aus, sodass das Erfordernis eines Zeilenumbruchs zwischen den Iterationen einfach ist""
.Beachten Sie, dass dies ein implizites
Get-
vor verwendetRandom
, so dass dies auf einigen Plattformen / Implementierungen sehr langsam sein kann .quelle
Befunge-98, 170
Ich denke, das kann noch ein bisschen runter gespielt werden. Aber zumindest habe ich C # geschlagen. Getestet bei befungius.aurlien.net .
quelle
Python 2,
151150 BytesSo golfen, wie ich diese Methode bekommen konnte.
quelle