Imprimer des chaînes sans partager de caractères

15

Modifier: autorisé à réutiliser les espaces blancs.

Votre tâche consiste à écrire n programmes (ou fonctions, ou corps de fonctions sans utiliser de paramètres ou les noms de fonction) dans le même langage. Le k ème programme devrait afficher le nombre (cardinal) k en anglais standard en minuscules (avec un retour à la ligne facultatif). Ainsi, le premier programme devrait sortir one, le second devrait sortir two, etc. Pour un nombre ayant deux parties, elles devraient être séparées par un trait d'union comme twenty-one.

Mais aucun programme de votre soumission ne peut partager des caractères non blancs ou des caractères blancs faisant des travaux utiles. Par exemple, si votre premier programme est juste "one", alors aucun " o net epeut être utilisé à nouveau dans vos autres programmes.

Vous pouvez utiliser des espaces (espaces, sauts de ligne et tabulations) dans deux programmes ou plus, s'ils ne servent que de séparateurs ou d'indentation et ne font rien par eux-mêmes. Vous ne pouvez donc pas les réutiliser dans le langage des espaces blancs et vous ne pouvez pas les utiliser dans les chaînes de plusieurs programmes.

Vous ne pouvez utiliser que des caractères ASCII imprimables, des tabulations et des sauts de ligne (y compris CR et LF). Chaque programme doit contenir au moins 1 caractère.

Votre score est la somme de 1 / taille du programme ^ 1,5. Le score le plus élevé l'emporte. Vous pouvez utiliser cet extrait de pile ( ou ce code CJam ) pour calculer votre score:

function updatescore(a){var l=a.value.split("\n"),s=0;for(var i=0;i<l.length;i++){var t=l[i].length;t-=t&&l[i][t-1]=="\r";if(t)s+=Math.pow(t,-1.5);}document.getElementById('result').textContent=s;}
<textarea id="input" placeholder="Put your code here, one per line." style="width:100%;height:150px;box-sizing:border-box" oninput="updatescore(this)" onpropertychange="updatescore(this)"></textarea><div>Your score: <span id="result">0</span></div>

jimmy23013
la source
Une meilleure règle de notation peut être la somme de 1 / (taille du programme + c) ^ 1,5, où c est une constante. Mais je pense qu'il est probablement trop tard pour le changer.
jimmy23013
Pouvons-nous ajouter un multiplicateur pour atteindre un nombre cardinal plus élevé, car cela semble être l'objectif? Je suis arrivé à douze, plus haut que tous les autres, mais je perds toujours.
mbomb007
@ mbomb007 Désolé d'avoir délibérément fait Headsecks un score inférieur. Mais si Headsecks a un score similaire aux autres, je suppose que Glypho gagnera trop (pour ne pas dire Lenguage).
jimmy23013
Je veux le faire en espace blanc :(
YoYoYonnY
1
@ mbomb007 Si je pose à nouveau une question similaire, j'ajouterai probablement une petite constante aux tailles de programme dans la partition. Mais c'est trop arbitraire pour changer dans cette question.
jimmy23013

Réponses:

6

gs2 , 0,38669200758867045

Supprimez les espaces blancs de tous ces programmes, mais trois , c'est uniquement pour la lisibilité (tousse) . un et six sont des programmes gs2 qui plantent (en débordant la pile), ce qui les rend commodément quines .

un (3 octets)

one

deux (1384 octets)

A?"A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0000000000000
000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000A?"A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"00000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000A?"A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000

trois (92 octets)

0a 21 2c 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 2f 20 0a 21 28 3c 0a 21 2c 21 20 21 20
21 20 21 20 2f 20 0a 21 28 3c 45 21 20 21 20 21
2f 20 0a 21 28 3c 0a 21 2c 21 20 2f 20 0a 21 28
3c 0a 21 2c 21 20 2f 20 0a 21 28 3c

Beaucoup d'espace blanc important, voici donc un vidage hexadécimal. Il a un caractère de saut de ligne unique au début:


!,! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / 
!(<
!,! ! ! ! / 
!(<E! ! !/ 
!(<
!,! / 
!(<
!,! / 
!(<

quatre (276 octets)

f$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f
$f$31f$f$31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31Mf$f$f$31f$f$31f
$f$31f$f$31f$f$31f$f$31f$f$31f$f$31M

cinq (178 octets)

hd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&
&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&K

six (3 octets)

six
Lynn
la source
Je n'ai pas vu cette exigence - je vais passer en revue et corriger les solutions intermédiaires.
Lynn
Je peux utiliser 20via 7E, 09(tab), 0A(LF) et 0D(CR), non?
Lynn
Oui. Modifié pour autoriser explicitement CR.
jimmy23013
Le 1sur cinq était une faute de frappe; Je suis allé le retirer. Je vais en réparer trois maintenant.
Lynn
2
Les programmes un et six sont essentiellement des erreurs de syntaxe qui vident le code source sur STDOUT et affichent une erreur sur STDERR. Le consensus semble être que c'est OK (donc bravo) mais vous devez le mentionner dans votre réponse.
Dennis
13

CJam, 0,24075

Programmes

BA1]100cf|
"two"
{hree}`W<7a.-
N)92+_9+_6+_2~+
S(84^I^U$F^X$G^Y$(
's'i'x

Merci à @ user23013 pour sa suggestion d'utiliser 'pour six .

Sortie, longueur, partition, caractères utilisés

one    10  0.03162          01       AB         ]    c f         |  
two     5  0.08944  "                                     o  tw     
three  13  0.02133        -.     7  <        W     `a e h  r    { } 
four   15  0.01721      )+    2 6  9      N       _                ~
five   18  0.01309   $ (       4  8    FGI SU XY ^                  
six     6  0.06804    '                                  i  s  x

Vérifiez vous-même les résultats dans l' interpréteur CJam .

Dennis
la source
6

Insomnie , 0,100688383057110116

Juste pour commencer. Il est très peu probable que cela gagne. Dans le cadre du système de notation actuel, toute langue pouvant imprimer oneen 5 caractères ou moins présente un avantage écrasant.

un (8 octets, 0,04419417382415922)

uuyp>~p~

deux (9 octets, 0,037037037037037035)

oeoojdoLj

trois (21 octets, 0,010391328106475828)

*FFFFF
=
=z"
n=nnFzzB

quatre (23 octets, 0,009065844089438033)

)HGGGkGGGtGkGk<GGh$HGGt
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
la source
4

Headsecks , 0,044623631135793776

Généré ici

Ce langage est une simple substitution BF où la seule chose qui compte est la valeur de caractère modulo 8.

Malheureusement, les programmes plus longs donnent un score moins bon, même s'ils peuvent atteindre douze ! (Je pourrais obtenir plus si je pouvais utiliser ASCII non imprimable et Unicode.)

un

##%%%%%%%&##$%&#&%&%%%%%%%%%&

deux

--------+--.+++,-..+++.--------.

Trois

5555555535563334566555555555555633333333336555555555555566

quatre

==;=====>;<=>>;;;;;;;;;>;;;;;;>===>

cinq

EECEEEEEFCDEFFCCCFCEFCCCCCCDEFFCCEFCCCDEFF

six

KKMMMMMMMMMNKKLMNKNMMMMMMMMMMNMKMMMNKLMNN

Sept

SSUUUUUUUUUVSSTUVSVSSSSSUVSSSTUVVSUUUVSTUVUVSSUVSSSTUVVSSSSSSSSSV

huit

]][]]]]]^[\]^]^[[[[^]]^[^[[[[[[[[[[[[^

neuf

cceeeeeeefccdeffeeeeefcccccfeeeeeeeeef

Dix

mmmmmmmmkmmnkkklmnnkkkkmnkkklmnnkkkkkkkkkn

Onze

uusuuuuuvstuvuvsssssssvuuuuuuuvsuuuvstuvuvssuvssstuvvsssssssssv

Douze

}}}}}}}}{}}~{{{|}~~{{{~{}~{{{|}~~{{{{{{{~{{{{{{{{{{~{{}~{{{|}~~
mbomb007
la source
Vous ne pouvez utiliser que des caractères ASCII imprimables, des tabulations et des retours à la ligne.
jimmy23013
@ user23013 J'en ai fait autant que j'ai pu, et je suis arrivé à 12.
mbomb007
2

/// , 0,19245008972987526

one

Cette réponse est inspirée de la réponse de @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, dans laquelle il a dit

Dans le cadre du système de notation actuel, toute langue pouvant imprimer oneen 5 caractères ou moins présente un avantage écrasant.

user12205
la source
OK, l'algorithme de notation semble avoir une faille. Bien joué.
Dennis
Eh bien, cette question est en bac à sable si longtemps juste pour obtenir une meilleure méthode de notation. Et cela ne fonctionnait toujours pas bien ... Cela fonctionne aussi en PHP, ASP, etc.
jimmy23013
0

SmileBASIC, .10062

"un"

?"one

"deux"

PRINT MID$(@two,1,3)

Mon autre réponse est plus intéressante, mais celle-ci obtient un score plus élevé.

Une stratégie importante pour obtenir la chaîne la plus longue consiste à utiliser PLUS de caractères pour enregistrer sur des caractères UNIQUES (par exemple, utiliser x - -xdans le programme 2 pour enregistrer y + ypour le programme 3)

Le problème avec le système de notation est qu'il marque 2 programmes courts mieux que 3 programmes longs, il n'y a donc aucune raison d'enregistrer des caractères pour des programmes ultérieurs s'il prolonge le programme actuel.

En outre, il valorise les programmes courts individuels supérieurs à une taille TOTALE plus petite. Si j'échange ?et PRINTdans ma réponse, je peux enregistrer 1 caractère, mais mon score est DEMI.

Je pense qu'il aurait été préférable de le baser uniquement sur le nombre de programmes, avec une taille totale comme bris d'égalité.

12Me21
la source
3
Je pense que les deux programmes partagent un o...
JayCe