Imprimer l'alphabet sans utiliser chaque voyelle

72

Inspiration : en 1939, un homme nommé Ernest Vincent Wright écrivit un roman intitulé Gadsby sans utiliser la lettre «e».

Votre tâche consiste à écrire un ensemble de programmes (jusqu’à 5) dans n’importe quelle langue (avec une syntaxe textuelle *) afin d’afficher les 26 lettres de l’alphabet dans l’ordre. Cependant, pour chaque voyelle, au moins un des programmes ne doit inclure aucune occurrence de la voyelle.

Donc il doit y avoir

  • un programme qui n'utilise pas « un » ou « A » partout dans la syntaxe du programme.
  • un programme qui n'utilise pas ' e ' ou ' E ' n'importe où dans la syntaxe du programme.
  • un programme qui n'utilise ni « i » ni « je » dans la syntaxe du programme.
  • un programme qui n'utilise ni " o " ni " O " dans la syntaxe du programme.
  • un programme qui n'utilise pas " u " ou " U " n'importe où dans la syntaxe du programme.

Tous doivent sortir abcdefghijklmnopqrstuvwxyz.

Le gagnant sera la solution lorsque la longueur de tous les programmes est la plus courte.

* puisque la contrainte ne serait pas un défi en Piet ou Whitespace


Classement actuel (06 mars 2014):

shamp00
la source
4
@ w0lf: Non, il est indiqué "jusqu'à 5 programmes" et "longueur de tous les programmes", ce que je lis comme "il ne peut y avoir qu'un seul programme et sa durée compte dans ce cas".
schnaader
9
@PeterTaylor: Vous ne pensez pas que devoir éviter d'utiliser des voyelles dans votre syntaxe est un défi unique? En tant que programmeur JS, c'est particulièrement intéressant :)
mellamokb le
2
Les nouvelles lignes sont-elles acceptables dans la sortie (une par caractère)? Je peux raccourcir une partie de mon code si tel est le cas ...
Gaffi
2
La sortie en majuscule est-elle autorisée?
Erik the Outgolfer
2
Je suis l'OP. Les majuscules ne sont pas autorisées.
shamp00

Réponses:

48

Golfscript - 8 caractères

123,97>+
gnibbler
la source
8
putain, impossible de battre golfscript en termes de concision ...
Patrick Oscity
18
Cela étant dit, la lisibilité pue comme un fou.
Andrew Gray
5
Ce n'est pas si mal;) générer une liste de 123 nombres, supprimer ceux qui ne sont pas supérieurs à 97, le contraindre (tableau de nombres) à une chaîne.
McKay
3
Utilisez à la 91,65>+place.
Erik the Outgolfer
31

Brainfuck, 38 caractères

++++++[->++++<]>[->+>++++<<]>++[->+.<]

Bien sûr, il n'y a pas de voyelles (ou d'autres lettres) dans la syntaxe du brainfuck .

Ilmari Karonen
la source
2
Point valide là! ;)
WallyWest
3
30 octets:++[[<+++>->++++<]>]<<<<++[->+.<]
dimanche
23

PHP, 31 octets

Non a, e, i, o, u:

<?=~žœ›š™˜—–•”“’‘ŽŒ‹Š‰ˆ‡†…;

La chaîne binaire située après le tilde a la représentation hexadécimale suivante:

\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85

Puisqu'il y a un tableau d'affichage des langues, je pourrais aussi bien vous soumettre celui-ci:

Ruby (v1.8) 18 octets

$><<[*97.chr..'z']
primo
la source
Je ne suis pas sûr de comprendre comment cela fonctionne. Puis-je avoir une explication?
M. Lama
Lorsqu'il est appliqué à une chaîne, l'opérateur ~ inverse tous les bits. Ici j'ai inversé abc ... xyz. Comme il n'y a pas de caractères de symboles (ni d'espaces) dans la chaîne binaire, les guillemets ne sont pas nécessaires non plus.
Primo
1
Vous voudrez peut-être spécifier un encodage pour ce que vous avez là.
Joey
1
iso-8859-1. Trois caractères "non imprimables" ont été supprimés lors de sa publication, c'est pourquoi j'ai inclus l'hex.
Primo
2
Nice et probablement la version PHP la plus courte possible. Une commande pour générer le fichier: php -r 'echo("<?=~\x9e\x9d\x9c\x9b\x9a\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8f\x8e\x8d\x8c\x8b\x8a\x89\x88\x87\x86\x85;");' > script.php. La commande pour l' exécuter: php -d error_reporting=0 script.php; echo.
axiac
16

Rubis ( 24 22)

Edit: les parenthèses peuvent être omises, moins de 2 caractères:

$><<'%c'*26%[*97..122]

24 caractères en rubis:

$><<('%c'*26)%[*97..122]

Comment ça fonctionne

$>est un alias pour $stdoutou STDOUT. Vous pouvez y écrire en utilisant l' <<opérateur. Le terme '%c'*26répète la chaîne '%c'26 fois. L' %opérateur est défini sur String comme un alias sprintf, ce qui str % valrevient à écrire sprintf(str,val). Le caractère de format %cest utilisé pour transformer une valeur de caractère en caractère. Ces valeurs proviennent de [*97..122]ce qui crée un tableau contenant les valeurs de 97 à 122. Et voilá!

Patrick Oscity
la source
Très agréable. Je cherchais un moyen de l'utiliser, <<mais j'avais oublié $>.
Mark Reed
1
Je ne le savais même pas $>auparavant, mais j'ai supposé qu'il devait exister un nom d'emprunt variable en dollars pour $stdoutque personne ne s'en souvienne :)
Patrick Oscity
21 caractères: $><<[*"`".."z"][1,26](note: cela ne fonctionne que dans Ruby 1.8)
Ventero
@Ventero ne fonctionne pas uniquement en Ruby 1.8, mais en Ruby 1.9.2. Mais l'utilisation de p [*"".." z "] [1,26]` est encore plus courte.
Hauleth
@Hauleth: Non, le faire en 1.9 ne génère pas la sortie correcte, car 1.9 Array#to_sest identique à Array#inspect, alors que dans 1.8 c'est Array#join- donc dans 1.9, la sortie est à la ["a", "b", "c", "d", "e", ...]place de abcdef.... Pour la même raison, pne peut pas être utilisé (il appelle inspectses arguments au lieu de to_s).
Ventero
16

Pyth , 1 caractère

G

Pyth prédéfinit certaines variables. G est prédéfini comme alphabet minuscule. Pyth imprime aussi implicitement chaque ligne avec une valeur de retour raisonnable.

isaacg
la source
3
Ninja m'avait par 3 ans ...
Stan Strum
15

JavaScript (100)

Non 'aeou':

this['\x61l\x65rt']('\x61bcd\x65fghijklmn\x6fpqrst\x75vwxyz')

Non je':

alert('abcdefgh\x69jklmnopqrstuvwxyz')
zzzzBov
la source
+1 Belle amélioration dans ma réponse :) J'avais pensé utiliser les \x##codes, mais je ne savais pas s'ils étaient valables en JavaScript.
mellamokb
pourquoi les alertes du tout? sur un terminal js, les objets sont répercutés automatiquement. ('\ x61bcd \ x65fghijklmn \ x6fpqrst \ x75vwxyz') @ 42 caractères.
antony.trupe
3
@ antony.trupe, pour le golf de code, l'IO est généralement effectué via les mécanismes d'IO intégrés au langage (ou des plugins communs). Pour ce JS est généralement alert, confirm, prompt, console.loget document.write. Déclarer simplement un littéral de chaîne ne le produit pas comme sortie lorsqu'il est exécuté. Sinon, vous auriez raison, et j'aurais utilisé cela.
zzzzBov
il produit une sortie (par la définition que j'utilise quand même) dans la console Google Chrome, mais je concède le problème; c'est une restriction arbitraire pour commencer.
antony.trupe
@ antony.trupe, dans un langage comme PHP, vous pourriez vous en tirer en utilisant un littéral, car c'est ainsi que l'IO est exécuté.
zzzzBov
15

K, 9

_26#.Q.b6

K, 10

"c"$97+!26

K, 14

.:".Q.","c"$97
tmartin
la source
2
et une façon idiote de le faire sans lettres (12 caractères):(@$`)$97+!26
Aaron Davies
1
La méthode K5 est presque votre deuxième solution, mais elle $prend des symboles au lieu de chaînes pour contrôler le type converti en: `c $ 97 +! 26
JohnE
15

J, 26 23 17 16 caractères

Après une heure ou fouillant dans le tiroir de sous - vêtements de J Je l' ai finalement trouvé un moyen d'éliminer les a.et les u:verbes.

2(3!:4)96+#\26$1

Précédemment:

a.{~96++/\26$1
u:97+i.26

avec merci à randomra pour le #\tour.

Gareth
la source
Belle solution! Géré pour raccourcir avec 1 caractère en utilisant #\ au lieu de +/\ .
randomra
5
Sortez de mon tiroir de sous-vêtements
Joe
14

R, 17 + 19 = 36 caractères

non ae (17):

intToUtf8(97:122)

non iou (19):

cat(letters,sep="")
Paolo
la source
12

Bash (38)

Pas de voyelles du tout.

/*/*/*ntf "/*/?ch? {\x61..z}"|/*/b?sh
marinus
la source
Ce programme échoue sur mon système car / * / b? Sh n’existe pas. J'ai / usr / local / bin / bash, pas / bin / bash.
Kernigh
2
Belle utilisation de shell globbing!
mécanique
@kernigh[[ ! -d "/bin" ]] && mkdir "/bin"; sudo cp "/usr/local/bin/bash" "/bin/bash"
Stan Strum
Ce serait mieux si /bin/shc'est bash. Ensuite, le code peut se terminer par /*/sh(36 octets). Mais je n'ai pas trouvé de système où cela fonctionne. Dans Debian, / bin / sh n’est pas bash. Dans mon ancien Mac, / bin / sh correspond à bash 2.05b0. (1), mais cette version est trop ancienne et ne se développe pas {a..z}.
Kernigh
11

C, 90 88 84 caractères

Compiler en utilisant gcc -nostartfiles

b;_exit(){for(;b<26;)printf("%c",b+++97);}    // 42 chars, works for a, u
b;_start(){putchar(b+++97)>121?:_start();}    // 42 chars, works for e, i, o
schnaader
la source
_startet _exitsont un bon moyen de se déplacer main. Mais si une ligne de compilation non standard est OK, pourquoi pas -DX=main?
Ugoren
4
D'une certaine manière, -DX=mainse sent pire que -nostartfilesne le fait (pour moi). C'est un moyen de déplacer une partie du code source vers la ligne de compilation et cela revient à écrire #define X maindans le code source, ce qui serait clairement invalide. Attendu que -nostartfilesn’est pas un moyen de renommer main, mais supprime la restriction selon laquelle il doit y avoir une mainfonction (appelée dans _start). Par contre, utiliser -nostartfilesest un peu tricher, surtout qu’il contient 4 des 5 "mauvaises" lettres :)
schnaader
C'est une pente glissante ... La distance de -nostartfilesà -DX=mainest petite et pourquoi ne pas enregistrer des caractères avec -DX=main()et ainsi de suite. Mais je ne peux pas trouver une solution qui n'implique rien de louche.
Ugoren
Vous ne pouvez pas définir la fonction principale comme étant "mn" par exemple?
Neil
@ Neil, seulement en faisant quelque chose comme -Dmn=main. La fonction CA doit avoir une mainfonction sauf si une option non standard telle que -nostartfilesest utilisée.
Matthew Flaschen
9

Golfscript, 10 caractères

26,{97+}%+
hammar
la source
18
Pourquoi si verbeux?
Peter Taylor le
9

Ruby, 20 caractères

$><<[*97.chr..?z]*''
  • 97.chr est une manière élaborée de dire 'a'
  • .. spécifie une plage
  • ?z est un moyen plus court de dire "z"
  • la [*range]provoque la plage à splat al il est des valeurs dans un tableau
  • *''est le même que join(''); il colle toutes les valeurs d'un tableau ensemble.
  • $><< Perlicism: imprimer sur la sortie standard.
Steenslag
la source
Ce code ne semble pas fonctionner. ?zn'est pas un raccourci pour 'z', mais plutôt pour 122. Toutefois, cela ne fonctionne pour 18 octets:$><<[*97.chr..'z']
primo
Cela fonctionne dans Ruby 1.9.
steenslag
1
J'ai téléchargé 1.9.3 ... et vous avez raison. Pourquoi changeraient-ils quelque chose comme ça? Je peux voir pourquoi Anarchy Golf est toujours en cours d'exécution 1.8.7. Quoi qu'il en soit, la solution de 18 octets fonctionne pour v1.8.7-
Primo
2
(4 ans plus tard ...) Vous pouvez remplacer 97.chravec ?\x61pour -1 octet.
Jordanie
9

dc: 18 17 caractères

97[dP1+dBD>m]dsmx

Et il mourut un personnage courageux.

Fors
la source
J'en doute. Je fais le tour de la tête et je ne vois aucun moyen de le raccourcir. J'ai terminé avec exactement la même solution, sauf que j'avais utilisé xpour le registre, ce qui rend la solution plus obscure.
Hynek -Pichi- Vychodil
3
97[dP1+dBD>m]dsmx, 17 caractères. Apparemment, vous pouvez toujours entrer des caractères hexadécimaux dans DC, mais comme la base d’entrée est dix, la valeur est B*10+D=11*10+13=123='{', et non 0xBD.
Depuis
Oh, gentil petit ami ;-)
Hynek -Pichi- Vychodil
9

Powershell, 75 62 caractères

Edit: Utilisé -f (String.Format) et l'indexation de tableaux pour réduire considérablement la longueur du code.

'{0}bcd{1}fgh{2}jklmn{3}pqrst{4}vwxyz'-f"$(1|gm)"[8,10,0,5,31]

Comment ça fonctionne

gmest un alias pour get-members, donc 1|gmrenvoie les membres de la valeur 1, qui est du System.Int32type:

PS C:\> 1|gm
   TypeName: System.Int32
Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value)
Equals      Method     bool Equals(System.Object obj), bool Equals(int obj)
GetHashCode Method     int GetHashCode()
...

"$(1|gm)"renvoie une représentation sous forme de chaîne de la liste ci-dessus, qui contient toutes les voyelles nécessaires pour compléter l'alphabet: " int C omp ar eTo (System.Object val ue) ..."

Danko Durbić
la source
2
Ce n'est pas stable si MS ajoute des membres à System.Int32, cependant :-)
Joey
Je pense que cela devrait aussi être ($x=''+$(gv))[8]+"bcd$($x[4])fgh$($x[25])jklmn$($x[26])pqrst$($x[19])vwxyz"
composé de
Argh, c'est vrai. J'ai tiré le mauvais article de mon histoire. Pardon.
Joey
En fait, si vous remplacez ''+$(gv)par "$(gv)"vous obtenez ($x="$(gv)")[8]+"bcd$($x[4])fgh$($x[25])jklmn$($x[26])pqrst$($x[19])vwxyz"74 caractères. Agréable!
Danko Durbić
2
J'ai utilisé -f (String.Format) et l'indexation de tableaux pour réduire considérablement la longueur du code.
Tim Lewis
8

BASH: 40 caractères

  • Non aeiouutilisé.
  • Aucun caractère générique utilisé.
`tr c-y '\141-w'<<<'rtkpvh %s c'` {b..z}
Prince John Wesley
la source
8

Haskell, 12 ans

['\97'..'z']

Ou est-ce tricher? :)

RobAu
la source
Certes, je ne connais pas grand chose à propos de Haskell, mais cela me donne cette erreur:Parse error: naked expression at top level
primo
1
Vous l'exécutez dans l'interprète
RobAu
7

MATLAB, 12 + 20 = 32 caractères

Non eiou (12):

char(97:122)

Non aeou (20)

fprintf('%s',97:122)
Jonas
la source
7

En Perl,

c'est aussi possible sans voyelles

mais beaucoup plus difficile qu'en Ruby, etc. Ceci utilise un total de 101 caractères mais ne nécessite pas d'invocation de ligne de commande (perl -e).

`\160\145\162\154\40\55\145\40\42\160\162\151\156\164\40\123\124\104\105\122\122\40\141\56\56\172\42`

=> Résultat: abcdefghijklmnopqrstuvwxyz

Contrairement à la solution PHP «similaire» , il s'agit d'un programme réel . Le programme décodé se lit comme suit:

perl -e "print STDERR a..z"

Après l’encodage en valeurs octales, un autre interpréteur Perl est appelé lors de l’exécution par le `` (backticks). Les backticks consomment la sortie, elle est donc imprimée sur STDERR.

L'encodage est fait par sprintf:

my $s = q{perl -e "print STDERR a..z"};
my $cmd = eval(
       '"' . join('', map sprintf("\\%o",ord $_), split //, $s) . '"'
       );

et le codage évalué est le programme posté (dans les backticks):

"\160\145\162\154\40\55\145\40\42\160\162"
"\151\156\164\40\123\124\104\105\122\122"
"\40\141\56\56\172\42"

Cordialement

rbo

bottes en caoutchouc
la source
8
Vous pouvez réduire ce nombre à 44 caractères en ne codant que les voyelles :)
marinus
7

Perl 5, 22 caractères

(1) ne contient que aet e, 10 caractères (nécessite 5.10+, exécuté à partir de la ligne de commande):

-Esay+a..z

(2) contient uniquement 'i', 12 caractères:

print v97..z

S'il n'est pas autorisé à s'exécuter à partir de la ligne de commande, vous devez utiliser use 5.01;say a..zla première, avec un coût de 7 caractères et une voyelle de plus, mais elle n'a toujours pas de 'i'. Il en résulte une entrée valide de 29 au total. personnages.

Mark Reed
la source
L'option '-E' est ok je pense, mais d'habitude les 2 caractères '-E' sont ajoutés à la longueur totale des caractères.
Gareth
@gareth - le -E prend la place de -e pour exécuter un one-liner. Si vous exécutez un programme à partir d'un fichier, vous êtes coincé avec la use, bien que vous puissiez le remplacer par l'option de ligne de commande -M5.01et supprimer deux caractères supplémentaires.
Mark Reed
Je pensais à la règle avec l' -poption où 2 caractères sont ajoutés au compte. En regardant cette méta-question, vous devriez pouvoir utiliser le -M5.010gratuitement si cette option permet de raccourcir votre code.
Gareth
vous pouvez remplacer votre printdéclaration par diedeux
coups de crayon
chr 97..zpeut être remplacé par v97..zpour 3 octets.
Primo
7

APL (Dyalog) ( 11 13)

Vous pourriez avoir besoin d'une police APL. Ceci est supposé être Unicode mais il n'y a pas de prévisualisation ...

Seulement U(et peut - être en comptant les voyelles grecques):

⎕UCS 96+⍳26

(C'est: [quad]UCS 96+[iota]26)

Seulement A:

⎕A
marinus
la source
2
Uest une voyelle ...
Tobia
@Tobia: et il a fallu plus d'un an pour que quelqu'un le voie (moi compris). Je suppose que iota est aussi une voyelle maintenant que j'y pense. Fixe le.
marinus
Le symbole fonctionnel APL iota (U + 2373) n'est pas considéré comme une lettre au format Unicode et ne peut donc pas être une voyelle. Notez qu'il est distinct de la lettre minuscule grecque iota (U + 03B9).
ngn
7

Python 2, 83

Non a , i , o ou u ; 47 :

x=97;s='';exec"s+=chr(x);x+=1;"*26+"pr\x69nt s"

Non e ; 36 :

print"abcd\x65fghijklmnopqrstuvwxyz"
flornquake
la source
6

Python 2, 175 caractères

Remarque: les impressions sont générées contrairement à la réponse précédente en python .

Utilisations 'e', ​​mais non a, i, o, u - 63 61 59 65 (correction du idéplacement erroné en minuscule) 115 caractères (suppression des espaces).

exec('fr%cm sys %cmp%crt*\nf%cr x %cn r%cnge(97,123):std%c%ct.wr%cte(chr(x)),'%(111,105,111,111,105,97,111,117,105))

(À l'origine, elle utilisait une virgule avec une virgule insérée; les lettres majuscules étaient également imprimées. Des exigences strictes étaient imposées pour 'abcdefghijklmnopqrstuvwxyz' en sortie; il fallait donc ajouter une déclaration d'importation).

N'utilise pas 'e' (utilise a, i, o, u; pourrait trivialement se débarrasser de a, u pour une petite extension) - 61 60 caractères

import string
print string.__dict__['low%crcas%c'%(101,101)]
dr jimbob
la source
1
Votre première solution utilise la lettre i, elle devrait donc être: exec('f%cr x %cn r%cnge(65,91):pr%cnt chr(x),'%(111,105,97,105))et nous sommes revenus à 64 caractères.
BioGeek
1
exec('fr%cm sys Je mp%crt*\nf%cr ...
Gareth
BioGeek & @Gareth - mes compétences en détection de voyelles manuelle sont nulles. Merci de le signaler; mais j'ai eu un e supplémentaire écrit comme un '% c' donc à la fin il égalisent.
dr jimbob
Vous pouvez supprimer les parenthèses deexec('...')
mbomb007
5

JavaScript (154)

(1) contient uniquement i(99 caractères):

t=this;s=-t+t+t.b;z=s[1]+'bcd'+s[7]+'fghijklmn'+s[4]+'pqrst'+s[21]+'vwxyz';t[s[1]+'l'+s[7]+'rt'](z)

(2) contient uniquement aeou(55 caractères):

t=0;s=''+t.b;alert('abcdefgh'+s[5]+'jklmnopqrstuvwxyz')

Démo: http://jsfiddle.net/SvN5n/

mellamokb
la source
$("h\x65\x61d")[0]["\x6fwn\x65rD\x6fc\x75m\x65nt"]["l\x6fc\x61t\x69\x6fn"]="j\x61v\x61scr\x69pt:\x65v\x61l(`f\x6fr(s='',l=65;l<90;l++){s=s+Str\x69ng.fr\x6fmCh\x61rC\x6fd\x65(l);};c\x6fns\x6fl\x65.l\x6fg(s)`)"208chars, non aeouiutilisé dans le code. Fonctionne sur le navigateur chrome.
Échap ệiệp
5

Python 159 117

Comme mentionné dans l'autre publication Python, le plus difficile est de traiter le fait que le seul moyen de générer une sortie est d'utiliser printou sys.stdout.write, les deux contenant i. Il faut le faire avec 2 programmes (qui sont indépendants et n'utilisent pas le shell interactif python pour créer la sortie):

Celui-ci utilise uniquement i pour 55 caractères:

print"%cbcd%cfghijklmn%cpqrst%cvwxyz"%(97,101,111,117)

Celui-ci évite d'utiliser i pour 104 caractères:

eval("sys.stdout.wr%cte"%105,{'sys':eval("__%cmport__('sys')"%105)})("%c"*26%tuple(range(97,123))+"\n")

EDIT: percée massive !!! Je pensais qu'utiliser eval (ou même exec) était un peu un tricheur et pas vraiment dans l'esprit de la compétition. Quoi qu'il en soit, en parcourant les fonctions intégrées, j'ai trouvé un moyen d'obtenir la fonction d'impression sans utiliser i. Voici donc le programme Avoid-i (et o) pour 68 caractères:

vars(vars().values()[0])['pr%cnt'%105]("%c"*26%tuple(range(97,123)))

Mais parce que cela évite aussi o, cela peut être jumelé avec celui qui évite seulement a, e, u pour 49 caractères:

print"%cbcd%cfghijklmnopqrst%cvwxyz"%(97,101,117)
Benoît
la source
Vous pouvez vous débarrasser de la compatibilité et gagner un personnage -vars(vars().values()[0]).values()[47]
ugoren
5

Rubis 196 164 44 47

$><<"\x61bcd\x65fgh\x69jklmn\x6Fpqrst\x75vwxyz"
Cristian Lupascu
la source
Est-ce une réponse valide, car les pguillemets sont affichés autour de l'alphabet?
Mark Reed le
Je suis d'accord p xest équivalent à appeler puts str.inspect, ce qui entraîne des guillemets.
Patrick Oscity
@padde vous avez raison tous les deux; modifié.
Cristian Lupascu
1
@padde j'ai utilisé votre $><<, donc +1 pour cela et félicitations; ta version est bien meilleure
Cristian Lupascu
5

Ruby, 22 ans

$><<[*?`..?{][1,26]*''

Aucune lettre que ce soit :)

duckinator
la source
5

VBA: 76 force brute, 116 sans "triche" (98 si les nouvelles lignes sont acceptables dans la sortie)

Fonctions standard

Grâce à la verbosité de VBA, je ne crois pas que cela puisse se faire sans "E" ou "U" dans un module de code standard ...

  • " E nd"
  • "F u nction"
  • "S u b"

Fonctions immédiates

Sous l'hypothèse de mellamokb, voici sans la déclaration de fonction (laissant dehors SUBet FUNCTION) ( 116 caractères , 98 si les nouvelles lignes sont acceptables en sortie):

Le texte ci-dessous n'utilise ni 'e' ni 'a' ( 43 caractères , formatés pour être exécutés dans la fenêtre immédiate):

b=65:Do:z=z+Chr(b):b=b+1:Loop Until b=91:?z

Le texte ci-dessous n'utilise ni 'i' ni 'a' ni 'u' ( 33 caractères , formatés pour être exécutés dans la fenêtre immédiate):

For b=65 To 90:z=z+Chr(b):Next:?z

Le texte ci-dessous n'utilise ni 'a' ni 'o' ni 'u' ( 40 caractères , formatés pour être exécutés dans la fenêtre immédiate):

b=65:While b<91:z=z+Chr(b):b=b+1:Wend:?z

Si les caractères de nouvelle ligne sont autorisés dans la sortie, les exemples ci-dessus peuvent être plus courts:

( 37 caractères )

b=65:Do:?Chr(b):b=b+1:Loop Until b=91

( 27 caractères )

For b=65 To 90:?Chr(b):Next

( 34 caractères )

b=65:While b<91:?Chr(b):b=b+1:Wend

Force brute

Courir avec la réponse Ruby de w0lf

( 76 caractères , formatés pour être exécutés dans la fenêtre immédiate):

?Chr(65)&"BCD"&Chr(69)&"FGH"&Chr(73)&"JKLMN"&Chr(79)&"PQRST"&Chr(85)&"VWXYZ"
Gaffi
la source
1
Je pense qu'il serait juste de laisser de Sub..End Subcôté, car la plupart des autres programmes n'incluent pas de définition de fonction.
Mellamokb
@mellamokb Eh bien, ça me fait me sentir mieux. Je vais vous donner quelques exemples à ajouter.
Gaffi
2
Pensez-y simplement comme "le code que vous exécutez dans la fenêtre immédiate" :)
mellamokb le
2
Eh bien, en cas de doute, appelez-le VBScript qui peut être inclus dans un fichier sans avoir besoin de Sub:)
Joey
Correction d'un tas d'espaces inutiles, remplacés printpar ceux ?qui fonctionnent dans la fenêtre immédiate.
Gaffi
5

Rebmu : 15 caractères

Ctc'`L26[pn++C]

Lire Rebmu nécessite toujours un peu de désinvolture pour commencer:

c: tc '` l 26 [pn ++ c]

Ensuite, il est utile d’élargir les abréviations:

c: to-char-mu '`
loop 26 [
    prin ++ c
]

Il serait plus évident d'utiliser un littéral de caractère pour le prédécesseur de minuscule a:

c: #"`"
loop 26 [
    prin ++ c
]

Mais cela ne "va pas", donc convertir un mot littéral en un personnage passe dans le même but. Comme dans la plupart des autres entreprises Rebmu, ce qui me plaît, c’est qu’il a l’esprit d’un programme judicieux malgré la compression. (La réponse de Golfscript est plus courte mais ne correspond pas à la façon dont un programmeur penserait habituellement lors de la programmation.)

Dr. Rebmu
la source
5

<> <(Poisson) - 22 caractères

Parce que <> <utilise le 'o' pour imprimer un personnage, ce défi semble impossible à relever. Heureusement, le poisson peut modifier son propre code en cours d'exécution. Cela m'a permis d'ajouter l'instruction d'impression au code.

Ce code n'utilise aucune des voyelles:

'`78'+11pv
:X:'z'=?;>1+

Vous pouvez exécuter le code ici

Thijs ter Haar
la source