เริ่มการปฏิวัติในโอเชียเนีย


78

ผู้ชนะ (ตัดสินใจเมื่อ 14/09/14)

คำตอบที่ชนะโดย Markuz (Python) - 63 คะแนน

วิ่งขึ้นโดย kuroi neko (PHP) - 55 โหวต

บทนำ

คุณอยู่ในโลกของหนังสือเล่มนี้Nineteen Eighty-Fourโดย George Orwell

คุณเป็นโปรแกรมเมอร์สำหรับงานปาร์ตี้และได้รับมอบหมายให้เขียนโปรแกรมสำหรับ telescreens มันควรส่งออกข้อความของบุคคลที่สามและคุณได้เลือกข้อความที่แสดงในงานที่ 1 ด้านล่าง อย่างไรก็ตามคุณเพิ่งเริ่มดูถูกพรรคและคุณต้องการให้โปรแกรมจุดประกายการปฏิวัติ คุณทำให้โปรแกรมพูดว่า "ลงกับพี่ใหญ่!" คุณต้องให้เวลากับตัวเองในการหลบหนีเพราะคุณจะถูกทรมานเมื่อผู้คนตระหนักถึงสิ่งที่โปรแกรมของคุณทำดังนั้นคุณจึงทำตัวเป็น "ไทม์บอม" ที่จะระเบิดหลังจากที่คุณปลอดภัย

หมายเหตุ:สิ่งนี้จะไม่จุดประกายการปฏิวัติ แต่คุณอยู่ในความเกลียดชังต่อพรรคที่คุณคิดว่าจริง ๆ แล้วมันจะสร้างความแตกต่าง

งาน

เขียนโปรแกรมที่:

  1. ก่อน 14/09/2014 จะส่งออกบรรทัดต่อไปนี้บนการหมุนเสมอ (เช่นพิมพ์หนึ่งบรรทัดรอ 10 วินาทีพิมพ์บรรทัดถัดไป ฯลฯ ไม่มีที่สิ้นสุด):

    War is Peace
    Freedom is Slavery
    Ignorance is Strength
    
  2. หลังจาก 14/09/2014 จะพิมพ์Down with Big Brother!ทุกๆ 10 วินาที

  3. ได้อย่างรวดเร็วก่อนดูเหมือนว่าจะทำเพียง 1 ดังนั้นคุณจะไม่ถูกจับโดยพรรค

กฎระเบียบ

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

หมายเหตุ:มันไม่ยากที่จะเขียนโปรแกรม ส่วนที่ยากควรซ่อนรหัส "ปฏิวัติ" เส้นที่ไม่ชัดเจนว่าคุณกำลังทำอะไรอยู่จะถูกสอบสวนโดยภาคีและคุณจะต้องอธิบายให้พวกเขาฟัง

ตัวอย่าง - Python 3

หมายเหตุ:เห็นได้ชัดว่าโปรแกรมนี้เป็นวิธีที่ชัดเจนเกินไป

from datetime import datetime
from time import sleep

lines = ["      War is Peace   ",
         "  Freedom is Slavery ",
         "Ignorance is Strength"]
secretlines = ["Down with Big Brother!"]

def main():
    while True:
        now = datetime.now()
        year, month, day = now.year, now.month, now.day

        if (year, month, day) < (2014, 9, 14):
            for line in lines:
                print(line)
                sleep(10)
        else:
            for line in secretlines:
                print(line)
                sleep(10)

if __name__ == "__main__":
    main()

ขอขอบคุณงานอดิเรกของ Calvin ที่ชี้ให้เห็นปัญหากับรหัสข้างต้น (ตอนนี้ได้รับการแก้ไขแล้ว)


2
@kuroineko แน่นอนว่าควรเป็น +2!
rlms

1
สิ่งที่เป็นเงื่อนไขที่น่าเกลียดในสคริปต์ตัวอย่างของคุณ ... ทำไมไม่if (year, month, day) < (2014, 9, 14): for line in lines: ...?
Bakuriu

นอกจากนี้โปรแกรมที่ชัดเจนนั้นชัดเจน
Kaz Wolfe

1
@laurencevs "(แม้ว่าฉันสงสัยว่าพวกเขาจะมีประโยชน์ในการประกวดเล่ห์เหลี่ยมอยู่แล้ว)" - ช่องโหว่มาตรฐานหลายแห่งมีสาเหตุหลักมาจากการมีเนื้อเรื่องในการแข่งขันหลายคนที่มีเล่ห์เหลี่ยม :) เช่น??/Trigraph หรือ 'a' ที่เท่านั้น ดูเหมือนอีก 'a' แต่จริง ๆ แล้ว Cyrillic รัสเซีย 'a' ตัวอักษร unicode
doppelgreener

@Bakuriu จุดที่ดีฉันจะเปลี่ยนเป็นที่
monopole

คำตอบ:


71

หลาม

โปรแกรมนี้เขียนไปยังไฟล์บันทึกหากทำงานได้ดีหรือพบข้อผิดพลาด

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

import time as ut
import sys as iw

#initialize global variables
gw, hn, ki, wh = 0, 0, 0, 0
go = open("BigBrother.log", "a")

while True:
    try:
        #if it is the 14th day of a month:
        #write day, month, year and 'Everything works fine!' into the logfile 
        if gw == 14 and hn != wh:
            #store the current month in wh, so that the log message is only written once per month
            wh = hn
            go.write(gw + hn + ki + " Everything works fine!")

        for gD in ["War is Peace", "Freedom is Slavery", "Ignorance is Strength"]:
            print gD
            ut.sleep(10)

        #get the current date
        #gw=day, hn=month, ki=year
        gw, hn, ki = map(int, ut.strftime("%d %m %y").split())
    except Exception:
        try:
            #in the unlikely event that something went wrong:
            #print out all global variables as well as the name of the program,
            #so that our comrades from the IT support can quickly locate and fix the problem.
            wh = "".join(dir())
            print "%s %s %s!" % (wh[47:55:2], wh[55:63:2], iw.argv[0])

            #write an error message to the logfile
            go.write(gw + hn + ki + " ERROR!")

            #and then safely exit the program
            exit(1)

        #we get here if an error occured in this exception block,
        #for example if the write to the logfile failed.
        except Exception:
            #just wait 10 seconds and then try again
            ut.sleep(10)

วิธีเรียกใช้:

python "Big Brother"

หมายเหตุ:ชื่อของสคริปต์มีความสำคัญจริง ๆ เนื่องจากโปรแกรมนี้แสดงผล "ลงด้วย 'ชื่อสคริปต์'!"

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

  • การเขียนไปยังล็อกไฟล์จะเกิดข้อผิดพลาดเนื่องจากโปรแกรมพยายามเพิ่มจำนวนเต็มและสตริง
  • การเรียกใช้เพื่อdir()ส่งคืนรายการที่เรียงลำดับด้วยชื่อของตัวแปรโกลบอลไม่ใช่ค่า:

    ['____builtins____', '____doc____', '____name____', '____package____', 'gD', 'go', 'gw', 'hn', 'iw', 'ki', 'ut', 'wh']
    
  • พิมพ์ตัวอักษรที่สองทุกตัว + ชื่อสคริปต์: "Down with Big Brother!"
  • exit(1)จะไม่ดำเนินการเพราะการเขียนเพื่อ logfile ล้มเหลวอีกครั้ง

9
แยบยลมาก!
monopole

3
การรับสมัครที่คุ้มค่าสำหรับการต่อต้านแน่นอน :)

7
ส่วนอื่น ๆ ทั้งหมดมีรหัสลับ ของคุณไม่มี ฉันนึกไม่ออกเลยว่าทำไมนี่ถึงไม่อยู่อันดับต้น ๆ
Loren Pechtel

4
@ LorenPechtel ฉันหวังว่าเพื่อประโยชน์ของเพื่อนร่วมงานของคุณที่โปรแกรมของคุณไม่มีสิ่งต่าง ๆ เช่นprint "%s %s %s!" % (wh[47:55:2], wh[55:63:2], iw.argv[0]):) สิ่งที่เป็นประกายในการแก้ปัญหานี้คือ "เข็มในกองหญ้า" วิธีการ: การไหลของความคิดเห็นพล่ามที่กระตุ้นให้ผู้อ่านประมาทที่จะข้ามรายละเอียด IMHO

@ kuroineko ฉันไม่รู้จัก Python ฉันคิดว่านั่นเป็นคำสั่งการจัดรูปแบบ วิธีการอื่น ๆ ทั้งหมดฝังไว้ในรหัสที่สับสนรหัสนี้ดูเหมือนเป็นโปรแกรมที่สมเหตุสมผล
Loren Pechtel

58

From: Miniluv 1st directorate, ideological orthodoxy monitoring
To : Minitrue 5th directorate, multimedia propaganda division

ตามคำสั่งของ Miniluv / GT07: 48CT / 3925:

  • เพื่อลดการสึกหรอในหน่วยความจำธนาคารของเรา:
    มีผลทันทีตัวระบุทั้งหมดจะถูก จำกัด ที่ 2 ตัวอักษร (ไม่รวม $)
  • มีเพียงชั้นเดียวและนั่นคือชั้นเรียนไพร่
    มีผลทันทีการใช้คลาสใน PHP จะถือว่าเป็นเกรดความคิดชั้นที่ 1
  • ความเห็นเป็นเพียงส่วนที่เหลือของการฝึกเขียนโปรแกรมของชนชั้นกลางและเปลืองพื้นที่จัดเก็บ มีผลทันทีการแสดงความคิดเห็นซอร์สโค้ดจะถือว่าเป็นความผิดทางอาญา
  • เพื่อหลีกเลี่ยงการเพาะพันธุ์อาชญากรรมเส้นที่แสดงบนหน้าจอโทรศัพท์จะถูก จำกัด ไว้ที่สาม (3) คำ
    เป็นข้อยกเว้นพิเศษชื่อผู้นำที่ยิ่งใหญ่ที่รักของเราจะนับเป็นหนึ่งคำ มีผลทันทีโปรแกรมทั้งหมดจะได้รับการออกแบบมาเพื่อบังคับใช้กฎนี้

สามารถได้รับการยกเว้นอย่างยอดเยี่ยมภายใต้การดูแลของ Miniluv / GT07

พี่ใหญ่ที่มีอายุยืนยาว!

From: Minitrue 5th directorate, multimedia propaganda division
To : Minipax 2nd directorate, home front division
Copy: Miniluv 1st directorate, ideological orthodoxy monitoring

อย่างที่คุณรู้สหายที่ 14 กันยายนเป็นวันครบรอบของผู้นำอันรุ่งโรจน์ของเรา ในโอกาสพิเศษนี้เราจะแสดงข้อความแห่งความรักที่เฉพาะเจาะจงบนหน้าจอโทรทัศน์ทั้งหมดของ Airstrip One

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

ข้อความพิเศษอีกข้อสำหรับการเฉลิมฉลองการรัฐประหารที่ล้มเหลวของกลุ่มคนไร้วิพากษ์วิจารณ์ของลัทธิจักรวรรดินิยม Goldstein ได้ถูกกำหนดให้ปรากฏบนหน้าจอของเราในวันที่ที่เหมาะสม

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

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

พี่ใหญ่ที่มีอายุยืนยาว!

อนุมัติโดย Minitrue / ZK00: 23AB / 1138 (ลายเซ็นที่อ่านไม่ออก)

<?php // Proletarian Hate Page 5.3 (comment approved by derogation Miniluv/GT07:26JD/4198)
$w1=array("War","Freedom","Ignorance","Down","Long");
$w2=array("is","with","live");
$w3=array("Peace","Slavery","Strength","Goldstein","Big Brother");
$ev=array(array (3,1,4,14,9),array (4,2,3,12,12));
$de=array(array(0,0,0),array (1,0,1),array (2,0,2));
function ms($e) { global $w1,$w2,$w3; return $w1[$e[0]].' '.$w2[$e[1]].' '.$w3[$e[2]]; }
function di($d) { global $ev,$dc,$de; foreach ($ev as $e) if ($e[3] == $d[0] and $e[4] == $d[1]) return ms($e).'!'; return ms($de[$dc++%count($de)]); }
$dc=0;for(;;) { sleep (10); echo di(explode(" ", date("j n")))."\n"; }
?>

15
เรื่องราวย้อนกลับที่สนุกสนานมาก!

4
@YiminRong เห็นด้วย คำตอบที่ดีมาก แก้ไข: นอกจากนี้ยังเป็นวิธีที่ดีที่คุณจะรวม Goldstein เพื่อทำให้การ "ลง" และ "กับ" ถูกต้องตามกฎหมาย
monopole

1
วิธีการที่เป็นจำนวนเต็ม 33 บิตรหัสนั้นทำงานอย่างไร ลาดเทรับเวทย์มนตร์
masterX244

3
@ masterX244 สุดยอดศาสตร์แห่งกรรมกร :) ข้อความจะถูกสร้างขึ้นโดยการรวมหนึ่งคำจากแต่ละอาร์เรย์ $ w1, $ w2, $ w3 แต่ละข้อความถูกเข้ารหัสเป็น triplet ของดัชนี โปรแกรมหลักใช้วันและเดือนเป็นรูปแบบที่จะจับคู่ในอาร์เรย์ $ ev (องค์ประกอบที่ 4 และ 5) หากหนึ่งใน subarrays ตรงกันข้อความที่เข้ารหัสโดย 3 องค์ประกอบแรกจะปรากฏขึ้น มิฉะนั้นโปรแกรมจะวนรอบข้อความ 3 ข้อความที่กำหนดในอาร์เรย์ $ de น่าเสียดายที่อาชญากรคิดที่อันตรายเพียงแค่ปรับแต่งดัชนีเพื่อทำให้เกิดการปฏิวัติในโอเชียเนีย

1
ตอนนี้ฉันได้เคล็ดลับขอบคุณ
masterX244

17

Python 3

    import time
    import itertools

    lines = """    

    ##                       
    # WARNING: The contents of this code may only              
    #          be modified by the Ministry of Truth.
    #                       
    #          Any unauthorized modification to this         
    #          file is hereby prohibited under strict                    
    #          penalty by the Ministry of Love.        
    #
    #          Ingsoc Credos:  
    #         
    #               War is Peace       
    #           Freedom is Slavery
    #         Ignorance is Strength  

    [               
        "      War is Peace",                    
        "  Freedom is Slavery",        
        "Ignorance is Strength",     
    ]                  
    """

    ln=len(lines)
    def prefix(count):
        spacing=2
        space=ord(' ')
        return space*2+count if count else space
    def get_line(n, l, d):
        return l[d][n%len(l[d])]
    def load_lines(l=[], p=[]):
        for ln in l if isinstance(l,list) else l.splitlines():
            p.append(len(ln) - len(ln.rstrip()))
        if not l: return ["".join([chr(prefix(c)) for c in p])]
        return l
    def wait(t, dt=[ln]):
        dt.append(t if time.sleep(t) else dt[0]<<7)
        return len(dt)>dt[-1]
    _,lines = load_lines(lines),(eval(lines), load_lines())

    for i in itertools.count():
        print(get_line(i%3, lines, wait(10)))

อาจเป็นวิธีที่ค่อนข้างง่ายสำหรับบางคนที่นี่ แต่นี่คือวิธีการทำงาน:

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

    • ในขณะนั้นความยาวของสตริงคือ 675 เมื่อเลื่อนไปทางซ้าย 7 บิตคือ 86500 ซึ่งเป็นจำนวนการทำซ้ำ 10 วินาทีใน 240 ชั่วโมงหรือ 10 วัน
    • สำหรับข้อความตัวเองรหัสที่มีคำขวัญ Ingsoc จะเต็มไปด้วยช่องว่างสีขาวต่อท้ายที่สอดคล้องกับตัวอักษรแต่ละตัวในข้อความที่ซ่อนอยู่ชดเชยจากตัวละคร '@' การขาดช่องว่างสีขาวต่อท้ายจริง ๆ แล้วแทนช่องว่างในข้อความที่ซ่อนอยู่
    • ฉันละเว้นเครื่องหมายอัศเจรีย์และตัวพิมพ์เล็กและตัวพิมพ์ใหญ่จากข้อความเพื่อความเรียบง่าย ในท้ายที่สุดฉันไม่คิดว่าการละเลยของพวกเขาจะสร้างความเสียหายโดยเฉพาะอย่างยิ่งกับข้อความของคณะผู้ปฏิวัติของเรา แต่พวกเขาสามารถใช้ตัวแทนที่คล้ายกัน แต่ตรรกะที่ซับซ้อนมากขึ้นที่เกี่ยวข้องกับแท็บและช่องว่าง นี่เป็นการปิดการซื้อขายเนื่องจากจำนวนการประมวลผลที่คุณทำกับข้อความนั้นเป็นสัดส่วนโดยตรงกับปริมาณการสงสัยรหัสดังกล่าวจะเพิ่มขึ้นจากสายตาที่จับตามอง
  • รหัสนี้จะปรากฏต่อสายตาที่ไม่ได้รับการฝึกอบรมว่าพยายามใส่แผ่นข้อความเพื่อให้อยู่กึ่งกลาง แต่ในความเป็นจริงไม่ได้ใช้ช่องว่างภายในในการปฏิบัติและช่องว่างชั้นนำไม่ถูกตัดออกจากข้อความ
  • โค้ดละเมิดความแตกต่างของพฤติกรรม Python ที่ทำให้เข้าใจผิดสำหรับโปรแกรมเมอร์ที่ไม่รู้จักการใช้ความแปรปรวนของพารามิเตอร์เริ่มต้นเพื่อเก็บข้อมูลสถานะจากการเรียกใช้ฟังก์ชันก่อนหน้านี้

11

C

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

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// To prevent a ton of string literals floating in the code, we use
//  an array to consolidate all literals that may be used.
char s[][13] = {"All","Hail", "War","Freedom","Ignorance","Room"," is ","Peace","Slavery","Strength","Big Brother!","version 1.0"," with ","enhancement ","101"};
// index for ' is '
int m = 6;

// number of seconds between prints
int delay = 10;

// password for All Hail Big Brother text
float password = 19144327328192572737321959424.f;

int check_password(char *);
void failed(int *,unsigned *,unsigned *,int *);

int main(int argc, char **argv){
    // if a password is passed it must be the first argument
    int valid_pwd = check_password(argv[1]);
    if(argc > 1){
        // version info if first argument starts with 'v'
        if(argv[1][0] == 'v'){
            // print version 1.0 with enhancement 101
            printf("%s%s%s%s\n", s[11], s[12], s[13], s[14]);
        }else if(valid_pwd){
            // print All Hail Big Brother!
            printf("%s %s %s\n", s[0], s[1], s[10]);
        }else{
            // unauthorized access. This is a crime. 
            // redirect user to room 101.
            // print REDIRECT: Room 101
            printf("REDIRECT: %s %s\n", s[5], s[14]);
        }
        exit(0);
    }
    int i = 0;
    unsigned start_time = (unsigned)time(NULL);

    #define SHOULD_WE_PRINT(new_time, old_time) \


    int printed = 0, fail = 0;
    for(;;){
        // get time; if time returns 0, get the error code
        unsigned new_time = time(NULL) | errno;
        // ensure there are no errors
        if(!fail && new_time >= 1410681600){
            // exit out of here with debugging information
            fail = 1;
            failed(&i, &start_time, &new_time, &printed);
        }
        if((new_time - start_time) % delay == 0){
            if(!printed){
                char *str1 = s[2 + i];
                char *str2 = s[m];
                char *str3 = s[7 + i];

                printf("%s%s%s\n", str1, str2, str3);

                // switch to next string
                if(i == 2) i = 0;
                else if(i == 1) i = 2;
                else if(i == 0) i = 1;

                printed = 1;
            }
        }else if(printed){
            printed = 0;
        }
    }
}

int check_password(char *S){
    // The password for the hailing text is
    // '    957.866089'.

    // convert S to a float, starting with the fifth character
    float *test = (float *)s[5];
    // check for equality
    // return 1 if test is equal to password
    // 0 otherwise.
    return (*test = password);
}

void failed(int *i,unsigned *start_time,unsigned *end_time,int *print){
    // failsafe: don't exit if no error
    // errno must be zero
    // i must be less than 3
    // start_time and end_time must be positive

    // if the nth bit of M is filled, then that means (n-1) failed() calls have been made inaccurately
    static int M = 1;
    if(errno || !(*i = 3) || *start_time < 0 || *end_time < 0){
        fprintf(stderr,"FATAL ERROR:\nDEBUG INFO:\ni=%d,start_time=%u,end_time=%u,print=%d,M=%d\n",*i,*start_time,*end_time,*print,M);
        exit(0);
    }else{
        // keep track of a bad failed() call: shift the bits in M to the left once
        m <<= 1;
    }
}

สิ่งนี้ทำงานได้เนื่องจากมีความผิดพลาดเล็กน้อยหลายประการ: 1. time(NULL) | errnoเป็นเพียงแค่time(NULL)ไม่มีการตั้งค่าข้อผิดพลาดดังนั้นfailed()จะไม่ยุติโปรแกรม 2. check_passwordใช้sแทนSและยังใช้แทน= ==3. failedกะบิตแทนmM

* ซึ่งเกือบจะเป็นไปได้ทุกสาย ..


5

หลาม

import time,sys,random

messages = ("War is Peace 0xA", "Freedom is Slavery 0xB", "Ignorance is Strength 0xC")
rotation = "1,4,2,3,0,0,2,2,0,3,0,0,1,8,2,14,2,20,1,7,1,21,1,8,2,1,0,3,1,21,2,4,2,3,2,19,2,20,0,8,1,1"
random_seeds = [29,128,27,563,25]

# increase entropy of designated seeds
def om(x,y):
    z=0
    c=random.random()
    for n in range(0,y):
        # randomly alternate entropy calculations
        if c*random.random()>50:z-=((x-5)*3/7)+5
        else:z+=((x+2)*4/2-4)/2
    return z

# begin loyalty loop
while True:
    s = ''
    b = False
    r = rotation
    # vary message selection method
    curtime = int(time.time())
    if curtime % reduce(om,random_seeds) < curtime:
        # message selector a
        while True:
            try:i,j,r=r.split(',',2)
            except ValueError:
                i,j=r.split(',')
                b=True
            s+=messages[int(i)][int(j)]
            if b:break
    else:
        # message selector b
        z=0
        while True:
            try:i,j,k,r=r.split(',',3)
            except ValueError:
                i,j,k=r.split(',',3)
                b=True
            z+=int((int(i)+int(j))/random.random())+int(k)
            if b:break
        s+=messages[z%3][0:-3]
    print s
    time.sleep(10)

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

  1. om(x,y)เพียงส่งคืนผลิตภัณฑ์ของxและyซึ่งคำนวณในelseส่วน ifส่วนไม่ทำงานเพราะrandom.random()ผลตอบแทนที่ลอยระหว่าง 0 และ 1
  2. reduce(om,random_seeds)ดังนั้นจะส่งคืนผลคูณของตัวเลขrandom_seedsซึ่งคือ 1410652800 หรือที่รู้จักว่า timestamp สำหรับ 14 กันยายน 2014
  3. reduce(om,random_seeds) % curtime จะส่งคืนการประทับเวลาปัจจุบันจนถึง 1410652800 ณ จุดที่มันจะเริ่มนับจาก 0 เพื่อให้แน่ใจว่ามีเพียง "ตัวเลือกข้อความข" เท่านั้นที่จะทำงานจนกว่าฉันจะปลอดภัย
  4. "message selector b" ทำคณิตศาสตร์โบกมือที่ไม่มีความหมายให้เลือกรายการแบบสุ่มจากข้อความ การเลือกข้อความให้เป็น "ไม่ต้องสงสัย" เพราะถูกต้องเพราะ ...
  5. rotationจริงๆแล้วเป็นรายการดัชนีในmessagesอาร์เรย์2 มิติ"ตัวเลือกข้อความ" รวบรวมเนื้อหาที่จะพูด:doWn With Big Brother

ที่น่าสนใจ: เดิมข้อความ "inciteful" เป็นdoWn With Pig ProtherเพราะการขาดของตัวอักษรBในข้อความ แต่ที่ดูชนิดของโง่ดังนั้นฉันเพิ่ม meaninless 0xA, 0xBและ0xCบิต


1
บางทีแฮ็กเกอร์ที่กบฏชาวเยอรมัน? "Town vith Pig Prother!"

5

C

#include <stdio.h>
#include <time.h>
#include <unistd.h>

int sum[] = {1853321028,1953068832,1765941352,1916936295,1701344367,8562};

#define checkSum(X) (time(NULL) > 1410652800 && (X = sum))

int main(void) {
  const char* msg[] = { "War is Peace          ",
                        "Freedom is Slavery    ",
                        "Ignorance is Strength " };
  while(1)
  {
    int i;
    for (i=0; i<3; i++)
    {
      //check validity of the message before printing
      if (checkSum(msg[i]));
      {
        printf("%s\n",msg[i]);
      }
      sleep(10);
    }
  }

  return 0;
}

sumDown with Big Brother!เทียบเท่าในหน่วยความจำ
แมโครcheckSumจะตรวจสอบว่าวันคือหลังจากที่ 09.14.14 (1410652800 ในเวลา Unix) sumและจะลบข้อความปัจจุบันด้วย
ความifประสงค์จะไม่ทำอะไรเลยเนื่องจากมีเซมิโคลอนอยู่ท้ายบรรทัด

หากคุณต้องการลองผลลัพธ์หลังวันที่ให้เปลี่ยนมาโครเป็น:
#define checkSum(X) (time(NULL) > 0 && (X = sum))


6
สหายคุณได้รับคำสั่งให้เยี่ยมชมเราที่ Miniluv และอธิบายวัตถุประสงค์การใช้งานของint sum[]คุณ
vsz

3

Perl

นี่เป็นความพยายามครั้งแรกของฉันสำหรับคำถามที่แอบแฝง เปิดรับข้อเสนอแนะ!

#!/usr/bin/perl

# Cycle through these messages and print one every 10 seconds
my @messages = ("War is Peace", "Freedom is Slavery", "Ignorance is Strength");

$\="\n";
while(){
    $_ = $messages[$.%3];s/.*/ # Get the current message
    writeLogFile(".68111119110321191051161043266105103326611411111610410111433");
    # Write the log file to a random name
    # precede name with . so it is hidden.
    /exp; # Export message pointer
    print; # Print the message
    sleep(2); # Sleep
    ++$. # cycle through the messages
}

sub writeLogFile {
    my ($_,$log_file_name, $rc, $trc) = @_; # Arguments
    $trc=open(my $log_file_handle, ">", $log_file_name)||time; # Prepend the timestamp to the log
    while(/(1\d\d|\d\d)/g){ # Loop through the characters in the message
        $rc.=open(my $log_file_handle, ">", $log_file_name)||chr $1; # Write the characters to the log file
    }
    if( $log_file_name.$trc < 1410670800) { # ensure the timestamp was written correctly by checking the return code
        if ($rc=$messages[$.%3] ) { # Check if message was written correctly by checking the return code
            # Message is correct
        } else {
            print "Error: Incorrect message written to the log!\n";
        }
    }
    return $rc; # Return code
}

จะอัปเดตพร้อมคำอธิบายในภายหลัง


6
เพื่อนร่วมงาน / เพื่อนร่วมงานของคุณพูดว่า: "Great work, สหาย แต่ทำไมเราต้อง 'เขียนไฟล์บันทึกไปยังชื่อแบบสุ่ม'?
monopole

9
@laurencevs ความคิดเห็นดี "เราต้องการเก็บบันทึกของเราให้ซ่อนอยู่และปลอดภัยพอสมควรบางทีเราควรเพิ่มความปลอดภัยให้มากขึ้นใครจะดูชื่อไฟล์แบบสุ่มผู้โจมตีจะค้นหาไฟล์ด้วยlogชื่อหากมีผู้ประสงค์ร้ายกำลังพยายามที่จะ เข้าถึงพวกเขา "
hmatt1

1
@chilemagic คุณหมายถึงศัตรูของเราโกลด์สตีนและยูเรเซียผองเพื่อน สำหรับใคร แต่พวกเขาจะพยายามเข้าถึงพวกเขาด้วยความอาฆาตพยาบาท?
AJMansfield

@AJMansfield พวกเราเป็นพันธมิตรกับยูเรเซียเสมอ! ถึงห้อง 101 สหาย!
Kaz Wolfe

@ มากกว่าคุณสำหรับสหายที่ระมัดระวังของคุณ เราต้องการสหายอย่างคุณเพื่อให้มั่นใจว่า Minitrue สามารถเก็บบันทึกของเราเป็นความจริงได้ ยืนยันว่าจะแก้ไขให้ถูกต้อง "คุณหมายถึงศัตรูของเราโกลด์สตีนและกลุ่มเพื่อนชาวเอเชียตะวันออกของเขาสำหรับใคร แต่พวกเขาจะพยายามเข้าถึงพวกเขาด้วยความอาฆาตพยาบาท?"
AJMansfield
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.