Dies ist inspiriert von einer 05AB1E-Antwort von Magic Octupus Urn .
Ausgehend von zwei Argumenten, einer positiven Ganzzahl und einer Zeichenfolge / Zeichenliste:
- Übersetzen Sie die Zahl in base-n, wobei n die Länge der Zeichenfolge ist.
- Ersetzen Sie für jedes Zeichen jedes Erscheinungsbild des Index dieses Zeichens in der Zahl zur Basis n durch dieses Zeichen.
- Drucken Sie die neue Zeichenfolge aus oder geben Sie sie zurück.
Beispiele:
Input:
2740, ["|","_"]
2740 -> 101010110100 in base 2
-> Replace 0s with "|" and 1s with "_"
Output: _|_|_|__|_||
Input:
698911, ["c","h","a","o"]
698911 -> 2222220133 in base 4
-> Replace 0s with "c", 1s with "h", 2s with "a", and 3s with "o"
Output -> "aaaaaachoo"
Input:
1928149325670647244912100789213626616560861130859431492905908574660758972167966, [" ","\n","|","_","-"]
Output:
__ __
| |_| |
___| |___
- - - -
- - - - - - -
- - - - - - - -
_______________
Input: 3446503265645381015412, [':', '\n', '.', '_', '=', ' ', ')', '(', ',']
Output:
_===_
(.,.)
( : )
( : )
Regeln:
- IO ist flexibel .
- Sie können die Zahl in einer beliebigen Basis verwenden, solange sie zwischen den Eingaben konsistent ist
- Die Liste der Zeichen muss jedoch 0-indiziert sein, wobei 0 das erste Zeichen und n-1 das letzte ist
- Mögliche Zeichen können beliebige druckbare ASCII-Zeichen sowie Leerzeichen wie Tabulatoren und Zeilenumbrüche sein
- Die angegebene Liste der Zeichen hat eine Länge im Bereich
2-10
einschließlich. Das heißt, die kleinste Basis ist binär und die größte ist dezimal ( keine lästigen Buchstaben hier ) - Standardlücken sind verboten
- Sie können jederzeit antworten, auch wenn Ihre Sprache die größeren Testfälle nicht bewältigen kann.
Da dies Codegolf ist , gewinnt der kürzeste Code für jede Sprache. ( Ich weiß, dass alle Ihre Golfsprachen ein Byte integrierte Funktionen haben ;)
code-golf
ascii-art
base-conversion
Scherzen
quelle
quelle
Antworten:
05AB1E ,
76 BytesDa es von einer 05AB1E-Antwort inspiriert wurde, scheint eine Antwort in 05AB1E passend. :)
-1 Byte dank @Enigma, indem foreach entfernt und dies implizit getan wird.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
gв¹sèJ
ein Byte speichern.¹sè
ich jetzt nicht an mich selbst gedacht habe. (Ich wusste, dass das Ändern von?
inJ
in diesem Fall die gleiche Ausgabe ergibt.)Java 8,
7250 Bytes-22 Bytes dank @ OlivierGrégoire durch Rückgabe eines
IntStream
anstatt direkt zu drucken.Probieren Sie es online aus .
Erläuterung:
quelle
a->n->n.toString(a.length).chars().map(c->a[c-48])
(50 Bytes) seit "IO ist flexibel"String f(char[]a,int n){return n>0?f(a,n/a.length)+a[n%a.length]:"";}
(69 Bytes) rekursiv, zum Spaß.Python 3 , 49 Bytes
Kann noch nicht kommentieren, daher poste ich die Python 2-Antwort, die an Python 3.5 angepasst ist.
quelle
Japt, 2 Bytes
Kann die zweite Eingabe als Array oder String annehmen. Schlägt die letzten 2 Testfälle fehl, da die Zahlen die maximale Ganzzahl von JavaScript überschreiten. Ersetzen Sie
s
durchì
, um stattdessen ein Array von Zeichen auszugeben.Versuch es
quelle
Haskell ,
4039 BytesProbieren Sie es online!
Da Haskells
Int
Typ auf beschränkt ist9223372036854775807
, schlägt dies bei größeren Zahlen fehl.-1 Byte dank Laikoni .
Ungolfed
Probieren Sie es online!
quelle
cycle
statt zu verwendenmod
!div n(length l)
Speichert ein Byte.MATL , 2 Bytes
Probieren Sie es online!
Eingaben sind eine Zahl und eine Zeichenfolge.
Schlägt
2^53
aufgrund der Gleitkomma-Genauigkeit fehl , wenn die Anzahl überschritten wird.Erläuterung
Was weißt
YA
du, ein Builtin (Basisumwandlung mit festgelegten Zielsymbolen).quelle
JavaScript (ES6), 48 Byte
Nimmt Eingaben in der aktuellen Syntax vor
(c)(n)
, wobei c eine Liste von Zeichen und n eine Ganzzahl ist.Sicher nur für n <2 53 .
Probieren Sie es online!
JavaScript (ES6), 99 Byte
Mit Unterstützung für große ganze Zahlen
Nimmt Eingaben in der aktuellen Syntax vor
(c)(a)
, wobei c eine Liste von Zeichen und a eine Liste von Dezimalstellen (als Ganzzahlen) ist.Probieren Sie es online!
quelle
x86-32-Bit-Computercode (32-Bit-Ganzzahlen): 17 Byte.
(Siehe auch die folgenden Versionen, einschließlich 16 Byte für 32-Bit- oder 64-Bit-Versionen mit einer DF = 1-Aufrufkonvention.)
Der Aufrufer übergibt Args in Registern, einschließlich eines Zeigers auf das Ende eines Ausgabepuffers (wie meine C-Antwort ; zur Begründung und Erläuterung des Algorithmus siehe). Die interne Funktion von glibc
_itoa
tut dies , sodass sie nicht nur für Code-Golf entwickelt wurde. Die Arg-Passing-Register befinden sich in der Nähe von x86-64 System V, mit der Ausnahme, dass wir in EAX anstelle von EDX ein Arg haben.Bei der Rückkehr zeigt EDI auf das erste Byte einer 0-terminierten C-Zeichenfolge im Ausgabepuffer. Das übliche Rückgabewertregister ist EAX / RAX. In der Assemblersprache können Sie jedoch jede für eine Funktion geeignete Aufrufkonvention verwenden. (
xchg eax,edi
Am Ende würde 1 Byte hinzufügen).Der Anrufer kann eine explizite Länge berechnen, wenn er möchte
buffer_end - edi
. Ich glaube aber nicht, dass wir es rechtfertigen können, das Abschlusszeichen wegzulassen, wenn die Funktion nicht tatsächlich beide Start- + Endzeiger oder Zeiger + Länge zurückgibt. Das würde in dieser Version 3 Bytes einsparen, aber ich halte es nicht für vertretbar.idiv
. Die anderen Argumente sind keine impliziten Operanden.)dec edi
, so muss in dem niedrigen 4GiB sein)nasm -felf32 ascii-compress-base.asm -l /dev/stdout | cut -b -30,$((30+10))-
(Hand bearbeitet, um Kommentare zu verkleinern, Zeilennummerierung ist seltsam.)Es ist überraschend , dass die einfachste Version mit grundsätzlich keine Geschwindigkeit / Größe Kompromissen ist die kleinste, aber
std
/cld
Kosten 2 Bytes zu verwenden ,stosb
in absteigender Reihenfolge zu gehen und immer noch dem gemeinsame DF = 0 Aufrufkonvention folgen. (Und STOS wird nach dem Speichern dekrementiert , wobei der Zeiger beim Beenden der Schleife ein Byte zu niedrig zeigt, was uns zusätzliche Bytes zum Umgehen kostet.)Versionen:
Ich fand 4 signifikant unterschiedliche Implementierungstricks (mit einfachem
mov
Laden / Speichern (oben), mitlea
/movsb
(ordentlich, aber nicht optimal), mitxchg
/xlatb
/stosb
/xchg
und einem, der mit einem überlappenden Anweisungs-Hack in die Schleife eintritt. Siehe Code unten) . Das letzte muss0
in der Nachschlagetabelle nachgestellt werden , damit es als Abschlusszeichen für die Ausgabezeichenfolge kopiert werden kann. Daher zähle ich das als +1 Byte. Abhängig von 32/64-Bit (1 Byteinc
oder nicht) und der Annahme, dass der Aufrufer DF = 1 (stosb
absteigend) oder was auch immer setzt, sind verschiedene Versionen (gebunden für) am kürzesten.Wenn DF = 1 in absteigender Reihenfolge gespeichert wird, gewinnt xchg / stosb / xchg, aber der Anrufer möchte das oft nicht. Es fühlt sich an, als würde man dem Anrufer die Arbeit auf eine schwer zu rechtfertigende Weise überlassen. (Im Gegensatz zu benutzerdefinierten Arg-Passing- und Return-Value-Registern, die einen asm-Aufrufer normalerweise keinen zusätzlichen Arbeitsaufwand verursachen.) Im 64-Bit-Code funktioniert
cld
/scasb
as jedoch soinc rdi
, dass der Ausgabezeiger nicht auf 32-Bit gekürzt wird, was manchmal der Fall ist Es ist unpraktisch, DF = 1 in 64-Bit-Bereinigungsfunktionen beizubehalten. . (Zeiger auf statischen Code / Daten sind 32-Bit-Dateien in x86-64-Nicht-PIE-Programmen unter Linux und immer in Linux-x32-ABI. In einigen Fällen kann daher eine x86-64-Version mit 32-Bit-Zeigern verwendet werden.) Dieses Zusammenspiel macht es interessant, verschiedene Anforderungskombinationen zu betrachten.nostring
) .stosb_edx_arg
oderskew
) ; oder mit eingehendem DF = nicht kümmern, lassen Sie es gesetzt: 16 + 1Bstosb_decode_overlap
oder 17Bstosb_edx_arg
stosb_decode_overlap
) , 18B (stosb_edx_arg
oderskew
)x86-64 mit 64-Bit-Zeigern, andere DF-Verarbeitung: 16B (DF = 1
skew
) , 17B (nostring
mit DF = 1scasb
anstelle vondec
). 18B (stosb_edx_arg
Erhalt von DF = 1 mit 3 Byteinc rdi
).Oder wenn wir zulassen, dass ein Zeiger auf 1 Byte vor der Zeichenfolge 15B (
stosb_edx_arg
ohne dasinc
am Ende) zurückgegeben wird. Alles bereit, erneut aufzurufen und einen weiteren String mit einer anderen Basis / Tabelle in den Puffer zu erweitern ... Aber das wäre sinnvoller, wenn wir auch keinen Abschluss speichern würden0
, und Sie könnten den Funktionskörper in eine Schleife einfügen, das ist also wirklich ein separates Problem.x86-64 mit 32-Bit-Ausgabezeiger, DF = 0-Aufrufkonvention: Keine Verbesserung gegenüber 64-Bit-Ausgabezeiger, aber 18B (
nostring
) wird jetzt verwendet.skew
). Oder DF = 1 setzen und es lassen, 17B fürskew
mitstd
aber nichtcld
. Oder 17 + 1B fürstosb_decode_overlap
mitinc edi
am Ende anstelle voncld
/scasb
.Mit einer DF = 1-Aufrufkonvention: 16 Byte (IA32 oder x86-64)
Benötigt DF = 1 am Eingang, lässt es gesetzt. Zumindest funktionsbezogen kaum plausibel . Funktioniert genauso wie die obige Version, aber mit xchg, um den Rest in / aus AL vor / nach XLATB (Tabellensuche mit R / EBX als Basis) und STOSB (
*output-- = al
) zu bekommen.Bei einem normalen DF = 0 am Eintritts- / Austritt Konvention, die
std
/cld
/scasb
Version ist 18 Bytes für 32 und 64-Bit - Code, und ist 64-bit sauber (Arbeiten mit einem 64-Bit - Ausgangs - Hinweiszeigern).Beachten Sie, dass sich die Eingabeargs in verschiedenen Registern befinden, einschließlich RBX für die Tabelle (für
xlatb
). Beachten Sie auch, dass diese Schleife mit dem Speichern von AL beginnt und mit dem letzten noch nicht gespeicherten Zeichen endet (dahermov
das Ende). Die Schleife ist also relativ zu den anderen "schief", daher der Name.Eine ähnliche, nicht verzerrte Version übersteuert EDI / RDI und behebt es dann.
Ich habe eine alternative Version davon mit
lea esi, [rbx+rdx]
/movsb
als innerem Schleifenkörper ausprobiert . (RSI wird bei jeder Iteration zurückgesetzt, RDI wird jedoch dekrementiert.) Aber es kann nicht xor-zero / stos als Abschlusszeichen verwenden, daher ist es 1 Byte größer. (Und es ist nicht 64-Bit-sauber für die Nachschlagetabelle ohne ein REX-Präfix auf der LEA.)LUT mit expliziter Länge und einem 0-Terminator: 16 + 1 Byte (32 Bit)
Diese Version setzt DF = 1 und belässt es so. Ich zähle das zusätzliche LUT-Byte, das als Teil der Gesamtbytezahl benötigt wird.
Der coole Trick dabei ist , dieselben Bytes auf zwei verschiedene Arten dekodieren zu lassen . Wir fallen in die Mitte der Schleife mit Rest = Basis und Quotient = Eingangsnummer und kopieren den 0-Terminator an die richtige Stelle.
Beim ersten Durchlauf der Funktion werden die ersten 3 Bytes der Schleife als High-Bytes eines Disp32 für eine LEA verbraucht. Diese LEA kopiert die Basis (Modul) nach EDX und
idiv
erzeugt den Rest für spätere Iterationen.Das 2. Byte von
idiv ebp
istFD
der Opcode für denstd
Befehl, den diese Funktion benötigt, um zu funktionieren. (Dies war eine glückliche Entdeckung. Ich hatte dies mitdiv
früher betrachtet, was sich von deridiv
Verwendung der/r
Bits in ModRM unterscheidet. Das 2. Byte vondiv epb
decodiert alscmc
, was harmlos, aber nicht hilfreich ist. Aber mitidiv ebp
können wir tatsächlich dasstd
von oben entfernen der Funktion.)Beachten Sie, dass die Eingangsregister wieder einen Unterschied darstellen: EBP für die Basis.
Dieser überlappende Decodiertrick kann auch verwendet werden mit
cmp eax, imm32
: Es wird nur 1 Byte benötigt, um effektiv 4 Byte vorwärts zu springen, nur um Flags zu blockieren. (Dies ist für die Leistung auf CPUs, die Befehlsgrenzen im L1i-Cache markieren, schrecklich.)Aber hier verwenden wir 3 Bytes, um ein Register zu kopieren und in die Schleife zu springen. Das würde normalerweise 2 + 2 (mov + jmp) dauern und uns in die Schleife direkt vor dem STOS anstatt vor dem XLATB springen lassen. Aber dann bräuchten wir eine separate Geschlechtskrankheit, und das wäre nicht sehr interessant.
Probieren Sie es online! (mit einem
_start
Anrufer, dersys_write
das Ergebnis verwendet)Für das Debuggen ist es am besten, es unter auszuführen
strace
oder die Ausgabe zu verhexen, damit Sie überprüfen können, ob sich\0
an der richtigen Stelle ein Abschlusszeichen befindet und so weiter. Aber Sie können sehen, dass dies tatsächlich funktioniert, undAAAAAACHOO
für eine Eingabe von produzieren(Eigentlich
xxAAAAAACHOO\0x\0\0...
, weil wir von 2 Bytes früher in dem zu einer festen Länge Puffer aus Dumping. So wir , dass die Funktion sehen , schrieb den Bytes es sollte zu und tat nicht Schritt auf jedem Bytes sollte es nicht haben. Die Der an die Funktion übergebene Startzeiger war das vorletztex
Zeichen, gefolgt von Nullen.)quelle
Gelee , 4 Bytes
Probieren Sie es online!
ṃ
ist buchstäblich ein eingebautes dafür. Die anderen drei Bytes sind für Jellys einseitige Indizierung verantwortlich.quelle
ṃ
" Basis-Dekomprimierung; konvertiere x in Basislänge (y) und indexiere dann in y "? Ist dies für ganz außergewöhnliche Fälle der Fall, in denen die Basis, in die Sie konvertieren möchten, und die Länge einer Zeichenfolge / Ganzzahl / Liste gleich sind? Wenn ich danach suche, kann ich damit nur drei Antworten finden: 1 ; 2 ; 3 . Irgendwie ein seltsamer Bestandteil alltäglicher Code-Golf-Herausforderungen. : S“sspspdspdspfdspfdsp”
, aber mit“çƥ÷£ḟ’ṃ“spdf”¤
Ihnen sparen Sie sechs Bytes. Es ist besonders nützlich beiPython 2 ,
4948 Bytes-1 Byte danke an Jo King
Probieren Sie es online!
Alternative Version (wird bei großen Zahlen nicht beendet),
4543 Bytes-2 Bytes dank Jo King
Probieren Sie es online!
quelle
Kohle ,
31 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 2 Bytes dank nur @ ASCII gespeichert. Vorherige Version, bevor das Builtin hinzugefügt wurde, 8 Bytes:
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
θη
? Sieht ein bisschen verwirrend aus. Warum nicht einfach komplett entfernen und gehen⍘
?D 112 Bytes
Probieren Sie es online!
Dies ist eine Portierung der C ++ - Antwort von HatsuPointerKun
Der Aufrufstil ist
u(ulong(n), to!(char[])(b))
, won
undb
sind die linken und rechten ArgumenteD bestimmte Sachen
Leider müssen wir Import
std.conv
über keine Typkonvertierungen zu tun , sehr grundlegende Typumwandlung.Unter Verwendung des Golfy Template - System und gibt die Funktion die erforderlichen Typen (die , warum es ist nicht nur telefonieren ist
u(n,b)
), können wir das Auftreten von verkürzenchar[]
undulong
zu1
Byte jedem, wenn innerhalb f der Funktion.D initialisiert unsere Typen für uns,
C t;
ist also die Abkürzung fürC t=cast(char[])([])
to!C
konvertiert die Ganzzahln%l
in ein Zeichenarray (unter Verwendung von Codepunkten) und~
ist Verkettungforeach(ref c;t)
ist wie diefor(... : ...)
Schleife von C ++ , aber etwas länger.ref
ist wie&
, es wirdc
als per Referenz kopiert behandelt (dh wir können modifizierent
). Zum Glück, D folgern den Typenc
ohne jedes Schlüsselwort Bezeichnen Typen.quelle
C ++,
150144 Bytes,uint64
Eingabe-6 Bytes dank Zacharý
Die Verwendung einer Variablen zum Speichern der Größe würde den Bytecount um 1 erhöhen
So rufen Sie die Funktion auf:
Erstens die Zahl, zweitens die Zeichenkette (char array)
Testfälle:
quelle
#include
, können Sie ändern;;
einfach;
und'0'
kann einfach sein48
for
Schleife sein:for(;n;n/=b.size())t=std::to_string(n%b.size())+t;
b.size()
das in dieser Schleife nicht ändert.Zweig, 66 Bytes
Erstellt ein
macro
, dasimport
in eine Vorlage eingefügt werden muss .Werte erwartet:
Für die ersten Argumente (
n
):Für das zweite Argument (
c
):Wie benutzt man:
.twig
Datei{% import 'file.twig' as uncompress %}
uncompress.d()
Ungolfed (nicht funktionsfähig):
Sie können diesen Code unter https://twigfiddle.com/54a0i9 testen
quelle
Pyth,
987 BytesSparte ein Byte dank hakr14 und ein weiteres dank Mr. Xcoder.
Probieren Sie es hier aus
Erläuterung
quelle
m@Qd
mit@LQ
vz
mitE
.C89, signiert mit eingeschränktem Bereich
int n
,6453 Bytechar **out
und ändere es, anstatt ein zu nehmen und zurückzugebenchar *
Nimmt die Zahl als ein
int
, die Nachschlagetabelle als Array + Länge.Die Ausgabe wird in a geschrieben
char *outbuf
. Der Aufrufer übergibt (als Referenz) einen Zeiger an das Ende des Puffers. Die Funktion ändert diesen Zeiger so, dass er bei der Rückgabe auf das erste Byte der Zeichenfolge zeigt.Dies ist C89 und funktioniert auch bei aktivierter Optimierung ordnungsgemäß. Das heißt, es hängt nicht vom
-O0
Verhalten von gcc ab , wenn eine nicht leere Funktion beendet ist oder eine andere UB vorliegt.Das Übergeben eines Zeigers an das Ende eines Puffers ist normal für eine optimierte int-> string-Funktion, z. B. die interne
_itoa
Funktion von glibc . In dieser Antwort finden Sie eine detaillierte Erklärung zum Aufteilen einer Ganzzahl in Ziffern mit einer Div / Mod-Schleife, wie wir es hier tun, sowohl in C als auch in x86-64 asm. Wenn die Basis eine Potenz von 2 ist, können Sie die MSD-Ziffern zuerst verschieben / maskieren, ansonsten ist die niedrigstwertige Ziffer zuerst (mit Modulo) die einzige gute Option.Probieren Sie es online! . Ungolfed-Version:
In dieser expliziten Länge Version, ist die Eingabe ein ,
char table[]
die sie nicht mit einem Abschluss 0 Byte benötigen, weil wir es nie als String behandeln. Es könnte eine sein,int table[]
für die wir uns interessieren. C hat keine Container, die ihre eigene Länge kennen. Daher ist Zeiger + Länge der normale Weg, ein Array mit einer Größe zu übergeben. Also wählen wir das, anstatt es zu müssenstrlen
.Die maximale Puffergröße beträgt ungefähr
sizeof(int)*CHAR_BIT + 1
, daher ist sie klein und konstant für die Kompilierungszeit. (Wir verwenden so viel Platz mit base = 2 und allen auf 1 gesetzten Bits.) ZB 33 Bytes für 32-Bit-Ganzzahlen, einschließlich des0
Abschlusszeichens.C89, signiert
int
, Tabelle als implizite C-Zeichenfolge, 65 ByteDies ist das gleiche, aber die Eingabe ist eine implizite Zeichenfolge, sodass wir die Länge selbst ermitteln müssen.
quelle
Bash + Core-Dienstprogramme , 49 Byte
Probieren Sie es online!
Kommentare / Erklärung
Dies nimmt Befehlszeilenargumente als Eingabe (die Zahl in Basis 10, dann eine einzelne Zeichenfolge mit der Liste der Zeichen) und gibt sie an stdout aus. Sonderzeichen wie Leerzeichen, Zeilenumbruch, usw. können (zum Beispiel in Oktalschreibweise eingegeben werden
\040
für einen Raum) oder\n
für eine neue Zeile,\t
für Reiter, oder jede andere Escape - Sequenz , dassecho -e
undtr
identisch interpretieren.Ein Großteil der Bytes dient hier der Behandlung von Sonderzeichen und größeren Testfällen. Wenn ich nur nicht schreckliche Zeichen behandeln muss und die Zahlen klein sind (zum Beispiel der erste Testfall), reichen die folgenden 24 Bytes aus:
Dies verwendet die Parametererweiterung
${#2}
, um die Anzahl der Zeichen in der Zeichenfolge abzurufen, erstellt ein DC-Programm für die Basiskonvertierung und sendet dann die konvertierte Zahl durchtr
.Dies behandelt jedoch keine Zeilenumbrüche, Leerzeichen oder Tabulatoren. Um mit Escape-Sequenzen umzugehen, ohne die Basis zu beeinflussen, zähle ich die Zeichen,
wc -c
nachdem ich die Escape-Zeichen mit interpretiert habeecho -en
. Dies erweitert das Programm auf 38 Bytes:Leider hat dc eine nervige "Funktion", bei der bei Ausgabe einer großen Zahl ein Zeilenumbruch mit einem Schrägstrich und einer Zeilenumbruchsequenz erfolgt, sodass die größeren Testfälle diese zusätzliche Ausgabe haben. Um es zu entfernen, leite ich die Ausgabe von DC durch
tr -dc 0-9
, um nicht numerische Zeichen zu entfernen. Und da sind wir.quelle
dc -e${#2}o$1p|tr 0-9 "$2"
die Eingabe zu wörtlich zu nehmen , anstatt in \ Form entkommen , so dass es kann Leerzeichen verarbeiten, abertr
keine Möglichkeit habe, nicht behandeln-
als einen Bereich Zeichen, zum Beispiel. Wenn sich die Eingabe-
nicht an einem Ende der Zeichenfolge befindet, wird sie unterbrochen. Vielleicht kannst du verwendensed "y/0123456789/$2/"
. Nein, ich denke nicht, GNUsed
verlangt , dass beide Argumentey
gleich lang sind, und es scheint, als würde es bei Newline ersticken.APL (Dyalog Unicode) ,
14 1312 BytesProbieren Sie es online!
Infix implizite Funktion; kann den größten Testfall aufgrund der Gleitkommadarstellung nicht verarbeiten.
Gespeichert
12 Bytes dank @ Adám!13 Bytes für die Header hinzugefügt:(Ich hatte vergessen, dass dies nicht zutrifft. )⎕IO←0
: I ndex O Rigin = 0 und⎕FR←1287
: F loat R ePresentation = 128 Bit.Wie?
quelle
Attache , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
Canvas , 7 Bytes
Probieren Sie es hier aus!
Einfache Implementierung:
Der eingegebene Zeichensatz kann auch eine Zeichenfolge sein, solange er keinen Zeilenumbruch enthält, da Canvas keinen Zeilenumbruch enthält und ihn automatisch in ein 2D-Objekt konvertiert.
quelle
Stax ,
65 BytesFühren Sie es aus und debuggen Sie es
Erläuterung:
quelle
SOGL V0.12 , 10 Bytes
Probieren Sie es hier aus!
Ziemlich lang, wenn man bedenkt, dass die Idee so ziemlich in der Sprache umgesetzt ist: hier eintreten
gibt mit dieser Methode einen komprimierten String aus.
quelle
Ruby , 31 Bytes
Probieren Sie es online!
quelle
Stax , 2 Bytes
Führen Sie es aus und debuggen Sie es
:B
ist eine Anweisung in stax, die dies tut. Normalerweise wird eine "Zeichenfolge" * anstelle eines Arrays von "Zeichenfolgen" verarbeitet. Am Ende bedeutet dies, dass die Ausgabe ein Array von Einzelzeichen-Arrays ist. Die Ausgabe flacht jedoch implizit ab.* Stax hat eigentlich keinen String-Typ. Text wird durch ganzzahlige Arrays von Codepunkten dargestellt.
quelle
J , 12 Bytes
Wie?
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) , 49 Byte
Probieren Sie es online!
quelle
C (gcc) , 110 Bytes
Probieren Sie es online!
Beschreibung:
quelle
sprintf
. Meine C-Version hat 53 Bytes , wobei der Ausgabepuffer vom Aufrufer bereitgestellt wird. Sie können einenstrcpy
am Ende ausführen, wenn Sie die Bytes an den Anfang eines Puffers kopieren möchten.CJam , 11 Bytes
Probieren Sie es online! Übernimmt die Eingabe als Zahl, dann als Newline und dann als Zeichen in der ASCII-Grafik.
Erläuterung
quelle
liq
am Anfang loswerden können , und das spart Ihnen 3 Bytes!JavaScript, 39 Bytes
Hafen von Rods Python-Lösung .
Probieren Sie es online aus
quelle
n
bis zu 64-Bit, oder? (In Python sind Ganzzahlen mit willkürlicher Genauigkeit integriert, aber JS-Zahlen sind natürlichdouble
Gleitkommazahlen mit Genauigkeit, die in Ganzzahlen konvertiert werden können.) Scheint nicht für die größeren Testfälle in der Frage zu funktionieren, wie 1928149325670647244912100789213626616560861130859431492905908574660758972167966. Oh, aber die Frage ermöglicht Antworten wie diese. Trotzdem sollte angemerkt werden.SimpleTemplate , 86 Byte
Wow, das war eine große Herausforderung!
Dies wurde durch den fehlenden direkten Zugriff auf bestimmte Indizes erschwert, wenn der Index eine Variable ist.
Ein Fehler hat es auch länger gemacht, da die Werte in einer Variablen gespeichert werden mussten.
Werte erwartet:
Das erste Argument (
argv.0
) kann sein:Das zweite Argument (
argv.1
) kann sein:Wie funktioniert das?
Es funktioniert so:
C
ein Array ist, das Folgendes enthält:C
"{@echoA."
"}"
join
Funktion)Daraus ergibt sich, zum Beispiel,
C
enthält"{@echoA.0}{@echoA.1}..."
C
Ungolfed:
Sie können diesen Code unter https://ideone.com/NEKl2q ausprobieren
Optimales Ergebnis
Wenn es keine Fehler gäbe, wäre dies das beste Ergebnis unter Berücksichtigung der Einschränkungen (77 Bytes):
quelle