La description
Voici un ascenseur d'hôtel très superstitieux à Shanghai:
Il évite le nombre 13, car treize est une malchance dans le monde occidental et le chiffre 4, car quatre dans une partie de l'Asie. Et si cet hôtel était plus grand?
Lire un entier pair positif n
dans STDIN, représentant le nombre d'étages, et imprimer l'apparence de la disposition des boutons dans STDOUT:, -1
suivie n-1
des entiers positifs suivants qui ne sont pas égaux à 13 et ne contiennent pas le chiffre 4. Organisez ces numéros en deux colonnes, comme dans l'image ci-dessus: imprimez deux numéros d'étage par ligne, séparés par un onglet horizontal, de sorte que la lecture des lignes dans l'ordre inverse de gauche à droite génère la séquence dans l'ordre croissant. (Vous pouvez également éventuellement imprimer un caractère de fin de ligne suivant.)
Cas de test
Pour l'entrée 14
, la sortie devrait être comme dans l'image ci-dessus:
15 16
11 12
9 10
7 8
5 6
2 3
-1 1
où les espaces de chaque ligne sont constitués d’un seul caractère de tabulation horizontale.
Pour l'entrée 2
, vous devez imprimer -1 1
.
Pour l'entrée 100
, vous devez imprimer:
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
Objectif
C'est du code-golf . La réponse la plus courte en octets l'emporte.
Réponses:
Pyth, 27 octets
Essayez-le en ligne ici .
Obtient les
.f
premiersQ-1
nombres qui correspondent au filtre!=13
et4
ne sont pas dans la représentation sous forme de chaîne du nombre. Puis, il ajoute des-1
tabs (C9
) et des nouvelles lignes.la source
Bash + utils communs, 51
seq
génère des entiers ascendants de 1 à N avec un chiffre supplémentaire de 9 devant - plus que suffisant pour une entrée d’entier 64 bitssed
élimine les sols et inserts malchanceux-1
avant la ligne 1rs
remodèle en deux colonnes séparées par des tabulationssed
arrête après N / 2 lignestac
inverse l'ordre de la ligne de sortiela source
sed $[$1/2]q
aprèsrs
parsed $1q
avant. Je pense que cela le rend également compatible avec le shell POSIX.1
ne suffira pas pour compenser le passage de seulement 0,9 ^ n des entrées (les nombres ne contenant pas4
deviennent de moins en moins nombreux à mesure que le nombre de chiffres augmente). Mais une fois que votre hôtel a plus de quelques centaines de millions d’étages, vous avez probablement d’autres problèmes, tels que le bon fonctionnement de la plomberie et l’organisation de rotations du personnel.$[]
arithmétique de coque . Je pense que c'est une limite raisonnable en l'absence de mention explicite d'arithmétique de précision arbitraire dans la question. Quoi qu'il en soit, je préfixe maintenant un9
au lieu de1
, juste pour être sûr.JavaScript ES6,
236234233210195188 octetsJ'ai sauvé un tas d'octets grâce à usandfriends!
Utilise le
function*
pour les générateurs. Probablement un moyen plus court de faire cela, mais c'était amusant. Bien amusant. Je parie que le golf peut être fait. Ces étranges espaces blancs sont des onglets.la source
z=+prompt(i=x=0,l=[]);
==>z=prompt(i=x=0,l=[]);
(-1 octet).join
avec onglet et remplacez l'espace dans/-?\d+ \d+/g
onglet, supprimez.map(x=>x.replace(/ /,"\t"))
(devrait enregistrer 23 octets).filter(x=>x!=".0")
==>.filter(x=>+x)
, (-5 bytes).filter(..)
partie entière ! Essayezl.push(a);
==>+a&&l.push(a);
(-15 octets)C, 282 octets
Formaté:
Traits :
Il peut calculer jusqu'à 2095984 étages, si chaque étage est
19.5m
haut (plafond compris), alors ce bâtiment est suffisamment long pour être enroulé autour de l'équateur!2095984*19.5=40871688m=~40000km=one 'lap' around the planet
.la source
while
peut être converti enfor
et cela vous permet de déposer des accolades.t/=10
est un octet plus court quet=t/10
. Ajoutez 1 à c dans votrefor
boucle pour enregistrer quelques octets ->a[c+1]
devienta[c]
, alors que tous les autres nombres ont la même longueur. Je combinerais également deuxprintf
s dans la boucle et laisserais tomber les accolades.Julia,
134132 octetsCet espace blanc amusant contient un onglet littéral. Comme l'a noté Conor O'Brien, il s'agit d'un octet plus court que le faire
\t
.Ungolfed:
la source
Python 2,
120 à110 octetsla source
i-13
au lieu dei!=13
JavaScript, 116
122Modifier 6 octets enregistrés @Neil
Solution de baie simple - sans même utiliser ES6
Essayez avec n'importe quel navigateur
la source
!/4/.test(v)
.' '
au lieu de'\t'
(onglet littéral)Python 2 , 94 octets
Essayez-le en ligne!
Il y a un caractère de tabulation dans la chaîne que SE ne rend pas (merci à Sp3000 de suggérer de l'utiliser, en sauvegardant un octet).
Tester les sols à
c
partir du sol-1
jusqu’àn
atteindre le quota de sols. Pour chaque étage, teste qu'il ne contient pas4
ni ni égal0
ni13
. Si tel est le cas, l'ajoute à la chaîne d'élévateurs
et décrémente le quotan
.Une astuce avec un formatage de chaîne est utilisée pour que les deux étages par colonne apparaissent dans le bon ordre une fois ajoutés. Chaque nouvelle ligne est préparée comme
'%d\t%%d\n'
, de sorte que lorsque deux étages sont substitués dans l’ordre, le premier est à gauche et le second à droite. Par exemple,la source
\t
. Ah, les jours avant TIO existaient.C #, 296 octets
Ungolfed:
Astuces de golf utilisées:
j+""
au lieu dej.ToString()
namespace System.Collections.Generic
non seulement pour que nous puissions accéderList<T>
, mais également implicitement pour utiliser l'espace de nomsSystem
sans autre qualificationusing
intérieur du nom pour pouvoir écrireusing Linq;
au lieu deusing System.Linq;
.Insert(0,j)
est plus courte que l'utilisation.Add(j)
et l'application ultérieure.Reverse()
Il est regrettable que cela
using Linq;
soit nécessaire, car il n’est nécessaire que pour.Zip
, mais l’écrire tel quelLinq.Enumerable.Zip()
est plus long.la source
Ruby 2.3,
8483 caractères(Option de ligne de commande code 82 caractères + 1 caractères)
Échantillon échantillon:
Ruby,
9392 caractères(Code de 91 caractères + option de ligne de commande de 1 caractère)
Échantillon échantillon:
la source
Lua, 169 octets
De manière assez simple, nous assemblons d’abord une table contenant toutes les valeurs des boutons. Ensuite, nous le parcourons en arrière, en imprimant deux valeurs à la fois, ou rien si la deuxième valeur n’existe pas.
la source
Mathematica, 105 octets
Remplacez le
\t
par un caractère de tabulation réel.la source
Brachylog , 105 octets
Cela aurait été beaucoup plus court avec le support CLPFD, ici je dois essayer de manière itérative des entiers dans le premier sous-prédicat.
La nouvelle ligne avant
"w,?bb:2&}
est obligatoire. Il s'agit de la nouvelle ligne imprimée entre chaque ligne.la source
C #,
277343C'est comme une fonction seulement. Je suis nouveau en C #. Augmentation était de rendre valable pour 40-49, et notamment
using
sUngolfed, en tant que programme complet en cours:
A expliqué
Je crée deux listes et je les alterne, les inversant, les parcourant l'une après l'autre et prenant l'autre par index.
la source
if(s==1)
parif(s)
(Python 3, 155 octets
Je pense que l'écoute, l'inversion et l'auto-compression du générateur de numéros d'étage
s()
ont peut-être été trop astucieux pour son propre bien, mais d'autres ont déjà fait l'alternative (sauter deux éléments à la fois), sans parler de l'utilisation de Python 2 qui économise des octets. sur certains points clés.L'alternative plus courte, mais déjà faite, prend 140 octets.
la source
(0!=n!=13)!=('4'in str(n))
5 octets de moins quenot(n in(0,13)or'4'in str(n))
.Japt, 42 octets
Les quatre espaces doivent être un caractère de tabulation réel. Essayez-le en ligne!
Comment ça fonctionne
la source
Lua, 141 octets
Ungolfed
Essayez-le en ligne (vous devez cliquer sur «exécuter» en haut, puis sur le terminal en bas avant de taper le texte saisi; je cherche un meilleur moyen de tester lua en ligne avec stdin et stdout)
la source
05AB1E ,
252322 octets-1 octet grâce à @ ASCII uniquement
Essayez-le en ligne!
Explication
la source
0 13ª
partie laide . Merci!ʒ4å_}
à4мïê
. PS: sur la base de votre commentaire précédent:0 13ª
aurait pu l'être¾13ª
aussi.C ++ 11,
259258203202195194 octetsRéduit d'un octet, grâce à l'idée de Conor O'Brien d'utiliser un onglet littéral au lieu de
\t
.UPD 2: réduction de 55 octets avec une logique améliorée et un abus de virgule.
UPD 3: un autre octet désactivé grâce à ceilingcat.
UPD 4: 7 octets de courtoisie de ceilingcat.
UPD 5: et un autre octet désactivé par ceilingcat.
Heureux d'avoir tout inclus en place ET de battre les solutions C et C #.
Ungolfed:
la source
iostream
comprendstring
, de sorte que vous pouvez ignorer le deuxième inclure pour une forte diminution du nombre de byt :)Java, 333 octets
Ajoute les numéros d'étage autorisés à une pile, puis les retire pour les imprimer.
J'ai joué avec IntStream, mais avec toutes les importations, celle-ci est devenue plus petite.
la source
Scala 147
la source
Python 3, 117 octets
Version modifiée de la publication python 2 pour s’adapter à la spécification Python 3.
la source
PowerShell, 106
107octetsUngolfed
Exemple
la source
Haskell 202 octets
Je suis débutant en haskell…
la source
by2
en utilisant un nom à 1 caractère et en le réorganisant: utilisez votre dernière ligne telle quelle, puisb x = [x]
après.Javascript ES6 114 octets
Usage
f (100);
la source
Perl 6 , 73 octets
Suppose un nombre pair d’étages, puisque l’énoncé du problème semble le supposer également et qu’au moins une autre solution proposée rompt avec un nombre impair d’étages. Ajoutez simplement
,:partial
un deuxième argument àrotor
, pour neuf octets supplémentaires, afin de prendre en charge un nombre impair d'étages.la source
Gelée , 20 octets
Essayez-le en ligne!
Comment?
la source
JavaScript (ES6),
151146A fait cela avant que je réalise que edc65 en avait déjà fait un plus court. Tant pis!
la source
R , 106 octets
Essayez-le en ligne!
c("\t","\n")
\t
la source
APL (Dyalog) , 34 octets
Essayez-le en ligne!
la source