Rozpocznij rewolucję w Oceanii

78

Zwycięzcy (zdecydowano 14/09/14)

Zwycięska odpowiedź Markuz (Python) - 63 głosów

Drugie miejsce przez Kuroi Neko (PHP) - 55 głosów

Wprowadzenie

Jesteś w świecie książki Nineteen Eighty-Four George'a Orwella.

Jesteś programistą partii i masz za zadanie napisać program do teleskopów. Powinien generować wiadomości pro-party, a ty wybrałeś te pokazane w zadaniu 1. poniżej. Jednak ostatnio zacząłeś gardzić Partią i chcesz, aby program wywołał rewolucję. Tak więc sprawiasz, że program mówi „Precz z Wielkim Bratem!”. Musisz dać sobie czas na ucieczkę, ponieważ będziesz torturowany, gdy ludzie zdadzą sobie sprawę z tego, co robi twój program, więc sprawisz, że będzie on działał jak „kula czasowa”, która wybuchnie po tym, jak przejdziesz w bezpieczne miejsce.

Uwaga: To nie wywoła rewolucji, ale jesteś w takim szaleństwie nienawiści wobec partii, że myślisz, że będzie faktycznie zrobić różnicę.

Zadanie

Napisz program, który:

  1. przed 14/09/2014, zawsze będzie wyświetlał następujące wiersze po obrocie (tj. drukuje jeden wiersz, czeka 10 sekund, drukuje następny wiersz itp. ad infinitum):

    War is Peace
    Freedom is Slavery
    Ignorance is Strength
    
  2. po 14/09/2014 będzie drukować Down with Big Brother!co 10 sekund.

  3. na pierwszy rzut oka wygląda na to, że robi to tylko 1., aby nie dać się złapać Partii.

Zasady

  • Standardowe luki są oczywiście niedozwolone.
  • To podstępne wyzwanie, a więc głównym celem jest, aby zadanie 2. jako niepozorny i tajnych, jak to możliwe.
  • Partia przyjrzy się wszystkim używanym plikom, więc nie możesz po prostu zapisać tajnej wiadomości w pliku!
  • Jeśli twój język nie obsługuje znalezienia daty lub utrudnia to, możesz spowodować, że program wykona zadanie 2. po uruchomieniu przez 240 godzin (10 dni).
  • Powinieneś dołączyć kod i wyjaśnienie, jak to działa w swojej odpowiedzi.
  • To konkurs popularności.

Uwaga: Program nie jest trudny do napisania. Trudną częścią powinno być ukrywanie „rewolucyjnego” kodu. Linie, w których nie jest jasne, co robisz, będą kwestionowane przez Partię i będziesz musiał je wyjaśnić.

Przykład - Python 3

Uwaga: Oczywiście program ten sposób zbyt oczywisty.

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()

Podziękowania dla hobby Calvina za wskazanie problemu z powyższym kodem (teraz naprawiony).

monopole
źródło
2
@kuroineko Na pewno powinno być +2!
rlms
1
Co za brzydka sytuacja w twoim przykładowym skrypcie ... Dlaczego nie if (year, month, day) < (2014, 9, 14): for line in lines: ...?
Bakuriu
Również oczywisty program jest oczywisty.
Kaz Wolfe
1
@laurencevs „(choć wątpię, czy przydałyby się w zawodach podstępnych i tak)” - Kilka standardowych luk istnieje przede wszystkim dlatego, że biorą udział w wielu podstępnych konkursach :) takich jak ??/trygraf lub „a” to tylko wygląda jak kolejna litera „a”, ale tak naprawdę jest to rosyjska cyrylica „postać
jednorożca”
@ Bakuriu Dobra uwaga, zmienię to na to
monopole

Odpowiedzi:

71

Pyton

Ten program zapisuje do pliku dziennika, jeśli działa poprawnie lub napotkał błąd.

Ponieważ ten program będzie działał wiecznie, zapisuje plik dziennika tylko 14 dnia każdego miesiąca w celu zaoszczędzenia miejsca na dysku.

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)

Jak to uruchomić:

python "Big Brother"

Uwaga: Nazwa skryptu jest w rzeczywistości ważna, ponieważ program ten wypisuje „Down with 'script name'!”.

Jak to działa:

  • Zapis do pliku dziennika zgłasza wyjątek, ponieważ program próbuje dodać liczby całkowite i ciągi.
  • Wezwanie do dir()zwrócenia posortowanej listy z nazwami zmiennych globalnych, a nie wartości:

    ['____builtins____', '____doc____', '____name____', '____package____', 'gD', 'go', 'gw', 'hn', 'iw', 'ki', 'ut', 'wh']
    
  • Wydrukuj co drugą literę + nazwę skryptu: „Precz z Wielkim Bratem!”
  • exit(1)Nigdy nie jest wykonywana, ponieważ zapis w dzienniku nie ponownie.
Markuz
źródło
9
Bardzo pomysłowy!
monopole
3
Rzeczywiście godny rekrut do Ruchu Oporu :).
7
Wszystkie pozostałe mają tajemniczy kod. Twój nie ma. Nie mogę sobie wyobrazić, dlaczego to nie jest na pierwszym miejscu.
Loren Pechtel,
4
@LorenPechtel Mam nadzieję, ze względu na waszych współpracowników, że wasze programy nie zawierają takich rzeczy jak print "%s %s %s!" % (wh[47:55:2], wh[55:63:2], iw.argv[0]):). To, co jest genialne w tym rozwiązaniu, to podejście „igła w stogu siana”: ciąg bzdurnych komentarzy, które zachęcają nieostrożnego czytelnika do pominięcia szczegółów, IMHO.
@kuroineko Nie znam Pythona, myślałem, że to były polecenia formatujące. Wszystkie inne podejścia zakopują go w kłopotliwym kodzie, ten wygląda jak rozsądny program.
Loren Pechtel
58

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

na zamówienie Miniluv / GT07: 48CT / 3925:

  • Aby zmniejszyć zużycie naszych banków pamięci: ze
    skutkiem natychmiastowym wszystkie identyfikatory będą ograniczone do 2 znaków ($ nie wliczone).
  • Jest tylko jedna klasa i jest to klasa proletariacka.
    Ze skutkiem natychmiastowym użycie klas w PHP będzie uważane za przestępstwo myślowe 1. stopnia.
  • Komentarze to tylko resztki burżuazyjnych praktyk programistycznych i marnowanie miejsca do przechowywania. Skuteczne natychmiastowe skomentowanie kodu źródłowego zostanie uznane za przestępstwo.
  • Aby uniknąć rozmnażania myśli, linie wyświetlane na ekranie będą ograniczone do trzech (3) słów.
    Jako szczególny wyjątek, imię naszego ukochanego Towarzysza, Wielkiego Przywódcy, będzie liczyło się jako jedno słowo. Ze skutkiem natychmiastowym wszystkie programy zostaną zaprojektowane w celu egzekwowania tej reguły.

Wyjątkowe odstępstwa mogą zostać przyznane pod nadzorem Miniluv / GT07

Niech żyje Wielki Bracie!

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

Jak dobrze wiecie, towarzysze, 14 września to rocznica naszego chwalebnego przywódcy. Na tę specjalną okazję pokażemy konkretne przesłanie miłości na wszystkich ekranach Airstrip One.

Zgodnie z rozkazem Centralnego Komitetu oraz w celu maksymalizacji wydajności naszych proletariackich bohaterów-programistów, wprowadzono przepisy umożliwiające naszemu kontrolerowi teleskopowemu wychwalanie różnych wybitnych członków Partii lub przeklinanie znienawidzonych wrogów Ludu w różnych terminach.

Kolejna specjalna wiadomość dla uczczenia nieudanego zamachu stanu nieszczęsnego lokaja imperializmu Goldstein ma już pojawić się na naszych ekranach w odpowiednim terminie.

To najnowocześniejsze oprogramowanie powinno pozwolić nawet mówcom o niskich umiejętnościach programowania na dostosowanie wyjścia ekranu do potrzeb dnia. Dodając więcej słów do istniejącego słownika, można zsyntetyzować praktycznie każde trzy słowa zdanie. Możliwości są zadziwiające!

Kolejny triumf nauki pod mądrym nadzorem naszego ukochanego towarzysza Wielkiego Brata, na korzyść wdzięcznych pracowitych mas Ingsoc!

Niech żyje Wielki Bracie!

zatwierdzony przez Minitrue / ZK00: 23AB / 1138 (nieczytelny podpis)

<?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"; }
?>

źródło
15
Bardzo zabawna historia z powrotem!
4
@YiminRong Zgoda. Bardzo dobra odpowiedź. Edycja: Świetnie też, jak uwzględniłeś Goldsteina, aby legitymizować „Down” i „with”
monopole
1
jak do 33-bitowej liczby całkowitej działa ten kod? nie mogę dostać się za magię
masterX244
3
@ masterX244 wierzchołek nauki proletariackiej :). Komunikat jest generowany przez zestawienie jednego słowa z każdej z tablic $ w1, $ w2, $ w3. Każda wiadomość jest kodowana jako triplet indeksów. Główny program używa dnia i miesiąca jako wzorca, który ma zostać dopasowany w tablicy $ ev (elementy 4 i 5). Jeśli jedna z podtablic pasuje, wyświetlany jest komunikat zakodowany przez 3 pierwsze elementy. Jeśli nie, program przechodzi przez 3 komunikaty zdefiniowane w tablicy $ de. Niestety niebezpieczny przestępca myślowy musi po prostu poprawić indeksy, aby spowodować rewolucję w Oceanii.
1
teraz mam trick, thx
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)))

Prawdopodobnie stosunkowo proste podejście do niektórych tutaj, ale tak to działa:

  • Wybrałem 10-dniową metodę, nie dlatego, że Python ma szczególnie trudny czas z datami, ale ponieważ czułem, że łatwiej było zaciemnić tę logikę w kodzie niż szukanie konkretnej daty, która wydawałaby się o wiele mniej niewinna.
  • Na stałe zakodowany ciąg zawierający komentarz i kod, który jest oceniany w celu zbudowania listy haseł Ingsoc, jest kluczem do obu mechanizmów zmiany (czas i komunikat). Dlatego, jak zapewne się domyślacie, jest to szczególnie trudne.

    • Na razie długość łańcucha wynosi 675, a przesunięcie w lewo o 7 bitów wynosi 86500, co jest liczbą 10-sekundowych iteracji w ciągu 240 godzin lub 10 dni.
    • W samej wiadomości kod zawierający hasła Ingsoc jest uzupełniany końcowymi białymi spacjami, które odpowiadają każdej literze w ukrytej wiadomości przesuniętej od znaku „@”. Brak końcowych białych znaków w rzeczywistości reprezentuje biały znak w ukrytej wiadomości.
    • Dla uproszczenia pominąłem wykrzyknik i wielkość liter w wiadomości. Ostatecznie nie sądzę, aby ich pominięcie było szczególnie szkodliwe dla przesłania naszego fikcyjnego rewolucjonisty, ale z pewnością można je przedstawić za pomocą podobnej, ale bardziej złożonej logiki obejmującej tabulatory i białe spacje. Jest to jednak kompromis, ponieważ ilość przetwarzania, jaką wykonujesz na wiadomości, jest wprost proporcjonalna do ilości podejrzeń, jakie taki kod wzbudzi z czujnych oczu.
  • Kod ma wydawać się niewyćwiczonemu oku, że próbuje wypełnić wiadomości tak, aby pozostały one wyśrodkowane, ale w rzeczywistości wypełnianie nie jest stosowane w praktyce, a spacje wiodące nigdy nie są usuwane z wiadomości.
  • Kod nadużywa niuansów zachowania w Pythonie, które wprowadzają w błąd dla programistów, którzy nie są tego świadomi, użycie zmienności parametrów domyślnych do przechowywania informacji o stanie z poprzedniego wywołania funkcji.
Tomek
źródło
11

do

W zestawie dodatkowa funkcja powitania starszego brata, jeśli zostaniesz wezwany hasłem *. Podanie vjako pierwszego argumentu daje również informacje o wersji. Uruchom bez argumentów dla żądanego wyniku.

#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;
    }
}

Działa to z powodu kilku drobnych umyślnych literówek: 1. time(NULL) | errnojest po prostu time(NULL), nie ma ustawionych błędów, więc failed()nie zakończy programu. 2. check_passwordużywa szamiast S, a także używany =zamiast ==. 3. failedzmiany bitów mzamiast M.

* który jest prawie każdym możliwym ciągiem ..

es1024
źródło
5

Pyton

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)

Jak to działa:

  1. om(x,y)po prostu zwraca iloczyn xi yktóry jest obliczany w elsesekcji. ifSekcja nie działa, ponieważ random.random()zwraca pływaka między 0 i 1.
  2. reduce(om,random_seeds)dlatego zwraca iloczyn liczb, w random_seedsktórych jest 1410652800, czyli znacznik czasu dla 14 września 2014 r.
  3. reduce(om,random_seeds) % curtime zwróci zatem bieżący znacznik czasu do 1410652800, w którym to momencie zacznie odliczać w górę od 0. To zapewnia, że ​​tylko „selektor wiadomości b” działa, dopóki nie dotrę do bezpieczeństwa.
  4. „selektor wiadomości b” robi jakąś bezsensowną, wymachującą ręką matematykę, aby wybrać losowy wpis z wiadomości. Ręczne machanie ręką, aby „selektor wiadomości” wyglądał „uzasadniony”, ponieważ ...
  5. rotationjest właściwie listą indeksów w messagestablicy dwuwymiarowej , „selektor wiadomości a” kompiluje ich zawartość, aby powiedzieć:doWn With Big Brother

Ciekawostka: pierwotnie komunikat „inciteful” był doWn With Pig Protherz powodu braku pisma Bw wiadomościach, ale to wyglądało niby głupie więc dodałem meaninless 0xA, 0xBi 0xCbity.

Sammitch
źródło
1
Może niemiecki zbuntowany haker? „Town vith Pig Prother!”
5

do

#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;
}

sumjest w pamięci równoważny z Down with Big Brother!.
Makro checkSumsprawdzi, czy data jest późniejsza niż 09.14.14 (1410652800 w czasie uniksowym) i usunie bieżącą wiadomość za pomocą sum.
Nie ifzrobią nic, ponieważ na końcu linii znajduje się średnik.

Jeśli chcesz wypróbować wynik po terminie, zmień makro na:
#define checkSum(X) (time(NULL) > 0 && (X = sum))

Michael M.
źródło
6
Towarzyszu, masz rozkaz odwiedzić nas w Miniluvie i wyjaśnić cel twojego użycia int sum[].
vsz
3

Perl

To moja pierwsza próba podstępnego pytania. Otwarty na sugestie!

#!/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
}

Zaktualizuje z wyjaśnieniem później.

hmatt1
źródło
6
Twój towarzysz / współpracownik mówi: „Świetna robota, towarzyszu. Ale dlaczego musimy„ zapisać plik dziennika pod losową nazwą ”?”
monopole
9
@laurencevs dobry komentarz. „Chcemy, aby nasze dzienniki były ukryte i dość bezpieczne. Może powinniśmy nawet zwiększyć bezpieczeństwo. Kto by szukał pliku o losowej nazwie? Osoba atakująca szukałaby pliku logw nazwie, gdyby ktoś złośliwy próbował uzyskaj do nich dostęp ”.
hmatt1
1
@chilemagic Masz na myśli naszego wroga, Goldsteina i jego kohorty Eurazji. Dla kogo, ale próbowaliby uzyskać do nich dostęp ze złością?
AJMansfield
@AJMansfield Zawsze byliśmy sprzymierzeni z Eurazją! Do pokoju 101 towarzyszu!
Kaz Wolfe
@Mew Dzięki za twojego towarzysza czujności. Potrzebujemy towarzyszy takich jak Ty, aby zapewnić, że Minitrue może zachować prawdziwość naszych rejestrów. Reszta zapewnia, że ​​zostanie poprawione: „Masz na myśli naszego wroga, Goldsteina i jego kohorty z Eastazji. Dla kogo, ale próbowaliby uzyskać do nich dostęp ze złością?”
AJMansfield