<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sv">
	<id>http://wiki.sikvall.se/index.php?action=history&amp;feed=atom&amp;title=Racket%2Fbase24</id>
	<title>Racket/base24 - Versionshistorik</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.sikvall.se/index.php?action=history&amp;feed=atom&amp;title=Racket%2Fbase24"/>
	<link rel="alternate" type="text/html" href="http://wiki.sikvall.se/index.php?title=Racket/base24&amp;action=history"/>
	<updated>2026-04-10T12:55:44Z</updated>
	<subtitle>Versionshistorik för denna sida på wikin</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://wiki.sikvall.se/index.php?title=Racket/base24&amp;diff=1838&amp;oldid=prev</id>
		<title>Anders den 7 april 2026 kl. 13.05</title>
		<link rel="alternate" type="text/html" href="http://wiki.sikvall.se/index.php?title=Racket/base24&amp;diff=1838&amp;oldid=prev"/>
		<updated>2026-04-07T13:05:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sv&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Äldre version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versionen från 7 april 2026 kl. 13.05&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Rad 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Rad 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;;;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;;;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; BASE24 encoder/decoder&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; BASE24 encoder/decoder&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Täpp-Anders Sikvall, anders@sikvall.se, 2026-04-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;97&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; Täpp-Anders Sikvall, anders@sikvall.se, 2026-04-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;07&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; USAGE&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;;; USAGE&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Anders</name></author>
	</entry>
	<entry>
		<id>http://wiki.sikvall.se/index.php?title=Racket/base24&amp;diff=1837&amp;oldid=prev</id>
		<title>Anders: Skapade sidan med &#039;&lt;pre&gt; #lang racket  ;;;;; ;; BASE24 encoder/decoder ;; Täpp-Anders Sikvall, anders@sikvall.se, 2026-04-97 ;; ;; USAGE ;;          racket base24.rkt --encode &lt; INPUT_FILE &gt; OUTPUT_FILE ;;          racket base24.rkt --decode &lt; INPUT_FILE &gt; OUTPUT_FILE ;; ;; COMMENT ;;          This does not precede the coded data with any kind of header ;;          and the error control and handling is abysmally minimal but ;;          it shows the ease of implementing something like this...&#039;</title>
		<link rel="alternate" type="text/html" href="http://wiki.sikvall.se/index.php?title=Racket/base24&amp;diff=1837&amp;oldid=prev"/>
		<updated>2026-04-07T13:04:43Z</updated>

		<summary type="html">&lt;p&gt;Skapade sidan med &amp;#039;&amp;lt;pre&amp;gt; #lang racket  ;;;;; ;; BASE24 encoder/decoder ;; Täpp-Anders Sikvall, anders@sikvall.se, 2026-04-97 ;; ;; USAGE ;;          racket base24.rkt --encode &amp;lt; INPUT_FILE &amp;gt; OUTPUT_FILE ;;          racket base24.rkt --decode &amp;lt; INPUT_FILE &amp;gt; OUTPUT_FILE ;; ;; COMMENT ;;          This does not precede the coded data with any kind of header ;;          and the error control and handling is abysmally minimal but ;;          it shows the ease of implementing something like this...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny sida&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#lang racket&lt;br /&gt;
&lt;br /&gt;
;;;;;&lt;br /&gt;
;; BASE24 encoder/decoder&lt;br /&gt;
;; Täpp-Anders Sikvall, anders@sikvall.se, 2026-04-97&lt;br /&gt;
;;&lt;br /&gt;
;; USAGE&lt;br /&gt;
;;          racket base24.rkt --encode &amp;lt; INPUT_FILE &amp;gt; OUTPUT_FILE&lt;br /&gt;
;;          racket base24.rkt --decode &amp;lt; INPUT_FILE &amp;gt; OUTPUT_FILE&lt;br /&gt;
;;&lt;br /&gt;
;; COMMENT&lt;br /&gt;
;;          This does not precede the coded data with any kind of header&lt;br /&gt;
;;          and the error control and handling is abysmally minimal but&lt;br /&gt;
;;          it shows the ease of implementing something like this compared&lt;br /&gt;
;;          to languages like C.&lt;br /&gt;
;;&lt;br /&gt;
;; EXPLANATION&lt;br /&gt;
;;          The program treats the entire input as a bignum and then basically&lt;br /&gt;
;;          converts it to the output by repeated division and looking up the&lt;br /&gt;
;;          quotient in the BASE24 alphabet. Since the bignum implementation&lt;br /&gt;
;;          is so efficient in Racket/Scheme this means it will be effective&lt;br /&gt;
;;          even for moderately large files.&lt;br /&gt;
;;&lt;br /&gt;
;;&lt;br /&gt;
&lt;br /&gt;
;; BASE24 Alfabet (exkluderar förväxlingsbara tecken)&lt;br /&gt;
(define alphabet &amp;quot;BCDFGHJKMPQRTVWXY2346789&amp;quot;)&lt;br /&gt;
(define base 24)&lt;br /&gt;
(define max-col 68)&lt;br /&gt;
&lt;br /&gt;
;; Skapar en map för snabb uppslagning vid avkodning&lt;br /&gt;
(define char-to-val&lt;br /&gt;
  (for/hash ([c (in-string alphabet)]&lt;br /&gt;
             [i (in-naturals)])&lt;br /&gt;
    (values c i)))&lt;br /&gt;
&lt;br /&gt;
;; Hjälpfunktion för att skriva ut med radbrytningar&lt;br /&gt;
(define (display-with-breaks str)&lt;br /&gt;
  (let loop ([remaining str])&lt;br /&gt;
    (cond&lt;br /&gt;
      [(&amp;lt;= (string-length remaining) max-col)&lt;br /&gt;
       (displayln remaining)]&lt;br /&gt;
      [else&lt;br /&gt;
       (displayln (substring remaining 0 max-col))&lt;br /&gt;
       (loop (substring remaining max-col))])))&lt;br /&gt;
&lt;br /&gt;
;; --- ENCODER ---&lt;br /&gt;
(define (encode)&lt;br /&gt;
  (let* ([input-bytes (port-&amp;gt;bytes (current-input-port))]&lt;br /&gt;
         [num (bytes-&amp;gt;integer input-bytes)])&lt;br /&gt;
    (if (zero? num)&lt;br /&gt;
        (displayln (string-ref alphabet 0))&lt;br /&gt;
        (let loop ([n num] [res &amp;#039;()])&lt;br /&gt;
          (if (zero? n)&lt;br /&gt;
              (display-with-breaks (list-&amp;gt;string res))&lt;br /&gt;
              (loop (quotient n base)&lt;br /&gt;
                    (cons (string-ref alphabet (remainder n base)) res)))))))&lt;br /&gt;
&lt;br /&gt;
;; --- DECODER ---&lt;br /&gt;
(define (decode)&lt;br /&gt;
  ;; Vi rensar bort eventuella radbrytningar/whitespaces innan vi avkodar&lt;br /&gt;
  (let* ([raw-input (port-&amp;gt;string (current-input-port))]&lt;br /&gt;
         [input-str (regexp-replace* #px&amp;quot;\\s+&amp;quot; raw-input &amp;quot;&amp;quot;)]&lt;br /&gt;
         [num (for/fold ([n 0])&lt;br /&gt;
                        ([char (in-string input-str)])&lt;br /&gt;
                (+ (* n base) (hash-ref char-to-val char)))])&lt;br /&gt;
    (display (integer-&amp;gt;bytes num))))&lt;br /&gt;
&lt;br /&gt;
;; --- KONVERTERINGSFUNKTIONER ---&lt;br /&gt;
(define (bytes-&amp;gt;integer b)&lt;br /&gt;
  (for/fold ([n 0])&lt;br /&gt;
            ([byte (in-bytes b)])&lt;br /&gt;
    (+ (arithmetic-shift n 8) byte)))&lt;br /&gt;
&lt;br /&gt;
(define (integer-&amp;gt;bytes n)&lt;br /&gt;
  (if (zero? n)&lt;br /&gt;
      (bytes 0)&lt;br /&gt;
      (let loop ([i n] [res &amp;#039;()])&lt;br /&gt;
        (if (zero? i)&lt;br /&gt;
            (list-&amp;gt;bytes res)&lt;br /&gt;
            (loop (arithmetic-shift i -8)&lt;br /&gt;
                  (cons (bitwise-and i #xFF) res))))))&lt;br /&gt;
&lt;br /&gt;
;; --- CLI HANTERING ---&lt;br /&gt;
(define (main)&lt;br /&gt;
  (match (current-command-line-arguments)&lt;br /&gt;
    [(vector (or &amp;quot;--encode&amp;quot; &amp;quot;-e&amp;quot;)) (encode)]&lt;br /&gt;
    [(vector (or &amp;quot;--decode&amp;quot; &amp;quot;-d&amp;quot;)) (decode)]&lt;br /&gt;
    [_ (displayln &amp;quot;Användning: racket base24.rkt [--encode | --decode]&amp;quot;)]))&lt;br /&gt;
&lt;br /&gt;
(main)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anders</name></author>
	</entry>
</feed>