Descrição
Aqui está um elevador de hotel muito supersticioso em Xangai:
Evita o número 13, porque treze é azarado no mundo ocidental e evita o dígito 4, porque quatro é azarado em partes da Ásia. E se este hotel fosse mais alto?
Leia um número inteiro positivo mesmo n
de STDIN, representando o número de andares, e imprima como seria o layout de botão STDOUT:, -1
seguido pelos próximos n-1
números inteiros positivos que não são iguais a 13 e não contêm o dígito 4. Organize-os números em duas colunas, como na imagem acima: imprima dois números de piso por linha, separados por uma guia horizontal, para que a leitura das linhas na ordem inversa da esquerda para a direita produza a sequência em ordem crescente. (Opcionalmente, você também pode imprimir um caractere de nova linha à direita.)
Casos de teste
Para a entrada 14
, a saída deve ser como na imagem acima:
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
onde o espaço em branco em cada linha é um único caractere de tabulação horizontal.
Para a entrada 2
, você deve imprimir -1 1
.
Para a entrada 100
, você deve imprimir:
120 121
118 119
116 117
113 115
111 112
109 110
107 108
105 106
102 103
100 101
98 99
96 97
93 95
91 92
89 90
87 88
85 86
82 83
80 81
78 79
76 77
73 75
71 72
69 70
67 68
65 66
62 63
60 61
58 59
56 57
53 55
51 52
39 50
37 38
35 36
32 33
30 31
28 29
26 27
23 25
21 22
19 20
17 18
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
Objetivo
Isso é código-golfe . A resposta mais curta em bytes vence.
Respostas:
Pitão, 27 bytes
Experimente online aqui .
Obtém os
.f
primeirosQ-1
números que correspondem ao filtro!=13
e4
não estão na representação de seqüência do número. Em seguida, ele anexa-1
, divide pela metade, une cada uma por tabs (C9
) e une por novas linhas.fonte
Bash + utils comuns, 51
seq
gera números inteiros ascendentes de 1 a N com 9 dígitos extras na frente - mais do que suficiente para entrada inteira de 64 bitssed
filtra os pisos infelizes e insere-1
antes da linha 1rs
remodela em duas colunas separadas por tabulaçãosed
para após N / 2 linhastac
inverte a ordem da linha de saídafonte
sed $[$1/2]q
depoisrs
porsed $1q
antes. Eu acho que também o torna compatível com o POSIX-shell.1
não será suficiente para compensar a passagem de apenas 0,9 ^ n das entradas (os números que não contêm4
ficam cada vez mais escassos à medida que o número de dígitos aumenta). Porém, depois de ter mais de algumas centenas de milhões de andares em seu hotel, você provavelmente terá outros problemas, como manter o encanamento funcionando e organizar rotas da equipe.$[]
aritmética do shell . Eu acho que essa é uma limitação razoável na ausência de menção explícita da aritmética de precisão arbitrária na questão. Independentemente disso, agora estou prefixando um em9
vez de1
, apenas para estar do lado seguro.JavaScript ES6,
236234233210195188 bytesEconomizei um monte de bytes graças a usandfriends!
Usa o
function*
para geradores. Provavelmente, é uma maneira mais curta de fazer isso, mas foi divertido. Muito divertido. Aposto que um pouco de golfe pode ser feito. Essas coisas esquisitas de espaço em branco são guias.fonte
z=+prompt(i=x=0,l=[]);
==>z=prompt(i=x=0,l=[]);
(-1 byte).join
com guia e substituir o espaço em/-?\d+ \d+/g
com guia, remova.map(x=>x.replace(/ /,"\t"))
(deve salvar 23 bytes).filter(x=>x!=".0")
==>.filter(x=>+x)
, (-5 bytes).filter(..)
parte inteira ! Tentel.push(a);
==>+a&&l.push(a);
(-15 bytes)C, 282 bytes
Formatado:
Recursos :
Ele pode calcular até 2095984 andares, se cada andar for
19.5m
alto (incluindo teto), esse edifício será longo o suficiente para ser enrolado no equador!2095984*19.5=40871688m=~40000km=one 'lap' around the planet
.fonte
while
pode ser convertido emfor
e isso permite que você largue algumas chaves.t/=10
é um byte menor quet=t/10
. Adicione 1 a c nofor
loop para salvar alguns bytes ->a[c+1]
torna-sea[c]
, enquanto todos os outros números têm o mesmo comprimento. Eu também combinaria doisprintf
s no loop e soltaria o aparelho novamente.Julia,
134132 bytesEsse espaço em branco engraçado existe uma guia literal. Como Conor O'Brien observou, este é um byte mais curto que o normal
\t
.Ungolfed:
fonte
Python 2,
120110 bytesfonte
i-13
vez dei!=13
JavaScript, 116
122Editar 6 bytes salvos thx @Neil
Solução de matriz simples - nem mesmo usando o ES6
Tente com qualquer navegador
fonte
!/4/.test(v)
.' '
em vez de'\t'
(guia literal)Python 2 , 94 bytes
Experimente online!
Há um caractere de tabulação na string que o SE não processa (obrigado ao Sp3000 pela sugestão de usá-lo, salvando um byte).
Testa pisos
c
começando do piso-1
até que a cotan
de pisos seja atingida. Para cada andar, testa se não contém a4
nem é igual a0
ou13
. Nesse caso, o anexa à sequência do elevadors
e diminui a cotan
.Um truque com formatação de string é usado para fazer com que os dois andares por coluna apareçam na ordem correta quando anexados. Cada nova linha é preparada de
'%d\t%%d\n'
maneira que, quando dois andares são substituídos em ordem, o primeiro fica à esquerda e o segundo à direita. Por exemplo,fonte
\t
. Ah, dias antes do TIO existir.C #, 296 bytes
Ungolfed:
Truques de golfe usados:
j+""
ao invés dej.ToString()
namespace System.Collections.Generic
não apenas para que possamos acessarList<T>
, mas também use implicitamente o espaço para nomeSystem
sem qualificação adicionalusing
interior do espaço para nome para que possamos escrever emusing Linq;
vez deusing System.Linq;
.Insert(0,j)
é mais curto do que usar.Add(j)
e aplicar mais tarde.Reverse()
É lamentável que isso
using Linq;
seja necessário, pois é necessário apenas para.Zip
, mas escrevê-lo comoLinq.Enumerable.Zip()
é mais longo.fonte
Ruby 2.3,
8483 caracteres(Código de 82 caracteres + opção de linha de comando de 1 caractere)
Exemplo de execução:
Ruby,
9392 caracteres(Código de 91 caracteres + opção de linha de comando de 1 caractere)
Exemplo de execução:
fonte
Lua, 169 bytes
Bastante direto, primeiro montamos uma tabela preenchida com todos os valores dos botões. Em seguida, repetimos o processo, imprimindo dois valores por vez ou nada se o segundo valor não existir.
fonte
Mathematica, 105 bytes
Substitua
\t
por um caractere de tabulação real.fonte
Braquilog , 105 bytes
Teria sido muito mais curto com o suporte ao CLPFD, aqui eu tenho que tentar iterativamente números inteiros no primeiro sub-predicado.
A nova linha anterior
"w,?bb:2&}
é obrigatória, é a nova linha impressa entre todas as linhas.fonte
C #,
277343Isso é apenas uma função. Eu sou novo em c #. O aumento foi validar para 40-49 e incluir
using
sUngolfed, como um programa completo de execução:
Explicado
Crio duas listas e alterno entre pressioná-las, invertê-las, percorrer uma e agarrar a outra pelo índice.
fonte
if(s==1)
porif(s)
(cast automático de int para boolean?)Python 3, 155 bytes
Eu acho que ouvir, reverter e fechar automaticamente o gerador de números de piso
s()
pode ter sido muito inteligente para o seu próprio bem, mas outros já fizeram a alternativa (aparecendo dois itens por vez), sem mencionar o uso do Python 2, que economiza bytes em alguns pontos-chave.A alternativa mais curta, mas já melhorada, leva 140 bytes.
fonte
(0!=n!=13)!=('4'in str(n))
é 5 bytes menor quenot(n in(0,13)or'4'in str(n))
.Japonês, 42 bytes
Os quatro espaços devem ser um caractere de tabulação real. Experimente online!
Como funciona
fonte
Lua, 141 bytes
Ungolfed
Experimente online (você precisa clicar em 'executar' na parte superior e, em seguida, clicar no terminal na parte inferior antes de digitar input; estou procurando uma maneira melhor de testar a lua online com stdin e stdout)
fonte
05AB1E ,
252322 bytes-1 byte graças a @ ASCII-only
Experimente online!
Explicação
fonte
0 13ª
parte feia um pouco melhor. Obrigado!ʒ4å_}
para4мïê
. PS: com base no seu comentário anterior:0 13ª
poderia ter sido¾13ª
também.C ++ 11,
259258203202195194 bytesCortou 1 byte, graças à idéia de Conor O'Brien de usar a guia literal em vez de
\t
.UPD 2: reduziu 55 bytes com lógica aprimorada e abuso de vírgula.
UPD 3: outro byte desligado graças ao ceilingcat.
UPD 4: 7 bytes de desconto, cortesia de ceilingcat.
UPD 5: e outro byte desativado pelo tetocat.
É um prazer ter todas as inclusões implementadas E ainda vencer as soluções C e C #.
Ungolfed:
fonte
iostream
incluistring
, para que você possa pular a segunda inclusão para uma grande diminuição no número de bytes :)Java, 333 bytes
Adiciona números de andar permitidos a uma pilha e os retira para imprimi-los.
Eu brinquei usando um IntStream, mas com todas as importações, essa acabou sendo menor.
fonte
Scala 147
fonte
Python 3, 117 bytes
Versão modificada da postagem do python 2 para atender à especificação do python 3.
fonte
PowerShell, 106
107bytesUngolfed
Exemplo
fonte
Haskell 202 bytes
Sou iniciante em haskell…
fonte
by2
usando um nome de 1 caractere e reordenando: use sua última linha como está eb x = [x]
depois.Javascript ES6 114 bytes
Uso
f (100);
fonte
Perl 6 , 73 bytes
Assume um número par de andares, já que a declaração do problema parece assumi-lo também e pelo menos uma outra solução fornecida é interrompida por números ímpares de andares. Basta adicionar
,:partial
como segundo argumentorotor
, por mais nove bytes, para suportar números ímpares de andares.fonte
Gelatina , 20 bytes
Experimente online!
Quão?
fonte
JavaScript (ES6),
151146Fiz isso antes de eu perceber que o edc65 já havia feito um menor. Ah bem!
fonte
R , 106 bytes
Experimente online!
c("\t","\n")
\t
fonte
APL (Dyalog) , 34 bytes
Experimente online!
fonte