Em alguns países, existem recomendações ou leis sobre como formar corredores de emergência nas ruas que têm várias faixas por direção. (A seguir, consideramos apenas as faixas na direção em que estamos viajando.) Estas são as regras que existem na Alemanha:
- Se houver apenas uma faixa, todos devem dirigir para a direita, de modo que os veículos de resgate possam passar à esquerda.
- Se houver duas ou mais faixas, os carros na faixa mais à esquerda devem dirigir para a esquerda e todos os demais devem se mover para a direita.
Desafio
Dado o número N>0
de faixas regulares, produza o layout das faixas quando um corredor de emergência é formado usando uma sequência de N+1
caracteres ASCII. Você pode usar dois caracteres do código ASCII 33
até 126
, um para indicar o corredor de emergência e outro para indicar os carros. Espaços à direita ou à direita, quebras de linha etc. são permitidos.
Exemplos
Aqui estamos usando E
o corredor de emergência e C
os carros.
N Output
1 EC
2 CEC
3 CECC
4 CECCC
5 CECCCC
6 CECCCCC
etc
C
eE
, mas existem tantas abordagens legais possíveis para esse desafio! Usando operações matemáticas paraC=1
/E=2
ouC=2
/E=3
como a resposta principal faz; usandoC=0
/E=1
com10^(n-1)
; usandoC=0
/E=.
por formatação decimal0.0
; usandoC=1
/E=-
utilizando-1
; etc. etc. Tantas possibilidades únicas para um desafio que parecia tão direto ao ponto. Pena que só posso marcar uma vez com +1. ;)Respostas:
Python 2,
2926 bytesExemplo:
fonte
10**n*97/30-1/n*9
salva outro byte, dandof(5) == 323333
etc.Python 3,
3533 bytesEditar: soltar
f=
para salvar 2 bytes, graças ao lembrete de @dylnan .Experimente online!
Para visualizá-lo:
Resultado:
Experimente 🚔 online!
Python 3, 40 bytes
Uma solução simples:
Experimente online!
fonte
lambda N:
C (gcc) , 32 bytes
Experimente online!
Usos
0
e.
caracteres:fonte
Japonês,
54 bytesUsos
q
para carros e+
para o corredor.Tente
Os meus agradecimentos a Oliver, que jogou 4 bytes ao mesmo tempo que eu.
Explicação
Uma solução curta, mas uma explicação complicada!
O material direto primeiro: o
ç
método, quando aplicado a um número inteiro, repete seu argumento de string esse número de vezes. Oi
método recebe 2 argumentos (s
&n
) e inseres
no índicen
da string à qual é aplicado.Expandir os 2 atalhos unicode usados nos dá
çq i+1
, o que, quando transpilado para JS se tornaU.ç("q").i("+",1)
, ondeU
está a entrada. Então, estamos repetindo osq
U
tempos e inserindo um+
no índice 1.O truque final é que, graças ao empacotamento do índice de Japt, quando
U=1
,i
o+
índice at será inserido0
, seja qual for o valor que você alimenten
.fonte
ç0 iQ1
por 6 bytes, mas seria melhor se você o usasse.ç¬iÅ
por 4 bytes;) Eu nunca abusei tanto do Japt.Ä
em vez deÅ
:)R, 50 bytes
11 graças a Giuseppe!
Saídas 1 para corredor de emergência e 2 para faixas normais
Minha tentativa, 61 bytes
Nada demais para ver aqui, mas vamos colocar R no placar =)
Uso:
fonte
Haskell ,
383432 bytesExperimente online!
fonte
Python 2,
302928 bytesImprimir em
3
vez deC
e em.
vez deE
.Explicação:
Experimente online.
Python 2,
3332312928 bytesImprime em
1
vez deC
e em-
vez deE
.-2 bytes graças a @ovs .
-1 byte graças a @xnor .
Explicação:
Experimente online.
fonte
10/3
um falha aos 17n=16
se o seu inteiro built-in é de 64-bit é suficiente, ou neste caso,n=16
quando o valor decimal pode' t manter mais de 15 dígitos decimais por padrão é suficiente. (O mesmo se aplica a uma série de outras respostas usando linguagens com tamanhos número arbitrário, como Java, C # .NET, etc.)Pitão,
1098 bytesUsa
0
para indicar o corredor de emergência e"
.Experimente aqui
Explicação
fonte
brainfuck , 42 bytes
Experimente online!
Recebe a entrada como código de caracteres e as saídas como
V
faixas normais eW
como faixa limpa. (Para testar facilmente, recomendo substituir o,
número por+
s)Como funciona:
fonte
Oitava (MATLAB *),
31 30 28 2722 bytesExperimente online!
O programa funciona da seguinte maneira:
O truque usado aqui é XNORing a matriz de sementes
0:n
com uma verificação se a entrada for maior que 1. O resultado é que, paran>1
a semente, ela é convertida em uma matriz lógica[0 1 (0 ...)]
enquanton==1
a semente é invertida[1 0]
, obtendo a inversão necessária.O resto está apenas convertendo a semente em uma string com carros anexados suficientes.
(*) O link TIO inclui nos comentários do rodapé uma solução alternativa para o mesmo número de bytes que funciona no MATLAB e no Octave, mas resulta em uma sequência de '0' e '1' em vez de 'E' e ' C '. Para completar, a alternativa é:
Economizou 1 byte usando em
n==1~=0:1
vez de0:1~=(n<2)
.~=
tem precedência sobre<
, portanto, os colchetes originais, mas parece que~=
e==
são tratados na ordem da aparência, comparando com 1, podemos salvar um byte.Salva 2 bytes, alterando onde a negação de
2:n
é realizada. Isso economiza um par de colchetes. Também temos que mudar o~=
para==
dar conta do fato de que será negado mais tarde.Salvo 1 byte usando
<
novamente. Acontece que<
tem a mesma precedência de==
tudo. Colocar o<
cálculo antes de==
garantir a ordem correta de execução.Economizou 5 bytes ao não criar duas matrizes separadas. Em vez disso, confie no fato de que a comparação XNOR converterá um único intervalo em lógica de qualquer maneira.
fonte
Geléia ,
119 bytesExperimente online!
Programa completo.
Usa em
0
vez deC
.fonte
C (gcc), 39 bytes
Experimente online!
Emprestou e adaptou o truque printf da resposta de ErikF .
fonte
Python 3, 32 bytes
Experimente online!
Usa uma expressão de f-string para formatar
'E'
ou'CE'
preenchida à direita com'C'
a largura den+1
.fonte
Flak cerebral ,
10066 bytesExperimente online!
Usa
"
como faixa de emergência e!
como faixas normais.fonte
C #, 34 bytes
Experimente online!
fonte
05AB1E , 7 bytes
Experimente online!
0 é C e 1 é E.
Explicação
fonte
$<×TìsiR
Era assim que eu estava pensando.1I
pode jogar golfe$
.APL (Dyalog Unicode) ,
21 1716 bytesExperimente online!
Agradecemos a Erik por salvar 4 bytes e a Adám por mais um byte.
Quão?
fonte
(⍵>1)
não precisa estar entre parênteses. E você pode salvar 4 bytes com uma função tácito:(⊢×1<⊢)⌽'E',⍴∘'C'
.(-≠∘1)⌽'E',⍴∘'C'
ou=∘1⌽¯1⌽'E',⍴∘'C'
.'CE'[1(≠=∘⍳+)⎕]
Haskell ,
353332 bytes2 bytes salvos graças a Angs, 1 byte salvo graças a Lynn
Experimente online!
Haskell ,
323029 bytesO índice é zero, portanto não cumpre o desafio
Experimente online!
Haskell , 30 bytes
Isso não funciona porque a saída precisa ser uma string
Experimente online!
Aqui usamos números em vez de cordas,
2
para o corredor de emergência,1
para os carros. Podemos adicionar1
a ao final multiplicando por 10 e adicionando1
. Isso é mais barato, porque não precisamos pagar por todos os bytes para concatenação e literais de string.Seria mais barato usar em
0
vez de,1
mas precisamos de zeros à esquerda, que acabam sendo cortados.fonte
((blah)!!)
pode(!!)$blah
salvar um byte nas duas primeiras respostas.Python 3 ,
3029 bytesExperimente online!
OK, já existem muitas respostas em Python, mas acho que este é o primeiro sub-30 byter entre aqueles que ainda usam caracteres "E" e "C" em vez de números.
fonte
JavaScript (Node.js) , 28 bytes
Experimente online!
fonte
APL (Dyalog Unicode) , 16 bytes
Experimente online!
fonte
Stax , 7 bytes
Execute e depure
Isso usa os caracteres "0" e "1". Isso funciona porque quando você gira uma matriz de tamanho 1, ela não muda.
Descompactado, não jogado e comentado, parece com isso.
Execute este
fonte
JavaScript (Node.js) , 19 bytes
Experimente online!
fonte
Perl 5
-p
,272019 bytesExperimente online!
Economizou um byte usando
1
para os carros eE
para o corredor de emergência.fonte
Gelatina , 6 bytes
Exibe faixas de carro como 0 , a faixa de emergência como 1 .
Experimente online!
Como funciona
fonte
Espaço em branco ,
141104103 bytesLetras
S
(espaço),T
(tabulação) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Imprime em
1
vez deC
e em-
vez deE
.-1 byte graças a @JoKing , sugerindo o uso de
1
e em-1
vez de0
e1
.Explicação em pseudo-código:
Exemplo é executado:
Entrada:
1
Experimente online (apenas com espaços brutos, guias e novas linhas).
Para com erro: Saída não definida.
Entrada:
4
Experimente online (apenas com espaços brutos, guias e novas linhas).
Para com erro: Saída não definida.
fonte
-
abusando da impressão-1
?push_0
;print_as_integer
;push_1
;print_as_integer
parapush_-1
;print_as_integer
, mas em troca dos doispush_0
;print_as_integer
são substituídos porpush_45
;print_as_character
, ondepush_0
=SSSN
epush_45
=SSSTSTTSTN
. Além disso,push_45
é necessário adicionar um adicional, porque, para entradan=1
, agora imprimo o duplicado0
que já tinha na pilha, para que não precisei pressionar0
novamente porque o0
já estava na pilha.-
como substituir1
e1
substituir0
. Você evitaria pressionar 45 e, até onde eu sei, economizaria na impressão de um número na primeira metade do condicional, mas aumentaria ligeiramente os custos ao pressionar 1 em vez de 0. Verifique minha resposta Gol> <> para um exemplo da saída quero dizerprint_-1
vez de imprimir0
e1
, masprint_-1
é necessário um adicional fora do loop. EDIT: Foi capaz de reduzi-lo para 103 bytes , alterandosubtract_1
;if_0_jump_to_ONE
;push_-1
;print_integer
parasubtract_2
;if_negative_jump_to_ONE
;print_integer
, porque -1 já está na pilha então. Então, obrigado por -1 byte. :)AutoHotkey 32 bytes
Substitui a letra "C" por "EC", a menos que C> 1, envie "CEC" e saia do aplicativo.
C => EC
CC => CEC sai do programa. Quaisquer outros Cs serão inseridos após a saída do programa.
fonte
APL + WIN,
2016 bytes4 bytes salvos graças a Adám
Solicita o número inteiro n:
1 para o corredor de emergência o para carros.
fonte
(-2≠⍴n)⌽n←1⎕/⍕10
J , 11 bytes
Experimente online!
Com base no comentário de ngn .
🚘 e 🚔:
1&<,~/@A.'🚔',~'🚘'$~,&4
fonte
MathGolf ,
76 bytesExperimente online.
Saída
1
paraE
e0
paraC
.Explicação:
fonte