Soit une chaîne de longueur N de signes inférieur et supérieur ( <
, >
), insérez les nombres entiers de 0 à N au début et à la fin et entre chaque paire de signes de sorte que toutes les inégalités soient satisfaites. Affiche la chaîne résultante. S'il existe plusieurs sorties valides, indiquez-en une (et une seule).
Par exemple
<<><><<
a 7 caractères donc tous les nombres de 0 à 7 inclus doivent être insérés. Une sortie valide est
2<3<4>1<5>0<6<7
parce que toutes les inégalités prises un à la fois
2<3
3<4
4>1
1<5
5>0
0<6
6<7
sont vrai.
Si vous le souhaitez, la sortie peut comporter des espaces entourant les signes, par exemple 2 < 3 < 4 > 1 < 5 > 0 < 6 < 7
.
Le code le plus court en octets gagne.
Cas de test
La première ligne après une ligne vide correspond à l'entrée et les lignes suivantes sont chacune des exemples de sortie valides.
[empty string]
0
<
0<1
>
1>0
<<
0<1<2
<>
1<2>0
><
1>0<2
2>0<1
>>
2>1>0
<<<
0<1<2<3
><>
1>0<3>2
>><
3>2>0<1
3>1>0<2
2>1>0<3
>>>
3>2>1>0
>>><<<
3>2>1>0<4<5<6
6>3>1>0<2<4<5
4>2>1>0<3<5<6
4>3>1>0<2<5<6
<<><><<
2<3<4>1<5>0<6<7
>><><>>
7>6>0<5>1<4>3>2
<<<<<<<<<<<<<<
0<1<2<3<4<5<6<7<8<9<10<11<12<13<14
>><<<<><>><><<
6>5>4<7<8<9<10>3<11>2>1<12>0<13<14
14>5>4<7<8<9<10>3<11>2>1<12>0<13<6
la source
Réponses:
Rétine , 20 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne! (La première ligne active une suite de tests séparée par saut de ligne.)
Explication
Un moyen simple de trouver une permutation valide consiste à commencer par insérer les nombres de
0
àN
dans l'ordre, puis à inverser les nombres entourant chaque sous-chaîne de>
s. Prenons<><<>>><<
comme exemple:Ces deux tâches sont relativement simples dans Retina, même si nous ne pouvons vraiment travailler qu'avec des chaînes. Nous pouvons enregistrer un octet supplémentaire en insérant les nombres de
N
bas en bas0
et en inversant les sections environnantes<
, mais le principe est le même.Étape 1: substitution
Nous commençons par insérer la longueur de
$'
(le suffixe, c'est-à-dire tout ce qui suit le match) dans toutes les positions possibles de l'entrée. Cela insère les nombres deN
bas en0
.Étape 2: Split
Nous
>
séparons les entrées en lignes distinctes. Chaque ligne est donc un numéro individuel ou une liste de nombres associés<
.Étape 3: Trier
Dans chaque ligne (
%
), nous trions (O
) les nombres (\d#
) par leur valeur numérique (#
). Puisque nous avons inséré le nombre dans l'ordre numérique inverse, cela les inverse.Étape 4: substitution
Nous reconvertissons les sauts de ligne
>
afin de tout relier en une seule ligne. C'est ça.En passant, j'ai voulu ajouter un moyen de l'appliquer
%
à d'autres délimiteurs que les sauts de ligne. Si j'avais déjà fait cela, cette soumission aurait été de 14 octets, car alors les trois dernières étapes auraient été réduites à une seule:la source
> <> ,
464335 + 4 pour-s=
= 39 octetsCeci est une implémentation de l'algorithme de xnor dans> <>.
Il prend la chaîne d'entrée sur la pile (
-s
indicateur avec l'interpréteur standard).Vous pouvez l'essayer sur l' interprète en ligne .
la source
> <> , 26 + 4 = 30 octets
Essayez-le en ligne! +4 octets pour le
-s=
drapeau - si cela vous-s
convient (cela voudrait dire que le drapeau devra être entièrement supprimé pour une entrée vide), il s'agira plutôt de +3.Suppose que l'entrée STDIN est vide, ce qui
i
produit -1 (ce qui est le cas avec EOF). Le programme fait une erreur en essayant d’imprimer ce -1 en tant que caractère.Utilise l'approche max-of-nums-so-far-for-
>
, min-num-of-nums-so-far-for-<
.Un programme qui se termine proprement et ne part pas de l'hypothèse à propos de STDIN est de 4 octets supplémentaires:
la source
CJam , 16 octets
Essayez-le en ligne!
Un port de ma rétine répond .
Explication
la source
Perl, 29 octets
Comprend +2 pour
-lp
Exécuter avec une entrée sur STDIN, par exemple
Sortie:
order.pl
:Explication
Avoir deux compteurs, max commençant par la longueur de la chaîne, min commençant par 0. Puis à chaque limite (y compris le début et la fin de la chaîne) s'il se trouve juste avant une valeur
<
minimum et augmenter de 1, sinon placer le maximum et diminuer par 1 (à la fin de la chaîne, le compteur que vous prenez n'a pas d'importance, car ils sont identiques)la source
s{}{/\G/...}
Je n'ai jamais vu ça auparavant, c'est génial.Python 2, 67 octets
Une fonction récursive. Chaque opérateur répond à son tour en mettant la plus petite valeur non utilisée
x
pourx<
et le plus grand pourx>
. La plus petite valeur inutilisée est stockéei
et mise à jour, et la plus grande valeur inutilisée est déduite dei
la longueur restante.la source
(s>'=')
au lieu de(s>='>')
sauvegarder un octet?<
et ce>
ne sont pas des points de code consécutifs.=
entre<
et>
.Python 2,
163137 octetsMélange les chiffres jusqu'à ce que la déclaration soit évaluée à
True
.Essayez-le
la source
APL, 33 octets
⍋⍋
est inhabituellement utile.Explication
la source
⍋⍋
)?⍋
is grade up, qui renvoie les indicateurs dans l'ordre de tri. En le faisant deux fois, vous obtenez1
où le nombre le plus petit était,2
où le nombre le plus petit suivant était, ect.JavaScript (ES6),
7456 octetsCommence avec l'ensemble des nombres
0...N
. À chaque étape, prend simplement le plus grand (l
) ou le plus petit (j
) des nombres restants; le nombre suivant doit par définition être inférieur ou supérieur à celui. Edit: Sauvegardé un énorme 18 octets grâce à @Arnauld.la source
replace
? Peuts=>s.replace(/./g,c=>(c<'>'?j++:l--)+c,j=0,l=s.length)+j
replace
) jusqu'à 74 octets ...Pyth - 19 octets
Hourra pour la comparaison chaînage!
Ne fonctionne pas en ligne car de sécurité eval.
la source
2sable , 20 octets
Explication
Essayez-le en ligne!
Pour N <10, cela aurait pu être 14 octets:
la source
C #,
102 à99 octetsUngolfed:
la source
r = r +
partie en une assignation composée, économiser quelques octets?r+
partie du côté droit indique au compilateur que le tout est une chaîne, donc la représentation de chaîne dec
est utilisée. Si je l'utilisaisr+=
, la?:
partie serait évaluée à unint
, la valeur ordinale dec
serait ajoutée à celle-ci et alors seulement elle serait convertie en sa représentation sous forme de chaîne.Java 8,
126 à125 octetsJe ne pense pas que cela fonctionne même hehe
Programme de test non-golfé
la source
.replaceAll
pour.replace
et enlevez les parenthèses autour(c+"")
de sauver 5 octets.Jelly ,
27 1412 bytesPort de la solution CJam de @Martin Enders
-2 octets grâce à @Dennis
Testez-le sur TryItOnline
Comment?
La méthode précédente était intéressante du point de vue mathématique, mais pas si géniale ...
Ceci utilise le système de base factorielle pour trouver un index des permutations de [0, N] qui satisfera l’équation.
la source
U
vectorise, de sorte que vous n'avez pas besoin€
.żJ0;
enregistre un autre octet.Clojure,
152132126 octetsJ'ai économisé un bon nombre d'octets en éliminant autant d'espaces que possible. J'ai réalisé que les espaces ne sont pas nécessaires pour séparer une parenthèse d'un autre personnage.
Fondamentalement, un portage Clojure de la réponse de @ Scepheo. Fonctionne de manière identique.
Ces
recur
appels sont tueurs!Je suppose que j'aurais pu utiliser des atomes pour le nettoyer.Lesswap!
appels nécessaires pour utiliser les atomes ajoutés au compte: /Merci à @amalloy de m'avoir économisé quelques octets.
Ungolfed:
la source
loop
liaison, avants
et aprèsa
. Vous pouvez également vous raser un peu en remplaçant l'if
arbre aveccase
:(case c \< (recur ...) nil (str ...) (recur ...))
. Et bien sûr,cr
pourrait être un nom plus court.Haskell, 162 octets
C'est friggin 'long.
la source
Perl (107 + 1 pour -p) 108
Algorithme volé à la réponse de Martin Ender ♦
la source
Ruby, 135 octets
Remarque: la complexité temporelle est grande (O (n!)).
la source
Python 2,
176172 octetsCe n'est pas très court comparé aux autres, mais je suis heureux de l'avoir résolu si rapidement.
Essayez-le en ligne
Ungolfed:
Essayez-le en ligne
la source
zip
pop
), mais c'est un peu plus court. SiN<10
, je pouvais faire un stringing plus court.PHP, 190 octets
mélange aléatoire jusqu'à ce qu'une solution valide existe
381 octets ont toutes les solutions et en choisissent une
la source