Il est assez simple de n
créer, à partir 0
d’ un nombre , une plage allant de à n-1
. En fait, de nombreuses langues fournissent cette opération de manière intégrée.
Le programme CJam suivant lit un entier, puis imprime une telle plage ( essayez-le en ligne! ):
ri,
Notez qu'il imprime des nombres sans séparateur.
Le défi
Votre tâche consiste à inverser ce processus. Vous devriez écrire un programme qui, avec une chaîne représentant une plage, renvoie le nombre utilisé pour produire cette plage.
Caractéristiques
- Les nombres sont donnés sans séparateur.
- Vous pouvez supposer que la chaîne forme une plage valide.
- Vous pouvez utiliser l'indexation 0 ou 1 pour votre plage.
- Vous pouvez supposer qu'une sortie correcte ne dépassera jamais 32 767 (une entrée valide n'aura jamais une longueur supérieure à 152 725).
- Vous pouvez supposer qu'une sortie correcte sera toujours positive (vous n'aurez donc pas à gérer 0 ou négatif).
C'est du code-golf , donc la réponse concurrente la plus courte (mesurée en octets) est gagnante.
Cas de test
0 indexé:
0123 -> 4
0 -> 1
0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 101
1 indexé:
1234 -> 4
1 -> 1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 -> 100
Réponses:
Prolog (SWI) ,
91 à80 octets0 indexé.
Nouvelles lignes ajoutées pour plus de lisibilité.
Essayez-le en ligne!
la source
Husk , 5 octets
Essayez-le en ligne!
Seulement des lettres!
Prend l'entrée en tant que chaîne, le résultat est 1-indexé.
Explication
la source
05AB1E ,
7 à6 octets1 indexé.
Essayez-le en ligne! ou en tant que suite de tests
Explication
la source
0
quelle que soit l'entrée: tio.run/##MzBNTDJM/f8/3efcdi/PbLv//5UMjYxNTM3MLSwNDZQA[NÝJQ#]N
C'était mon idée, mais c'est mieux parce que ça marche""
.Java 8,
6659 octets0 indexé
-7 octets grâce à @ PunPun1000 .
J'ai l'impression que cela peut être raccourci en ne vérifiant que la longueur de l'entrée, puisque nous pouvons supposer que l'entrée est toujours valide. Toujours en train de comprendre cela.Impossible de comprendre cela, et cela coûtera probablement trop d'octets en Java pour être utile (de même pour le retour d'une sous-chaîne à la fin d'une entrée à 1 index).Explication:
Essayez ici.
la source
Brachylog ,
97 octetsEssayez-le en ligne!
0 indexé.
Explication
Ici, nous passons l'entrée par la variable de sortie et accédons au résultat par la variable d'entrée.
la source
Ly , 29 octets
Essayez-le en ligne!
Je ne peux pas croire que cela a fonctionné aussi bien que cela a été ...
la source
Japt , 8 octets
Commencer à se familiariser avec les méthodes de fonction dans Japt.
0 indexé. Peut prendre les entrées sous forme de chaîne, un entier ou un tableau contenant 0 ou 1 élément.
Essaye-le
Explication
Entrée implicite de chaîne
U
.Récupère le premier entier
>=0
qui retourne vrai lorsqu'il est passé par une fonction qui ...Génère un tableau d'entiers de
0
1 à 1 inférieur à l'entier actuel ...Se joint à une chaîne ...
Vérifie l'égalité de cette chaîne avec
U
.Sortie implicite de l'entier résultant.
Alternative, 8 octets
Essaye-le
la source
Charbon de bois , 13 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
la source
Haskell,
40 à37 octetsFonction qui inverse les plages basées sur zéro.
Merci à Laikoni d'avoir économisé 3 octets!
Essayez-le en ligne.
la source
f s=[n|n<-[0..],(show=<<[0..n])>s]!!0
.|m<-n+1=s!m
.Rétine , 30 octets
Ajoute récursivement un point-virgule après chaque nombre, puis compte le nombre de points-virgules
Essayez-le en ligne!
la source
JavaScript (ES6),
3231 octetsEnregistré 1 octet grâce à Challenger5
Cas de test
Afficher l'extrait de code
la source
f(payload_param)()
ou mêmef(payload_param)(some_constant)
. (Incidemment, je ne suis pas sûr que cela fonctionnerait dans ce cas particulier car j'ai besoin des deuxr
etn
d'être initialisé.)Mathematica, 46 octets
1 indexé
contribution
la source
Ruby ,
515046 octets(Ceci est mon premier programme Ruby, il doit donc être facile de jouer au golf plus loin)
-4 octets grâce à @Nnnes
la source
.index(gets)
=>.index gets
. Vous pouvez utiliser4e4
au lieu de8**5
, bien que cela le ralentisse encore. Généralement, c’est bien, et sauve souvent quelques octets, d’utiliser des lambdas anonymes pour les réponses à Ruby: Essayez-le en ligne! (J'ai changé la limite à 100 pour qu'elle ne s'éteigne pas.)Python 2 , 43 octets
Essayez-le en ligne!
Python 2 , 43 octets
Essayez-le en ligne!
Python , 46 octets
Essayez-le en ligne!
Une stratégie différente Prend un nombre de caractères à partir de la fin égal à la longueur du plus grand nombre de
0
's dans s.Python , 46 octets
Essayez-le en ligne!
Version récursive de ce qui précède.
la source
... i*'0'in s[1:] for ...
ou quelque chose comme ça?R , 47 octets
Essayez-le en ligne!
1 indexé
la source
"if"
au lieu deifelse
nchar
comme vous le souhaiteriez pour les nombres. Cependant, vous devez gérer l’impression de votre sortie, car elle ne le serait pas lorsqu’elle serait exécutée en tant que programme complet.n=nchar(scan());cat(which(cumsum(nchar(1:n))==n))
APL (Dyalog) ,
17 à11 octets-6 octets grâce à ngn .
Essayez-le en ligne!
⍳⊂
trouver le ɩ ndex de l'argument entier dans{
…}
Le résultat de cette fonction anonyme:≢
longueur de l'argument⍳
ɩ ntegers jusqu'à ce⍕¨
format (stringify) chaque,\
concaténation cumulative de ceuxla source
{,\⍕¨⍳≢⍵}⍳⊂
(11 caractères)Perl 5 , 19 octets
Code de 18 octets + 1 pour
-p
.Utilise l'indexation basée sur 1. -7 octets grâce à @ nwellnhof « s beaucoup meilleure approche!
Essayez-le en ligne!
Explication
$\
est une variable spéciale qui estprint
édité automatiquement après chaque instruction. Ainsi, en utilisant celle-ci pour stocker notre numéro, nous n'avons pas besoin de la mettre à jour$_
(elle est automatiquement imprimée dans le cadre de la fonctionnalité de l'-p
indicateur) pour contenir la sortie souhaitée. Ensuite, pendant que l'entrée commence par$\
, supprimez-la etredo
le programme, qui l'incrémente$\
et la remplace à nouveau. Quand il ne trouve plus le numéro au début de la chaîne, c'est fini! Enfin, décrémentez$\
nous avons le dernier numéro de la plage.la source
$i++while s/$i\B//
(18 + 1 octets)?Python 2 , 46 octets
0 indexé
Essayez-le en ligne!
la source
CJam , 16 octets
Essayez-le en ligne!
Alternative 16 octets
Essayez-le en ligne!
la source
CJam , 13 octets
Tant de virgules ...
Essayez-le en ligne!
Explication
la source
Perl 6 ,
30 2827 octetsEssaye-le
Essaye-le
Essaye-le
Étendu:
'',0...*
produit une séquence infinie de valeurs''
,0
,1
,2
,3
...[\~] '',0...*
produit une séquence infinie de toutes les entrées possiblesNotez que ce code ne s’arrêtera jamais si vous lui donnez une entrée invalide.
la source
Pyth ,
11 à10 octets1 indexé.
Essayez-le ici
Si la chaîne vide peut être ignorée, cela peut être réduit à 6 octets :
-1 octet grâce à @Mnemonic
la source
?QfqQjkUT)1
peut le faire en 11 également, mais j’ai l’impression que certaines commandes peuvent jouer au golf d’un octet. Des idées?jk
place de s`m.CJam,
141211 octetsEssayez-le en ligne
la source
Dyvil ,
4238 octetsMême algorithme que cette réponse Java , sauf qu'il (ab) utilise certaines des spécialités syntaxiques de Dyvil.
Explication:
4
en utilisant une expression d'accès d'accolade au lieu d'une variable pour l'accumulateurla source
MATL , 14 octets
1 indexé.
Essayez-le en ligne!
Explication
la source
C # , 72 octets
Les données
String
i
Le tableau int à déchiffrerInt32
Le nombre utilisé pour faire le tableauGolfé
Ungolfed
Ungolfed lisible
Code complet
Communiqués
72 bytes
- Solution initiale.Remarques
la source
i=>{int c,p=c=0;for(;p<i.Length;)p+=(c+++"").Length;return c;}
62 octetsSOGL V0.12 ,
11109 octets1 indexé.
Essayez-le ici!
Explication:
..ou 7 octets sans la casse vide
Essayez-le ici!
la source
Aceto ,
2725 octetsIndice basé sur 1.
Nous
r
lisons l'entrée et l'M
emorisons (et l'yL
retournons directement ), puis nous le nions (!
; conduisant à une valeur de vérité uniquement pour une chaîne vide). Si cette valeur est vérité (`
), nous sautons à la fin (;
), où nousp
imprimons le zéro implicite.Sinon, nous incrémentons la valeur actuelle de la pile (initialement un zéro), la dupliquons et plaçons une copie sur la pile à droite, tout en y déplaçant également (
Id]
). Nous construisons ensuite une plage décroissante (z
), joignons la pile en tant que chaîne (¥
) et déplaçons à nouveau la valeur (et nous) sur la pile d'origine ([
). NousL
examinons la valeur que nous avons mémorisée précédemment (l'entrée) et la comparons avec cette chaîne. Si égal, nous sautons à la fin, où nous imprimons la valeur actuelle du "compteur" (=`;
).Sinon, beaucoup d’espace vide est parcouru jusqu’à ce que la courbe de Hilbert atteigne
<
l’adresse IPI
, ce qui augmente l’ adresse IP , incrémente le compteur et effectue un nouveau test.la source
Empilés , 23 octets
Essayez-le en ligne!
Fondamentalement, s’incrémente
0
jusqu’à ce que la plage allant de0
à soit identique à l’entrée, vérifiant d’abord l’égalité.la source
Gelée , 8 octets
Essayez-le en ligne!
la source