Last active
October 17, 2025 21:38
-
-
Save nst/69a9a58faaf2c5e7bfb44f43619b27e5 to your computer and use it in GitHub Desktop.
PostScript sample obfuscation / minimisation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| % PostScript sample obfuscation / minimisation | |
| % gs -dNODISPLAY fibo_tiny.ps | |
| % Nicolas Seriot, 2025-09 | |
| % Based on an idea from Takashi Hayakawa | |
| % see https://seriot.ch/projects/postscript_tiny_ray_tracer.html | |
| /if % a | |
| /exch % b | |
| /dup % c | |
| /gt % d | |
| /sub % e | |
| /add % f | |
| /mul % g | |
| /def % h | |
| % -- associate keys and values | |
| count { ( ) dup 0 count 93 add put exch cvx def } repeat | |
| % -- char to string | |
| /S { ( ) dup 0 4 3 roll put } def | |
| /*[ | |
| 47 {{ S cvn }} repeat % names 1 | |
| 10 {{ S cvi }} repeat % numbers | |
| 65 {{ S cvn }} repeat % names 2 | |
| 2 {{ pop [ }} repeat % open block | |
| 3 {{ pop ] }} repeat % close block | |
| ] def | |
| % -- convert to names (1) | |
| % 0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel | |
| % 8 bs 9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si | |
| % 16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb | |
| % 24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us | |
| % 32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ' | |
| % 40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 / | |
| % -- convert to integer | |
| % 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 | |
| % 56 8 57 9 | |
| % -- convert to names (2) | |
| % 58 : 59 ; 60 < 61 = 62 > 63 ? | |
| % 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G | |
| % 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O | |
| % 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W | |
| % 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ | |
| % 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g | |
| % 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o | |
| % 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w | |
| % 120 x 121 y 122 z | |
| % -- convert to [ | |
| % 123 { 124 | | |
| % -- convert to ] | |
| % 125 } 126 ~ 127 del | |
| % Fibonacci | |
| % /fib { | |
| % dup 1 gt { | |
| % 1 sub dup 1 sub fib exch fib add | |
| % } if | |
| % } def | |
| % alternative: /f { 0 1 3 2 roll 1 sub { dup 3 1 roll add } repeat } def | |
| % A B | |
| ({c1d{1ec1eAbAf}a}{3g}) | |
| % -- decode blocks, put them on stack | |
| {dup * exch get exec cvx} forall | |
| % -- associate blocks with A, B, etc | |
| count { count 64 add S exch def } repeat | |
| 7 A == % 13 | |
| 7 B == % 21 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment