ไม่ระบุชื่อชื่อ - ประเภท


16

แก้ไข: จะมีโบนัส -20 สำหรับการปิดบังแบบสุ่ม

สวัสดีผู้แจ้งเบาะแสและผู้ให้บริการความรู้ที่เป็นความลับ

ฉันเป็นเพราะการสัมภาษณ์ทางไปรษณีย์และแน่นอนว่าฉันไม่สามารถพูดชื่อเฉพาะได้เต็มความยาว แต่เนื่องจากฉันต้องการเปิดเผยในแบบที่ไม่ชัดเจนดังนั้นฉันต้องการความช่วยเหลือจากคุณ

ฉันจะให้ชื่อเหล่านี้ในรูปแบบของ

"evil_company_that_makes_me_shiver"

แต่แน่นอนฉันไม่ต้องการที่จะสะกดมันออกมาอย่างสมบูรณ์ งานของคุณเพื่อช่วยฉันและโลกทั้งใบคือคุณให้โปรแกรมที่ดีที่จะเปลี่ยนสิ่งที่กล่าวมา

"ev**************************"

หรือ

"**il************************"

หรือแม้กระทั่ง

"****_c**********************"

ฉันคิดว่าคุณได้รับมัน แต่มีข้อบกพร่องอยู่ประการหนึ่ง: ฉันต้องการเปิดเผยชื่อโดยรวมดังนั้นฉันต้องผ่านจำนวนครั้งที่เกิดขึ้นและคำนั้นไปที่สคริปต์และมันจะเปิดเผยตัวอักษรทีละนิด ตัวอย่างอาจเป็น

~$ ./whistle NSA 3
> "N**"
> "**A"
> "*S*"

หรือ

~$ ./whistle nuclear 3
> "nu*****"
> "***lea*"
> "**c***r"

หรือ

~$ ./whistle nuclear 2
> "nuc****"
> "***lear"

ฉันหวังว่าคุณสามารถช่วยฉันได้และเนื่องจากเรารู้ว่าขนาดนั้นสำคัญกับการใช้รหัสที่สั้นที่สุด ช่วยทำให้โลกนี้น่าอยู่ขึ้น!


1
คุณไม่ให้รายละเอียดเกี่ยวกับวิธีการปิดบังที่เกิดขึ้นดังนั้นคุณควรได้รับรหัสที่สั้นที่สุดไม่ว่าตัวอย่างของคุณจะเป็นอย่างไร
Bill Woodger

ฉันคิดว่ามันชัดเจนว่ารหัสสั้นที่สุดชนะ? อืมฉันอาจต้องปรับปรุงไวยากรณ์ภาษาอังกฤษของฉันตามนี้ :( / แก้ไข: ฉันไม่สนใจจริง ๆ ว่าการทำ masking ist เป็นอย่างไรตัวอย่างข้างบนเป็นเพียงตัวอย่าง แต่ควร "อ่านไม่ออก" ถ้าคุณอ่านความไม่ลงรอยกัน อยู่คนเดียว "
german_guy

ใช่รหัสที่สั้นที่สุดชัดเจน แต่ส่วนใหญ่คุณจะได้รับการกำบัง "ปกติ" ไม่เหมือนตัวอย่างของคุณ อาจเป็นเพราะคุณไม่ได้สนใจอะไรเลยเปลี่ยนตัวอย่างผลลัพธ์ของคุณเป็นผลงานปกติ โดยเฉพาะตัวอย่างที่สองของคุณที่ใช้งานรวมถึงตัวอย่างในคำถามของคุณ
Bill Woodger

1
หรือคุณสามารถโบนัสสำหรับการปิดบังแบบสุ่ม
Aprıʇǝɥʇuʎs

คำตอบ:


12

GolfScript, 26 charaters

เนื่องจากไม่มีการระบุวิธีการเปิดเผยเฉพาะเจาะจงฉันจึงตัดสินใจดำเนินการให้เร็วที่สุด:

:f,\`{{\)f%.!@42if}%\;n}+%

คุณอาจจะทดลองกับรหัสนี้ออนไลน์

ตัวอย่าง:

> "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 7
******G******N******U*****
*****F******M******T******
****E******L******S******Z
***D******K******R******Y*
**C******J******Q******X**
*B******I******P******W***
A******H******O******V****

รหัสความคิดเห็น:

:f           # Save the second input to variable f
,            # Makes the array [0 1 2 .... f-1]
\`{          # \´{}+% builds a code block where
             # first the input string is pushed (done
             # via the + operator and afterwards the whole
             # block is applied to above array, i.e.
             # For each line 0, 1, ...                                                
             #   Here, the stack contains the line number (counter)
             #   and the string
  {          #   {}% -> map to each character of the string
             #     Stack contains counter and current character
    \)f%     #     Increase the counter by one and calculate modulo f
    .        #     Duplicate counter (will be used for the if below)
    !        #     and test for zero 
             #     I.e. if counter==0
    @        #       Then Current character
    42       #       Else 42 (which is '*')
    if       #     
  }%         #   The mapping operation masked most of the characters
  \;         #   Discard the counter
  n          #   Add newline
}+%      

ดี! คุณช่วยอธิบายว่าแต่ละส่วนของรหัสทำอะไรได้บ้าง
John Odom

9
ไม่เห็นสาเหตุ GolfScript เป็นเอกสารด้วยตนเอง
Evpok

@JohnOdom อย่างไรก็ตามฉันได้เพิ่มความคิดเห็นลงในรหัส
Howard

หากคุณสุ่มเลือกว่าคุณจะเปลี่ยนทั้งหมด * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * w ^ # ^ #
Cruncher

7

PHP - 80 ไบต์

<?for(;($c=$argv[1][~-$i+=1])?:$k^++$j;)echo$c?$i%$k=&$argv[2]^$j?'*':$c:$i='
';

ตัวอย่างการใช้งาน:

$ php whistle-blower.php ABCDEFGHIJKLMNOPQRSTUVWXYZ 7
******G******N******U*****
A******H******O******V****
*B******I******P******W***
**C******J******Q******X**
***D******K******R******Y*
****E******L******S******Z
*****F******M******T******

7

Python ( 157 149 139 138-20 = 118):

def f(a,b):
 from random import*;c=[["*"]*len(a) for i in range(b)]
 for d in range(len(a)):choice(c)[d]=a[d]
 for e in c:print "".join(e)

หลามวิเศษ ( 55 35):

คุณไม่ได้บอกการกระจายที่ต้องการ;)

g=lambda a,b:["*"*len(a)]*(b-1)+[a]

งูเหลือมเครื่องแบบ ( 129 123 122):

def h(a,b):
 c=[["*"]*len(a)for i in range(b)]
 for d in range(len(a)):c=c[1:]+c[:1];c[0][d]=a[d]
 for e in c:print"".join(e)

เอาท์พุท:

a="Synthetica 'Evil' the Second"
b=7
f(a,b)
print
for i in g(a,b): print i
print
h(a,b)

จะช่วยให้

***t***i***'***** *********d
******************t** ******
******t*** ***********Se**n*
S**************l****e*******
*y******c***E************o**
**n*h****a**************c***
*****e*******vi*'**h********

****************************
****************************
****************************
****************************
****************************
****************************
Synthetica 'Evil' the Second

******t******v******e******d
S******i******i****** ******
*y******c******l******S*****
**n******a******'******e****
***t****** ****** ******c***
****h******'******t******o**
*****e******E******h******n*

g=lambda a,b:[a]+["*"*len(a)]*(b-1)หลามวิเศษของคุณสามารถลงไป : P
cjfaure

@Trimsty ฉันเห็นขอบคุณ :)
Aprıʇǝɥʇuʎs

3
ฉันคิดว่าแต่แน่นอนว่าฉันไม่ต้องการที่จะสะกดคำออกมาอย่างชัดเจนทำให้การแก้ปัญหาเป็นโมฆะอย่างสมบูรณ์ซึ่งไม่แน่ใจว่าตัวละครอย่างน้อยหนึ่งตัวถูกปิดบังในแต่ละบรรทัดของเอาต์พุต
Howard

@Howard ฉันรู้ว่ามันจะยืดกฎ แต่ยังสามารถหมายถึงdisclose the letters bit by bit first, disclose the first bit (that just happens to be the entire thing), repeat until the b is metสิ่งนี้สามารถเกิดขึ้นได้สำหรับคำตอบแรกดังนั้นเพียงแค่อ้างว่าคุณใช้คำนั้นและก็ดีใจที่ได้ผลลัพธ์นี้ (ฉันเพิ่งรู้ว่าคุณสามารถเขียนเป็น["*"*len(a)]*(b-1)+[a]เพื่อให้คุณเริ่มต้นด้วยการเปิดเผยบิตที่เพิ่งเกิดขึ้นกับข้อมูลจริง 0 ไบต์และในบรรทัดสุดท้ายคุณเปิดเผยอีกบิต) อย่างไรก็ตามฉันรู้ว่าสิ่งนี้ กำลังขยายสูงสุด
Aprıʇǝɥʇuʎs


2

C #, 226

สิ่งนี้สามารถลดลงได้ถ้าคุณแทนที่สิ่งของแบบสุ่มด้วยการแจกแจงแบบง่ายขึ้น (คิดว่าโมดูลัส) แต่การสุ่มคือสิ่งที่ทำให้ฉันสนใจ =)

อย่างไรก็ตามการใส่ทุกอย่างในบรรทัดเดียวฉันได้รับ 226 ตัวอักษร ในรหัสที่อ่านได้ดูเหมือนว่านี้:

private void F(string n, int i)
{
    var l = n.Length;
    var r = new Random();
    var a = new string[i];

    for (var p = 0; p < l; p++)
    {
        var x = r.Next(0, i);
        for (var j = 0; j < i; j++)
        {
            a[j] += j == x ? n.Substring(p, 1) : "*";
        }
    }

    for (var j = 0; j < i; j++)
    {
        Console.WriteLine(a[j]);
    }
}

ตัวอย่างผลลัพธ์:

Anonymize.exe ABCDEFGHIJKLMNOPQRSTUVWXYZ 7
*****F**I**********T**W***
A*****************S****X**
**CDE**H*JKL**************
*************N************
**************O*****U****Z
*B****G*****M***QR********
***************P*****V**Y*

มันรับประกันอย่างน้อยกับตัวละครจากอินพุตเสมอ?
Bill Woodger

อืม .. ไม่น่าจะไม่ใช่ จับดี. สำหรับสายสั้นและค่าต่ำของคุณอาจจะจบลงด้วยi ***/test
Deroby

2

Perl, 24

$_ x=<>;s/(.|
)./\1*/g

ต้องใช้-pสวิตช์ซึ่งคิดเป็นสองไบต์ อ่านจาก STDIN

มันทำงานอย่างไร

  • เนื่องจาก-pสวิตช์สวิตช์ Perl จะอ่านคำสั่งอินพุตแรกและเก็บเนื้อหา$_ไว้

  • คำสั่ง$_ x=<>;ซ้ำบรรทัดอินพุตแรกตามจำนวนครั้งที่อินพุตบรรทัดที่สอง ( <>) ระบุ

  • คำสั่งs/(.|\n)./\1*/g;ใช้อักขระสองตัวและแทนที่ตัวที่สอง (ซึ่งไม่สามารถขึ้นบรรทัดใหม่) ด้วยเครื่องหมายดอกจัน $_มันเป็นเช่นนี้จนกว่าจะมีการบริโภคเนื้อหาทั้งหมดของ

    เนื่องจากการขึ้นบรรทัดใหม่นับเป็นตัวอักษรตัวแรกสิ่งนี้จะทำให้ตัวละครทั้งหมดในบรรทัดแรกและตัวอักษรแปลก ๆ ในบรรทัดที่เหลือ

  • เพราะ-pสวิทช์, Perl $_พิมพ์เนื้อหาของ

ตัวอย่างอินพุต

codegolf
4

ตัวอย่างผลลัพธ์

c*d*g*l*
*o*e*o*f
*o*e*o*f
*o*e*o*f

สตริงที่ซ้ำกันไม่สะอาดมาก ...
CSᵠ

อะไรทำให้คุณคิดว่าคุณสามารถยุ่งกับอินพุตเพื่อให้ได้สองบรรทัด?
Bill Woodger

@BillWoodger: คำถามระบุว่าไม่มีรูปแบบการป้อนข้อมูล
เดนนิส

ยุติธรรมพอสมควร couldให้คุณผ่าน :-)
Bill Woodger

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.ดูเหมือนว่ามันจะล้มเหลวสำหรับcodegolf\n1
Cruncher

1

Java - 490

ใช่ไม่ใช่นักกอล์ฟหรืออะไรทั้งสิ้น โอ้นี่มันคือ:

import java.util.ArrayList;public class Anonymise {public static void  main(String[] args){ArrayList[] c=new ArrayList[Integer.parseInt(args[1])];for(int i=0;i<c.length;i++)c[i]=new ArrayList();for(char a:args[0].toCharArray()){int f=new java.util.Random().nextInt(c.length);c[f].add(a);for(int i=0;i<c.length;i++)if(i!=f)c[i].add('*');}ArrayList<String> b = new ArrayList<String>();for(ArrayList a:c){String s = "";for(Object o : a)s += o;b.add(s);}for(String s : b)System.out.println(s);}}

ในรูปแบบที่ดีอ่านง่าย:

import java.util.ArrayList;

public class Anonymise {

public static void main(String[] args){
    ArrayList[] c = new ArrayList[Integer.parseInt(args[1])];
    for(int i=0;i<c.length;i++)
        c[i]=new ArrayList();
    for(char a:args[0].toCharArray()){
        int f = new java.util.Random().nextInt(c.length);
        c[f].add(a);
        for(int i=0;i<c.length;i++)
            if(i!=f)c[i].add('*');
    }
    ArrayList<String> b = new ArrayList<String>();
    for(ArrayList a:c){
        String s = "";
        for(Object o : a)
            s += o;b.add(s);
    }
    for(String s : b)
        System.out.println(s);
}
}

ตัวอย่างการใช้งาน (เมื่อเรียกใช้จากคลาสที่คอมไพล์แล้ว)

> java Anonymise OnlinePerson 3
*n****P***o*
O*li***e****
****ne**rs*n

คุณกำลังใช้งานหรือพิมพ์ที่? P เป็น p อย่างไร
Bill Woodger

ไม่มีปัญหา. เพียงแค่เก็บความเห็นที่ใช้ไปแล้วในตอนนี้
Bill Woodger

เพียงimport java.util.*นอกจากนี้ArrayList<String> = new ArrayList<>();จะทำงาน นอกจากนี้คุณยังสามารถลบช่องว่างจำนวนมาก และส่วนใหญ่ของเวลาที่คุณสามารถใช้แทนList ArrayList
Ypnypn

1

Python 3 - 187 (-20 = 167)

เอาฉันไปเขียนอาจจะมี golfed เพิ่มเติม

import sys,random as a
b=sys.argv
x=[""for i in' '*int(b[2])]
for i in range(len(b[1])):n=a.randrange(len(x));x=[c+["*",b[1][len(c)]][j==n]for j,c in enumerate(x)]
for i in x:print(i)

ตัวอย่างการใช้งาน:

$ python tx.py super_anonymous_user 3
s******n**y*ou****e*
**p***a**n*m**s_us*r
*u*er_**o***********

ในฐานะที่เป็นฟังก์ชั่น - 161 (-20 = 141)

from random import*
def f(c,n):
    x=[""for i in' '*n]
    for i in range(len(c)):n=randrange(len(x));x=[v+["*",c[len(v)]][j==n]for j,v in enumerate(x)]
    return x

มันรับประกันอย่างน้อยกับตัวละครจากอินพุตเสมอ?
Bill Woodger

@BillWoodger ไม่
cjfaure

2
ขออภัยโดยส่วนตัวฉันถือว่ามันไม่ทำงาน แล้วก็
Bill Woodger

วิธีง่ายๆในการย่อสิ่งต่าง ๆ : คลายsys.argvในการกำหนดและเริ่มต้นxเป็นx=['']*int(b[2])( b[2]แทนที่ด้วยสิ่งที่คุณตั้งชื่อตัวแปรที่คุณใช้ในการคลายออก)
user2357112 รองรับโมนิก้า

2
ฉันคิดว่าแต่แน่นอนว่าฉันไม่ต้องการที่จะสะกดคำออกมาอย่างชัดเจนทำให้การแก้ปัญหาเป็นโมฆะอย่างสมบูรณ์ซึ่งไม่แน่ใจว่าตัวละครอย่างน้อยหนึ่งตัวถูกปิดบังในแต่ละบรรทัดของเอาต์พุต
Howard

1

C # 184

namespace System.Linq{class P{static void Main(string[] a){int n=int.Parse(a[1]);for(int i=0;i<n;i++)Console.WriteLine(new String(a[0].Select((c,x)=>(i+x)%n==0?c:'*').ToArray()));}}}

Non-แข็งแรงเล่นกอล์ฟ

namespace System.Linq
{
    class P
    {
        static void Main(string[] a)
        {
            int n = int.Parse(a[1]);
            for (int i = 0; i < n; i++)
                Console.WriteLine(new String(a[0].Select((c, x) => (i + x) % n == 0 ? c : '*').ToArray()));
        }
    }
}

ตัวอย่าง:

> Anonymize.exe "qwertyuio" 4
q***t***o
***r***i*
**e***u**
*w***y***

1

Perl 6 (77 ไบต์)

สิ่งนี้อาจนับว่าเป็นการโกง แต่มันแก้ปัญหาได้ (มันไม่ได้พิมพ์สตริงทั้งหมด)

($_,$!)=@*ARGS;.say for .chop~"*","*"x.chars-1~.substr(*-1),"*"x.chars xx$!-2

และตัวอย่างผลลัพธ์

> ./script.p6 ultimately_awesome 6
ultimately_awesom*
*****************e
******************
******************
******************
******************

1

JavaScript - 170

function s(a,e){o="",b=a.length,x=b/e|0,y=b-x*e;for(c=1;c<=e;c++){r="*";o+=Array((c-1)*x+1).join(r)+a.substr(c*x-x,c==e?x+y:x)+Array(c<e?b-c*x+1:0).join(r)+"\n"}return o}

อย่างรวดเร็วแบ่งถ้าคุณให้ชื่อและขอชิ้นส่วนมากกว่าตัวละคร แต่ทำงานได้จนถึงจุดนั้นและลดลงไปที่ 1 ฉันสามารถเล่นกอล์ฟได้มากกว่านี้ฉันคิดว่าดังนั้นอาจแก้ไขหรือรับฟังคำแนะนำได้เนื่องจากเป็นระเบียบ

แก้ไข: Golfed เพิ่มเติม (จาก 187) ด้วยการลบวงเล็บ (@Synthetica) และ Math.floor แทนจาก @toothbrush สำหรับการเปลี่ยนลูปตามผลลัพธ์ที่แนะนำในข้อผิดพลาดในเอาต์พุต


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สามารถโกนทิ้งได้ 8 ตัวอักษร;)
Aprıʇǝɥʇuʎs

คุณกำลังพูดว่าถ้าข้อความนั้นเป็นตัวอักษรห้าตัวและมันถูกขอให้แทนที่หกตัวหรือไม่?
Bill Woodger

@BillWoodger เขาบอกว่าใช้คอมไพเลอร์ปิดเขาโกน 8 ตัวอักษรจากความยาวทั้งหมดของรหัส
Eduard Florinescu

@EduardFlorinescu ขอโทษฉันไม่ชัดเจนฉันหมายถึงบิตนี้breaks if you supply a name and ask for more pieces than characters
Bill Woodger

1
ใช้แทนx=b/e|0 x=Math.floor(b/e)นอกจากนี้ยังสามารถลงไปfor(c=1;c<=e;c++) for(c=1;c++<=e;)
แปรงสีฟัน

1

R, (120-20) = 100 ไบต์ (2 วิธีแก้ปัญหาที่ต่างกันที่มีความยาวเท่ากัน)

นอกจากความรัดกุมแล้ว R แน่นอนว่ายังมีตัวสร้างตัวเลขสุ่มที่ดีที่สุด :) นี่คือคำตอบแรกของความยาว 120:

function(s,n){
  c=strsplit(s,"")[[1]]
  e=sample(n,nchar(s),T)
  sapply(1:n,function(i)paste(ifelse(e==i,c,"*"),collapse=""))
}

หากฟังก์ชั่นตั้งชื่อเป็นfเอาต์พุตจะมีลักษณะดังนี้:

> f("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 7)
"******GH*****************Z" 
"ABCD*********N************" 
"***********L**O***********"
"*********J**M**P*RS*U**X**" 
"**********K***********W***" 
"*****F**I*******Q*********"
"****E**************T*V**Y*"

และนี่คือทางออกที่ 2 อีกครั้งด้วยการปิดบังแบบสุ่มและอีก 120 ไบต์ยาว:

function(s,n){
  x=matrix("*",n,(m=nchar(s)))
  x[cbind(sample(n,m,T),1:m)]=strsplit(s,"")[[1]]
  apply(x,1,paste,collapse="")
}

0

สกาลา (1) 177 ไบต์

หลังจากการแก้ปัญหาใน RI พบหนึ่งใน Scala นี่คือ:

def f(s:String, n:Int)={
  def c=s map (z=>z.toString)
  def r=(1 to s.length) map (v=>v%n+1)
  (for (i<-1 to n) yield s zip r map (t=>if(t._2==i) t._1 else "*") mkString "") map println
}

สกาลา (2) 129 ไบต์

หลังจากการวิจัยระยะสั้นที่ผมพบว่าวิธีการzipWithIndex ยอดเยี่ยม :)

def f(s:String, n:Int)={
  (for (i<-0 until n) yield s.zipWithIndex.map (t=>if(t._2 % n==i) t._1 else "*") mkString "") map println
}

นี่คือทางออก:

f("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4)
***D***H***L***P***T***X**
A***E***I***M***Q***U***Y*
*B***F***J***N***R***V***Z
**C***G***K***O***S***W***

0

Javascript - 166

function s(b,a){o="";k=Array(a).join("*");t=k+b+k;for(i=a;0<i;i--)o+=t.replace(RegExp(".{"+(a-1)+"}(.)","g"),k+"$1").substr(i-1,b.length)+"\n",t=t.substr(1);return o}

ใช้ regex

ตัวอย่าง

> s("four",5)                      
f***                            
*o**                             
**u*                             
***r                             
****                             

> s("evil_company_that_makes_me_shiver",3)
e**l**o**a**_**a**m**e**m**s**v**
*v**_**m**n**t**t**a**s**e**h**e*
**i**c**p**y**h**_**k**_**_**i**r

0

k [50-20 = 30 ตัวอักษร]

{.{@[y#"*";z;:;x z]}[x;c]'=_d*y%#d:<<(-d)?!d:c:#x}

คำอธิบาย

  1. อินพุต: x = สตริงที่ต้องถูกปิดบัง, y = จำนวนบรรทัด
  2. นับจำนวนตัวอักษร c ในสตริงและสร้าง y buckets
  3. วางอักขระ c mod y ในที่เก็บข้อมูลแต่ละชุด
  4. สำหรับที่เก็บข้อมูลแต่ละใบให้พิมพ์ "*" สำหรับหมายเลขที่เหลืออยู่ซึ่งไม่ได้อยู่ในที่เก็บข้อมูลนั้น

ตัวอย่าง

{.{@[y#"*";z;:;x z]}[x;c]'=_d*y%#d:<<(-d)?!d:c:#x}["abcdefghijklmnopqrstuvwxyz";4]

เอาท์พุต

"ab*d*f***j**********u*w***"
"**c*e*gh**k*****q*s*******"
"********i***mn*****t*v**y*"
"***********l**op*r*****x*z"

0

JavaScript - 139-20 = 119

function e(s,c){r=[];for(i=c;i--;)r[i]='';for(i=0;i<s.length*c;i++)x=i%c,n=(x<1?Math.random()*c|0:n),r[x]+=(n!=x?'*':s[(i/c)|0]);return r}

การใช้งานและตัวอย่างผลลัพธ์:

console.log(e("evil_company_that_makes_me_shiver", 3));

["**i*_**mp*****h**_ma**********v**", 
 "*****co**a***t*a******s*me_*hi*e*", 
 "ev*l******ny_***t***ke*_***s****r"]

เนื่องจากการพรางเป็นแบบสุ่มเอาต์พุตอาจมีลักษณะเช่นนี้:

console.log(e("evil_company_that_makes_me_shiver", 2));

["evil_company_that_makes_me_shiver", 
 "*********************************"]

0

Julia 56-20 = 36 (ทำงานบ่อย)

f(s,n)=[join([rand()<1.9/n?c:"*" for c in s]) for r=1:n]

julia> f("evilcompany!!!",4)
4-element Array{Union(UTF8String,ASCIIString),1}:
 "e**l**mp*ny*!*"
 "***lco********"
 "e*il**m*a*y!*!"
 "evil**m*an***!"

การพยายามหาโซลูชันแบบสุ่มที่สั้นกว่าฉันตัดสินใจที่จะเสียสละรับประกันการทำงานสำหรับโซลูชันที่สั้นกว่า มันไม่ใช่ทางออกที่ดีจริงๆ


0

F # - 81 80 75

สิ่งนี้ค่อนข้างคล้ายกับบุคคลอื่นที่ได้รับการเสนอ:

let a s n=[for i in 0..n-1->String.mapi(fun j c->[c;'*'].[min((j+i)%n)1])s]

ตัวอย่าง:

a "evil_company_that_makes_me_shiver" 7

e******m******h******e******h**** 
******o******t******k******s***** 
*****c******_******a******_****** 
****_******y******m******e******r 
***l******n******_******m******e* 
**i******a******t******_******v** 
*v******p******a******s******i*** 

แอปพลิเคชั่นแบบสแตนด์อโลนเต็มรูปแบบมีตัวอักษร160 155 156 ตัว:

[<EntryPoint>]let m (a:string array)=
 let n=System.Int32.Parse a.[1]
 for i in 0..n-1 do printfn"%s"(String.mapi(fun j c->[c;'*'].[min((j+i)%n)1])a.[0])
 0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.