ช่องว่างสำคัญ: ตำรวจ


51

สำหรับวัตถุประสงค์ของการท้าทายนี้เราจะกำหนดช่องว่างเป็นlinefeeds เท่านั้น (0x0A) และช่องว่าง (0x20) โปรดทราบว่าภาษาและรสชาติ regex ส่วนใหญ่พิจารณาอักขระอื่น ๆ มากมายเช่นช่องว่างเช่นกันทั้งภายในและภายนอกช่วง ASCII ดังนั้นคุณอาจไม่สามารถใช้บิวด์อินที่สอดคล้องกันได้

The Cops 'Challenge

คุณควรเขียนโปรแกรมหรือฟังก์ชั่นในภาษาที่คุณเลือกซึ่งใช้สตริงซึ่งประกอบด้วยอักขระ ASCII (ยกเว้น NUL) เป็นอินพุตและเอาต์พุตโดยลบช่องว่างทั้งหมดออก ตัวอย่างเช่นถ้าคุณได้รับอินพุตต่อไปนี้:

H e l l o,
 W o r l  d!

คุณควรส่งออก

Hello,World!

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

คำตอบของคุณควรมีสิ่งต่อไปนี้:

  • ภาษา (และรุ่นหากจำเป็น) ที่คุณเขียนโซลูชันของคุณ
  • จำนวนไบต์ของโซลูชันของคุณก่อนที่จะลบช่องว่าง
  • โซลูชันของคุณเมื่อลบช่องว่างแล้ว

โซลูชันของคุณอาจเป็นโปรแกรมหรือฟังก์ชัน แต่ไม่ใช่ข้อมูลโค้ดและคุณต้องไม่สมมติสภาพแวดล้อม REPL คุณสามารถรับอินพุตผ่าน STDIN อาร์กิวเมนต์บรรทัดคำสั่งหรืออาร์กิวเมนต์ฟังก์ชันและเอาต์พุตผ่าน STDOUT ค่าส่งคืนของฟังก์ชันหรือพารามิเตอร์ function (out)

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

คุณต้องไม่ใช้บิวด์อินสำหรับการแฮชการเข้ารหัสหรือการสร้างหมายเลขสุ่ม (แม้ว่าคุณจะวางตัวเครื่องสร้างหมายเลขสุ่มเป็นค่าคงที่) โซลูชันของคุณจะต้องสามารถประมวลผลสตริงใด ๆ 100 ตัวอักษรหรือน้อยกว่าภายใน 10 วินาทีบนเครื่องเดสก์ท็อปที่เหมาะสม

ถ้าคำตอบของคุณยังไม่ได้รับการแตกได้ภายใน 7 วัน (168 ชั่วโมง), คุณอาจแสดงให้เห็นวิธีการแก้ปัญหาของคุณเองที่จุดที่คำตอบของคุณถือว่าปลอดภัย ตราบใดที่คุณไม่เปิดเผยวิธีแก้ปัญหาของคุณก็อาจถูกโจรปล้นได้แม้ว่าจะผ่านไป 7 วันแล้วก็ตาม คำตอบที่ปลอดภัยที่สั้นที่สุดชนะ (วัดก่อนที่จะลบช่องว่าง)

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

ไปที่นี่เพื่อเป็นส่วนหนึ่งของพวกโจร

ส่งที่ไม่ได้ติดตาม

<script>site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 103182;</script><script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)</code></pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


ที่เกี่ยวข้อง (อันที่จริงเป็นแรงบันดาลใจ)
Martin Ender

7
ดูเหมือนว่าช่องว่างจะทำลายความท้าทายนี้ ...
NoOneIsHere

8
@SeeOneRhino ทำไม โจรจะต้องแก้ปัญหาในช่องว่างไม่ใช่ใช้ไบต์มากกว่าตำรวจ ถ้าหากตำรวจไม่พบคำตอบของ Whitespace ที่บ้าคลั่งที่ไม่มีใครสามารถเทียบได้คำตอบของ Whitespace นั้นมักจะมีความเสี่ยงมากที่สุดในการท้าทายนี้
Martin Ender

1
@SeeOneRhino นอกจากนี้แท็บจะไม่นับเป็นช่องว่างดังนั้นพวกเขาจะไม่ถูกลบ
mbomb007

4
ไม่มีการส่งรูปหกเหลี่ยมในครั้งนี้ฉันเดา
MildlyMilquetoast

คำตอบ:


17

Haskell, 100 ไบต์, แตกโดย nimi

main=interact$iddoidlinesidwordsdoidoidoid=doiddoid<-dooiidoid<-dooiddoiddodoid

นี่คือโปรแกรมเต็มรูปแบบและบทกวี dadaistic


โค้ดพร้อม withspace (ลองออนไลน์!)

main=interact$id doid lines id words
doid oi d o id=do
 iddoid<-do oi id
 oid<-do o iddoid
 do d oid

ยังคงมองบทกวีค่อนข้างถ้าคุณถามฉัน

De-ยุ่งเหยิง

main = interact f
f s = do
 l <- lines s
 w <- words l
 id w

คำอธิบาย

คำdoอธิบาย - เป็นเพียงน้ำตาลประโยคดังนั้นfสามารถเขียนได้เทียบเท่ากัน

f s = lines s >>= words >>= id

สำหรับรายการ>>=-operator ถูกกำหนดเป็นconcatMapดังนั้นfจะกลายเป็น

f = concat . map id . concat . map words . lines

ได้รับการป้อนข้อมูลดังนั้น"a b\nc", linesแยกการป้อนข้อมูลในการขึ้นบรรทัดใหม่["a b","c"], wordsแยกแต่ละบรรทัดในพื้นที่สีขาวให้ผลผลิต[["a","b"],["c"]](เท่าที่ผมรู้เพียงตอนนี้รวมถึงการขึ้นบรรทัดใหม่ดังนั้นlinesจริงไม่จำเป็นต้องใช้) เชื่อมโยงให้ครั้งเดียว["a","b","c"], ฟังก์ชั่นตัวตนและเป็นเช่นนี้ไม่มีผลกระทบและการเรียงต่อกันสุดท้ายผลตอบแทนถัวเฉลี่ยสตริงid"abc"


3
ฉันต้องบอกว่าฉันชอบบทกวีดาดา istic หรือไม่?
Dada


@nimi ใช่ทำได้ดีมาก
Laikoni

12

C, 475 ไบต์แตกโดย Riley

บางส่วนของ C ทำให้ง่ายต่อการดูว่าช่องว่างควรไปที่ใด อย่างไรก็ตามตัวประมวลผลล่วงหน้า c ทำไม่ได้ ดังนั้นรหัสนี้จะแบ่งออกเป็นสองส่วน: จนถึงบรรทัดที่ 17 (236 ตัวอักษรด้วยช่องว่าง) รหัสนั้นแทบจะไม่ทำให้ยุ่งเหยิงและหลังจากนั้น (239 ตัวอักษรที่มีช่องว่าง) โชคดี!

ไม่ต้องชนะการแข่งขันนี้ด้วยการยิงระยะไกล แต่ฉันต้องการที่จะเห็นสิ่งที่สามารถทำได้ด้วยตัวประมวลผลล่วงหน้า

#include<unistd.h>#defineachar#defineb*#definecwrite#definedstdin#defineestdout#definefread#defineg(#defineh)#defineiwhile#definejif#definek0#definel&#definem,#definen=#defineo;#definep1#definegpmlmlh#defineabo#definemldmp#definejgdoabo#definelbabod#definegfhaboc#definejgmben#definepmlfg#definegpmlbintmain(){ajgajgmljgigpmlkmlgpmlhjgd!=''&&gpm!='\n'gfgpmlgpmlo}

คอมไพล์ (พร้อมคำเตือนหากคุณเปิดใช้งาน) ด้วยgcc -std=c89 -ansiและทำงานเหมือนcat file | ./a.out


มันแตกเร็วกว่าที่ฉันคิดเอาซะ! กลยุทธ์ของฉันคือใช้#definesเพื่อลบขอบเขตโทเค็นที่ชัดเจน (เช่น ';') จากนั้นใช้อีกมาก#definesเพื่อทำให้เป็นเรื่องที่ไม่เข้าใจง่ายว่ามันถูกสับเปลี่ยนไปอย่างไร

นี่คือสิ่งที่รหัสดูเหมือนหลังจากเพิ่มช่องว่างที่ชัดเจนเท่านั้น:

#include <unistd.h>
#define a char
#define b *
#define c write
#define d stdin
#define e stdout
#define f read
#define g (
#define h )
#define i while
#define j if
#define k 0
#define l &
#define m ,
#define n =
#define o ;
#define p 1
// thus begins the obfuscation
#define gpmlmlh
#define abo
#define mldmp
#define jgdoabo
#define lbabod
#define gfhaboc
#define jgmben
#define pmlfg
#define gpmlb
int main(){
    ajgajgmljgigpmlkmlgpmlhjgd!=''&&gpm!='\n'gfgpmlgpmlo
}

5
ยินดีต้อนรับสู่ PPCG! :)
Martin Ender

1
แคร็กวิธีนี้สนุกจริงๆ
Riley

9

อ็อกเทฟ, 69 ไบต์, ปลอดภัย!

@(U)eval([85329685312682956148388531268295156241''])

รูปแบบการป้อน: บรรทัดใหม่ไม่สามารถป้อนโดยตรงในพรอมต์คำสั่ง สร้างสตริงโดยเรียงต่อกันดังนี้:

str = ['This is ',10,'a',10,'string']
str = This is
a
string

เรียกใช้ฟังก์ชันเช่นนี้ (เพิ่มช่องว่าง):

f=@(U)eval([85329685312682956148388531268295156241''])  
f(['This is ',10,'a',10,'string'])

รหัสเดิม:

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

รหัสต้นฉบับมีลักษณะดังนี้:

@(U)eval([853 296 853 126 829 561 48 38 853 126 829 51 562 41 ''])

คำอธิบาย:

@(U)eval(.....)    % Anonymous function taking U as the input variable

Uเป็นจุดรหัส85ในตาราง ASCII 85จึงจะปรากฏเช่นพื้นที่แรกที่ควรจะหลัง ไม่ถูกต้อง!

ถ้าเราแทรกช่องว่าง853แทนเราควรจะได้หมายเลขตัวละคร853ใช่ไหม .. ? ใช้charเพื่อตรวจสอบว่าเป็นอักขระที่รู้จักหรือไม่:

char(853)
warning: range error for conversion to character value

แต่เราไม่ได้ใช้charในรหัสที่เราใช้รุ่นที่สั้นกว่าที่เรา concatenate [853 '']ตัวเลขกับสตริงที่ว่างเปล่า แทนที่จะให้ข้อผิดพลาดนอกช่วงรุ่นที่สั้นกว่าจะใช้ตัวเลขโมดูลัส 256

85+3*256 = 853ก็แค่ให้เกิดขึ้นเป็นไปได้ว่า ในขณะที่char(853)ให้การเตือนผลตอบแทน[853,'']U

วิธีที่ชัดเจนในการทำงานนี้ใน Octave คือ:

@(U)U(U~=10&U~=32)

เรารู้ว่าการที่จะมีวงเล็บเปิด (จุดรหัส 40) Uหลังจากที่ครั้งแรกมี เห็นได้ชัดว่าไม่พอดีดังนั้นเราจึงเปลี่ยนพื้นที่หนึ่งที่เหมาะสมต่อไปและได้รับ29 . บิงโก!296mod(296,256) = 40

ดำเนินการต่อเช่นนี้และจบลงด้วยลำดับ:

[853 296 853 126 829 561 48 38 853 126 829 51 562 41 '']
ans = U(U~=10&U~=32)

ในที่สุดเราใช้evalในการเปลี่ยนสตริงเป็นรหัส


3
+1 สำหรับการอธิบายรูปแบบการป้อนข้อมูลใน 2 บรรทัดขณะที่ฉันใช้เวลา 10 :-D
Luis Mendo

1
ก็ยังไม่มีความคิดยกเว้นตอนนี้ฉันจำตัวอักษรUในกลุ่มของตัวเลขที่ :-)
Luis Mendo

2
เคล็ดลับดีมาก! มันบ้าที่ Octave ทำเช่นนั้นด้วยรหัสตัวละคร ฉันไม่รู้เกี่ยวกับเรื่องนี้ แต่แล้วสิ่งที่คุณคาดหวังได้เมื่อหมออย่างเป็นทางการกล่าวว่า Octave รองรับ Unicode โดยไม่ได้ตั้งใจ ... :-P
Luis Mendo

7

JavaScript ES6, 199 ไบต์, ถอดรหัสโดย SLuck49

รายการที่ค่อนข้างใหญ่พร้อมช่องว่าง 33 ไบต์เพื่อเพิ่ม

s=>eval(atob`ISYgJiAtOkI8Qk97BRBeaxZFShoUZSsiOGkMenNy`.replace(/./g,(c,i)=>String.fromCharCode(c.charCodeAt()^(k+="SecretCode".split(/\w/)[i%11].length)),k=0)).join``

ดีมาก .. ฉันคิดว่าเราต้องเพิ่มจำนวนช่องว่างที่เหมาะสมให้กับ "SecretCode" เพื่อ xor สายอักขระที่เข้ารหัสและได้แหล่งที่เหมาะสม ~
Patrick Roberts

@PatrickRoberts ใช่แน่นอน
Arnauld

ฉันได้ทำการทดสอบสคริปต์อัตโนมัติแล้วชุดค่าผสมที่เป็นไปได้ทั้งหมดมันเป็นเรื่องของเวลา ... บีบมือเข้าด้วยกันรู้ว่าแผนการชั่วร้ายของเขาทำงานได้ดี
Patrick Roberts

ว้าว ... นี่ใช้เวลานานกว่าที่ข้าคิดไว้ ฉันกำลังคิดที่จะเขียนรหัสความท้าทายกอล์ฟเพื่อคำนวณจำนวนพีชคณิตที่เป็นไปได้เนื่องจากความยาวของอาร์เรย์ N และผลรวม S ที่องค์ประกอบต้องรวมเข้าด้วยกัน ตอนนี้ฉันอยู่ที่ลำดับช่องว่างและฟังก์ชั่นการทำซ้ำของฉันสำหรับอาร์เรย์คือ[ 10, 0, 0, 0, 0, 9, 8, 1, 5, 0, 0 ] ฉันเริ่มต้นที่(a)=>{for(var x=0;!a[x];x++);if(a.length-x>1){a[0]=a[x]-1;a[x]=(x==0?a[x]:0);a[x+1]++;}else{a[0]=a[x]+1;a[x]=0;i=0}} [ 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
Patrick Roberts



6

Befunge-93, 58 bytes, Safe!

_vv$v<~:!`:<#^0*@-:0*5|845\+`-v0,<#-^<

ลองออนไลน์!

โปรแกรมดั้งเดิม

_vv
 $ v<
 ~:!`
 :<#^0
*  @
-:0
*5 |
8
45
\+`
-
v0,<
#-
^<

ลองออนไลน์!

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

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

ไม่แน่ใจว่ามันคุ้มค่ากับความพยายามทั้งหมดที่พยายามทำสิ่งที่ซับซ้อนหรือผู้คนไม่เคยแม้แต่จะพยายามแก้ไข :)

รหัสคำอธิบาย

_      Since an empty stack is treated as zero, this initially just branches right.
v      The program flow is then directed downwards.
$      And this drop command initially does nothing because the stack is still empty.
~      A character is read from stdin.
::     Two duplicates are created.
55+-   We subtract 10 from the first copy (the 0- is just a nop to confuse things).
\48*-  And subtract 32 from the second copy.
*      The product of those two will be zero if the character is a newline or space.
_      So if we got whitespace, our branch goes right again repeating the loop.

v      If not, we go left, wrapping around till we hit the down arrow in column 3.
:<:    Again we make two duplicates of the character.
0`!|   One copy is used to compare if it's not greater than zero.
@      If it's not (i.e. it's the EOF), the branch goes up and we terminate.
<      Otherwise we go down and to the left.
,      Output the second copy of the character, leaving one remaining on the stack.
0      Push a zero to force the next branch right.
v      Redirect the flow down, wrapping to the top again.
_      Back at our initial branch, the zero we pushed forces us right.
v      Again the program flow is directed downwards.
$      And the drop command gets rid of the last duplicate character.
~      So now we're back reading the next character and the loop repeats.

5

C # 6, 201 ไบต์, ถอดรหัสโดย Link Ng

usingSystem.Linq;_=>string./**/#iftrueJoin(/*"*//*/""/**//*/"*/",#elseConcat(//*/,#endiffrommin""letp=$@"{@""[1]}"fromiin(_.Replace(p,@""))where!new[]{p[0]^32^10}.Contains(i)select@i);

184 ไบต์ยุบทำให้คุณมีช่องว่าง 17 ไบต์

แคร็กโซลูชันโดยใช้Concatขณะที่โซลูชันที่ฉันตั้งใจใช้Joinนั่นคือโซลูชันที่ตั้งใจไว้:

_=>string./**/
#if true
Join(/*"* //*/""/**//*/"* /",#elseConcat(//*/,
#endif
from m in" "let p=$@"{@"  "[1]}"from i in(_.Replace(p,@"
"))where!new[]{p[0]^32^10}.Contains(i)select@i);

สิ่งนี้ต้องใช้ c # 6+ ในการทำงานคุณสามารถเพิ่มมันเข้าไปได้ไหม?
TheLethalCoder

สิ่งนี้ได้รับการถอดรหัสโดย @Link Ng: codegolf.stackexchange.com/a/103233/38550
TheLethalCoder

5

MATL , 22 ไบต์ แตกและแตก

นี่คือโปรแกรมที่รับอินพุตผ่าน STDIN และสร้างเอาต์พุตผ่าน STDOUT

รหัสโดยไม่มีช่องว่างหรือขึ้นบรรทัดใหม่:

t'@*'dm1e5%Mdw%Y(

รูปแบบการป้อนเป็นเพียงเล็กน้อยที่น่าอึดอัดใจเพราะวิธีการ MATL จะเข้าสตริง สตริงที่มีการขึ้นบรรทัดใหม่ไม่สามารถป้อนโดยตรงผ่าน STDIN ได้เนื่องจากแต่ละอินพุตต้องเป็นบรรทัดเดียว (ขึ้นบรรทัดใหม่ทำเครื่องหมายจุดสิ้นสุดของอินพุต) ดังนั้นรูปแบบดังต่อไปนี้:

  1. สตริงที่ถูกปิดล้อมด้วยราคาเดียว ถ้าเนื้อหาสตริงรวมถึงคำพูดเดียวที่พวกเขาจะหนีออกมาโดยการทำซ้ำ ตัวอย่าง:'I''m a string'

  2. ในการป้อนสตริงที่มีการขึ้นบรรทัดใหม่หนึ่งต้องแยกสตริงที่การขึ้นบรรทัดใหม่และเชื่อมทุกอย่าง (โดยวิธีการของวงเล็บ) รวมทั้งตัวเลขเป็นรหัส ASCII ตัวอย่างเช่นพิจารณาสตริงที่เกิดขึ้นจากชื่อและนามสกุลของฉันด้วยการขึ้นบรรทัดใหม่ในระหว่าง ['Luis' 10 'Mendo']มันจะถูกป้อนเป็น

    วิธีนี้ทำให้สามารถป้อนรหัส ASCII อื่น ๆ (อาจไม่สามารถพิมพ์ได้) ดังนั้นสตริงในรายการ 1 ด้านบนจึงสามารถป้อนได้เช่น['I' 39 'm ' 97 32 'string']กัน ตรวจสอบที่นี่

    เงื่อนไขเดียวคืออย่างน้อยหนึ่งในส่วนภายในวงเล็บคือสตริง ซึ่งจะบังคับให้ตัวเลขใด ๆ ถูกตีความว่าเป็นรหัส ASCII เมื่อทำการต่อเชื่อม

ขออภัยเกี่ยวกับโชคดีที่ใช้อึดแบบนี้!

โซลูชันดั้งเดิม

t' @ *'dm1e 5%
Mdw%Y
(

แต่ละ%คนเป็นสัญลักษณ์แสดงความคิดเห็นและดังนั้นส่วนที่เหลือของบรรทัดจะถูกละเว้น

ช่องว่างไม่ทำอะไรเลย แต่ทำหน้าที่เป็นตัวคั่น ยกตัวอย่างเช่นโดยไม่มีพื้นที่ที่จะถูกตีความว่าเป็นจำนวน1e5100000

t ใช้อินพุตและทำซ้ำ

' @ *'ผลักสตริงนั้นและdคำนวณความแตกต่างตามลำดับซึ่งให้[32 -32 10]( -32คือไม่มีประโยชน์)

mให้อาร์เรย์แถวแบบลอจิคัลที่ระบุว่าอักขระใดคือ32หรือ10(หรือ-32)

1ตามด้วยereshapes เป็นแถว นี่คือไม่มี op ที่นี่

5ตามด้วยการMผลักดัน1อีกครั้ง (อินพุตสุดท้ายไปยังฟังก์ชั่นหลายอินพุตล่าสุดซึ่งก็คือe)

dคำนวณความแตกต่างอย่างต่อเนื่องของ1และให้[](อาร์เรย์ว่าง)

wswaps และสุดท้าย(กำหนดให้[]กับอักขระช่องว่างคือลบออก


1
คุณโกหก! วิธีนี้ใช้ไม่ได้! (+1) ...
Stewie Griffin


2
อึ ... ฉันไม่ได้สังเกตมันก็แตกแล้ว ... ดีคู่แตก
Stewie Griffin

ดีใจที่ได้ทำงานกับคุณทั้งคู่! :-) ไม่ได้แก้ปัญหาที่ตั้งใจของฉัน แต่มันทำงานได้อย่างสมบูรณ์แบบ
หลุยส์เมนโด

4

RProgN , 15 ไบต์แตก!

''`R""`R

คุณสามารถของเล่นที่มีรหัสที่นี่ วิธีแก้ปัญหาที่ค่อนข้างง่ายหวังว่าลักษณะที่น่ารำคาญของวิธีที่ RProgN จัดการกับสตริงจะทำให้สิ่งที่ไม่ได้ติดตามนี้

โปรแกรมดั้งเดิม

' ' ` R
"
" ` R

explination

ประการแรกอินพุตถูกส่งไปยังสแต็กโดยปริยาย สแต็ค:<INPUT>

จากนั้นเราใช้ '' เพื่อเพิ่มช่องว่างให้กับสแต็ก สแต็ค:<INPUT> " "

`พยายามที่จะผลักสตริงที่แทนด้วย '(WORD) จริง ๆ แต่เนื่องจากมีช่องว่างหลังจากนั้นมันก็แค่กดสตริงว่างเปล่า สแต็ค:<INPUT> " " ""

R นี่คือน้ำตาลสำหรับคำสั่งแทนที่ สแต็ค:<INPUTWITHOUTSPACES>

ถัดไป "NEWLINE" จะส่งสตริงที่มีการขึ้นบรรทัดใหม่ซึ่งดีเพราะ RProgN ไม่ได้ใช้ escapes เพียงแค่ตั้งตรงให้คุณกดสตริงแบบนั้น กอง<INPUTWOSPACES> "\n"

จากนั้นเราจะใช้ `อุบายอีกครั้งและแทนที่ซึ่งจะให้ผลลัพธ์ของเรา


สิ่งนี้ควรใช้กับ Firefox หรือไม่
Conor O'Brien

ฉันใช้งานใน firefox มีปัญหาหรือไม่ คุณจะได้รับภาพหน้าจอ?
ATaco


นั่นเป็นไปอย่างรวดเร็ว ฉันกินเวลาเกือบครึ่งชั่วโมง!
ATaco

4

Ruby, 86 ไบต์ + 1 ค่าสถานะ = 87 ( แตกโดย Dom Hastings )

-pต้องใช้ธงบรรทัดคำสั่ง

eval"(T$}{(!//;:678?32.&&)".gsub(/|(.)/){$1&&$&.ord.^($'.count('')).chr}

รหัสนี้ใช้งานได้จริงในแบบฟอร์มนี้มันเป็นเพียงแค่ไม่มี


นี่มันยอดเยี่ยมฉันชอบมันมาก! หมายความว่า ...
Hastings Dom


4

บีม , 72 ไบต์, ปลอดภัย!

ตอนนี้สำหรับภาษา 2d สามารถเล่นกับในTIO Nexus

s'''>`+++)+Ss`n\
 n`sS+(+++`<``/
 >rgn\
 ^ @<(\  
     H         <
 ^    /

โปรแกรมส่งตรงที่ค่อนข้างตรงไปตรงมาโดยไม่ต้องมีอะไรมากมายในการลองและหลอกคน

s'''>`+++)+Ss`n\ # Sets the memory slot 0 to 0, 10 to 10 and 32 to 32. n will redirect down
 n`sS+(+++`<``/  # since memory != store. \ is a red herring and not hit.
 >rgn\           # read in from input and set store to memory value. For all characters
 ^ @<(\          # other than space, LF and end of input this will be different and n will 
     H         < # redirect down then through to the print and back to read. Space, LF and  
 ^    /          # end of input get directed to the ( which tests for 0. This will redirect 
                 # space and LF to path back to read, otherwise it will skip over and halt

1
ฉันคิดว่าฉันจะย้ายล่ามไปที่โหนดเมื่อฉันมีเวลาดังนั้นเดนนิสสามารถเพิ่มมันลงใน TIO ...
ETHproductions

1
ฉันได้สร้างNode clone of interpreter และ Dennis ได้เพิ่มลงในTIO แล้ว !
ETHproductions

4

เขาวงกต , 127 ไบต์

);""{"".@"-;,""""":"##"*"(:"+":}-;{";;"*#{:;"#""+("-;"";;"})"";""""""""

หวังว่าฉันทำถูกแล้ว :) นี่เป็นตำรวจและโจรคนแรกของฉัน

รหัสต้นฉบับ

 ) ;""{"".@
"-;, "" ""
"  :
" ##
" *
" (:
"  +
"  :}-;{
"    ; ;
" *#{: ;
" #    "
" +("-;"
"    ; ;
"    })"
"      ;
""""""""

คำตอบของคุณปลอดภัยแล้วคุณสามารถเพิ่มรหัสเดิมและคำอธิบายได้
Laikoni

4

Java, 3241 + 28 Bytes สำหรับการนำเข้าจำนวนเต็มขนาดใหญ่

รายการนี้มีไว้เพื่อพิสูจน์ความเป็นไปได้ของรายการที่มีการเข้ารหัสอย่างปลอดภัย ฉันเชื่อว่าสิ่งนี้อยู่ภายในกฎ แต่ถ้ามันขัดต่อจิตวิญญาณกรุณาแจ้งให้เราทราบและฉันจะลบออกจากความเป็นธรรม ฉันจะปล่อยให้ "ไม่ปลอดภัย" นี้ไปเรื่อย ๆ จนกว่าจะถึงเวลาที่ (และถ้า) พบรอยแตก นี่เป็นสิ่งที่น่าประหลาดใจและสามารถเพิ่มประสิทธิภาพได้อย่างแน่นอน แต่นี่คือ

interfacer{staticvoidmain(String[]A){Strings=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",q=",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,",a="",b="";for(Stringt:s.split(",")){a+=t.length();}for(Stringt:q.split(",")){b+=t.length();}if((newBigInteger(a).multiply(newBigInteger(b)).toString()).equals("3649760552772806991406184564114682549877113954361462782925976763675666255653486225665808494957477900238166874367635068317805381406282572366371821972593595701388544127398102379288357379612333197280663769935384647844344358594407966485992727383589962048236726744715096711312156760311643104858212670342667229690568585229658813910569607411855770280546861422837629553847973043531578541545436967345783407835402474562087790816775240815912495599135241317")){System.out.println(A[0].replaceAll("","").replaceAll("\n",""));}}}

จากความเป็นธรรมในการปล้นที่นี่มันกับช่องว่าง "ชัดเจน" ทั้งหมดที่เพิ่ม

interface r {

    static void main(String[] A) {
        String s = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", q = ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", a = "", b = "";
        for (String t : s.split(",")) {
            a += t.length();
        }
        for (String t : q.split(",")) {
            b += t.length();
        }
        if ((new BigInteger(a).multiply(new BigInteger(b)).toString()).equals("3649760552772806991406184564114682549877113954361462782925976763675666255653486225665808494957477900238166874367635068317805381406282572366371821972593595701388544127398102379288357379612333197280663769935384647844344358594407966485992727383589962048236726744715096711312156760311643104858212670342667229690568585229658813910569607411855770280546861422837629553847973043531578541545436967345783407835402474562087790816775240815912495599135241317")) {
            System.out.println(A[0].replaceAll("", "").replaceAll("\n", ""));
        }
    }
}

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



2
วิธีแก้ปัญหาและเหมืองของคุณมีแนวโน้มที่จะเดินไปตามอายุที่ไม่ได้ตรวจสอบ
Joshua

1
สำหรับผู้ลงคะแนนมีอะไรผิดกฎหมายเกี่ยวกับข้อเสนอนี้หรือไม่?
Rohan Jhunjhunwala

1
จริง ๆ แล้วมีวิธีแก้ปัญหาเล็กน้อยสำหรับเรื่องนี้ (ที่ไม่เกี่ยวข้องกับการแยกตัวประกอบจำนวน RSA-440 เทียบเท่า) แต่น่าเสียดายที่มันต้องเพิ่มอีกประมาณ 10,000 ไบต์ ...
SLuck49

1
@ SLuck49 คุณสามารถแสดงความคิดเห็นกับฉันได้ไหม?
Rohan Jhunjhunwala

1
@ SLuck49 ว้าว! ฉันเพิ่งรู้ว่าคุณกำลังดูอะไรอยู่! ฉันเกือบสูญเสียชื่อเสียง 500
Rohan Jhunjhunwala

3

C, 140 ไบต์แตกโดย Riley

เรามาเริ่มกันง่ายๆ

#include<stdio.h>intmain(){inta=getchar();while(a!=EOF){//\a=getchar();if(a!=10&&a!=32)//\\putchar(a^10^32);putchar(a);a=getchar();}}

(ฉันหวังว่าฉันจะทำสิ่งนี้ถูกต้อง)


1
แตกระแหง ไม่ใช่วิธีแก้ปัญหาเนื่องจากฉันมี 1 ไบต์น้อยกว่า
Riley

@Riley เพิ่มบรรทัดใหม่พิเศษในตอนท้ายและคุณจะสบายดี;)
Alfie Goodacre


2

V , 37 ไบต์ถอดรหัสโดย nmjcman101

OVrS200@"kIi|D@"Aüî|D@"

เนื่องจากสิ่งนี้มี unprintables นี่เป็นเวอร์ชันที่อ่านได้:

O<esc>Vr<C-a>S200<esc>@"kIi<C-v><C-v><esc>|D@"<esc>Aüî<esc>|D@"

หรือถ้าคุณต้องการ hexdump:

00000000: 4f1b 5672 0153 3230 301b 4022 6b49 6916  O.Vr.S200.@"kIi.
00000010: 161b 7c44 4022 1b41 fcee 1b7c 4440 22    ..|D@".A...|D@"

แคร็กนั่นเป็นปริศนาที่เจ๋งจริงๆ
nmjcman101


2

JavaScript ES6, 380 ไบต์, ปลอดภัย

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

ช่องว่างที่ต้องเพิ่ม 67 ไบต์

s=>{for(k=`|||`.split`|`.map(s=>s.replace(/\s/g,c=>(k-=(c<'')+1,n=n<<2|k&3),k=n=0)&&n),x=10106050295,y=-4955405499,i=32,d=2654435769,t=d*i;i--;y-=(x<<4^x>>>5)+x^t+k[t>>>11&3],t-=d,x-=(y<<4^y>>>5)+y^t+k[t&3]);returns[atob(([x,y].map(n=>String.fromCharCode(n&255,n>>8&255,n>>16&255,n>>24)).join``))](/[\n]/).join``}

วิธีการแก้

นี่คือการดำเนินการขยายวิธีการเข้ารหัสลับเล็กคีย์ที่เข้ารหัสแบบ whitespace 64 บิตขยายเป็นคีย์ 128 บิตต่อไปนี้:

K = [0xd224de37, 0x89e34e79, 0xe34e7748, 0x939e2789]

ป้อนคำอธิบายรูปภาพที่นี่

ที่มา: Wikipedia

เมื่อถอดรหัสและแปลงเป็น ASCII, 64 บิตบล็อก[x, y]อ่านเป็นc3BsaXQ=ซึ่งเป็น Base64 splitเข้ารหัสเป็นตัวแทนของ


1
ฉันเริ่มเดรัจฉานบังคับให้คิดเช่นนี้บางทีฉันอาจจะโชคดีและคุณทำให้ค่าหลักทั้งสี่มีความยาวเท่ากัน (8 บิต) ยกเว้นว่าจะเป็น 16 บิตต่อหนึ่ง ... woops กำลังดุร้ายจะไม่เกิดขึ้นเวลาสำหรับแนวทางอื่น
SLuck49

2

Vitsyขนาด 73 ไบต์ปลอดภัย

นี่คือความชั่วร้ายอย่างจริงจัง

5mW3m7m7m2mD&EPamX}<m15mEnl9mZD\[4m]^P-cm(D_2-3*bmD1-dmrnu-'

โชคดี! ต้องเพิ่มช่องว่าง 13 รายการ

รหัสเดิม:

5m
W3m7m
7m
2m
D&EPamX}
<m1
5mEn
l9mZ
D
\[4m]
^P-cm(D
_2-3*
bmD1-dmrnu-
'

ลองออนไลน์!

สิ่งนี้ช่วยลดความยุ่งยากลงไปที่:

<m1
W2\[2m]Z
l\[D&EP^P-_2-3*D1-rnu-(DX}]

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

คุณไม่รู้ความชั่ว ฉันรู้ชั่ว
โจชัว

เพิ่งผ่านไป 0300 สำหรับฉันดังนั้นฉันจะเพิ่มคำอธิบายในตอนเช้า
Addison Crump


1

ไขว้กันเหมือน 43 ไบต์แตก

ISBqv<>>$$4jE:d/v$v?c+91d/v?E;!?l$/o$

รุ่นใน TIO ล้าสมัย แต่คุณจะได้รับสำเนาตัวเองจากGitHub


เวอร์ชันบน Nexus นั้นเป็นรุ่นล่าสุดแล้ว ฉันดึง v1 เช่นกัน
เดนนิส

แค่ตรวจสอบนี่ใช้งานได้ไหมถ้าอินพุตมี linefeed ต่อเนื่องกันสองอัน?
Martin Ender

@ มาร์ตินอีกครั้งก็ควร ขึ้นอยู่กับว่ามีการป้อนข้อมูลเข้าหรือไม่ เมื่อ piped มันควรอ่าน stdin ทั้งหมด
Conor O'Brien

@ เดนนิสขอบคุณ! ฉันตั้งใจจะถามคุณในการแชท
Conor O'Brien


1

Wolfram, 132

อาจมีมากกว่าหนึ่งวิธีแก้ปัญหา (คำใบ้: Mersenne)

StringReplace[#,""->"",Limit[x/(x-1),x->Boole[PrimeQ[
212821282128228281282128228821282128212821282-1]]]]&

วิธีการแก้

StringReplace[#," "->"",Limit[x/(x-1),x->Boole[PrimeQ[
2 128 2 128 2 128 2 2 8 2 8 128 2 128 2 2 8 8 2 128 2 128 2 128 2 128 2-1]]]]&

> การส่งของคุณจะเป็นซอร์สโค้ดโดยลบช่องว่างทั้งหมด
Kritixi Lithos

@KritixiLithos มันถูกเอาออก
swish

สิ่งที่เกี่ยวกับช่องว่างก่อนบรรทัดที่สองและขึ้นบรรทัดใหม่ระหว่างบรรทัดแรกและบรรทัดที่สอง?
Kritixi Lithos

ดีคุณขวาก็เป็นเพียงเพื่อให้สามารถอ่าน ...
หวด

ฉันคิดว่าคุณสามารถโพสต์โซลูชันได้แล้ว
CalculatorFeline

1

ช่องว่าง , 81 74 ไบต์

																					

รุ่นที่มนุษย์อ่านได้:

ttttttttttttttttttttt (21 tab characters)

ฉันรู้ว่านี่เป็นความท้าทายที่เก่าแก่ แต่หวังว่าจะมีใครบางคนที่พร้อมจะทำลายมันได้ ฉันพยายามปรับให้เหมาะสมสำหรับ bytecount แต่อาจเป็นไปได้ที่จะทำให้บางสิ่งสั้นลงด้วยจำนวนอักขระแท็บที่เท่ากัน


0

tcc, 850 ไบต์

เพื่อหลีกเลี่ยงการวางบรรทัดที่ยาวมากฉันผ่านสิ่งนี้ผ่าน tr ​​-d '\ n' | fold -b -w 60

#!/usr/bin/tcc-run#include<stdio.h>typedefunsignedcharu;um[]
={104,105,16,152,94,131,43,42,112,214,53,207,116,170,185,210
};intmain(){uS[256];uk[256];ui,j,t;intc,n=0;FILE*f;f=fopen(_
_FILE__,"r");/*cannotfail*/while(-1!=(c=fgetc(f)))if(c==''||
c==10)k[++n]=c;fclose(f);i=0;do{S[i]=i;}while(++i!=0);j=0;i=
0;do{j=j+S[i]+k[i%n];t=S[i];S[i]=S[j];S[j]=t;}while(++i!=0);
i=0;do{if(S[i]!=m[i])j=1;}while(++i<sizeof(m));if(j==1){i=0;
do{printf("%d,",(int)S[i]);}while(++i<sizeof(m));printf("\n"
);}else{while(-1!=(c=fgetc(stdin)))if(c!=''&&c!=10)fputc(c,s
tdout);}returnj;}

เชื่อมโยงไปยังล่ามหรือไม่
Addison Crump

@VoteToClose: apt-get install tcc ทำเพื่อฉัน
Joshua

0

SILOS , 159 ไบต์ปลอดภัย!

loadLinedef:lblgetagetzzzz/za=256:aX=getax=Xy=Xz=xx-10x|ifxbGOTOx:by-32y|ifycGOTOx:cprintCharX:xa+1z+1x=getaifxa:b

ควรเป็นเรื่องเล็กน้อย มันเป็นรายการแรกของตำรวจและโจร

ไม่มีใครโจมตีมันอาจเป็นเพราะความลึกลับของภาษาของฉัน ดูเหมือนจะเป็นวิธีที่ลื่นไหล แต่ไม่สำคัญเลยเพราะตัวที่สั้นกว่านั้นปลอดภัย

loadLine
def : lbl geta get z zz
z/z
a=256
:a
X=get a
x=X
y=X
z=x
x-10
x |
if x b
GOTO x
:b
y-32
y|
if y c
GOTO x
:c
printChar X
:x
a+1
z+ 1
x=get  a
if x a
:b

อย่าลังเลที่จะลองออนไลน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.