Funktion , 4322 - 50% = 2161
Ich versuche hier nicht wirklich Golf zu spielen. Mehr auf den Beauty-Aspekt setzen. Ich denke, das Hauptprogramm sieht wirklich gut aus, eine perfekte rechteckige Box, die rechts versteckt ist.
Wie immer können Sie ein besseres Rendering erzielen, indem Sie es $('pre').css('line-height',1)
in Ihrer Browserkonsole ausführen .
┌─────────────────────────┐
┌─┴─╖ ┌─┴─╖
┌────────┤ · ╟─────────────────────┤ · ╟─────────────┐ ╔═════════╗ ╔════╗ ╔════╗
│ ╘═╤═╝ ╔═════════╗ ╘═╤═╝ ╓───╖ │ ║ 1257283 ║ ┌─╢ 40 ║ ║ 25 ║
│ │ ║ 2097151 ║ ├───╢ ʫ ╟───┐ │ ║ 6456094 ║ │ ╚════╝ ╚══╤═╝
┌─┴─╖ │ ╚════╤════╝ ┌─┴─╖ ╙─┬─╜ ┌─┴─╖ │ ║ 8219021 ║ │ ┌───╖ ┌─┴─╖
┌───┤ · ╟────────┴────┐ └─────┬────┤ · ╟───┴───┤ · ╟─┤ ║ 4660190 ║ └──┤ × ╟───┤ % ║
│ ╘═╤═╝ │ ┌┴┐ ╘═╤═╝ ╘═╤═╝ │ ╚════════╤╝ ╘═╤═╝ ╘═╤═╝
│ │ │ └┬┘ │ │ │ ╔═══╗ ┌─┴─╖ ┌──┴─╖ ╔═╧═╗
│ │ ╔═══╗ ┌────╖ │ ┌─┴─╖ ┌┐ │ │ │ ║ 8 ╟──┤ ʫ ╟──┤ >> ║ ║ ║
│ │ ║ 1 ╟─┤ >> ╟─┘ ┌───┤ ? ╟─┤├─┤ │ │ ╚═══╝ ╘═╤═╝ ╘══╤═╝ ╚═══╝
│ │ ╚═══╝ ╘══╤═╝ │ ╘═╤═╝ └┘ │ │ │ ╔════════════════╧═════════╗
│ │ ┌─┴─╖ ┌───╖ ┌─┴─╖ ┌─┴─╖ ╔═╧═╗ │ │ ║ 609678112368778425678534 ║
│ ┌─┴─────────┤ ʫ ╟─┤ ‼ ╟─┤ · ╟─┤ ‼ ║ ║ 1 ║ │ │ ║ 616189712722605554111376 ║
│ │ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╚═══╝ │ │ ║ 461573643915077926310571 ║
│ │ │ │ │ ╔═╧══╗ │ │ ║ 355541007599150245813976 ║
│ │ ╔══════╗ │ │ └───╢ 45 ║ │ │ ║ 426564826002362964111793 ║
│ │ ║ 2097 ║ │ ┌─┴─╖ ┌───╖ ╚════╝ │ │ ║ 714054902293682079346275 ║
│ │ ║ 1565 ║ └───┤ · ╟─┤ ♭ ╟─┐ │ │ ║ 663973372550500581508544 ║
│ │ ╚═╤════╝ ╘═╤═╝ ╘═══╝ ├────────────────────┘ │ ║ 874263187322344354338195 ║
│ │ ┌─┴─╖ ┌─┴─╖ │ │ ║ 642609790172899326178321 ║
│ │ │ ‼ ╟─────────┤ ? ╟───────┘ │ ║ 071643306454414932126243 ║
│ │ ╘═╤═╝ ╘═╤═╝ │ ║ 308860823981077902637848 ║
│ ┌─┴─╖ ┌─┴─╖ ╔═══╗ ┌─┴─╖ │ ║ 322657399386789617074176 ║
└─┤ · ╟─┤ ʫ ╟─╢ 8 ║ ┌─┤ ? ╟────────────────────────────────┘ ╚══════════════════════════╝
╘═╤═╝ ╘═╤═╝ ╚═══╝ │ ╘═╤═╝
│ ┌───┴╖ ╔════╗ │ ╔═══╗
└─┤ >> ╟─╢ 21 ║ └─╢ 0 ║
╘════╝ ╚════╝ ╚═══╝
Fortsetzung in der Tradition Funciton Funktionen Namen geben , bestehend aus einem einzigen, merkwürdig, selten verwendeten Unicode - Zeichen, dachte ich darüber nach, was am besten diese Herausforderung darstellen könnte, und es fiel mich ein, dass Link - und Zelda (oder, wenn Sie wollen, Legend of Zelda ) geben Sie LZ , so dass der Kleinbuchstabe ʫ (U + 02AB, ʟᴀᴛɪɴ sʟᴀᴛɪɴ ʟᴇᴛᴛᴇʀ ʟᴇᴛᴛᴇʀ ʟᴢ) angemessen erscheint.
Erläuterung
Wie im esolangs-Artikel erläutert, empfängt das Funciton-Programm die Eingabe in der Codierung "UTF-21", jedoch als einzelne humongous Ganzzahl. Wenn ich diese Zahl als Schlüssel für eine Hashmap (Wörterbuch, assoziatives Array) verwenden wollte, bräuchte ich eine Hash-Funktion, die zwei Kriterien erfüllt: eine, die in Funciton einfach zu implementieren ist, und zwei, die alle 13 erwarteten Eingabezeichenfolgen geben einen anderen Hash-Wert. Die einfachste Hash-Funktion, die ich mir vorstellen konnte, war input % m
für einen bestimmten Wert von m
. Daher habe ich versucht m
= 13, 14, 15 usw., bis ich zu der kleinsten Ganzzahl kam, für die alle Hash-Werte eindeutig sind. Es stellte sich heraus, dass diese Zahl 25 ist.
Die Hashwerte sind:
zel = 6
sas = 19
eps = 10
sos = 22
sot = 1
sst = 9
mof = 14
bof = 3
sow = 13
nos = 17
ros = 21
pol = 16
scs = 23
Wir kodieren jedes Lied, indem wir ein Bit das Vorhandensein oder Fehlen einer Note darstellen lassen. Zum Beispiel würde Zeldas Wiegenlied folgendermaßen codiert werden:
---^-----^------- = 01001000
-<-----<--------- = 10010000
----->----->----- = 00100100
----------------- = 00000000
----------------- = 00000000
außer dass die Bits in der entgegengesetzten Reihenfolge sind; Die obere linke Zelle befindet sich im niedrigstwertigen Bit. Dies bedeutet, dass jedes Lied 40 Bits lang ist.
Wir erstellen daher eine (mäßig spärliche) Hash-Tabelle, indem wir eine 40 × 25 = 1000-Bit-Zahl nehmen und das Bitmuster für jedes Lied entsprechend seinem Hash-Wert an der richtigen Stelle platzieren. Die monströse Zahl im Programm ist genau diese Hash-Tabelle.
Die verbleibenden Zahlen bedeuten jeweils Folgendes:
45
= 0x2D
ist der Unicode für -
.
1257283645609482190214660190
: Dies ist die Zeichenfolge ^<>VA
in UTF-21. Im Nachhinein hätte ich hier 7 Bits pro Zeichen verwenden können, was die Zahl kürzer machte, aber UTF-21 ist in Funciton so traditionell, dass es mir einfach nicht in den Sinn kam.
2097151
= 0x1FFFFF
= (1 << 21) - 1. Wird verwendet, um das erste Zeichen aus der obigen Zeichenfolge abzurufen.
20971565
: Dies ist die Zeichenfolge -\n
, die an das Ende jeder Zeile angehängt wird.
- Es mag merkwürdig erscheinen, dass diese Zahl und die vorherige Zahl so ähnlich aussehen, aber wenn Sie darüber nachdenken, liegt das daran, dass wir eine Dezimalzahl verwenden und der Unicode-
\n
Wert zufällig 10 ist. Diese letzte Zahl ist (10 << 21) + 45.
Das Programm läuft nun wie folgt ab:
- Das Hauptprogramm ruft
ʫ
mit den folgenden 3 Parametern auf:
- B : Die Hash-Tabelle, um das 40-Bit-fache des Hash-Werts der Eingabe nach rechts verschoben. Das Lied, das wir ausgeben möchten, befindet sich jetzt in den 40 niedrigstwertigen Bits.
- c : Die Zeichenfolge
^<>VA
.
- a : Die Nummer 8.
- In jeder Iteration von
ʫ
,
- wenn c nicht leer ist,
- Wenn a nicht Null ist, schauen Sie sich das untere Bit von B an . Ausgabe
-
, gefolgt von einem anderen, -
wenn es null ist, oder dem ersten Zeichen von c, andernfalls. Rechtsschiebe B durch eine ein Bit zu entfernen und dekrementieren a .
- Wenn a Null ist, wird ausgegeben
-\n
, das erste Zeichen von c abgeschnitten und eine weitere Schleife mit a = 8 gestartet .
- Wenn c leer ist, sind wir fertig.