Konvertieren Sie bei einer beliebigen vorzeichenlosen 16-Bit-Ganzzahl die Dezimalzahl (dh die Zahl zur Basis 10) in ein 4 × 4-ASCII-Raster der Bits, wobei sich das höchstwertige Bit (MSB) oben links und das niedrigstwertige Bit (LSB) bei befindet unten rechts lesen Sie quer und dann nach unten (wie englischer Text).
Beispiele
Eingabe: 4242
+---+---+---+---+
| | | | # |
+---+---+---+---+
| | | | |
+---+---+---+---+
| # | | | # |
+---+---+---+---+
| | | # | |
+---+---+---+---+
Eingabe: 33825
+---+---+---+---+
| # | | | |
+---+---+---+---+
| | # | | |
+---+---+---+---+
| | | # | |
+---+---+---+---+
| | | | # |
+---+---+---+---+
Spezifische Anforderungen
Die Eingabe muss dezimal erfolgen (Basis 10). Sie können sie jedoch nach Belieben in Binärdateien konvertieren (einschließlich der Verwendung von integrierten Sprachen, falls verfügbar).
Das Format der Ausgabetabelle muss genau übereinstimmen . Dies bedeutet, dass Sie die angegebenen ASCII-Zeichen (
-
,+
und|
) für die Tabellengitterlinien verwenden müssen. Das Innere jeder Zelle besteht aus 3 Zeichen, und wahre Bits werden durch dargestellt,#
während false durch ein Leerzeichen () dargestellt wird.
Führende oder nachfolgende Leerzeichen sind nicht zulässig. Letzte Zeile ist erforderlich .
Die Bitreihenfolge muss mit den beschriebenen Beispielen übereinstimmen.
Zulagen
- Die Eingabe muss eine Zahl zur Basis 10 in der Befehlszeile, der Standardeingabe oder der Benutzereingabe sein, darf jedoch nicht fest in Ihrem Quellcode codiert sein.
Möge der klarste kürzeste Code gewinnen! :-)
quelle
Antworten:
J, 26 Bytes
Ein anonymes Verb. Zum Glück kann J sehr gut Boxen zeichnen. Probieren wir es aus:
Wie einige Kommentatoren bereits erwähnt haben, ist die Art und Weise, wie J Felder zeichnet, systemabhängig: Auf einigen Plattformen funktioniert dieser Code unter den Standardeinstellungen, auf anderen werden die Felder mit Unicode-Strichzeichen gezeichnet. (Mit den Befehlen
9!:6
und9!:7
können Sie die Zeichen abfragen und festlegen, mit denen jeweils Boxwerte gezeichnet werden sollen.)quelle
JavaScript (ES6), 102
... oder 96
return
stattconsole.log
.Testen Sie das folgende Snippet in einem EcmaScript 6-kompatiblen Browser.
quelle
Befunge -93, 196
218BytesUm das Programm auszuführen ...
Show
.Input
Feld ein.Run
. (Oder ändern SieSlow
den Wert auf 5 Millisekunden und klicken Sie dann aufShow
.)Ausgabe für 4242:
Leistung für 33825:
Erläuterung
Oh Gott, worauf habe ich mich eingelassen? Gut geht hier! (Irrelevanter Code wird durch
.
s ersetzt.)Teil 1: Eingabe abrufen (in 0,0 speichern) und 32768 berechnen (in 1,0 speichern).
Teil 2: Drucken Sie "+ --- + --- + --- + ---" aus.
Teil 3: Gib "+" und eine neue Zeile ein und überprüfe, ob (1,0) 0 ist (dh wir sind fertig). Wenn ja, kündigen Sie. Andernfalls fahren Sie fort.
Teil 4: Holen Sie sich Binärzahlen der Eingabe und aktualisieren Sie dabei (0,0) und (1,0). Drucken Sie die richtigen Dinge. Ich nutze Befunges Umgriffsverhalten.
Teil 5: Drucken Sie eine neue Zeile und kehren Sie zu dem Teil zurück, in dem "+ --- + --- + --- + --- +" gedruckt wird. Wrap-Around-Trick wird verwendet.
Ta-da!
quelle
Julia,
156143 BytesUngolfed:
Probieren Sie es online aus
quelle
Python 2,
157153151146 BytesVielen Dank an Morgan Thrapp für das Speichern von 4 Bytes und an Jonathan Frech für das Speichern von 5 Bytes.
Verwendung
quelle
'+---'*4
in eine Variable ziehen , und zwei weitere, wenn Sie dies tunj=''.join
int(input())
mitinput()
und fünf Bytes speichern.Ruby
118,114danke für @ w0lf zum speichern einiger zeichen.
quelle
?
Notation schreiben (z. B .:?|
statt'|'
). Das funktioniert für alles außer für den Raum.?\s
das für den Raum funktioniert, aber es ist hier nicht wirklich hilfreich.GNU sed + dc, 116
Punktzahl beinhaltet +1 für
-r
Flaggen ansed
:Testausgang:
Alternative:
Pure sed, 146
Man könnte meinen, es wäre ein Betrug, die
sed
GNU-Erweiterung zu verwenden, um einendc
Befehl auszuwerten . In diesem Fall können wir das gemäß dieser Meta-Antwort etwas anders machen . Natürlich ist die Frage eindeutig fest, dass die Eingabe muss 10 in der Basis sein, aber hier Anspruch Ich versuche , dass wir , dass für außer Kraft setzen könnensed
Antworten und einstellige (Basis 1) stattdessen verwenden.Ausgang testen
Verwenden Sie
printf
, um den erforderlichen unären String zu generieren:quelle
C ++ 11,
193191190176172 BytesMeine erste Lösung für Codegolf, also beschuldigen Sie mich nicht.
Ungolfed
Vorherige Version
quelle
using namespace std
im Seriencode vermeiden . Und es ist auch hier nicht nützlich.0x
.using namespace std
spart ein paar bytes, da ich nicht vorcout
undcin
mit stellen mussstd::
. Auch mit nurusing std::cout;
nicht helfen.C++
unterstützt nicht auto int.Pyth, 37 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
CJam,
4341 BytesAuf jeden Fall golffähig, aber ich denke, es ist ein Anfang. Erzeugt die oberste Zeile und erstellt dann für jeweils 4 Bits eine gerade Zeile und kopiert die vorherige ungerade Zeile.
Probieren Sie es online aus .
quelle
Python 2,
122121120 Bytes-1 Byte dank @ xnors ordentlichem
4**8+
Trick. Der Hauptdruck erfolgt durch neunmaliges Schleifen, wobei die entsprechende Zeile für ungerade / gerade ausgewählt wird.quelle
bin(4**8+input())[3:]
ein Byte speichert überformat
Python 2, 94
Die Idee ist, das Muster zu nehmen
außer mit
%s
anstelle von Leerzeichen und Tupelsubstitution durchführen. Das Tupel sieht aus wieEs wird erstellt, indem Ziffern aus dem Eingang in binärer Form abgenommen und das entsprechende Symbol an der Vorderseite des Tupels hinzugefügt werden. Ein Ausdruck mit explizitem Tupel ergab die gleiche Länge.
Danke an Sp3000 für 2 Bytes.
quelle
PowerShell,
203188182 BytesBearbeiten - spart 15 Bytes durch Ändern der Reihenfolge,
|
in der gezeichnet wird, damit wir.TrimEnd("|")
die Ausgabe sichern und stattdessen die for-Schleife in einen Subcode-Block konvertieren können, der ein Array erzeugtEdit2 - Speichert weitere 6 Bytes, indem das Speichern in der
$o
Variablen entfällt und nur-join''
direkt mit ausgegeben wird .Ooooooooof.
In PowerShell zu zeichnen ist schwierig . Das Arbeiten mit Binärziffern in PowerShell ist schwierig .
Verwendet integrierte Funktionen für
[convert]
die Eingabe-Ganzzahl in eine Zeichenfolgendarstellung in Binärform und wandelt sie dann wieder in eine um,[int64]
damit wir.ToString()
die entsprechende Anzahl von Nullen voranstellen / auffüllen können. (Beachten Sie, dass das Erstellen und Verknüpfen eines Strings-Arrays@(,"0"*16)-join''
1 Zeichen kürzer ist als der Literal-String."0000000000000000"
)1..16|%{...}
Überprüfen Sie dann in einer einfachen for-Schleife jede Ziffer, um unser Ausgangsarray aufzubauen, und kehren Sie dann-join''
wieder zusammen.Zurück, 188
Vorherige, 203
quelle
Javascript (ES6),
216207 BytesDefiniert eine anonyme Funktion.
Danke an ETHproductions für die Tipps!
quelle
.join` | `
2. Sie können auch Vorlagenzeichenfolgen zum Interpolieren von Werten verwenden:i=>`,${"0".repeat....join`,`},`.replace...
3 Weitere ES6-Tipps finden Sie in diesem Thread .i=>`,${("0".repeat(16)+i.toString(2)).slice(-16).split``.map((v,l,a)=>l%4?"":"| "+a.slice(l,l+4).map(v=>' #'[v]).join` | `+" |").filter(v=>v).join`,`},`.replace(/,/g,`<line break>+---+---+---+---+<line break>`).slice(1)
("0".repeat(16)+i.toString(2)).slice(-16)
->(65536|i).toString(2).slice(1)
CJam, 62 Bytes
Probieren Sie es online aus .
quelle
Pyth, 50 Bytes
Die Erklärung muss bis zu einem anderen Zeitpunkt warten, ich poste dies auf meinem Handy!
quelle
Rubin, 102
Algorithmus
Drucken Sie einen horizontalen Teiler
Schleife 20 mal (19..0)
Wenn die Schleifennummer nicht durch 5 dividiert wird, konvertieren Sie sie durch Multiplizieren mit 4/5 in eine Zahl im Bereich 16..0. Drucken Sie ein Leerzeichen (ASCII 32) oder
#
(ASCII 32 + 3 = 35), dem|
ein Leerzeichen vorausgeht und auf das ein Leerzeichen folgt.Wenn die Schleifennummer durch 5 dividiert wird, drucken Sie eine mit der ersten identische | Abschluss-, Zeilenumbruch- und horizontale Teilung.
quelle
Perl, 103 Bytes
Viele Zeichenfolgenwiederholungen, um ein Raster aus
x
s zu erstellen, konvertieren die Eingabe in binär und danns///
diex
s in#
oder$"
(), abhängig von der Markierung an der angegebenen Position (
$x
).quelle
PHP, 159 Bytes
bingrid16.php
:Verwendung:
Nichts Besonderes, nur das Rendering brutal erzwungen.
Ich habe versucht, einen anderen Winkel mit Arrays anstelle von Schleifen zu verwenden, aber es war länger bei 224 Bytes:
quelle
Perl 5 ,
8584 Bytes8483 Byte Code +-p
Flag-1 Byte nachdem Dom mich daran erinnert hat, eine neue Zeile zu verwenden
Probieren Sie es online!
quelle
$/
!c99 263 bytes
Golf gespielt:
ungolfed:
Ich wollte nur eine etwas wechselnde Variante präsentieren und fand, dass dies das erste Mal angemessen ist (sogar das kostet mich ein paar Bytes, aber C kann diese Herausforderung in Bytes nicht einmal mit einer Chance ändern, also ist es mir egal), das argc zu verwenden / argv
quelle
Rubin, 95
Nicken Sie zu Mhmd für eine prägnante String-Konvertierung, aber ich wollte versuchen, String-Methoden anstelle von Zahlenmethoden zu verwenden.
quelle
Rubin, 93
Eine etwas kürzere Version, die nur numerische Operationen verwendet.
quelle
C # 227 Bytes
Golf gespielt:
Einrückung:
Wenn ich das erste Mal so etwas versuche, wären Tipps willkommen!
quelle
wc
BefehlPython 3,
145144 BytesIn der Reihe:
Mit Zeilenumbrüchen:
Edit: Tanks @manatwork zum Speichern von 1 Byte
quelle
r=0,1,2,3
ist 1 Zeichen kürzer ist als es mit der Erzeugungr=range(4)
.Kotlin , 192 Bytes
Verschönert
Prüfung
quelle
05AB1E , 45 Bytes
Probieren Sie es online!
quelle