Bearbeiten: Es gibt einen Bonus von -20 für zufällige Maskierung
Hallo Whistleblower-Kollegen und Träger von Geheimwissen.
Ich bin aufgrund eines Interviews per Mail und kann - natürlich - keine genauen Namen in voller Länge nennen. Aber da ich es auf eine nicht so offensichtliche Weise offenlegen möchte, brauche ich Ihre Hilfe.
Ich werde diese Namen in Form von angeben
"evil_company_that_makes_me_shiver"
aber ich will es doch nicht ganz ausdrücken. Ihre Aufgabe, mir und der ganzen Welt zu helfen, ist es, ein nettes Programm bereitzustellen, aus dem das oben Genannte wird
"ev**************************"
oder
"**il************************"
oder auch
"****_c**********************"
Ich denke du verstehst es. Aber es gibt einen Fehler: Ich möchte den Namen insgesamt offenlegen, daher muss ich die Anzahl der Vorkommen und das Wort selbst an das Skript weitergeben und die Buchstaben werden nach und nach offengelegt. Ein Beispiel könnte sein
~$ ./whistle NSA 3
> "N**"
> "**A"
> "*S*"
oder
~$ ./whistle nuclear 3
> "nu*****"
> "***lea*"
> "**c***r"
oder
~$ ./whistle nuclear 2
> "nuc****"
> "***lear"
Ich hoffe, Sie können mir helfen und da wir wissen, dass die Größe wichtig ist, gewinnt der kürzeste Code. Helfen Sie, diese Welt zu einem besseren Ort zu machen!
Antworten:
GolfScript, 26 Zeichen
Da keine bestimmte Art der Offenlegung festgelegt wurde, habe ich mich für die kürzeste entschieden:
Sie können mit diesem Code online experimentieren .
Beispiel:
Kommentierter Code:
quelle
PHP - 80 Bytes
Beispielnutzung:
quelle
Python (
157149139138-20 = 118):Cheesy Python (
5535):Du hast mir die benötigte Distribution nicht mitgeteilt;)
Uniformpython (
129123122):Ausgabe:
gibt
quelle
g=lambda a,b:[a]+["*"*len(a)]*(b-1)
. : Pdisclose the letters bit by bit
kann aber auch bedeutenfirst, disclose the first bit (that just happens to be the entire thing), repeat until the b is met
. Dies kann auch bei der ersten Antwort der Fall sein. Behaupten Sie also, Sie haben diese Antwort verwendet, und es hat sich als nützlich erwiesen, dieses Ergebnis zu erzielen. (Mir ist gerade klar geworden, dass Sie es auch so schreiben können["*"*len(a)]*(b-1)+[a]
, dass Sie zunächst Bits enthüllen, die zufällig 0 Byte tatsächliche Informationen enthalten, und in der letzten Zeile ein weiteres Bit.) Mir ist jedoch klar, dass dies der Fall ist dehnt sich auf die max.Bash, 80 Bytes
In Aktion:
quelle
C #, 226
Dies kann reduziert werden, wenn Sie das Zufallsmaterial durch eine einfachere Verteilung (Think Modulus) ersetzen, aber die Zufälligkeit hat mich interessiert. =)
Wie auch immer, wenn ich alles auf eine Zeile setze, bekomme ich 226 Zeichen. In lesbarem Code sieht es so aus:
Beispielausgabe:
quelle
i
könnte das wahrscheinlich enden***/test
.Perl, 24
Erfordert den
-p
Schalter, der zwei der Bytes ausmacht. Liest von STDIN.Wie es funktioniert
Aufgrund des
-p
Schalters liest Perl die erste Eingabelüge und speichert ihren Inhalt in$_
.Der Befehl
$_ x=<>;
dupliziert die erste Eingabezeile so oft, wie in der zweiten Eingabezeile (<>
) angegeben.Der Befehl benötigt
s/(.|\n)./\1*/g;
zwei Zeichen und ersetzt die zweite (die kein Zeilenumbruch sein darf) durch ein Sternchen. Es tut dies, bis es den gesamten Inhalt von verbraucht hat$_
.Da Zeilenumbrüche als erstes Zeichen gezählt werden, werden alle geraden Zeichen in der ersten Zeile und alle ungeraden Zeichen in den verbleibenden Zeilen verschleiert.
Aufgrund des
-p
Schalters druckt Perl den Inhalt von$_
.Beispiel Eingabe
Beispielausgabe
quelle
could
lässt dich durch :-)Since newlines count as the first character, this will obfuscate all even characters on the first line and all odd characters on the remaining lines.
Klingt so, als ob es fehlschlagen wirdcodegolf\n1
Java - 490
Ja, nicht wirklich golfen oder so. Na ja, hier ist es:
In einem schönen, leserlichen Format:
Beispielnutzung (Bei Ausführung in der kompilierten Klasse)
quelle
import java.util.*
auchArrayList<String> = new ArrayList<>();
funktionieren wird. Sie können auch viele Leerzeichen entfernen. Und die meiste Zeit können SieList
statt verwendenArrayList
.Python 3 - 187 (-20 = 167)
Hat eine Weile gedauert um zu schreiben, könnte wohl mehr golfen werden.
Beispielnutzung:
Als Funktion - 161 (-20 = 141)
quelle
sys.argv
die Zuweisung und initialisieren Sie siex
alsx=['']*int(b[2])
(wobeib[2]
die Variable, die Sie beim Entpacken verwenden, durch einen beliebigen Namen ersetzt wird).C # 184
Nicht golfen
Stichprobe:
quelle
Perl 6 (77 Bytes)
Dies kann als Betrug gewertet werden, löst jedoch das Problem (der String wird nicht vollständig gedruckt).
Und die Beispielausgabe.
quelle
JavaScript - 170
Schnelle, bricht ab, wenn Sie einen Namen angeben und nach mehr Stücken als Zeichen fragen, funktioniert aber bis zu diesem Punkt und bis zu 1. Könnte, wie ich annehme, mehr Golf gespielt werden.
Bearbeiten: Golf weiter (ab 187) mit Entfernen der Klammern (@Synthetica) und Math.floor Ersatz von @toothbrush. Ein vorgeschlagener Schleifenwechsel führt zu Fehlern in der Ausgabe.
quelle
function s(d,a){o="";b=d.length;x=Math.floor(b/a);y=b-x*a;for(c=1;c<=a;c++)r="*",o+=Array((c-1)*x+1).join(r)+d.substr(c*x-x,c==a?x+y:x)+Array(c<a?b-c*x+1:0).join(r)+"\n";return o};
closure-compiler.appspot.com/home konnte 8 Zeichen absparen ;)breaks if you supply a name and ask for more pieces than characters
x=b/e|0
anstelle vonx=Math.floor(b/e)
. Auchfor(c=1;c<=e;c++)
kann auf gekürzt werdenfor(c=1;c++<=e;)
.R, (120-20) = 100 Bytes (2 verschiedene Lösungen gleicher Länge)
Neben der Prägnanz bietet R mit Sicherheit den besten Zufallsgenerator! :) Hier die 1. Lösung der Länge 120:
Wenn die Funktion f heißt , sieht die Ausgabe folgendermaßen aus:
Und hier die 2. Lösung, wieder mit zufälliger Maskierung und wieder 120 Bytes lang:
quelle
Scala (1) 177 Bytes
Nachdem die Lösung in RI auch eine in Scala gefunden hat, ist es hier:
Scala (2) 129 Bytes
Nach kurzer Recherche fand ich die Methode zipWithIndex . Wunderbar :)
Hier die Lösung:
quelle
Javascript - 166
Regex verwenden.
Stichprobe
quelle
k [50-20 = 30 Zeichen]
Erläuterung
Beispiel
Ausgabe
quelle
JavaScript - 139-20 = 119
Verwendung und Beispielausgabe:
Da die Maskierung zufällig ist, kann die Ausgabe auch so aussehen:
quelle
Julia 56-20 = 36 (arbeitet oft)
In dem Versuch, eine kürzere zufällige Lösung zu finden, habe ich beschlossen, die garantierte Funktion für eine kürzere Lösung zu opfern. Es ist wirklich keine sehr gute Lösung.
quelle
F # -
818075Dies ist ziemlich ähnlich zu anderen, die angeboten wurden:
Stichprobe:
Als vollständige, eigenständige Anwendung ergeben sich
160155156 Zeichen:quelle