Introdução
Seu desafio hoje (inspirado nesse desafio ) é escrever vários trechos, funções ou programas completos, cada um que produz vários emoticons ASCII, sem reutilizar caracteres.
Desafio
A lista de emoticons ascii válidos para esse desafio está aqui e no bloco de código na parte inferior desta postagem.
Cada snippet deve estar em uma linha separada no seu envio.
Você pode usar apenas um idioma para todos os trechos.
Cada snippet deve gerar saída para stdout ou retornar uma sequência contendo o emoticon e uma nova linha opcional à direita, e nada mais .
Você não pode usar nenhum caractere mais de uma vez em todos os trechos, no entanto, usar um caractere várias vezes em um único trecho é bom.
Você não pode usar nenhum caractere que não esteja na página de códigos do seu idioma (ou ascii, se o seu idioma não usar uma página de códigos personalizada) em nenhum dos trechos. Em outras palavras, você está restrito a apenas caracteres que podem ser codificados em um byte.
Nenhum trecho pode receber qualquer entrada.
As brechas padrão não são permitidas.
Sua pontuação é o número de trechos exclusivos que imprimem um emoticon ascii diferente no arquivo de texto acima.
Maior pontuação ganha!
Boa sorte!
Emoticons permitidos, espaço separado:
:-) :) :-] :] :-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: Desculpas, houve um caractere Unicode em um dos emoticons que eu perdi. Desde então, excluí o emoticon que o contém. Espero que não cause muitos inconvenientes.
fonte
Respostas:
Lenguage , 131
Coloquei todos os emoticons que estou representando no formato em
<emoticon> <byte> <length>
que o programa é<byte>
repetido várias<length>
vezes.fonte
×
!Haskell , 3
Aqui está o começo de uma solução haskell.
xD
Experimente online!
Essa é apenas uma string normal que usa os caracteres
"xD
:]
Experimente online!
Esta é uma cadeia de caracteres desapropriada usando contras para construir uma lista de caracteres. Ele usa o emoticon
:]
porque ambos:
e]
já são usados. No total, isso usa os caracteres':][
.8)
Experimente online!
É aqui que as coisas começam a ficar um pouco mais interessantes. Como precisamos de uma maneira de criar uma string sem os caracteres
"
ou'
usamos ashow
funçãoshow
pega algo que pode ser mostrado e faz um barbante. Aqui nós mostramos a tupla(88,8,8,8)
. Isso em particular na tupla termina com8)
a string que queremos, então8
eliminamos os primeiros caracteres da string usandodrop 8
. Os caracteres únicos nesta solução sãodrop 8(shw,)
Se pudéssemos encontrar outra maneira de fazer
Char
s, provavelmente seria capaz de fazer um quarto.mempty
, poderia ser usado em vez da[]
resposta 2 e existem maneiras de extrair o,
da resposta 3.fonte
chr
fromData.Char
, transformar cada caractere em uma string:[]
e depois++
todos juntos.Carvão, 10
Estes são apenas os que eu posso fazer sem usar a
cat
habilidade semelhante ao carvão , o que me permitiria adicionarXP
e|-0
.Experimente-os online! Adicionei
D⎚
comandos para separar os trechos que os espaçam, embora não sejam perfeitos, pois o código deve estar realmente em uma linha. Explicação:Isso
←
faz com que a literal da string)%
seja impressa para a esquerda, ou seja, invertida.O código de caractere para
:
é 58. O código de caractere para(
é 5 vezes 8. (Ambos são negados aqui, caso eu precise de um separador posteriormente.)O
:
é um literal. O¹
imprime uma linha de comprimento 1 na horizontal, que é apenas um-
. A↓
faz com que a segunda linha para ser impresso na vertical, o que dá o|
.O
⮌
inverte a string literal];
.O
<_
é uma string literal e‖O
faz<
com que isso seja refletido no outro lado do_
.O
=
é uma string literal e↗÷χχ
desenha uma linha de comprimento 10/10, ou seja, 1 na diagonal, ou seja/
.Os números
9-1
e0
são lançados para string e assim imprimir como dígitos, enquanto o0
no meio é logicamente negado transformando-o em1
que é outra maneira de imprimir uma-
. (E eu nem o usei como literal ainda!)Isso pega a string literal
D^B
e a converte em uma matriz, que normalmente seria impressa na vertical, no entanto, a direção da impressão é substituída pela vertical, o que resulta em ... saída invertida novamente!Isso procura os caracteres nas posições 3 e 23 no alfabeto maiúsculo (0-indexado).
Ele
↶⁴
gira a direção da impressão 180 °, fazendo com que a literal da stringpx
seja impressa invertida mais uma vez.fonte
↶⁴px
quandoxp
também funcionaria.Gelatina , 6
+1 para vir ?? dylnan sugeriu o uso de
ṭ
para liberarȮ
, mas pode ser usado?Seis programas completos:
;] xp ; D : 0 XP 8-0
“;]
⁾xp
⁽8Ạb⁹Ọ
”:®ṭ
24,16ịØA
7‘.NṾṖ⁺
31 bytes distintos usados, confirmação aqui .
fonte
”:ṭ@¬
permitiria que você usasseȮ
em outro programa”:®ṭ
é mais curto também.0”:0
funciona muito libertando aderência-
.¶
eo mapa de caracteres da nova linha para o mesmo byte).Ruby , 7
= \ Experimente online! Uma string literal
> _> Experimente online! Outra string literal
: p Experimente online! Imprime o
:p
símbolo, incluindo a sintaxe (:
), pois está usando op
método%) Experimente online! Ainda outra string literal
XP Experimente online! Aqui, notação de documento (basicamente um literal de cadeia de linhas múltiplas)
;] Experimente online! Matriz de 2 caracteres (
':'
e']'
) associados a'-'
D8 Experimente online! A cadeia de origem de uma expressão regular
__
Menção honrosa Experimente online! Executa o código no bash, retorna
emoticon
com um final\n
fonte
Python 2, 4
Esta resposta é um começo bastante simples. Para os dois primeiros, usamos apenas as duas sintaxes de string diferentes do python. No terceiro, usamos o mesmo método da minha resposta Haskell, onde fazemos uma tupla obter sua representação de string e dividi-la. Para a última parte usamos a
chr
função para fazer os personagens:
e)
e adicioná-los juntos.xD
= \
8)
:)
fonte
=/
.R , 4
Experimente online!
Uma primeira tentativa de uma solução R. A necessidade de usar colchetes para qualquer chamada de função reduz seriamente as possibilidades. O primeiro trecho é uma chamada à
quote
qual simplesmente retorna seu argumento - Obrigado @BLT por me mostrar uma maneira de fazê-lo sem parênteses, permitindo que eu useintToUtf8
na linha a seguir.Eu usei outro truque que @ Giuseppe mencionou em um comentário para outra pergunta uma vez para soletrar
quote
semo
et
.fonte
mtcars[4,5]
), mas nenhum dado até o momento.intToUtf8
, Etc.) use parênteses.+
= quote; + XP para liberar os parênteses? (não sei como obtê-lo para mostrar-se sem a Markdown formatação - a + é cercado por acentos graves)Fissão , 3
| ;-)
Experimente online!
XP
Experimente online!
: o
Experimente online!
Existem apenas três maneiras de produzir algo em Fission, então aqui estamos
fonte
Perl 5, 6
:-)
:)
: -3
=]
B ^ D
XP
Experimente online .
fonte
Javascript, 5
Três triviais, depois dois interessantes:
xD
XP
<_ <
: 3
Nenhum caractere para literais de string foi deixado para o quarto, portanto, obtemos strings concatenando com uma matriz. Os dois pontos vêm da escrita de uma função que usa dois pontos e depois a convertem em uma string.
8)
Este funciona de maneira muito semelhante ao quarto, mas usa métodos ligeiramente diferentes para fazer tudo.
Agradecemos a @ steve-bennett por sugerir o uso do
String
construtor e.slice
como alternativa à concatenação com matrizes e indexação. Conseguiu extrair +1 ponto dele.fonte
String.fromCharCode(58)+String.fromCharCode(91)
provavelmente seria uma versão mais direta da última.String(D=>1).slice(0,2)
/>_>/.source
new RegExp().toString().substring(3,5)
[((new Date)+[]).charAt(18), ~2].join(name)
0+String(-3)