Écrivez le programme le plus court possible de sorte que lorsque vous combinez le premier caractère et chaque Nième caractère suivant dans un nouveau programme, la sortie soit N. Cela doit fonctionner pour N = 1, 2, ..., 16.
Une autre façon de le dire est que si vous supprimez tous les caractères de votre programme à l' exception du premier et de tous les N après, la sortie du code restant doit être N.
Exemple
Si votre code était
ABCDEFGHIJKLMNOP
N = 1 résulte en ABCDEFGHIJKLMNOP
. L'exécution de cela devrait produire 1.
N = 2 résultats ACEGIKMO
. L'exécution de ceci devrait produire 2.
N = 3 résultats ADGJMP
. L'exécution devrait produire 3.
N = 4 résultats AEIM
. L'exécution de ceci devrait produire 4.
N = 5 résultats AFKP
. L'exécution devrait produire 5.
N = 6 résultats AGM
. L'exécution devrait produire 6.
N = 7 résultats AHO
. L'exécution devrait produire 7.
N = 8 résultats AI
. L'exécution devrait produire 8.
N = 9 entraîne AJ
. L'exécution devrait produire 9.
N = 10 résultats AK
. L'exécution devrait produire 10.
N = 11 entraîne AL
. L'exécution de ceci devrait produire 11.
N = 12 entraîneAM
. L'exécution de ceci devrait produire 12.
N = 13 résultats AN
. L'exécution devrait produire 13.
N = 14 résultats AO
. L'exécution de ceci devrait produire 14.
N = 15 résultats AP
. L'exécution devrait produire 15.
N = 16 résultats A
. L'exécution devrait produire 16.
Détails
- Tous les caractères sont autorisés, ASCII et non ASCII. (Les retours à la ligne et les caractères ASCII non imprimables sont également autorisés. Notez que le retour chariot et le saut de ligne comptent comme des caractères distincts.)
- Votre score est la longueur en caractères de votre programme inchangé (15 par exemple). Le score le plus bas l'emporte.
- Un score inférieur à 16 est clairement impossible car alors au moins deux des programmes modifiés seraient identiques.
- La sortie peut être vers un fichier ou une sortie standard ou toute autre chose raisonnable. Cependant, la sortie des 16 programmes différents doit tous aller au même endroit (par exemple, ce n'est pas ok si
AO
va à stdout maisA
va dans un fichier). Il n'y a aucune entrée. - La sortie doit être décimale et non hexadécimale. La sortie réelle ne doit contenir que les 1 ou 2 caractères qui composent le nombre de 1 à 16, rien d'autre. (Des choses comme Matlab
ans =
sont ok.) - Votre programme ne doit pas fonctionner pour N = 17 ou supérieur.
la source
ABCDEFGHIJKLMNO
et auN = 15
code de résultat justeA
.Réponses:
APL, 49
Programmes modifiés
Explication
Je vais commencer par le bas car cela faciliterait l'explication
Il y a deux fonctionnalités linguistiques d'APL à garder à l'esprit. Premièrement, APL n'a pas de priorité d'opérateur, les instructions sont toujours évaluées de droite à gauche. Deux, de nombreuses fonctions APL se comportent très différemment selon qu'on lui donne un argument à droite (monadique) ou deux arguments à gauche et à droite (dyadique).
Monadic
⌊
est arrondi (fonction plancher), Dyadic×
est évidemment une multiplication,⍝
commente le reste de la ligneCela devrait rendre cela évident:
9:
⌊/9×1
/
est Réduire. Fondamentalement, il prend la fonction de gauche et le tableau de droite, insère la fonction entre chaque paire d'éléments du tableau et évalue. (Ceci est appelé "fold" dans certaines langues)Ici, le bon argument est un scalaire donc
/
ne fait rien.8:
⌊|8×× 2
Monadic
×
est la fonction de signum et monadic est la fonction de|
valeur absolue Donc,× 2
évalue1
et|8×1
est bien sûr8
7:
⌊11-4 ⍝
devrait être évident6:
⌊⍟19×51⍝2
Monadic
⍟
est un logarithme naturelDonc,
⍟19×51
évalueln(19×51) = 6.87626...
et⌊
arrondit à6
5:
⌊⍟21×○5
Monadic
○
multiplie son argument par π⍟21×○5
estln(21×5π) = 5.79869...
4:
⌊7|18××4×1 ⍝2
Dyadique
|
est la fonction mod×4×1
évaluée1
et7|18×1
est18 mod 7 = 4
3:
⌊○⍟/119-××5 1 ⍝ 2
Les valeurs séparées par des espaces sont un tableau. Notez que dans APL, lorsque la plupart des fonctions scalaires donnent des arguments de tableau, il s'agit d'une carte implicite.
Dyadique
⍟
est logDonc
××5 1
, est signum de signum sur 5 et 1, ce qui donne1 1
,119-1 1
est¯118 ¯118
(¯
est juste le signe moins. APL doit faire la distinction entre les nombres négatifs et la soustraction), et⍟/¯118 ¯118
est log -118 (-118) = 12:
⌊⍟7⍟|21189×1×345× 1 ⍝⍝_2
Vous pouvez vous débrouiller seul
1:
⌊⊃⍟○7⍟⍟1|/2111118 9⍝×-1 ×○3×4_5_× 1_ _⍝_⍝ __2
Celui-ci consiste en une utilisation plus compliquée de
/
. Sin
est un nombre,F
est une fonction etA
est un tableau,nF/A
prend alors chaque groupe d'n
entrées consécutives deA
et s'appliqueF/
. Par exemple,2×/1 2 3
prend chaque paire d'entrées consécutives (qui sont1 2
et2 3
) et s'appliquent×/
à chaque groupe pour donner2 6
So,
1|/2111118 9
renvoie simplement2111118 9
(comme cela s'applique|/
aux scalaires). Ensuite,⍟○7⍟⍟
applique ln, puis connectez 7 à ces nombres, puis multipliez-les par π et ln à nouveau. Les nombres qui sortent de l'autre côté sont1.46424... 0.23972...
ici,
⊃
est juste utilisé pour sélectionner le premier élément d'un tableau.la source
Python -
12011137 (générateur:241218) - Vive les hachages!Stratégie:
J'ai essayé de démarrer chaque ligne avec autant de hachages que la sortie souhaitée
n
. Ensuite, toutes les autres versions ignoreront complètement cette ligne.La principale difficulté, cependant, a été d'ajouter le nombre correct de hachages afin que la prochaine exécution atteigne exactement le début de la ligne suivante. De plus, des interférences avec d'autres versions peuvent se produire, par exemple la version 16 sautant directement dans la
print
commande de la ligne 5 et ainsi de suite. C'était donc beaucoup d'essais et d'erreurs combinés avec un script d'aide pour des tests rapides.Statistiques:
1201113710661002 (88,1%)Code:
Script de test:
Production:
Mise à jour: un script générateur!
J'ai pensé à ma solution et qu'il doit y avoir un modèle pour la générer de manière algorithmique. Alors c'est parti:
Il construit le programme ligne par ligne:
i
avec laprint i
commande eti - 1
hache entre chacun des deux caractères voisins.print i
(en raison d'un mauvais alignement) ou touten
version avecn in range(1, 17)
lève une exception, ajoutez un autre hachage à la ligne précédente.Il a en fait renvoyé un programme plus court que ce que j'ai trouvé manuellement ce matin. (J'ai donc mis à jour ma solution ci-dessus.) De plus, je suis sûr qu'il n'y a pas d'implémentation plus courte suivant ce modèle. Mais tu ne sais jamais!
Version golfed -
241218:Notez qu'il peut y avoir un générateur plus court, par exemple en codant en dur le nombre requis de hachages successifs pour chaque ligne. Mais celui-ci les calcule lui-même et pourrait être utilisé pour tout N> 16.
la source
p 1
au lieu deprint 1
.Befunge 93 - Cinq millions sept cent soixante-cinq mille sept cent soixante-seize caractères
Je demande à être pris au sérieux ...
3 raisons pour lesquelles. 1ère raison: un script befunge est toujours 80x25, donc quoi qu'il arrive , il devait y avoir quelque chose qui se réduisait sur les lignes avec du code. 2ème raison: pourquoi quelque chose représente environ 5,5 millions d'espaces, parce que 720 720 est le plus petit multiple commun de 1 à 16 ... Cela signifie qu'il n'y aura pas de désordre autour lorsque nous sautons des personnages. 3e raison: wow, c'est assez absurde.
la source
209 caractères (plusieurs langues)
J'ai juste essayé de garder les choses simples et d'éviter de mettre quoi que ce soit dans des positions avec beaucoup de facteurs premiers. L'avantage est la possibilité de s'exécuter dans de nombreux langages de script. Il devrait fonctionner dans n'importe quelle langue qui n'est pas délibérément perverse et qui présente les caractéristiques suivantes:
Par exemple,
Interpréteur de ligne de commande Python 2 (mais pas à partir d'un fichier):
MATLAB (remplacez simplement '#' par '%'):
NB Il doit y avoir 17 espaces avant le premier «1». Vous connaissez beaucoup de langues, alors s'il vous plaît, aidez-moi à en énumérer plus sur lesquelles il pourrait fonctionner (:
EDIT: ajout d'unaire + à la position 0 pour Python pour éviter que la ligne ne soit indentée.
la source
IndentationError
course dans la ligne de commande. Mais vous n'avez peut-être pas utilisé la syntaxe de démarque correcte lors de la publication du code ici.unexpected indent
dans la console Python 2.7. Mais cela fonctionne dans Matlab donc pas de soucis. Je crois que cela fonctionne également en Ruby.CJam, 89 octets
Cette approche n'utilise aucun type de commentaires.
i
transforme en entier, c'est donc un noop ici. Il pourrait être remplacé par des espaces, mais les lettres me semblent plus lisibles ...Essayez-le en ligne en exécutant le code suivant :
Exemple d'exécution
la source
GolfScript, 61 octets
Cela profite des commentaires (
#
) et des "super-commentaires" non documentés (tout ce qui suit un inégalé}
est ignoré en silence)._
est un noop. Il pourrait être remplacé par des espaces, mais les soulignements me semblent plus lisibles ...Essayez-le en ligne.
Exemple d'exécution
la source