Einführung
Ihre heutige Herausforderung (inspiriert von dieser Herausforderung ) besteht darin, eine Reihe von Ausschnitten, Funktionen oder vollständigen Programmen zu schreiben, die jeweils verschiedene ASCII-Emoticons ausgeben, ohne die Zeichen erneut zu verwenden.
Herausforderung
Die Liste der gültigen ASCII-Emoticons für diese Herausforderung finden Sie hier und im Codeblock am Ende dieses Beitrags.
Jedes Snippet sollte in Ihrer Einreichung in einer separaten Zeile stehen.
Sie können für alle Snippets nur eine Sprache verwenden.
Jedes Snippet muss entweder als stdout ausgegeben werden oder einen String zurückgeben, der das Emoticon und eine optionale nachgestellte neue Zeile enthält, und sonst nichts .
Sie dürfen kein Zeichen mehr als einmal in allen Snippets verwenden. Die mehrfache Verwendung eines Zeichens in einem einzelnen Snippet ist jedoch in Ordnung.
Sie dürfen in keinem der Snippets Zeichen verwenden, die nicht in der Codepage Ihrer Sprache enthalten sind (oder ASCII, wenn Ihre Sprache keine benutzerdefinierte Codepage verwendet). Anders ausgedrückt, Sie sind auf Zeichen beschränkt, die in einem Byte codiert werden können.
Kein Snippet kann Eingaben entgegennehmen.
Standard Lücken sind nicht zulässig.
Ihre Punktzahl ist die Anzahl der eindeutigen Ausschnitte, die jeweils ein anderes ASCII-Emoticon in der obigen Textdatei ausgeben.
Höchste Punktzahl gewinnt!
Viel Glück!
Zulässige Emoticons, durch Leerzeichen getrennt:
:-) :) :-] :] :-3 :3 :-> :> 8-) 8) :-} :} :o) :c) :^) =] =) :-D :D 8-D 8D x-D xD X-D XD =D =3 B^D :-)) :-( :( :-c :c :-< :< :-[ :[ :-|| >:[ :{ :@ >:( :'-( :'( :'-) :') D-': D:< D: D8 D; D= DX :-O :O :-o :o :-0 8-0 >:O :-* :* ;-) ;) *-) *) ;-] ;] ;^) :-, ;D :-P :P X-P XP x-p xp :-p :p :-b :b d: =p >:P :-/ :/ :-. >:\ >:/ :\ =/ =\ :L =L :S :-| :| :$ :-X :X :-# :# :-& :& O:-) O:) 0:-3 0:3 0:-) 0:) 0;^) >:-) >:) }:-) }:) 3:-) 3:) >;) |;-) |-O :-J #-) %-) %) :-###.. :###.. <:-| ',:-| ',:-l <_< >_>
EDIT: Entschuldigung, es gab ein Unicode-Zeichen in einem der Emoticons, die ich vermisst habe. Ich habe seitdem das Emoticon gelöscht, das es enthält. Ich hoffe, es wird nicht zu viel Unannehmlichkeiten verursachen.
quelle
Antworten:
Sprache , 131
Ich habe alle Emoticons, die ich darstelle, in das Format gesetzt,
<emoticon> <byte> <length>
in dem das Programm<byte>
mehrmals wiederholt<length>
wird.quelle
×
!Haskell , 3
Hier ist ein Einstieg in eine Haskell-Lösung.
xD
Probieren Sie es online!
Dies ist nur eine normale Zeichenfolge, bei der die Zeichen verwendet werden
"xD
:]
Probieren Sie es online!
Dies ist eine Desugared-Zeichenfolge, die Nachteile verwendet, um eine Liste von Zeichen zu erstellen. Es wird das Emoticon verwendet,
:]
da beide:
und]
bereits verwendet werden. Insgesamt verwendet dies die Zeichen':][
.8)
Probieren Sie es online!
Hier wird es etwas interessanter. Da wir einen Weg brauchen, um einen String ohne die Zeichen zu machen,
"
oder'
wir benutzen dieshow
Funktion.show
Nimmt etwas Vorzeigbares und macht einen String daraus. Hier zeigen wir das Tupel(88,8,8,8)
. Insbesondere dieses Tupel endet mit8)
der von uns gewünschten Zeichenfolge, sodass wir die ersten8
Zeichenfolgen mit löschendrop 8
. Die eindeutigen Zeichen in dieser Lösung sinddrop 8(shw,)
Wenn wir einen anderen Weg finden könnten,
Char
s zu machen, wäre ich wahrscheinlich in der Lage, einen vierten zu machen.mempty
, könnte anstelle von[]
in Antwort 2 verwendet werden, und es gibt Möglichkeiten, die,
aus Antwort 3 zu extrahieren .quelle
chr
ausData.Char
, jedes Zeichen in einen String mit:[]
und dann++
alle zusammen machen.Holzkohle, 10
Dies sind nur die, die ich tun kann, ohne die charcoal-
cat
ähnliche Fähigkeit zu verwenden, die es mir ermöglichen würde,XP
und hinzuzufügen|-0
.Probiere sie online aus! Ich habe
D⎚
Befehle hinzugefügt , um die Schnipsel zu trennen, um welche Art von Leerzeichen es sich handelt, obwohl es nicht perfekt ist, da der Code eigentlich in einer Zeile stehen sollte. Erläuterung:Das
←
bewirkt , dass die Stringliteral)%
zu gedruckt nach links umgekehrt , dh werden.Der Zeichencode für
:
ist 58. Der Zeichencode für(
ist 5 mal 8. (Beide werden hier negiert, falls ich später ein Trennzeichen benötige.)Das
:
ist eine wörtliche. Das¹
druckt horizontal eine Linie der Länge 1, die nur a ist-
. Das↓
bewirkt, dass die zweite Zeile vertikal gedruckt wird|
.Das
⮌
kehrt das String-Literal um];
.Das
<_
ist ein String-Literal und‖O
bewirkt<
, dass das auf die andere Seite von reflektiert wird_
.Das
=
ist ein String-Literal und das↗÷χχ
zeichnet eine Linie der Länge 10/10, dh 1 diagonal, dh/
.Die Zahlen
9-1
und0
werden in Strings umgewandelt und so als Ziffern gedruckt, während die0
in der Mitte logisch negiert wird,1
wodurch eine andere Möglichkeit zum Drucken von a entsteht-
. (Und ich habe es noch nicht einmal als wörtliches Wort benutzt!)Dadurch wird das Zeichenfolgenliteral
D^B
in ein Array konvertiert, das normalerweise vertikal gedruckt wird. Die Druckrichtung wird jedoch in vertikal geändert, was wiederum zu einer umgekehrten Ausgabe führt!Dadurch werden die Zeichen an den Positionen 3 und 23 im Großbuchstaben (mit 0-Index) nachgeschlagen.
Der
↶⁴
dreht die Druckrichtung um 180 ° und bewirkt so, dass das String-Literalpx
erneut umgekehrt gedruckt wird.quelle
↶⁴px
wennxp
es genauso gut funktionieren würde.Gelee , 6
+1 zu kommen ?? Dylnan schlug die Verwendung von vor, um
ṭ
zu befreienȮ
, aber kann es verwendet werden?Sechs volle Programme:
;] xp ; D : 0 XP 8-0
“;]
⁾xp
⁽8Ạb⁹Ọ
”:®ṭ
24,16ịØA
7‘.NṾṖ⁺
31 verschiedene Bytes verwendet, Bestätigung hier .
quelle
”:ṭ@¬
würden SieȮ
in einem anderen Programm verwenden können”:®ṭ
ist auch kürzer.0”:0
funktioniert zu frei Tack-
.¶
und das Newline-Zeichen entspricht demselben Byte).Rubin , 7
= \ Online ausprobieren! Ein String-Literal
> _> Online ausprobieren! Noch ein String-Literal
: p Online ausprobieren! Gibt das
:p
Symbol einschließlich der Syntax (:
) aus, da es diep
Methode verwendet%) Online ausprobieren! Noch ein String-Literal
XP Probieren Sie es online! Hier Dokumentennotation (im Grunde ein mehrzeiliges String-Literal)
;] Online ausprobieren! Array von 2 Zeichen (
':'
und']'
) verbunden mit'-'
D8 Probieren Sie es online! Die Quellzeichenfolge eines regulären Ausdrucks
__
Lobende Erwähnung Probieren Sie es online! Führt den Code in Bash aus und kehrt
emoticon
mit einem Trailing zurück\n
quelle
Python 2, 4
Diese Antwort ist ein ziemlich einfacher Anfang. Für die ersten beiden verwenden wir nur die beiden unterschiedlichen String-Syntaxen von Python. Für die dritte Methode verwenden wir die gleiche Methode wie für meine Haskell-Antwort, bei der ein Tupel seine Zeichenfolgendarstellung abruft und sie aufteilt. Im letzten Teil verwenden wir die
chr
Funktion, um die Zeichen:
und zu erstellen)
und füge sie zusammen.xD
= \
8)
:)
quelle
=/
.R , 4
Probieren Sie es online!
Ein erster Versuch einer R-Lösung. Die Notwendigkeit, Klammern für jeden Funktionsaufruf zu verwenden, verringert die Möglichkeiten erheblich. Das erste Snippet ist ein Aufruf,
quote
der einfach sein Argument zurückgibt. Vielen Dank an @BLT, dass ich einen Weg gezeigt habe, wie ich es ohne Klammern machen kann, damit ich es inintToUtf8
der folgenden Zeile verwenden kann.Ich habe einen anderen Trick benutzt, den @ Giuseppe in einem Kommentar zu einer anderen Frage einmal erwähnt hat, um
quote
ohneo
und zu buchstabierent
.quelle
mtcars[4,5]
), aber noch keine Würfel enthält.intToUtf8
+
= Anführungszeichen; + XP ersetzen , um die Klammern freizugeben? (Ich bin nicht sicher, wie ich es ohne die Markdown-Formatierung zum Anzeigen bringen kann - das + ist von Backticks umgeben)Spaltung , 3
| ;-)
Probieren Sie es online!
XP
Probieren Sie es online!
:Ö
Probieren Sie es online!
Es gibt nur drei Möglichkeiten, um etwas in Fission auszugeben, also sind wir hier
quelle
Perl 5, 6
:-)
:)
:-3
=]
B ^ D
XP
Probieren Sie es online aus .
quelle
Javascript, 5
Drei Triviale, dann zwei Interessante:
xD
XP
<_ <
:3
Da für das vierte Zeichen keine Zeichen für Zeichenfolgenliterale mehr vorhanden sind, werden Zeichenfolgen durch Verketten mit einem Array erstellt. Der Doppelpunkt entsteht durch Schreiben einer Funktion, die einen Doppelpunkt verwendet und ihn dann in einen String konvertiert.
8)
Dieser Vorgang funktioniert sehr ähnlich wie der vierte, verwendet jedoch etwas andere Methoden, um alles zu erledigen.
Vielen Dank an @ steve-bennett für den Vorschlag, den
String
Konstruktor zu verwenden, und.slice
als Alternative zur Verkettung mit Arrays und zur Indizierung. Es ist gelungen, +1 Punkt davon herauszuquetschen.quelle
String.fromCharCode(58)+String.fromCharCode(91)
wäre wahrscheinlich eine einfachere Version des letzten.String(D=>1).slice(0,2)
/>_>/.source
new RegExp().toString().substring(3,5)
[((new Date)+[]).charAt(18), ~2].join(name)
0+String(-3)