Herausforderung
Bei zwei Ziffern von 0 bis 9 als Eingabe wird ein Domino (aus der Gruppe der Doppel-Neun-Dominos ) mit dieser Anzahl von Pips (Punkten) auf den beiden Flächen ausgegeben . Die zehn möglichen Gesichter sehen so aus (durch Rohre getrennt):
| | o| o|o o|o o|o o o|o o o|o o o|o o o
| o | | o | | o | | o |o o|o o o
| |o |o |o o|o o|o o o|o o o|o o o|o o o
Oder in getrennten Zeilen:
-----
o
-----
o
o
-----
o
o
o
-----
o o
o o
-----
o o
o
o o
-----
o o o
o o o
-----
o o o
o
o o o
-----
o o o
o o
o o o
-----
o o o
o o o
o o o
Eingabeformate
Sie können Eingaben in jedem vernünftigen Format vornehmen, einschließlich, aber nicht beschränkt auf:
- Zwei separate Ganzzahlen, Zeichenfolgen oder Singleton-Arrays.
- Eine einzelne ganze Zahl von 0 bis 99;
- Ein Array von zwei ganzen Zahlen;
- Eine zweistellige Zeichenfolge.
Ausgabeformate
- Die beiden Flächen können horizontal ausgerichtet sein und durch Rohre wie folgt voneinander getrennt sein:
o|o o
| o
o |o o
- Oder sie sind vertikal ausgerichtet und durch Bindestriche wie folgt getrennt:
o
o
-----
o o
o
o o
- Wenn Sie möchten, können Sie einen Rand um den Domino ausgeben.
- Sie können auch eine Liste von Linien, eine Liste der beiden Flächen oder eine Kombination davon ausgeben.
- Sie können für die Pips (die ich verwendet habe
o
) ein beliebiges Nicht-Leerzeichen verwenden . - Wenn Sie es wirklich wünschen, können Sie bei der Ausgabe eines Arrays
0
Whitespace und1
Pips verwenden oderFalse
/True
oder das Äquivalent Ihrer Sprache. - Sie können das Leerzeichen zwischen den Spalten entfernen. Dies ist eine gültige Ausgabe für 7, 7:
ooo|ooo
o | o
ooo|ooo
- Jedes der Gesichter kann um 90 Grad gedreht werden. Dies ist auch eine gültige Ausgabe für 7, 7:
o o|o o o
o o o| o
o o|o o o
- Sie können so viel / wenig führende / nachfolgende Leerzeichen verwenden, wie Sie möchten, solange der Hauptteil der Ausgabe noch den anderen Einschränkungen entspricht.
- Jedes Gesicht muss 3 Zeilen groß sein, auch wenn die Zeilen leer sind. Für 0, 1 konnte dies nicht ausgegeben werden:
-----
o
Aber Sie könnten dies ausgeben:
-----
o
Wenn Sie eine Liste mit zwei Zeilenlisten ausgeben, können Sie dies ebenfalls tun [["", "", ""], ["", " o", ""]]
, aber nicht [[""], [" o "]]
.
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache.
[2, 1]
könnte ich ausgeben[[[0,0,1],[0,0,0],[1,0,0]],[[0,0,0],[0,1,0],[0,0,0]]]
?[0,5,21,29,31]
hier sind alle wichtigen zahlen meine freunde.Antworten:
Python 2 ,
10197926864 BytesProbieren Sie es online!
Credits
quelle
0
undFalse
in Python gleich sind, es sollte also OK sein).C (GCC) ,
252242269262241235220 BytesIch war auf Stapelüberlauf für Sockets in Python, als dies auftauchte, sagte, warum nicht? erster Code Golf, also bin ich mir nicht ganz sicher, ob ich die Regeln zu 100% befolgt habe (und wenn nicht und jemand mein sprichwörtliches Cookie stehlen und es reparieren möchte, soll es so sein). Mit 'o' und ''
255 245 272 265 244 238228 Bytes. Ersetzen Sie +48 durch * 79 + 32.Probieren Sie es online!
Wie es funktioniert:
Ich verwende ein bisschen Shift und bitweise und um herauszufinden, ob ein Punkt frei oder ein Pip sein soll, versetze die 0 oder 1 auf den korrekten ASCII-Wert. es bringt 4 und 5 durcheinander, so dass sie etwas repariert werden mussten. tatsächlich ein paar Bytes hinzugefügt. war in der Lage, mehrere Bytes durch Entfernen einer Maske und nur mit 1 (doh) zu entfernen
Besonderer Dank geht an Mr. Xcoder für die 7 Bytes weniger, die durch das Entfernen eines überzähligen #define
Changes: Memset -21 Bytes entfernt wurden. Die Bitlogik für 6, 4, 2 wurde so geändert, dass sie von 8 | 4 & 2, 8 | 4, 8 | 4 | 2 abhängt. -6 Bytes. Zusätzliche Zeilenumbrüche wurden entfernt, indem Puts anstelle von PrintF verwendet wurden, was ebenfalls kürzer ist. Das Array wurde auf 11 gekürzt, wodurch zusätzliche Zuweisungen entfernt wurden. -15 Bytes. JETZT denke ich, das ist das Beste, was ich tun kann.
quelle
'\n'
kann durch ersetzt werden10
. (Da in C char-Datentypen auch ganzzahlige Datentypen sind). Einigechar
können wahrscheinlich durch ersetzt werdenint
. (oder ganz weglassen)Gelee , 20 Bytes
Probieren Sie es online!
Alternative Version, Originalausgabe,
333231 BytesVielen Dank an @ user202729 für das Golfen ab 1 Byte!
Probieren Sie es online!
Wie es funktioniert
Zunächst setzt
“¤o.ƤẸʠṚ’
- ein Ganzzahlliteral in der bijektiven Basis 250 - den Rückgabewert auf 1086123479729183 .Dann
B¬
wandelt den Rückgabewert auf binär und nimmt den logischen NICHT jeder Ziffer, wodurch man das ArrayAls nächstes
s5ŒB
teilt das Array in Stücke mit einer Länge von 5 , dann springt jeden Chunk, Drehen ABCDE in abcdedcba , wodurch manRuft nun
ị@
das j- te und k- te Element dieses Arrays ab, wobei j, k das erste Argument des Programms ist. Beachten Sie, dass die Indizierung 1-basiert und modular ist, sodass das nullte Element auch das zehnte ist.Zum Schluss wird
s€3
jeder Brocken mit der Länge neun in drei Brocken mit der Länge drei aufgeteilt.quelle
3
is using0
for the pips, not1
like all the others.“¤o.ƤẸʠṚ’
should work.Jelly, 13 bytes
Try it online!
Combining Dennis' idea of using
ŒB
(bounce) in this answer and Xcali's observation in this answer to get 13 bytes.Jelly, 28 bytes
(with pretty printing)
Only now do I know that Jelly string literal is automatically terminated...
Try it online!
quelle
⁽½ÑD
leads to less bytecount than EriktheOutgolfer's answer“¤¦¢¬‘
herePHP
155, 150 bytesIt takes an array of integers as the input. For testing:
Output Format:
Check it out live here
My Solution
For my solution I used a matrix consisting of bitwise numbers ( powers of 2 ). It can be visualized like this:
And then a storage array consisting of the bit positions for the pips of each domino correlated by the numbered index:
So just to clarify:
0
or value0
would be the blank domino, which is always false.1
or value16
would be the number one domino and in the matrix that is in the center16
.2
or value68
would be the number two domino and in the matrix that is top right4
and bottom left64
or4|64
5
or value341
would be the number five domino and in the matrix that is1|4|16|64|256
9
or value511
would be the number nine domino and in the matrix its the combination of all the bits.Once that is established it's a fairly simple matter of looping for the 9 positions in the matrix, and setting
$x
to2
to the power of$i
Then we do a bitwise And
&
as we iterate through those spots. So for examples sake will use example 2 from above and I will usex
's instead spaces for sake of visual clarity:68 & 1 ? 0 : 'x'
which results in'x'
68 & 2 ? 0 : 'x'
which results in'x'
68 & 4 ? 0 : 'x'
which results in0
68 & 8 ? 0 : 'x'
which results in'x'
68 & 16 ? 0 : 'x'
which results in'x'
68 & 32 ? 0 : 'x'
which results in'x'
68 & 64 ? 0 : 'x'
which results in0
68 & 128 ? 0 : 'x'
which results in'x'
68 & 256 ? 0 : 'x'
which results in'x'
When the loop is complete we wind up with this string
"xx0xxx0xx"
.Then we add the border
"---xx0xxx0xx"
to it ( I actually start with the border, but whatever).And finally we chunk_split() it on 3's for:
Feel free to let me know what you think.
quelle
**
introduced in PHP 5.6 instead ofpow()
php.net/manual/en/language.operators.arithmetic.php^
but its the bitwise XOR ... lol$argv
. The function overhead in PHP is usually 13 bytes.Perl 5,
107 7670+ 1 (= 70 bytes-a
)Perl 5, 70 bytes
Try it online!
Uses 0 for whitespace and 1 for pips. Pretty simple method: observe that as the digit goes up, once a pip is "on", it never goes "off," except for the one in the middle. In the middle position, it is on for all odd numbers. Thus, for each position, it's a simple matter of checking if the digit is greater than the last digit for which it is off. The
||0
creates output when the condition is false. In Perl, false isundef
which outputs as null.quelle
JavaScript (ES6),
7978 bytesSaved 1 byte thanks to @ETHproductions
Takes input in currying syntax
(a)(b)
and outputs a vertical ASCII domino.Demo
Show code snippet
Horizontal version,
8079 bytesSaved 1 byte thanks to @ETHproductions
Takes input as an array of 2 integers and outputs a horizontal ASCII domino.
Demo
Show code snippet
quelle
n>d|0
or(+d?n>d:n)&1
APL (Dyalog), 25 bytes
Try it online!
-2 thanks to ngn.
The output format is a little bit weird: this function returns an array containing two shape-3,3 arrays each containing 0s and 1s.
quelle
2∘|(3 3⍴⊢,,∘⌽)¨>∘3 5 1 7¨
C (gcc), 115 bytes
Try it online!
quelle
Javascript (ES6), 87 bytes
quelle
Haskell - 88 characters
Takes a list of two numbers indicating the faces, returns a list of list of list of bool. Not that short but I find the solution interesting.
quelle
map
instead ofrepeat
andzipWith
:map$(<$>[[(>4),(>5),(>1)],[(>7),odd,(>7)],[(>1),(>5),(>3)]]).map.flip($)
Try it online!Pip,
32272421 bytes-3 bytes thanks to @DLosc
Try it online!
Explanation:
quelle
3517
instead of a list[3 5o7]
. ;)><>, 57+3 = 60 bytes
Try It Online. Outputs as a vertical domino with 1s for dots, 0s for whitespace and 9s for separators like so:
Technically this can be extended to up to 12 inputted values.
Old Version:
><>, 76+3 = 79 bytes
Try It Online. Outputs as a vertical domino with 1s for dots and 0s for whitespace like so:
quelle
Charcoal,
46444339 bytesTry it online! Link is to verbose version of code. Explanation:
Read two integers and map them in the lookup table. Then map over the result. (This effectively captures the result in a temporary.)
The results are then implicitly printed on separate lines, with an extra blank line between each face because the results are nested.
Move up and draw the dividing line in between the faces.
Previous 43-byte horizontal version:
Try it online! Link is to verbose version of code. Explanation:
Work vertically.
Print the dividing line.
Position to the start of the first face.
Read two integers and map them in the lookup table.
Prepare to output up to 9
o
s.But start a new column every three
o
s.Convert the lower 5 bits of the ASCII code to binary, and then mirror the output for the remaining 4
o
s.quelle
Jelly, 16 bytes
Try it online!
Used Neil's strategy and base decompression to generate the values; outputs as a binary array. Takes a list as input.
Explanation:
quelle
APL+WIN,
4947 bytesEdited as per Adam's comment, thanks, to run with index origin zero.
Prompts for screen input as a vector of integers one for each face.
The output is of the form:
for an inputs of
7 3
and0 5
Explanation:
quelle
⎕IO←0
to save yourself the1+
?Python 2, 121 bytes
Try it online!
Reduced to 121 using a lambda after going back and re-reading the rules. Now outputs a list of lines.
Previous version with nicely formatted output:
Python 2,
156153147141 bytesTry it online!
-3 with thanks to @NieDzejkob
Takes input as 2 integers and outputs in vertical format with 0=space and 1=dot.
quelle
Pyt,
220154 bytesSecond attempt (154 bytes)
Explanation:
First attempt (220 bytes):
Explanation:
Try it online!
quelle
05AB1E, 34 bytes
Try it online!
This was difficult because 05AB1E has bad padding.
Basic explanation:
quelle
SmileBASIC,
9269 bytesExample:
This is what happens when your rules aren't strict enough.
quelle
FALSE,
116807870696663615958 bytesstill working on this...
quelle
Chip,
142135 bytesTry it online!
Input is a string of digits. Uses zeroes as the pips. Draws the pips for one number, reads next input byte. If no next byte, terminate, else draw the divider and go to start.
Each
Z
(orz
) corresponds to one character of output, they are positioned to fire in order top to bottom. The capitalizedA
,B
,C
, andD
correspond to the low four bits of the input (that's all we look at, so"34" == "CD" == "st" ...
). The lowercaseb
,d
,e
,f
correspond to various bits of the output.Can make infinite-length dominoes too; try giving
0123456789
as input.quelle
PHP, 116 bytes
requires PHP 5.5 or later. Run with
-nr
or try it online.quelle
C (gcc),
150146 bytesTry it online!
quelle