<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES]]></title><description><![CDATA[<p>Moin, ich hätte eine Frage.</p>
<p>Wie müsste der folgende Term für j umgestellt werden, damit eine bijektive Abbildung, jeweils mit einem Versatz um 4, entsteht? Bislang fehlt die 13, aber die 0 kommt zweimal vor. Ginge das nur mit einer for-Schleife?</p>
<pre><code class="language-javascript">for (let i = 0; i &lt; 18; i++) {
  let j = (((i * 4) % 18) + Math.floor(i / 4)) % 18;
  console.log(i, j);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/355474/bijektive-abbildung-selbstabbildung-mithilfe-des-operators-in-js-es</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 05:34:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/355474.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Jul 2026 15:23:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 20:35:33 GMT]]></title><description><![CDATA[<p>Moin, ich hätte eine Frage.</p>
<p>Wie müsste der folgende Term für j umgestellt werden, damit eine bijektive Abbildung, jeweils mit einem Versatz um 4, entsteht? Bislang fehlt die 13, aber die 0 kommt zweimal vor. Ginge das nur mit einer for-Schleife?</p>
<pre><code class="language-javascript">for (let i = 0; i &lt; 18; i++) {
  let j = (((i * 4) % 18) + Math.floor(i / 4)) % 18;
  console.log(i, j);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2624978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624978</guid><dc:creator><![CDATA[Anon-81275]]></dc:creator><pubDate>Sun, 12 Jul 2026 20:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 17:16:48 GMT]]></title><description><![CDATA[<p><code>(i+4) % 18</code>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624979</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 12 Jul 2026 17:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 19:13:03 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> sagte in <a href="/forum/post/2624979">Bijektive Abbildung mithilfe des %-Operators in JS/ES</a>:</p>
<blockquote>
<p><code>(i+4) % 18</code>?</p>
</blockquote>
<p>Theoretisch ja. Aber ich hatte an ein Raster gedacht (jeweils 4 weiter):</p>
<p>0 4 8 12 16<br />
1 5 9 13 17<br />
2 6 10 14<br />
3 7 11 15</p>
<p>Jetzt sieht man vielleicht das Problem: Es gibt &quot;Leerplätze&quot;.</p>
<p>Für beliebige n (momentan 18) und m (momentan 4) komme ich da auf keinen grünen Zweig.</p>
<p>Und die KI möchte eine zusätzliche Schleife einführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624980</guid><dc:creator><![CDATA[Anon-81275]]></dc:creator><pubDate>Sun, 12 Jul 2026 19:13:03 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 20:07:25 GMT]]></title><description><![CDATA[<p>Jetzt verstehe ich erst, was du möchtest. Da braucht man keine zweite Schleife, sondern Mathematik der 3. Klasse. Tolle KI <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":face_with_rolling_eyes:"
      alt="🙄"
    /></p>
<p>Ich weiß nicht, wie man in Javascript eine Integerdivision schreibt. Also eine Division, wo man nur den ganzzahligen Teil einer Integerdivision bekommt, das Gegenstück von modulo (%). Das musst du selber herausfinden, gibt es ganz sicher. Mal angenommen <code>//</code> wäre diese Integerdivision (Merke <code>//</code> ist es ganz bestimmt nicht, das weiß selbst ich, dass das ein Kommentar in JS ist), dann wäre die Formel für beliebige n und m (und i von 0 bis m):</p>
<pre><code class="language-python">(i * n) % m + (i * n) // m
</code></pre>
<p>Beispiel für dein n=4 und m=18:</p>
<pre><code>0 0
1 4
2 8
3 12
4 16
5 3
6 7
7 11
8 15
9 2
10 6
11 10
12 14
13 18
14 5
15 9
16 13
17 17
</code></pre>
<p>Okay, ein Drittklässler käme da wahrscheinlich nicht alleine drauf, aber er könnte es immerhin alles ausrechnen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>PS: Ich schätze dein <code>Math.floor(i / 4)</code> ist effektiv schon die Integerdivision von i und 4. Gibt es da nichts besseres? Aber zu Not tut es das auch, hier dann natürlich <code>Math.floor((i * n) / m)</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624981</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 12 Jul 2026 20:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 20:27:29 GMT]]></title><description><![CDATA[<p>Dein Ansatz ist gut... funktioniert aber nicht für beliebige &quot;n&quot; und &quot;m&quot;:</p>
<pre><code class="language-javascript">function interleaveShiftIndex(totalSteps, offset, currentIndex) {
  return (
    ((currentIndex * offset) % totalSteps) +
    Math.floor((currentIndex * offset) / totalSteps)
  );
}

(function test(rounds) {
  a: for (let i = 0; i &lt; rounds; i++) {
    let totalSteps = 10 + Math.round(Math.random() * 20);
    let offset = 1 + Math.round(Math.random() * (totalSteps / 2 - 1));
    let counts = {};
    for (let j = 0; j &lt; totalSteps; j++) {
      let sIndex = interleaveShiftIndex(totalSteps, offset, j);
      // console.log(j, sIndex);
      if (!counts[sIndex]) {
        counts[sIndex] = 1;
      } else {
        counts[sIndex]++;
      }
    }
    for (let key in counts) {
      if (counts[key] !== 1) {
        console.log('Error', totalSteps, offset, i, key, counts[key]);
        continue a;
      }
    }
    console.log('Ok', totalSteps, offset, i);
  }
})(100);
</code></pre>
<p>... und 3. Klasse ist bei mir schon länger her.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624982</guid><dc:creator><![CDATA[Anon-81275]]></dc:creator><pubDate>Sun, 12 Jul 2026 20:27:29 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 20:34:50 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> sagte in <a href="/forum/post/2624981">Bijektive Abbildung mithilfe des %-Operators in JS/ES</a>:</p>
<blockquote>
<p>13 18</p>
</blockquote>
<p>18 darf auch nicht vorkommen, denn der Definitionsbereich ist zugleich auch der Wertebereich.</p>
<p>Edit: Selbstabbildung, Endomorphismus bzw. Permutation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624983</guid><dc:creator><![CDATA[Anon-81275]]></dc:creator><pubDate>Sun, 12 Jul 2026 20:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Sun, 12 Jul 2026 22:42:21 GMT]]></title><description><![CDATA[<p>Ich und mein großes Maul <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /></p>
<p>Das ist ja ekelhaft im allgemeinen Fall, aber das musste ich heute Abend noch durchtüfteln, nachdem ich mich über die schlechten Mathekenntnisse der KI lustig gemacht habe.Jetzt sollte hoffentlich alles passen, egal welche m und n.</p>
<p>Leider habe ich einen allerletzten Ausdruck, wo ich eine Fallunterscheidung habe, da ich eine Stufenfunktion brauche, die 0 für x &lt; 0 und 1 für x &gt;= 0 ist. Das kann man nicht mehr mit primitiven Operationen wie Plus, Minus, Mal, Geteilt schreiben, da muss man irgendwie verzweigen. Du kannst das entweder so machen wie ich, mit einem expliziten <code>if</code>, oder das irgendwie verstecken hinter irgendwelchen <code>sign</code> oder <code>abs</code> Funktionen (Was immer Javascript da so hat), die dann intern aber auch nix anderes machen.</p>
<p>Der finale Ausdruck ist lang. Es gäbe auch eine Erklärung, die wäre nochmals viel länger, aber ich denke mit ausreichendem Draufgucken kann man verstehen, was da vor sich geht. Das schafft dann aber kein Drittklässler mehr, vermutlich auch die meisten Abiturienten nicht.</p>
<p>Da ich das in Python ausgekügelt habe, und keine Lust habe, das jetzt auch noch in LaTeX zu setzen kopiere ich einfach mein Testprogramm hier. Das sollte trivial nach Javascript übersetzbar sein, und Python ist so einfach, da muss ich wohl nicht erklären, was die Syntax bedeutet:</p>
<pre><code class="language-python">import math


def H(x):
    # Stufenfunktion, wie auch immer du die in Javascript mit den erlaubten Mitteln machen würdest
    return 1 if x &gt;= 0 else 0


def func(i, n, m):
    L = math.floor(m / n)
    s = m - n * L
    T = s * (L + 1)
    J = H(i - T)  # Hier müssen wir feststellen, ob i-T &gt;= 0 ist (d.h. ob i &gt;= T)
    return n * ((i - T * J) % (L + 1 - J)) + (1 - J) * math.floor(i / (L + 1)) + J * (s + math.floor((i - T) / L))


n = 4
m = 18

for i in range(m):
    print(i, func(i, n, m))

</code></pre>
<p>Die Geschichte mit dem J ist, dass ich es als persönliche Herausforderung gesehen habe, kein if zu nutzen. Das ganze wäre viel einfacher, wenn man mit <code>if i &lt; T</code> einfach zwei verschiedenen Formeln nutzen würde.</p>
<p>Die Grundidee ist, dass wir uns ausrechnen, wie viele lange Zyklen wir haben. Das ist das s . Und vor allem, wo der Übergang (T) von den langen zu den kurzen ist. Bei n = 4 und m = 18 haben wir 2 lange Zyklen mit mit 5 Werten, dann 2 kurze mit 4 Werten. Der Übergang ist daher bei i = 2 * 5 = 10.</p>
<p>Wenn i &gt;= T ist, sind wir in einer kurzen Zeile. Mit diesem Wissen können wir dann den korrekten Wert innerhalb der Zeile konstruieren. Bei i &lt; T haben wir Zyklen von Länge L + 1, ab i &gt;= T ist die Länge L. Das ist alles in dem langen Ausdruck am Ende verpackt.</p>
<p>Die Ordnung der Zyklen ist natürlich willkürlich, man hätte genausogut auch anders ordnen können, aber ich mochte dass die Sequenz bei 0 mit 0 beginnt, und das schien mir die natürliche Ordnung von da an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624984</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 12 Jul 2026 22:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to Bijektive Abbildung (Selbstabbildung) mithilfe des %-Operators in JS&#x2F;ES on Mon, 13 Jul 2026 01:00:29 GMT]]></title><description><![CDATA[<p>Konnte auch noch nicht schlafen (langsam ist der Kipppunkt erreicht, an dem dies ohne AC im Sommer nicht mehr geht^^)</p>
<p>Vielen Dank für die mathematische Aufarbeitung... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Solange Sprungfunktionen (nicht stetige) (ohne Fallunterscheidungen (1)) noch nicht erfunden wurden, ist das Ganze ziemlich abscheulich, ja das stimmt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Edit: 1) Ich sehe gerade, dass die Heaviside- oder Abrundungsfunktion auch ohne Fallunterscheidung über die Fourier-Reihen der fortlaufenden Sinus-Funktionen definiert werden können... Bitte nicht zu ernst nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2624985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2624985</guid><dc:creator><![CDATA[Anon-81275]]></dc:creator><pubDate>Mon, 13 Jul 2026 01:00:29 GMT</pubDate></item></channel></rss>