Conselho de Monopólio
Para este desafio do código-golfe, estaremos construindo o jogo de tabuleiro Monopoly.
Regras:
- Não aceite nenhuma entrada.
- Crie uma placa 11x11, em que cada caractere ASCII que forma a placa é a primeira letra de cada espaço da versão americana da placa Monopoly.
- Os caracteres devem ser separados por espaços.
Go
deve começar no canto inferior direito.
A string exata a ser produzida é
F K C I I B A V W M G
N P
T N
C C
S P
P S
V C
S P
E L
S B
J C V C O R I B C M G
Observe que da parte inferior direita para a esquerda inferior os quadrados são os seguintes:
G --> Go
M --> Mediterranean Avenue
C --> Community Chest
B --> Baltic Avenue
I --> Income Tax
...
J --> Jail
Editar Uau! vocês com certeza gostaram deste! :)
code-golf
string
ascii-art
kolmogorov-complexity
board-game
jacksonecac
fonte
fonte
Respostas:
Retina , 74 bytes
A terceira a última e a última linha devem conter um único espaço.
Experimente online!
Explicação
Isso substitui a entrada (vazia) pela string na segunda linha.
Este é um estágio dividido, que divide a cadeia de caracteres em torno das correspondências da expressão regular
(._.)
(ou seja, quaisquer três caracteres com um_
no meio). A razão pela qual colocamos toda a regex em um grupo é que os estágios divididos também retornam os resultados da captura de grupos. Por exemplo, dividirabcd
ao redorbc
dá[a, d]
, mas dividir ao redorb(c)
dá[a, c, d]
. Dessa forma, obtemos todas as._.
partes em linhas separadas, mas também as partes de 11 caracteres no início e no final. Usamos a_
opção para omitir resultados vazios entre as._.
correspondências individuais . O resultado seria este:Em seguida, processamos os sublinhados:
Isso substitui cada sublinhado por nove
1
s. A razão pela qual usamos1
s aqui em vez de espaços imediatamente é que facilita a inserção dos espaços de preenchimento a seguir.Lembre-se de que há um espaço na segunda linha. Isso insere um espaço em todas as posições que não são um limite de palavras, ou seja, em todos os lugares, exceto no início e no final das linhas.
E, finalmente, substituímos todos esses
1
s por espaços também.fonte
(._.)
.Geléia , 44 bytes
Experimente online!
Idéia
Se removermos cada segunda coluna e transpormos linhas com colunas, obteremos o quadro a seguir.
Agora, podemos girar cada coluna uma unidade para a direita, movendo todos os espaços restantes para a direita.
Então, nós remover os espaços restantes e substituir linefeeds com a letra D .
Agora, substituímos cada letra pelo seu índice baseado em 1 no alfabeto.
Em seguida, convertemos essa matriz de dígitos da base bijetiva 23 para inteiro.
Agora, convertemos esse número inteiro em base bijetiva 250 .
Finalmente, usamos esses dígitos para indexar na página de códigos de Jelly .
Esses são os dados codificados que incluiremos no programa ( 29 bytes ). Para produzir a saída desejada, basta reverter as etapas acima.
Código
fonte
z
) com um preenchimento.05AB1E ,
4847 bytesAgradecemos a Emigna por salvar um byte!
Explicação:
Primeiro alguma compressão.
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•
é uma versão compactada do seguinte número:Depois disso, isso é convertido na base 33 , o que resulta na seguinte sequência:
Os zeros são substituídos por 9 espaços , usando o código a seguir
¾9ð×:
. Depois disso,S
dividimos a string em caracteres e os dividimos em pedaços de 11 elementos (terminados com11ô
). Temos a seguinte matriz bidimensional:Nós gridify essa matriz com
»
e sua saída será implicitamente.Usa a codificação CP-1252 . Experimente online!
fonte
•(K·;“…¬È¦z"9äuŸé;TÞîÕs‡ÓÐV9XÒt\<•33B¾9ð×:S11ô»
Python 2, 89 bytes
Cria o modelo
para substituir em letras por formatação de string. O modelo usa dois tipos de linhas:
l
de 11 cópias de letra mais espaço e, em seguida, uma nova linha. Também é usado para a primeira e a última linha. Tem um espaço à direita.O Python 3.5 pode salvar um byte com a descompactação da tupla
(*'...',)
.fonte
PowerShell v2 +,
13112311411099 bytesEsta é apenas uma string literal com novas linhas colocadas no pipeline, com um pouco
-replace
no final para transformar0
em19
espaços. A primeira e a última linha são literalmente. Com apenas 10 espaços e pouca repetição, não havia espaço suficiente para jogar golfe. Essa sequência é deixada no pipeline e a saída via implícitaWrite-Output
acontece na conclusão do programa.fonte
Javascript ES6 REPL ,
105102101 bytesNão há muita coisa interessante acontecendo aqui. Cole no console para ver os resultados desejados
Guardou 3 bytes graças a @Arnauld Guardou
mais 1 byte graças a @Neil
Mostrar snippet de código
fonte
1
s com espaços e usar esta expressão regular em vez disso:.replace(/.( ?)/g,`$& `+`$1`.repeat(17))
1
s com espaços e utilizar esta função em vez disso:a=>a-1?a.repeat(18):a+' '
/// ,
10098 bytesExperimente online!
Por alguma razão misteriosa, parece haver espaços à direita após o
G
s. Sem eles, meu código teria 96 bytes.Agradecimentos a 42545 (ETHproductions) e 56258 (daHugLenny) por reduzir 1 byte cada!
fonte
G
na primeira e na última linha?Turtlèd , 72 bytes
Experimente online
>
gira tartaruga,"foo"
escreve cordas na grade. o último"
foi elidávelfonte
V ,
75, 62, 59 bytesExperimente online!
Como este codel contém caracteres não ASCII, aqui está um hexdump:
Explicação. Primeiro, inserimos o seguinte texto:
Então,
<esc>
voltamos ao modo normal. Neste ponto, o cursor está na terceira linha na últimaG
. Convenientemente, existe um comando para nos colocar na primeira coluna da linha logo acima do cursor. Esse comando é-
. Então, quando terminarmos na segunda linha (naN
), executamos o seguinte loop:Explicação:
Agora, o buffer fica assim:
Agora usamos um regex compactado para substituir cada caractere por esse caractere e um espaço. Essa é a
Í./&
parte. Isso se traduz no seguinte regex do vim:Que significa:
fonte
R,
149146 bytesNão é tão impressionante, mas também não tenho certeza de como isso seria jogado no golfe. Explorar de
paste
alguma forma é o meu primeiro palpite. Compare com o texto bruto de 241 bytes.R-violino
fonte
Python 2, 108 bytes
Um pouco diferente da outra resposta python, sem substituições, apenas junções de strings.
fonte
Perl, 90 bytes
Abordagem bastante chata, não consegue pensar em uma maneira melhor de reduzir ... Requer
-E
sem custo adicional. Gera um espaço adicional no final de cada linha. -2 bytes graças a @Dada !Uso
fonte
perl -E 'say"FKCIIBAVWMG\nNZP\nTZN\nCZC\nSZP\nPZS\nVZC\nSZP\nEZL\nSZB\nJCVCORIBCMG"=~s/Z/$"x9/ger=~s/./$& /gr'
. (Substitua\n
por novas linhas literais para chegar a 90).Jolf, 72 bytes
Substitua tudo
♣
por\x05
, ou tente aqui!Isso fornece a string desejada.
fonte
Java 7,
177165142131 bytes-15 bytes graças a @BassdropCumberwubwubwub .
-11 bytes graças a @Numberknot .
Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte
String c(){String s=" ";return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace(""," ").replace("_",s);}
para 150 (nota que Stackexchange remove espaços excessivos)s
mas a stackexchange os removeu. Aqui está o ideone , agora mesmo em 142 bytess=" "
. Nesse caso, é realmente mais curto. E.replace(""," ").replace("_",s);
pode ser.replace("_",s).replace(""," ");
em vez de um adicional de -8 bytesString c(){return"FKCIIBAVWMG\nN_P\nT_N\nC_C\nS_P\nP_S\nV_C\nS_P\nE_L\nS_B\nJCVCORIBCMG".replace("_"," ").replace(""," ");}
( 131 bytes )Befunge, 120 bytes
A primeira linha tem a sequência a ser impressa ao contrário (parece que não é, mas o código está retornando nessa linha). A segunda linha imprime as linhas superior e inferior. A terceira linha e o lado esquerdo da quarta linha imprimem as linhas do meio, e o pequeno pedaço no canto inferior direito faz uma coisa interessante: move o cursor de volta para a segunda linha para imprimir a última linha, mas depois de terminar, sai.
Como você pode ver na primeira linha, as cadeias são separadas por espaços para distinguir entre a primeira, a média e a última. Os espaços podem ser qualquer outra coisa, e se eu usasse caracteres ASCII de 0 a 9, poderia facilmente salvar 4 bytes. O $ que você vê é apenas um caractere de lixo que precisa estar lá e pode ser substituído por qualquer coisa, menos um espaço.
fonte
J,
7773 bytesObserve que 43 bytes, mais da metade do total, são usados apenas para a sequência
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
.Explicação
Primeiro, faça uma lista
Então faça a sua tabuada
Em seguida, teste a igualdade com zero
Achate, encontre as somas cumulativas e multiplique elemento
Em seguida, junte-se aos zeros, divida-o em sublistas de comprimento 22, solte a cabeça de cada sub-lista e use os valores como índices na string
' FKCIIBAVWMGNPTNCCSPPSVCSPELSBJCVCORIBCMG'
fonte
(' ',@,.~]);._1';FKCIIBAVWMG;N_P;T_N;C_C;S_P;P_S;V_C;S_P;E_L;S_B;JCVCORIBCMG'rplc'_';9#' '
_11,@,.&' '\'FKCIIBAVWMGN_PT_NC_CS_PP_SV_CS_PE_LS_BJCVCORIBCMG'rplc'_';9#' '
Na verdade , 74 bytes
Experimente online!
Este programa funciona com o mesmo princípio básico da resposta Python 2 do xnor .
Explicação (novas linhas substituídas
\n
por uma questão de clareza):fonte
C # 6,
192190 bytesSem espaço à direita; sem seguir a nova linha.
Uma solução simples. Comece com a string literal.
Replace
!
por 9 espaços. Depois,Split
em 11 cordas por~
e mais parachar
s (interiorSelect
). Acrescente um espaço a cada caractere e depoisJoin
volte para 11 strings. Finalmente outroJoin
por caractere de nova linha.fonte
Ruby, 92
Programa completo, imprime no stdout usando
$> <<
Existem 40 cartas no total para traçar. As letras 10 a 28 alternam entre ser seguido por uma nova linha ou
' '*19
. As letras anteriores e posteriores são separadas por espaços únicos.fonte
Perl,
115112 bytesProduz a seguinte saída:
A primeira e a última linha de saída têm um espaço à direita. O código utiliza substituições de regex e o fato de que, se os objetos não forem definidos, eles serão interpretados como seqüências de caracteres (por exemplo, FKCIIBAVWMG é tratado como "FKCIIBAVWMG". Não foi possível excluir as aspas da última linha devido à nova linha anterior, que Eu não poderia procurar em nenhum outro lugar.
Editar 1: salvou 3 bytes, substituindo
" "
por$"
, removendo os parênteses externos e inserindo um espaço após a impressão, removendo os parênteses ao redor$"x19
e adicionando um espaço posteriormente (para.
que não seja interpretado como decimal)fonte
s/(.)/\1 /
pode ser substituído pors/./$& /
. Solte o ponto e vírgula final. Use emsay
vez deprint
(para isso, você precisará adicionar-M5.010
ou usar em-E
vez de-e
, mas ambos são gratuitos (veja aqui )). Novas linhas literais em vez de\n
.Carvão , 66 bytes
Experimente online!
Box(21, 11, 'F K C I I B A V W M GPNCPSCPLBG M C B I R O C V C JSESVPSCTN')
.Não-competidor, 36 bytes
fonte
Python 2, 116 bytes
Bem simples, por qualquer motivo, mesmo que a substituição de strings seja tão detalhada, foi a melhor coisa que eu pude criar. Possivelmente usando
re
pode ser mais curto.fonte
print'F K C I I B A V W M G\nN@P\nT@N\nC@C\nS@P\nP@S\nV@C\nS@P\nE@L\nS@B\nJ C V C O R I B C M G'.replace('@',' '*19)
também tem 116 bytes sem usar junção se você quiser ser mais direto. Como alternativa,print' '.join('FKCIIBAVWMG!N@P!T@N!C@C!S@P!P@S!V@C!S@P!E@L!S@B!JCVCORIBCMG').replace('! ','\n').replace('@',' '*17)
são 115 bytes se o espaço em branco à direita for permitido. (O argumento para substituir é, em vez de '!' '!'.)Lote, 171 bytes
fonte
Idioma do GameMaker, 148 bytes
Eu sei que é bastante básico, mas não acho que isso possa ser superado no GML ...
fonte
GDScript
linguagem doGodot
mecanismo de jogo. Mas, não tenho certeza se seria ok :)string_repeat(" ",19)
tem o mesmo comprimento que" "
.Pip , 64 bytes
63 bytes de código, +1 para
-S
sinalizador.Experimente online!
Explicação
Operadores utilizados:
.
(binário) concatena (opera item em listas).X
(binário) string-multiplica. (s
é uma variável pré-inicializada para" "
.)^
(unário) divide uma sequência em uma lista de caracteres..*
é outra maneira de dividir uma string em caracteres. Consiste em unário.
, que é um não-op em cadeias, emparelhado com o*
meta-operador, que mapeia um operador unário para cada item em seu operando (iterável). O uso.*"..."
permite salvar um byte em excesso(^"...")
- os parênteses seriam necessários porque.
tem maior precedência que^
.PE
precede um elemento a uma lista.AE
anexa um elemento a uma lista.Com esse pano de fundo, aqui está o código passo a passo:
Quando esse resultado é impresso automaticamente, o
-S
sinalizador une as sublistas nos espaços e a lista principal nas novas linhas, fornecendo a saída desejada.fonte
C,
171156 bytesTambém gera um caractere de linha nova à direita ... Provavelmente poderia ser um pouco mais complicado.
fonte
Perl 5,
9286 bytesUsos
sprintf
, preenchimento e o operador de repetição de stringx
.fonte
\n
por novas linhas literais, não precisa de espaços entre ox
operador e o número a seguir e, finalmente, substituisplit//,xxx
porxxx=~/./g
.Haskell,
128125114 bytesExperimente aqui
((:" ")=<<)
isconcatMap (\a -> [a,' '])
- almofadas adicionando um espaço atrás de cada letra em sua entradafonte
PowerShell, 95 bytes
Inspirado na resposta de @ AdmBorkBork .
Explicação
O primeiro operador de substituição cria o retângulo
11x11
.O segundo operador de substituição insere um espaço após cada caractere. O resultado possui espaços à direita.
fonte