release winning entries of IOCCC28 under the year 2024
Congratulations to: * 2024/anders - Prize in sound coding - layered music generator * 2024/burton - Prize in pentagrammatology - wordle hard mode solver * 2024/cable1 - Prize in bot talk - LLM inference engine * 2024/cable2 - Prize in murky waters - salmon recipe * 2024/carlini - Prize in perfect timing - Intel 4004 emulation * 2024/codemeow - Prize in tray planting - bonsai generator * 2024/endoh1 - Prize in patient pointillism - slow ray tracer in CPP * 2024/endoh2 - Prize in solid body physics - rotating rigid body simulation * 2024/ferguson1 - Prize in diabolical logistics - Oregon trail pact with the devil * 2024/ferguson2 - Prize in yil-tas - Navajo code talker translator * 2024/howe - Nice accent eh-ward - mini vi * 2024/kramer - Prize in linguistic arithmetic - natural language numerical calculator * 2024/kurdyukov1 - Prize in phased periodicity - phase of the Moon * 2024/kurdyukov2 - Prize in art restoration - JPEG artifact removal * 2024/kurdyukov3 - Prize in virtual quietus - gaming VM and doom * 2024/kurdyukov4 - Prize in embiggening - encode without literals * 2024/maffiodo - Prize in creative interpretation - Jav\*script interpreter * 2024/mills - Prize in ℤ₃ - Infocom v3 story interpreter * 2024/stedolan - Best one liner - icon from MD5 * 2024/straadt - Prize in imitative rebooting - OpenRISC CPU and Linux * 2024/tmarrec - Prize in cyclonic coding - 3D tornado simulation * 2024/tompng - Prize in quasi bijection - vortex encryptor decryptor * 2024/weaver - Sur prize - rickroll Ran `make update` to perform the above. new file: 2024/burton/.entry.json
This commit is contained in:
1 parent
10512e6c79
commit
09750f8899
443 files changed
+182938
-231
No files matched your search
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"no_comment" : "mandatory comment: because comments were removed from the original JSON spec",
|
||||
"entry_JSON_format_version" : "1.2 2024-09-25",
|
||||
"award" : "Prize in quasi bijection",
|
||||
"year" : 2024,
|
||||
"dir" : "tompng",
|
||||
"entry_id" : "2024_tompng",
|
||||
"title" : "vortex",
|
||||
"abstract" : "vortex encryptor decryptor",
|
||||
"author_set" : [
|
||||
{
|
||||
"author_handle" : "Tompng"
|
||||
}
|
||||
],
|
||||
"manifest" : [
|
||||
{
|
||||
"file_path" : "prog.c",
|
||||
"inventory_order" : 20,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "c",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "entry source code"
|
||||
},
|
||||
{
|
||||
"file_path" : "Makefile",
|
||||
"inventory_order" : 30,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "makefile",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "entry Makefile"
|
||||
},
|
||||
{
|
||||
"file_path" : "prog.orig.c",
|
||||
"inventory_order" : 50,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "c",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "original source code"
|
||||
},
|
||||
{
|
||||
"file_path" : "sample.txt",
|
||||
"inventory_order" : 100,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "text",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "sample IOCCC text"
|
||||
},
|
||||
{
|
||||
"file_path" : "try.sh",
|
||||
"inventory_order" : 100,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "shellscript",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "script to try entry"
|
||||
},
|
||||
{
|
||||
"file_path" : "2024_tompng.tar.bz2",
|
||||
"inventory_order" : 1415926535,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "tbz2",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "download entry tarball"
|
||||
},
|
||||
{
|
||||
"file_path" : ".entry.json",
|
||||
"inventory_order" : 4000000000,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "json",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "entry summary and manifest in JSON"
|
||||
},
|
||||
{
|
||||
"file_path" : ".gitignore",
|
||||
"inventory_order" : 4000000000,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "gitignore",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "list of files that should not be committed under git"
|
||||
},
|
||||
{
|
||||
"file_path" : ".path",
|
||||
"inventory_order" : 4000000000,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "path",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "directory path from top level directory"
|
||||
},
|
||||
{
|
||||
"file_path" : "README.md",
|
||||
"inventory_order" : 4000000000,
|
||||
"OK_to_edit" : true,
|
||||
"display_as" : "markdown",
|
||||
"display_via_github" : true,
|
||||
"entry_text" : "markdown source for this web page"
|
||||
},
|
||||
{
|
||||
"file_path" : "index.html",
|
||||
"inventory_order" : 4294967295,
|
||||
"OK_to_edit" : false,
|
||||
"display_as" : "html",
|
||||
"display_via_github" : false,
|
||||
"entry_text" : "this web page"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
prog1.enc.c
|
||||
prog2.enc.c
|
||||
rand
|
||||
rand.c
|
||||
@@ -0,0 +1 @@
|
||||
2024/tompng
|
||||
Binary file not shown.
@@ -0,0 +1,212 @@
|
||||
#!/usr/bin/env make
|
||||
#
|
||||
# 2024/tompng
|
||||
|
||||
#############################
|
||||
# shell used by this Makefile
|
||||
#############################
|
||||
|
||||
SHELL= bash
|
||||
|
||||
|
||||
#######################
|
||||
# common tool locations
|
||||
#######################
|
||||
|
||||
include ../../var.mk
|
||||
|
||||
|
||||
#####################
|
||||
# C compiler settings
|
||||
#####################
|
||||
|
||||
# Common C compiler warnings to silence
|
||||
#
|
||||
# Example: CSILENCE= -Wno-poison-system-directories
|
||||
#
|
||||
CSILENCE= -Wno-misleading-indentation -Wno-builtin-requires-header -Wno-implicit-function-declaration
|
||||
|
||||
# Attempt to silence unknown warning options
|
||||
#
|
||||
CUNKNOWN= -Wno-unknown-warning-option
|
||||
|
||||
# Common C compiler warning flags
|
||||
#
|
||||
# NOTE: The addition of -pedantic to CWARN is a challenge that
|
||||
# You may wish to avoid if it proves too problematic.
|
||||
# There is NO penalty for removing -pedantic from CWARN.
|
||||
#
|
||||
CWARN= -Wall -Wextra -pedantic ${CSILENCE} ${CUNKNOWN}
|
||||
|
||||
# Compiler standard
|
||||
#
|
||||
CSTD= -std=gnu17
|
||||
|
||||
# Compiler bit architecture
|
||||
#
|
||||
# Example for 32-bitness: ARCH= -m32
|
||||
# Example for 64-bitness: ARCH= -m64
|
||||
#
|
||||
# NOTE: Normally one should NOT specify a specific architecture.
|
||||
#
|
||||
ARCH=
|
||||
|
||||
# Defines that are needed to compile
|
||||
#
|
||||
# Example: -Dfoo -Dbar=baz
|
||||
#
|
||||
CDEFINE=
|
||||
|
||||
# Include files that are needed to compile
|
||||
#
|
||||
# Example: CINCLUDE= -include stdio.h
|
||||
#
|
||||
CINCLUDE=
|
||||
|
||||
# Other flags to pass to the C compiler
|
||||
#
|
||||
# Example: COTHER= -fno-math-errno
|
||||
#
|
||||
COTHER=
|
||||
|
||||
# Optimization
|
||||
#
|
||||
# NOTE: Feel free to change the level of compiler optimization.
|
||||
# The "-O3" is just a friendly default you might wish to try.
|
||||
#
|
||||
# Example: OPT= -O0 -g
|
||||
#
|
||||
OPT= -O3
|
||||
|
||||
# Default flags for ANSI C compilation
|
||||
#
|
||||
CFLAGS= ${CSTD} ${CWARN} ${ARCH} ${CDEFINE} ${CINCLUDE} ${COTHER} ${OPT}
|
||||
|
||||
# Libraries needed to build
|
||||
#
|
||||
# Example: LDFLAGS= -lncurses -lm
|
||||
#
|
||||
LDFLAGS=
|
||||
|
||||
# C compiler to use
|
||||
#
|
||||
# NOTE: The IOCCC Judges recommend you leave CC as just "cc"
|
||||
# and NOT set it to clang, or gcc, or something else
|
||||
# unless you have a STRONG reason to do so.
|
||||
#
|
||||
# Setting CC to something other than "cc" makes your
|
||||
# code less portable to those who do not have your
|
||||
# particular C compiler. **hint**
|
||||
#
|
||||
# If you want to test your code with a particular C compiler,
|
||||
# use the make command line. For example:
|
||||
#
|
||||
# make all CC=clang
|
||||
# make all CC=gcc
|
||||
#
|
||||
CC= cc
|
||||
|
||||
# Compiler add-ons or replacements for clang only
|
||||
#
|
||||
ifeq "$(findstring $(CLANG),${CC})" "$(CLANG)"
|
||||
#
|
||||
# NOTE: This code is only invoked when CC is "clang"
|
||||
# such as when you use the make command line:
|
||||
#
|
||||
# make all CC=clang
|
||||
#
|
||||
CSILENCE+= -Wno-comma -Wno-implicit-int-conversion -Wno-missing-prototypes \
|
||||
-Wno-missing-variable-declarations -Wno-poison-system-directories \
|
||||
-Wno-shorten-64-to-32
|
||||
#
|
||||
CWARN+= -Weverything
|
||||
#
|
||||
endif
|
||||
|
||||
# Specific add-ons or replacements for gcc only
|
||||
#
|
||||
ifeq "$(findstring $(GCC),${CC})" "$(GCC)"
|
||||
#
|
||||
# NOTE: This code is only invoked when CC is "gcc"
|
||||
# such as when you use the make command line:
|
||||
#
|
||||
# make all CC=gcc
|
||||
#
|
||||
CSILENCE+=
|
||||
#
|
||||
CWARN+=
|
||||
#
|
||||
endif
|
||||
|
||||
|
||||
###########################################
|
||||
# Special Makefile variables for this entry
|
||||
###########################################
|
||||
|
||||
ENTRY= prog
|
||||
PROG= ${ENTRY}
|
||||
#
|
||||
OBJ= ${PROG}.o
|
||||
TARGET= ${PROG}
|
||||
#
|
||||
ALT_OBJ=
|
||||
ALT_TARGET=
|
||||
|
||||
# list any data files supplied with your submission
|
||||
#
|
||||
# Example: DATA= curds whey
|
||||
#
|
||||
DATA=
|
||||
|
||||
|
||||
#################
|
||||
# build the entry
|
||||
#################
|
||||
|
||||
all: data ${TARGET}
|
||||
@${TRUE}
|
||||
|
||||
.PHONY: all alt data everything clean clobber
|
||||
|
||||
# how to compile
|
||||
#
|
||||
${PROG}: ${PROG}.c
|
||||
${CC} ${CFLAGS} ${PROG}.c -o $@ ${LDFLAGS}
|
||||
|
||||
# alternative executable
|
||||
#
|
||||
alt: data ${ALT_TARGET}
|
||||
@${TRUE}
|
||||
|
||||
${PROG}.alt: ${PROG}.alt.c
|
||||
${CC} ${CFLAGS} ${PROG}.alt.c -o $@ ${LDFLAGS}
|
||||
|
||||
# data files
|
||||
#
|
||||
data: ${DATA}
|
||||
@${TRUE}
|
||||
|
||||
# both all and alt
|
||||
#
|
||||
everything: all alt
|
||||
@${TRUE}
|
||||
|
||||
|
||||
###############
|
||||
# utility rules
|
||||
###############
|
||||
#
|
||||
clean:
|
||||
${RM} -f ${OBJ} ${ALT_OBJ}
|
||||
|
||||
clobber: clean
|
||||
${RM} -f ${TARGET} ${ALT_TARGET}
|
||||
${RM} -rf *.dSYM
|
||||
${RM} -f prog1.enc.c prog2.enc.c rand rand.c
|
||||
|
||||
|
||||
######################################
|
||||
# optional include of 1337 hacker rulz
|
||||
######################################
|
||||
|
||||
-include 1337.mk ../1337.mk ../../1337.mk
|
||||
@@ -0,0 +1,130 @@
|
||||
## To build:
|
||||
|
||||
``` <!---sh-->
|
||||
make all
|
||||
```
|
||||
|
||||
|
||||
## To use:
|
||||
|
||||
|
||||
### Encryption
|
||||
|
||||
``` <!---sh-->
|
||||
prog < file.txt > file.enc.txt
|
||||
```
|
||||
|
||||
|
||||
### Decryption
|
||||
|
||||
``` <!---sh-->
|
||||
prog < file.enc.txt > file.txt
|
||||
```
|
||||
|
||||
|
||||
### Command line arguments
|
||||
|
||||
You can also specify SIZE of the text-stirring area and a PASSWORD.
|
||||
|
||||
``` <!---sh-->
|
||||
./prog 30 < input > output
|
||||
./prog PASSWORD < input > output
|
||||
./prog 40 PASSWORD < input > output
|
||||
```
|
||||
|
||||
You need to specify the same SIZE and PASSWORD to decrypt correctly.
|
||||
|
||||
|
||||
## Try:
|
||||
|
||||
``` <!---sh-->
|
||||
./try.sh
|
||||
```
|
||||
|
||||
|
||||
## Judges' remarks:
|
||||
|
||||
It is well-known that the Enigma cipher was broken due to the fact that a letter could never map to itself.
|
||||
Is this algorithm susceptible to a similar cryptanalysis?
|
||||
|
||||
|
||||
## Author's remarks:
|
||||
|
||||
|
||||
### Vortex Encryptor/Decryptor
|
||||
|
||||
Secure encryption/decryption is a black box. It's highly based on difficult mathematics. We just blindly TRUST when using it.
|
||||
|
||||
This entry is a visual vortex encryptor/decryptor for a text file.
|
||||
You can visually see how this program stirs the text to encrypt/decrypt. It's not a black box at all.
|
||||
|
||||
|
||||
### Easter Eggs
|
||||
|
||||
|
||||
#### Random Encryptor/Decryptor
|
||||
|
||||
Some might dislike vortex-encryption algorithm. Alternately, there is one more visual text mixing algorithm.
|
||||
|
||||
``` <!---sh-->
|
||||
./prog < prog.c > rand.c
|
||||
```
|
||||
|
||||
This program `rand.c` is NOT A VORTEX encryptor/deryptor. You can see the text `N O /,T ,A` somewhere in the code. It randomly swaps characters instead of stirring with vortex.
|
||||
|
||||
To check the randomness, compile it as an executable `rand` and try `./rand < prog.c` or `./rand < rand.c`.
|
||||
You can find that the encrypted text claims to be really RAND/rand-om.
|
||||
|
||||
|
||||
#### Important Passwords
|
||||
|
||||
"password" is the 1st most used alphabet password in the world. Wait, what's the 0th used password? It might be "ioccc" or "IOCCC".
|
||||
Let's encrypt prog.c with these passwords.
|
||||
|
||||
``` <!---sh-->
|
||||
./prog ioccc < prog.c > prog1.enc.c
|
||||
./prog IOCCC < prog.c > prog2.enc.c
|
||||
```
|
||||
|
||||
Imagine if you accidentally hit your head hard, forgot the password, lost everything except prog executable and the encrypted prog.c file.
|
||||
There's nothing to worry about. Just like important passwords often written on sticky notes, you can find this password in the encrypted text.
|
||||
|
||||
|
||||
### Internal
|
||||
|
||||
|
||||
#### Encryption/Decryption
|
||||
|
||||
This program internally have forward-text-stir and backward-text-stir operation.
|
||||
It tries both operation and select the one that makes the output have less entropy.
|
||||
This is why this program doesn't need a command line argument such as `--encrypt` or `--decrypt`.
|
||||
|
||||
|
||||
#### Seed and Hash
|
||||
|
||||
For security reason, vortex used to encrypt/decrypt varies over input text.
|
||||
Seed is calculated with vortex-stir-stable hash algorithm. This hash doesn't change over encryption/decryption.
|
||||
This is making hard to embed easter eggs into this program.
|
||||
|
||||
|
||||
#### Vortex stirring algorithm
|
||||
|
||||
Character should not disappear by vortex stirring operation, so the velocity field of the vortex is required to be no divergence.
|
||||
Velocity field that has no divergence can be created from a [stream function](https://en.wikipedia.org/wiki/Stream_function).
|
||||
In this program, stream function which is a scalar field is made of horizontal, vertical and diagonal periodic waves.
|
||||
With a simple mathematics, this vortex stirring operation can be decomposed into horizontal, vertical, and diagonal array rotation which is a reversible operation.
|
||||
|
||||
|
||||
<!--
|
||||
|
||||
Copyright © 1984-2025 by Landon Curt Noll and Leonid A. Broukhis. All Rights Reserved.
|
||||
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see:
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-->
|
||||
@@ -0,0 +1,644 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<!-- START: two lines up starts content from: inc/top.default.html -->
|
||||
|
||||
<!-- END: this line ends content from: inc/top.default.html -->
|
||||
<!-- START: this line starts content from: inc/head.default.html -->
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="../../ioccc.css">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||
<title>2024/tompng - Prize in quasi bijection</title>
|
||||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||||
<meta name="description" content="2024 IOCCC entry tompng - Prize in quasi bijection">
|
||||
<meta name="keywords" content="IOCCC, 2024, IOCCC 2024, IOCCC entry, tompng, Prize in quasi bijection">
|
||||
</head>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
|
||||
<!-- END: this line ends content from: inc/head.default.html -->
|
||||
|
||||
<!-- -->
|
||||
<!-- This web page was formed via the tool: bin/readme2index.sh -->
|
||||
<!-- The content of main section of this web page came from: 2024/tompng/README.md -->
|
||||
<!-- -->
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<!-- !!! Do not modify this web page, instead modify the file: 2024/tompng/README.md !!! -->
|
||||
<!-- !!! Do not modify this web page, instead modify the file: 2024/tompng/README.md !!! -->
|
||||
<!-- !!! Do not modify this web page, instead modify the file: 2024/tompng/README.md !!! -->
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
|
||||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||||
|
||||
<!-- START: this line starts content from: inc/body.default.html -->
|
||||
|
||||
<body>
|
||||
|
||||
<!-- END: this line ends content from: inc/body.default.html -->
|
||||
<!-- START: this line starts content from: inc/topbar.default.html -->
|
||||
|
||||
<div class="theader">
|
||||
<nav class="topbar">
|
||||
<div class="container">
|
||||
<div class="logo">
|
||||
<a href="../../index.html" class="logo-link">
|
||||
IOCCC
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="topbar-items">
|
||||
<div class="item">
|
||||
<span class="item-header">
|
||||
Entries
|
||||
</span>
|
||||
|
||||
<div class="sub-item">
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../years.html" class="sub-item-link">
|
||||
Winning entries
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../authors.html" class="sub-item-link">
|
||||
Winning authors
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../location.html" class="sub-item-link">
|
||||
Location of authors
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../bugs.html" class="sub-item-link">
|
||||
Bugs and (mis)features
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../faq.html#fix_an_entry" class="sub-item-link">
|
||||
Fixing entries
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../faq.html#fix_author" class="sub-item-link">
|
||||
Updating author info
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<span class="item-header">
|
||||
Status
|
||||
</span>
|
||||
|
||||
<div class="sub-item">
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../news.html" class="sub-item-link">
|
||||
News
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../status.html" class="sub-item-link">
|
||||
Contest status
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../next/rules.html" class="sub-item-link">
|
||||
IOCCC rules
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../next/guidelines.html" class="sub-item-link">
|
||||
IOCCC guidelines
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../markdown.html" class="sub-item-link">
|
||||
Markdown guidelines
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../SECURITY.html" class="sub-item-link">
|
||||
Security policy
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<span class="item-header">
|
||||
FAQ
|
||||
</span>
|
||||
|
||||
<div class="sub-item">
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../faq.html" class="sub-item-link">
|
||||
Frequently asked questions
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../quick-start.html#enter" class="sub-item-link">
|
||||
Enter the IOCCC
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../faq.html#compiling" class="sub-item-link">
|
||||
Compiling entries
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../faq.html#running_entries" class="sub-item-link">
|
||||
Running entries
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../faq.html#help" class="sub-item-link">
|
||||
How to help
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="item">
|
||||
<span class="item-header">
|
||||
About
|
||||
</span>
|
||||
|
||||
<div class="sub-item">
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../index.html" class="sub-item-link">
|
||||
Home page
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../social.html" class="sub-item-link">
|
||||
IOCCC social media
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../about.html" class="sub-item-link">
|
||||
About the IOCCC
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../judges.html" class="sub-item-link">
|
||||
The judges
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../thanks-for-help.html" class="sub-item-link">
|
||||
Thanks for the help
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="outfit-font">
|
||||
<a href="../../contact.html" class="sub-item-link">
|
||||
Contact us
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="header-mobile-menu">
|
||||
<noscript>
|
||||
<a href="../../nojs-menu.html" class="topbar-js-label">
|
||||
Please Enable JavaScript
|
||||
</a>
|
||||
</noscript>
|
||||
|
||||
<button id="header-open-menu-button" class="topbar-mobile-menu">
|
||||
<img
|
||||
src="../../png/hamburger-icon-open.png"
|
||||
alt="hamburger style menu icon - open state"
|
||||
width=48
|
||||
height=48>
|
||||
</button>
|
||||
|
||||
<button id="header-close-menu-button" class="hide-content">
|
||||
<img
|
||||
src="../../png/hamburger-icon-closed.png"
|
||||
alt="hamburger style menu icon - closed state"
|
||||
width=48
|
||||
height=48>
|
||||
</button>
|
||||
|
||||
<div id="mobile-menu-panel" class="hide-content">
|
||||
<div class="mobile-menu-container">
|
||||
|
||||
<div class="mobile-menu-wrapper">
|
||||
<div class="mobile-menu-item">
|
||||
Entries
|
||||
</div>
|
||||
<div class="mobile-submenu-wrapper">
|
||||
|
||||
<a class="mobile-submenu-item" href="../../years.html">
|
||||
Winning entries
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../authors.html">
|
||||
Winning authors
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../location.html">
|
||||
Location of authors
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../bugs.html">
|
||||
Bugs and (mis)features
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../faq.html#fix_an_entry">
|
||||
Fixing entries
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../faq.html#fix_author">
|
||||
Updating author info
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../thanks-for-help.html">
|
||||
Thanks for the help
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-wrapper">
|
||||
|
||||
<div class="mobile-menu-item">
|
||||
Status
|
||||
</div>
|
||||
<div class="mobile-submenu-wrapper">
|
||||
|
||||
<a class="mobile-submenu-item" href="../../news.html">
|
||||
News
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../status.html">
|
||||
Contest status
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../next/rules.html">
|
||||
IOCCC rules
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../next/guidelines.html">
|
||||
IOCCC guidelines
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../markdown.html">
|
||||
Markdown guidelines
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../SECURITY.html">
|
||||
Security policy
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-wrapper">
|
||||
<div class="mobile-menu-item">
|
||||
FAQ
|
||||
</div>
|
||||
<div class="mobile-submenu-wrapper">
|
||||
|
||||
<a class="mobile-submenu-item" href="../../faq.html">
|
||||
Frequently asked questions
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../quick-start.html#enter">
|
||||
Enter the IOCCC
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../faq.html#compiling">
|
||||
Compiling entries
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../faq.html#running_entries">
|
||||
Running entries
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../faq.html#help">
|
||||
How to help
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-wrapper">
|
||||
<div class="mobile-menu-item">
|
||||
About
|
||||
</div>
|
||||
<div class="mobile-submenu-wrapper">
|
||||
|
||||
<a class="mobile-submenu-item" href="../../index.html">
|
||||
Home page
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../social.html">
|
||||
IOCCC social media
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../about.html">
|
||||
About the IOCCC
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../judges.html">
|
||||
The judges
|
||||
</a>
|
||||
|
||||
<a class="mobile-submenu-item" href="../../contact.html">
|
||||
Contact us
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var headerOpenMenuButton = document.getElementById("header-open-menu-button");
|
||||
var headerCloseMenuButton = document.getElementById("header-close-menu-button");
|
||||
var mobileMenuPanel = document.getElementById("mobile-menu-panel");
|
||||
|
||||
headerOpenMenuButton.addEventListener("click", () => {
|
||||
headerOpenMenuButton.classList.remove("topbar-mobile-menu");
|
||||
headerOpenMenuButton.classList.add("hide-content");
|
||||
|
||||
headerCloseMenuButton.classList.remove("hide-content");
|
||||
headerCloseMenuButton.classList.add("topbar-mobile-menu");
|
||||
|
||||
mobileMenuPanel.classList.remove("hide-content");
|
||||
mobileMenuPanel.classList.add("topbar-mobile-panel");
|
||||
});
|
||||
|
||||
headerCloseMenuButton.addEventListener("click", () => {
|
||||
headerCloseMenuButton.classList.remove("topbar-mobile-menu");
|
||||
headerCloseMenuButton.classList.add("hide-content");
|
||||
|
||||
mobileMenuPanel.classList.add("hide-content");
|
||||
mobileMenuPanel.classList.remove("topbar-mobile-panel");
|
||||
|
||||
headerOpenMenuButton.classList.add("topbar-mobile-menu");
|
||||
headerOpenMenuButton.classList.remove("hide-content");
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- END: this line ends content from: inc/topbar.default.html -->
|
||||
<!-- START: this line starts content from: inc/header.default.html -->
|
||||
|
||||
<div class="header">
|
||||
<a href="../../2011/zucker/index.html">
|
||||
<img src="../../png/ioccc.png"
|
||||
alt="IOCCC image by Matt Zucker"
|
||||
width=300
|
||||
height=110>
|
||||
</a>
|
||||
<h1>The International Obfuscated C Code Contest</h1>
|
||||
<h2>2024/tompng - Prize in quasi bijection</h2>
|
||||
<h3>vortex encryptor decryptor</h3>
|
||||
</div>
|
||||
|
||||
<!-- END: this line ends content from: inc/header.default.html -->
|
||||
<!-- START: this line starts content from: inc/navbar.mid.html -->
|
||||
|
||||
<div class="navbar">
|
||||
<a class="Left" href="../tmarrec/index.html">← 2024/tmarrec</a>
|
||||
<a class="Left" href="../index.html">↑ 2024 ↑</a>
|
||||
<a class="Left" href="../weaver/index.html">2024/weaver →</a>
|
||||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/prog.c">C code</a>
|
||||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/Makefile">Makefile</a>
|
||||
<a class="Right" href="#inventory">Inventory</a>
|
||||
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2024%2Ftompng%2Findex.html">✓</a>
|
||||
</div>
|
||||
|
||||
<!-- END: this line ends content from: inc/navbar.mid.html -->
|
||||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||||
|
||||
<div class="content" id="content">
|
||||
|
||||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||||
<!-- START: this line starts content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
|
||||
|
||||
<!-- START: this line starts content generated by: bin/output-index-author.sh -->
|
||||
|
||||
<h2 id="author">Author:</h2>
|
||||
<ul>
|
||||
<li>Name: <a href="../../authors.html#Tompng">tompng</a><br>
|
||||
Location: <a href="../../location.html#JP">JP</a> - <em>Japan</em></li>
|
||||
</ul>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
|
||||
|
||||
<!-- END: this line ends content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
|
||||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
|
||||
<!-- BEFORE: 1st line of markdown file: 2024/tompng/README.md -->
|
||||
<h2 id="to-build">To build:</h2>
|
||||
<pre><code> make all</code></pre>
|
||||
<h2 id="to-use">To use:</h2>
|
||||
<h3 id="encryption">Encryption</h3>
|
||||
<pre><code> prog < file.txt > file.enc.txt</code></pre>
|
||||
<h3 id="decryption">Decryption</h3>
|
||||
<pre><code> prog < file.enc.txt > file.txt</code></pre>
|
||||
<h3 id="command-line-arguments">Command line arguments</h3>
|
||||
<p>You can also specify SIZE of the text-stirring area and a PASSWORD.</p>
|
||||
<pre><code> ./prog 30 < input > output
|
||||
./prog PASSWORD < input > output
|
||||
./prog 40 PASSWORD < input > output</code></pre>
|
||||
<p>You need to specify the same SIZE and PASSWORD to decrypt correctly.</p>
|
||||
<h2 id="try">Try:</h2>
|
||||
<pre><code> ./try.sh</code></pre>
|
||||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||||
<p>It is well-known that the Enigma cipher was broken due to the fact that a letter could never map to itself.
|
||||
Is this algorithm susceptible to a similar cryptanalysis?</p>
|
||||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||||
<h3 id="vortex-encryptordecryptor">Vortex Encryptor/Decryptor</h3>
|
||||
<p>Secure encryption/decryption is a black box. It’s highly based on difficult mathematics. We just blindly TRUST when using it.</p>
|
||||
<p>This entry is a visual vortex encryptor/decryptor for a text file.
|
||||
You can visually see how this program stirs the text to encrypt/decrypt. It’s not a black box at all.</p>
|
||||
<h3 id="easter-eggs">Easter Eggs</h3>
|
||||
<h4 id="random-encryptordecryptor">Random Encryptor/Decryptor</h4>
|
||||
<p>Some might dislike vortex-encryption algorithm. Alternately, there is one more visual text mixing algorithm.</p>
|
||||
<pre><code> ./prog < prog.c > rand.c</code></pre>
|
||||
<p>This program <code>rand.c</code> is NOT A VORTEX encryptor/deryptor. You can see the text <code>N O /,T ,A</code> somewhere in the code. It randomly swaps characters instead of stirring with vortex.</p>
|
||||
<p>To check the randomness, compile it as an executable <code>rand</code> and try <code>./rand < prog.c</code> or <code>./rand < rand.c</code>.
|
||||
You can find that the encrypted text claims to be really RAND/rand-om.</p>
|
||||
<h4 id="important-passwords">Important Passwords</h4>
|
||||
<p>“password” is the 1st most used alphabet password in the world. Wait, what’s the 0th used password? It might be “ioccc” or “IOCCC”.
|
||||
Let’s encrypt prog.c with these passwords.</p>
|
||||
<pre><code> ./prog ioccc < prog.c > prog1.enc.c
|
||||
./prog IOCCC < prog.c > prog2.enc.c</code></pre>
|
||||
<p>Imagine if you accidentally hit your head hard, forgot the password, lost everything except prog executable and the encrypted prog.c file.
|
||||
There’s nothing to worry about. Just like important passwords often written on sticky notes, you can find this password in the encrypted text.</p>
|
||||
<h3 id="internal">Internal</h3>
|
||||
<h4 id="encryptiondecryption">Encryption/Decryption</h4>
|
||||
<p>This program internally have forward-text-stir and backward-text-stir operation.
|
||||
It tries both operation and select the one that makes the output have less entropy.
|
||||
This is why this program doesn’t need a command line argument such as <code>--encrypt</code> or <code>--decrypt</code>.</p>
|
||||
<h4 id="seed-and-hash">Seed and Hash</h4>
|
||||
<p>For security reason, vortex used to encrypt/decrypt varies over input text.
|
||||
Seed is calculated with vortex-stir-stable hash algorithm. This hash doesn’t change over encryption/decryption.
|
||||
This is making hard to embed easter eggs into this program.</p>
|
||||
<h4 id="vortex-stirring-algorithm">Vortex stirring algorithm</h4>
|
||||
<p>Character should not disappear by vortex stirring operation, so the velocity field of the vortex is required to be no divergence.
|
||||
Velocity field that has no divergence can be created from a <a href="https://en.wikipedia.org/wiki/Stream_function">stream function</a>.
|
||||
In this program, stream function which is a scalar field is made of horizontal, vertical and diagonal periodic waves.
|
||||
With a simple mathematics, this vortex stirring operation can be decomposed into horizontal, vertical, and diagonal array rotation which is a reversible operation.</p>
|
||||
<!--
|
||||
|
||||
Copyright © 1984-2025 by Landon Curt Noll and Leonid A. Broukhis. All Rights Reserved.
|
||||
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see:
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-->
|
||||
<!-- AFTER: last line of markdown file: 2024/tompng/README.md -->
|
||||
|
||||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||||
<!-- START: this line starts content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||||
|
||||
<!-- START: this line starts content generated by: bin/output-index-inventory.sh -->
|
||||
|
||||
<div id="inventory">
|
||||
<h1 id="inventory-for-2024tompng">Inventory for 2024/tompng</h1>
|
||||
</div>
|
||||
<h2 id="primary-files">Primary files</h2>
|
||||
<ul>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/prog.c">prog.c</a> - entry source code</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/Makefile">Makefile</a> - entry Makefile</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/prog.orig.c">prog.orig.c</a> - original source code</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/sample.txt">sample.txt</a> - sample IOCCC text</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/try.sh">try.sh</a> - script to try entry</li>
|
||||
</ul>
|
||||
<h2 id="secondary-files">Secondary files</h2>
|
||||
<ul>
|
||||
<li><a href="2024_tompng.tar.bz2">2024_tompng.tar.bz2</a> - download entry tarball</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/README.md">README.md</a> - markdown source for this web page</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
|
||||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2024/tompng/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
|
||||
<li><a href=".path">.path</a> - directory path from top level directory</li>
|
||||
<li><a href="index.html">index.html</a> - this web page</li>
|
||||
</ul>
|
||||
<hr style="width:10%;text-align:left;margin-left:0">
|
||||
<h4>
|
||||
Jump to: <a href="#">top</a>
|
||||
</h4>
|
||||
|
||||
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
|
||||
|
||||
<!-- END: this line ends content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||||
|
||||
</div>
|
||||
|
||||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||||
<!-- START: this line starts content from: inc/footer.inventory.html -->
|
||||
|
||||
<!--
|
||||
|
||||
Copyright © 1984-2025 by Landon Curt Noll. All Rights Reserved.
|
||||
|
||||
You are free to share and adapt this file under the terms of this license:
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||||
|
||||
For more information, see:
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
-->
|
||||
|
||||
<div class="footer">
|
||||
|
||||
<div id="copyright"><h3>Copyright © 1984-2025 by Landon Curt Noll:
|
||||
<a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean"
|
||||
target="_blank"
|
||||
rel="license noopener noreferrer">Some Rights Reserved</a></h3>
|
||||
<p>
|
||||
This work is <b>licensed by Landon Curt Noll</b> under
|
||||
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
|
||||
target="_blank"
|
||||
rel="license noopener noreferrer"
|
||||
style="display:inline-block;">CC BY-SA 4.0</a></b>.
|
||||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||||
src="../../png/cc.png"
|
||||
alt="cc inside circle symbol">
|
||||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||||
src="../../png/by.png"
|
||||
alt="person inside circle symbol">
|
||||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||||
src="../../png/sa.png"
|
||||
alt="arrow looping back on itself inside circle symbol"><br>
|
||||
You should <b>carefully review</b> the
|
||||
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en"
|
||||
target="_blank"
|
||||
rel="license noopener noreferrer">CC BY-SA 4.0 LEGAL CODE</a></b>
|
||||
before using the licensed material.<br>
|
||||
You may wish to review the
|
||||
<b><a href="../../license.html"
|
||||
target="_blank"
|
||||
rel="license noopener noreferrer">highlights of some of the key features and terms</a></b>
|
||||
of <b>CC BY-SA 4.0</b>.<br>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="coda"><h3>Coda</h3>
|
||||
<p>
|
||||
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2024%2Ftompng%2Findex.html" rel="nofollow">Nu HTML check this web page</a><br>
|
||||
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a><br>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- END: this line ends content from: inc/footer.inventory.html -->
|
||||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<!-- END: this line ends content from: inc/bottom.default.html -->
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
|
||||
/* N/+
|
||||
+ + / n / / / +
|
||||
T/ +k NXr / , /,
|
||||
/; t t/ nt /C * l % d
|
||||
v % +i =cS*Dc /=/1 /]+k s o D 0+
|
||||
+ A *; = ; / %#3: i o C /OC X*)
|
||||
+ C , > !3=(s 8 ( * * { ,/+
|
||||
+ 4t niN ! o f */long/* / n / ** T +C C 5 , a
|
||||
+ %= * * */long/* */N,M,/*a1%(*-, * o
|
||||
+(+/ io 5a(M A */S,T,W/* */,X;char A[/*I /[ ct 5
|
||||
+k/ i / /%c1[ds */9999][9999]={0},B/* i d / +
|
||||
+ / *v R* d*/[/*o*/9999][9999];void Q/* c c2 N W [ +
|
||||
; N; */(int/**/t,int d){for(int i,j,k=~/*M C / o]
|
||||
+ t , v **/d/2*3+3,l;j=k!=2,k-(3+5*d)/2;k+=d)/* i +
|
||||
+ ,s / *IO aQ */{long long m=M*N,n=j?M:N,u=(2*k-k/2*3/*b c S r +
|
||||
/ *= }/ */-k/3*5)*d,x,y,w,s;for(i=m;i--;)B[i%N/** c *ira
|
||||
d* / * ]! */][i/N]=A[i%N][i/N];for(i=n;/* * *, =!n% i AA +
|
||||
+D ^ /-=+ */i--;){s=S+k;for(w=0,l=6;l-=2/* ]c ;C R +
|
||||
* D, c**/;s=(s+T)*W%X,x=l*i+s%W*n*t/W/5+n*(n+/* b / *
|
||||
+ dr+ = */s%W)-n*t/10,w+=x%n*(n-x%n)*(x/n%2*2-1/* I C +
|
||||
+ ; ~t / {*/)*(3+k%3+k/2));w=(w+n*n/(w>0?2:-2)/*0 ( /-A ),N+
|
||||
, C= = * **/)/n/n;for(l=j?N:M;l--;x= j*i+u/*/nC M [A+
|
||||
=* %+ / n */*l+m*4,y=!j*i+d*j/***/*l/* o/N= / +
|
||||
; N* i * C D */+m*4,A[y%N][x%M]=B/*rc %i2/ d v+
|
||||
8 )ic i b0 */[(y+d*j*w)/*N*/%N][(/* / 3*- Anc ; c Ng
|
||||
+ sv ok{ [[>=*/x+u*w)/** T */%M])/* a * +3 / / +
|
||||
+ i-d= c o/ i */;}}}/* I o -} ] OA /r i
|
||||
/5 1/ d+ *g c /+ a ( ia2(] * O* /d/ ; 0
|
||||
+ck d ,,o vv a/ 2+13 k nd} C c >
|
||||
/ * o> b] < a %- nr o / = C/ +
|
||||
N Rn* / r h a = +
|
||||
+ R C O O0c s +l*a R *v
|
||||
A;+I * N ) n *rW< +%
|
||||
o+ +*/
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void P(int c){int i =M*N;for( ;i--;){A[i%N] [i/N]=(!(c= A[i%N ][i/N
|
||||
])?32 :c);} }int main( int u,char **v){char *s; int x=0,y=0 ,i,j, n[256
|
||||
]={0} ,a,b, c;W=33331;X= 33333331;N= 40;S=T=0;if(+ --u&&sscanf (*++v ,"%l"
|
||||
"ld",& N)){-- u;v++;};if(u )for(s=*v++ ;*s;)T=(T*W+* s++)%X;for( ;(c=getchar
|
||||
())>= 0;n[c ]++)c-10?A[y ][x++ ]=c:( y++,x =0);M =2*N;P(0)
|
||||
;for(i =33;i< 127;i ++)S= (3331 *S+n[ i])%W ;for(i=c=0; 128>i;i
|
||||
++){x=-(6>> i/32 )%2* 2+1;Q((96+i *x+~- x/2)%32,x); for(j
|
||||
=a=0;i%64== 31&& j<N* M;b=A[j/M][ j%M]& 95,c+=x*(a| !b&&(
|
||||
j%M)),a=b ,j=1+ j);}; for(x=0;32 >=x;x ++){j=9999; while(j
|
||||
--){s=A[j ];while(*s)s ++;while(* --s== 32)*s =0;}for(j
|
||||
=x/32,a =~-9999;~j;j --){;for(;a &&!*A [a];)a--;fprintf(stderr,
|
||||
x?"%s": "%s\033[2J", "\033" "[H") ;for( i=0;j?i<=a: i<y|| i<N;i
|
||||
++)!j ?!fprintf( stderr ,"%s\033[K\n" ,A[i]):puts (A[i] );}P(
|
||||
0); if(x-32) c<0?Q (31-x ,-1): Q(x,1);usleep(W<< 1);}}
|
||||
@@ -0,0 +1,57 @@
|
||||
|
||||
|
||||
|
||||
/* N/+
|
||||
+ + / n / / / +
|
||||
T/ +k NXr / , /,
|
||||
/; t t/ nt /C * l % d
|
||||
v % +i =cS*Dc /=/1 /]+k s o D 0+
|
||||
+ A *; = ; / %#3: i o C /OC X*)
|
||||
+ C , > !3=(s 8 ( * * { ,/+
|
||||
+ 4t niN ! o f */long/* / n / ** T +C C 5 , a
|
||||
+ %= * * */long/* */N,M,/*a1%(*-, * o
|
||||
+(+/ io 5a(M A */S,T,W/* */,X;char A[/*I /[ ct 5
|
||||
+k/ i / /%c1[ds */9999][9999]={0},B/* i d / +
|
||||
+ / *v R* d*/[/*o*/9999][9999];void Q/* c c2 N W [ +
|
||||
; N; */(int/**/t,int d){for(int i,j,k=~/*M C / o]
|
||||
+ t , v **/d/2*3+3,l;j=k!=2,k-(3+5*d)/2;k+=d)/* i +
|
||||
+ ,s / *IO aQ */{long long m=M*N,n=j?M:N,u=(2*k-k/2*3/*b c S r +
|
||||
/ *= }/ */-k/3*5)*d,x,y,w,s;for(i=m;i--;)B[i%N/** c *ira
|
||||
d* / * ]! */][i/N]=A[i%N][i/N];for(i=n;/* * *, =!n% i AA +
|
||||
+D ^ /-=+ */i--;){s=S+k;for(w=0,l=6;l-=2/* ]c ;C R +
|
||||
* D, c**/;s=(s+T)*W%X,x=l*i+s%W*n*t/W/5+n*(n+/* b / *
|
||||
+ dr+ = */s%W)-n*t/10,w+=x%n*(n-x%n)*(x/n%2*2-1/* I C +
|
||||
+ ; ~t / {*/)*(3+k%3+k/2));w=(w+n*n/(w>0?2:-2)/*0 ( /-A ),N+
|
||||
, C= = * **/)/n/n;for(l=j?N:M;l--;x= j*i+u/*/nC M [A+
|
||||
=* %+ / n */*l+m*4,y=!j*i+d*j/***/*l/* o/N= / +
|
||||
; N* i * C D */+m*4,A[y%N][x%M]=B/*rc %i2/ d v+
|
||||
8 )ic i b0 */[(y+d*j*w)/*N*/%N][(/* / 3*- Anc ; c Ng
|
||||
+ sv ok{ [[>=*/x+u*w)/** T */%M])/* a * +3 / / +
|
||||
+ i-d= c o/ i */;}}}/* I o -} ] OA /r i
|
||||
/5 1/ d+ *g c /+ a ( ia2(] * O* /d/ ; 0
|
||||
+ck d ,,o vv a/ 2+13 k nd} C c >
|
||||
/ * o> b] < a %- nr o / = C/ +
|
||||
N Rn* / r h a = +
|
||||
+ R C O O0c s +l*a R *v
|
||||
A;+I * N ) n *rW< +%
|
||||
o+ +*/
|
||||
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void P(int c){int i =M*N;for( ;i--;){A[i%N] [i/N]=(!(c= A[i%N ][i/N
|
||||
])?32 :c);} }int main( int u,char **v){char *s; int x=0,y=0 ,i,j, n[256
|
||||
]={0} ,a,b, c;W=33331;X= 33333331;N= 40;S=T=0;if(+ --u&&sscanf (*++v ,"%l"
|
||||
"ld",& N)){-- u;v++;};if(u )for(s=*v++ ;*s;)T=(T*W+* s++)%X;for( ;(c=getchar
|
||||
())>= 0;n[c ]++)c-10?A[y ][x++ ]=c:( y++,x =0);M =2*N;P(0)
|
||||
;for(i =33;i< 127;i ++)S= (3331 *S+n[ i])%W ;for(i=c=0; 128>i;i
|
||||
++){x=-(6>> i/32 )%2* 2+1;Q((96+i *x+~- x/2)%32,x); for(j
|
||||
=a=0;i%64== 31&& j<N* M;b=A[j/M][ j%M]& 95,c+=x*(a| !b&&(
|
||||
j%M)),a=b ,j=1+ j);}; for(x=0;32 >=x;x ++){j=9999; while(j
|
||||
--){s=A[j ];while(*s)s ++;while(* --s== 32)*s =0;}for(j
|
||||
=x/32,a =~-9999;~j;j --){;for(;a &&!*A [a];)a--;fprintf(stderr,
|
||||
x?"%s": "%s\033[2J", "\033" "[H") ;for( i=0;j?i<=a: i<y|| i<N;i
|
||||
++)!j ?!fprintf( stderr ,"%s\033[K\n" ,A[i]):puts (A[i] );}P(
|
||||
0); if(x-32) c<0?Q (31-x ,-1): Q(x,1);usleep(W<< 1);}}
|
||||
@@ -0,0 +1,17 @@
|
||||
-----------------------------------------------------------------
|
||||
----------------------------------------------------------------------
|
||||
--SAMPLESA----MPLESAMP-------LESAMPLE--------SAMPLES--------AMPLESA-----
|
||||
--MPLESAMP--LESAMPLESAMP---LESAMPLESAMP---LESAMPLESAMP----LESAMPLESAM---
|
||||
--PLESAMPL-ESAMPLESAMPLES-AMPLESAMPLESAM-PLESAMPLESAMPL--ESAMPLESAMPLE--
|
||||
----SAMP---LESAMP--LESAMP-LESAMP---LESAM-PLESAM---PLESA-MPLESA---MPLES--
|
||||
----AMPL---ESAMP----LESAM-PLESA----------MPLES----------AMPLE-----------
|
||||
----SAMP---LESAM----PLESA-MPLES----------AMPLE----------SAMPL-----------
|
||||
----ESAM---PLESA----MPLES-AMPLE----------SAMPL----------ESAMP-----------
|
||||
----LESA---MPLES----AMPLE-SAMPL----------ESAMP----------LESAM-----------
|
||||
----PLES---AMPLE----SAMPL-ESAMP----------LESAM----------PLESA-----------
|
||||
----MPLE---SAMPLE--SAMPLE-SAMPLE---SAMPL-ESAMPL---ESAMP-LESAMP---LESAM--
|
||||
--PLESAMPL-ESAMPLESAMPLES-AMPLESAMPLESAM-PLESAMPLESAMPL-ESAMPLESAMPLES--
|
||||
--AMPLESAM--PLESAMPLESAM---PLESAMPLESAM---PLESAMPLESAM---PLESAMPLESAM---
|
||||
--PLESAMPL----ESAMPLES-------AMPLESAM-------PLESAMPL-------ESAMPLES-----
|
||||
----------------------------------------------------------------------
|
||||
-----------------------------------------------------------------
|
||||
Executable
+79
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# try.sh - demonstrate 2024/tompng
|
||||
|
||||
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||
# this way allows us to have the user specify a different compiler in an easy way.
|
||||
#
|
||||
if [[ -z "$CC" ]]; then
|
||||
CC="cc"
|
||||
fi
|
||||
|
||||
# make sure the program has been built
|
||||
#
|
||||
make CC="$CC" all >/dev/null || exit 1
|
||||
|
||||
# clear the screen
|
||||
#
|
||||
clear
|
||||
|
||||
|
||||
read -r -n 1 -p "Press any key to view sample.txt: "
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
cat sample.txt
|
||||
echo 1>&2
|
||||
|
||||
echo "Encrypt sample input file"
|
||||
echo 1>&2
|
||||
echo "./prog < sample.txt > sample.enc.txt"
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key to run: "
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
./prog < sample.txt > sample.enc.txt
|
||||
echo 1>&2
|
||||
|
||||
echo "Decrypt the previously encrypted file"
|
||||
echo 1>&2
|
||||
echo "./prog < sample.enc.txt"
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key to run: "
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
./prog < sample.enc.txt
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key to view prog.c: "
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
cat prog.c
|
||||
echo 1>&2
|
||||
|
||||
echo "Encrypt the program itself"
|
||||
echo 1>&2
|
||||
echo "./prog < prog.c > prog2.c"
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key to run: "
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
./prog < prog.c > prog2.c
|
||||
echo 1>&2
|
||||
|
||||
echo "Encrypt and decrypt sample input file with the encrypted program"
|
||||
echo 1>&2
|
||||
echo "cc prog2.c -o prog2 && ./prog2 < sample.txt | ./prog2"
|
||||
echo 1>&2
|
||||
read -r -n 1 -p "Press any key to run: "
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
cc prog2.c -o prog2
|
||||
./prog2 < sample.txt | ./prog2
|
||||
echo 1>&2
|
||||
|
||||
read -r -n 1 -p "Press any key to cleanup:"
|
||||
echo 1>&2
|
||||
echo 1>&2
|
||||
echo rm prog2.c prog2 sample.enc.txt
|
||||
rm prog2.c prog2 sample.enc.txt
|
||||
echo 1>&2
|
||||
Reference in new issue
Block a user