Descripción
Aquí hay un ascensor de hotel muy supersticioso en Shanghai:
Evita el número 13, porque trece no tiene suerte en el mundo occidental, y evita el dígito 4, porque cuatro tiene mala suerte en partes de Asia. ¿Y si este hotel fuera más alto?
Lea un entero par positivo n
de STDIN, que representa el número de pisos, e imprima cómo se vería el diseño del botón para STDOUT:, -1
seguido de los siguientes n-1
enteros positivos que no son iguales a 13 y no contienen el dígito 4. Organice estos números en dos columnas, como en la imagen de arriba: imprima dos números de piso por línea, separados por una pestaña horizontal, de modo que leer las líneas en orden inverso de izquierda a derecha produce la secuencia en orden ascendente. (Opcionalmente, también puede imprimir un carácter de nueva línea al final).
Casos de prueba
Para la entrada 14
, la salida debe ser como en la imagen de arriba:
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
donde el espacio en blanco en cada línea es un solo carácter de tabulación horizontal.
Para la entrada 2
, debe imprimir -1 1
.
Para la entrada 100
, debe 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
Gol
Este es el código de golf . La respuesta más corta en bytes gana.
Respuestas:
Pyth, 27 bytes
Pruébelo en línea aquí .
Obtiene los
.f
primerosQ-1
números que coinciden con el filtro!=13
y4
no está en la representación de cadena del número. Luego se antepone-1
, se corta por la mitad, se une a cada uno mediante pestañas (C9
) y se une mediante nuevas líneas.fuente
Bash + utilidades comunes, 51
seq
genera enteros ascendentes de 1 a N con 9 dígitos adicionales al frente, más que suficiente para la entrada de enteros de 64 bitssed
filtra los pisos desafortunados e inserta-1
antes de la línea 1rs
se reforma en dos columnas separadas por tabuladoressed
se detiene después de N / 2 líneastac
invierte el orden de la línea de salidafuente
sed $[$1/2]q
afterrs
con elsed $1q
anterior. Creo que eso también lo hace compatible con POSIX-shell.1
no será suficiente para compensar el paso de solo 0.9 ^ n de las entradas (los números que no contienen se4
vuelven más dispersos y más dispersos a medida que aumenta el número de dígitos). Pero una vez que tenga más de unos pocos cientos de millones de pisos en su hotel, es probable que tenga otros problemas, como mantener funcionando la plomería y organizar las rotaciones del personal.$[]
aritmética del shell . Creo que esta es una limitación razonable en ausencia de una mención explícita de la aritmética de precisión arbitraria en la pregunta. De todos modos, ahora prefiero un en9
lugar de1
, solo para estar seguro.JavaScript ES6,
236234233210195188 bytes¡Ahorré un montón 'a bytes gracias a usandfriends!
Utiliza
function*
para generadores. Probablemente una forma más corta de hacer esto, pero fue divertido. Muy divertido. Apuesto a que se puede jugar al golf. Esas cosas extrañas en el espacio en blanco son pestañas.fuente
z=+prompt(i=x=0,l=[]);
==>z=prompt(i=x=0,l=[]);
(-1 byte).join
con tabulador y reemplazar el espacio/-?\d+ \d+/g
con tabulador, eliminar.map(x=>x.replace(/ /,"\t"))
(debería ahorrar 23 bytes).filter(x=>x!=".0")
==>.filter(x=>+x)
, (-5 bytes).filter(..)
parte! Pruebal.push(a);
==>+a&&l.push(a);
(-15 bytes)C, 282 bytes
Formateado:
Caracteristicas :
Puede calcular hasta 2095984 pisos, si cada piso es
19.5m
alto (incluido el techo), ¡este edificio es lo suficientemente largo como para envolverse alrededor del ecuador!2095984*19.5=40871688m=~40000km=one 'lap' around the planet
.fuente
while
se puede convertirfor
y esto le permite soltar algunas llaves.t/=10
es un byte más corto quet=t/10
. Agregue 1 a c en sufor
bucle para guardar un par de bytes -> sea[c+1]
conviertea[c]
, mientras que todos los demás números tienen la misma longitud. También combinaría dosprintf
s en el bucle y soltaba llaves nuevamente.Julia,
134132 bytesEse espacio en blanco divertido allí es una pestaña literal. Como señaló Conor O'Brien, este es un byte más corto que hacerlo
\t
.Sin golf:
fuente
Python 2,
120110 bytesfuente
i-13
lugar dei!=13
JavaScript, 116
122Editar guardado 6 bytes thx @Neil
Solución de matriz simple: ni siquiera usando ES6
Probar con cualquier navegador
fuente
!/4/.test(v)
.' '
lugar de'\t'
(pestaña literal)Python 2 , 94 bytes
Pruébalo en línea!
Hay un carácter de tabulación en la cadena que SE no representa (gracias a Sp3000 por sugerir usarlo, guardar un byte).
Prueba los pisos
c
desde el piso-1
hasta quen
se alcanza la cuota de pisos. Para cada piso, comprueba que no contiene a4
ni igual0
o13
. Si es así, lo antepone a la cadena del elevadors
y disminuye la cuotan
.Se utiliza un truco con formato de cadena para que los dos pisos por columna aparezcan en el orden correcto cuando se anteponen. Cada nueva línea se prepara como
'%d\t%%d\n'
, de modo que cuando se sustituyen dos pisos en orden, el primero está a la izquierda y el segundo a la derecha. Por ejemplo,fuente
\t
. Ah, los días antes de que existiera TIO.C #, 296 bytes
Sin golf:
Trucos de golf utilizados:
j+""
en lugar dej.ToString()
namespace System.Collections.Generic
no solo para que podamos accederList<T>
, sino que también use implícitamente el espacio de nombresSystem
sin calificación adicionalusing
interior del espacio de nombres para que podamos escribir enusing Linq;
lugar deusing System.Linq;
.Insert(0,j)
es más corto que usar.Add(j)
y luego aplicar.Reverse()
Es desafortunado que
using Linq;
sea necesario, ya que es necesario solo para.Zip
, pero escribirloLinq.Enumerable.Zip()
es más largo.fuente
Ruby 2.3,
8483 caracteres(Código de 82 caracteres + opción de línea de comando de 1 carácter)
Ejecución de muestra:
Ruby,
9392 caracteres(Código de 91 caracteres + opción de línea de comando de 1 carácter)
Ejecución de muestra:
fuente
Lua, 169 bytes
Bastante sencillo, primero armamos una tabla llena con todos los valores de los botones. Luego lo iteramos hacia atrás, imprimiendo dos valores a la vez, o nada si el segundo valor no existe.
fuente
Mathematica, 105 bytes
Reemplace el
\t
con un carácter de tabulación real.fuente
Brachylog , 105 bytes
Hubiera sido mucho más corto con el soporte CLPFD, aquí tengo que probar iterativamente enteros en el primer sub-predicado.
La nueva línea anterior
"w,?bb:2&}
es obligatoria, esta es la nueva línea que se imprime entre cada fila.fuente
C #,
277343Esto es solo una función. Soy nuevo en C #. El aumento debía ser válido para 40-49, y para incluir
using
sUngolfed, como un programa completo en ejecución:
Explicado
Creo dos listas y alterno entre presionarlas, invertirlas, recorrer una y tomar la otra por índice.
fuente
if(s==1)
porif(s)
(Python 3, 155 bytes
Creo que enumerar, invertir y autocomprimir el generador de números de piso
s()
puede haber sido demasiado inteligente por su propio bien, pero otros ya han hecho la alternativa (reventar dos elementos a la vez), sin mencionar el uso de Python 2 que ahorra bytes en algunos puntos claveLa alternativa más corta, pero ya hecha, toma 140 bytes.
fuente
(0!=n!=13)!=('4'in str(n))
es 5 bytes más corto quenot(n in(0,13)or'4'in str(n))
.Japt, 42 bytes
Los cuatro espacios deben ser un tabulador real. Pruébalo en línea!
Cómo funciona
fuente
Lua, 141 bytes
Sin golf
Pruébelo en línea (debe hacer clic en 'ejecutar' en la parte superior y luego hacer clic en el terminal en la parte inferior antes de escribir input; estoy buscando una mejor manera de probar lua en línea con stdin y stdout)
fuente
05AB1E ,
252322 bytes-1 byte gracias a @ ASCII-only
Pruébalo en línea!
Explicación
fuente
0 13ª
un poco esa parte fea . ¡Gracias!ʒ4å_}
a4мïê
. PD: según tu comentario anterior:0 13ª
podría haber sido¾13ª
así.C ++ 11,
259258203202195194 bytesRecortó 1 byte, gracias a la idea de Conor O'Brien de usar la pestaña literal en lugar de
\t
.UPD 2: recortó 55 bytes con lógica mejorada y abuso de comas.
UPD 3: otro byte desactivado gracias a ceilingcat.
UPD 4: 7 bytes de cortesía de ceilingcat.
UPD 5: y otro byte desactivado por ceilingcat.
Feliz de tener todo incluido y aún superar las soluciones C y C #.
Sin golf:
fuente
iostream
incluyestring
, por lo que puede omitir la segunda inclusión para una gran disminución en el bytecount :)Java, 333 bytes
Agrega los números de piso permitidos a una pila y luego los retira para imprimirlos.
Jugué usando un IntStream, pero con todas las importaciones, este terminó siendo más pequeño.
fuente
Scala 147
fuente
Python 3, 117 bytes
Versión modificada de la publicación de Python 2 para ajustarse a la especificación de Python 3.
fuente
PowerShell,
106107bytesSin golf
Ejemplo
fuente
Haskell 202 bytes
Soy un principiante haskell ...
fuente
by2
utilizando un nombre de 1 carácter y reordenando: use su última línea tal cual, luegob x = [x]
.Javascript ES6 114 bytes
Uso
f (100);
fuente
Perl 6 , 73 bytes
Asume un número par de pisos, ya que la declaración del problema parece asumirlo también y al menos otra solución proporcionada se rompe para un número impar de pisos. Simplemente agregue
,:partial
como segundo argumentorotor
, para nueve bytes más, para admitir números impares de pisos.fuente
Jalea , 20 bytes
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6),
151146Hice esto antes de darme cuenta de que edc65 ya había hecho uno más corto. ¡Oh bien!
fuente
R , 106 bytes
Pruébalo en línea!
c("\t","\n")
\t
fuente
APL (Dyalog) , 34 bytes
Pruébalo en línea!
fuente