Afficher les nombres sans 2

22

Affiche les nombres de un à cent (dans l'ordre croissant), mais le numéro 2 ne doit apparaître nulle part dans la séquence. Ainsi, par exemple, les nombres deux ( 2) ou vingt-trois ( 23) ne doivent pas être dans la séquence.

Voici un exemple de sortie, avec des sauts de ligne séparant les nombres:

1
3
4
5
6
7
8
9
10
11
13
14
15
16
17
18
19
30
31
33
34
35
36
37
38
39
40
41
43
44
45
46
47
48
49
50
51
53
54
55
56
57
58
59
60
61
63
64
65
66
67
68
69
70
71
73
74
75
76
77
78
79
80
81
83
84
85
86
87
88
89
90
91
93
94
95
96
97
98
99
100
Monolica
la source
7
Je suppose que le critère gagnant est le code-golf, non?
Luis felipe De jesus Munoz
4
Notre site ne fonctionne pas de la même manière que les autres sites du réseau Stack Exchange. Concernant les réponses acceptées, veuillez prendre en compte ce commentaire de Jonathan Allan . Et veuillez ajouter un critère gagnant.
Arnauld
1
Puis-je suggérer d'utiliser le bac à sable à l'avenir pour obtenir des commentaires sur vos défis avant de publier?
Jo King
1
@Monolica Si la réponse la plus courte l'emporte, vous aurez besoin de la balise [code-golf]. Voici une liste de toutes les balises de critères gagnantes disponibles pour référence future.
Kevin Cruijssen
4
@ user202729 La restriction arbitraire n'est pas la bienvenue, elle n'est pas interdite.
Jonathan Frech

Réponses:

26

Taxi , 2399 2391 2370 1783 1773 1706 octets

-8 octets pour se rendre compte qu'au lieu de laisser un certain passager à Sunny Side Park pour toujours, il vaut mieux le jeter hors du pont Riverview. Ah, quelle belle ville c'est.

-21 octets pour avoir supprimé un commentaire que j'ai bêtement laissé.

-587 octets en changeant simplement toute la façon dont j'ai procédé (apparemment, un moyen plus court est l'arithmétique; la division des nombres entiers [17, 27, 37, 47, ...] par 9 donne la séquence, mais vous devez sauter le 20 vous-même.)

-17 octets pour la réalisation que toute chaîne entre guillemets sans espace n'a pas besoin de guillemets après tout (merci Jo King!).

-67 octets pour la réalisation que les sauts de ligne sont facultatifs.

17 is waiting at Starchild Numerology.Go to Starchild Numerology:w 1 l 2 r 1 l 1 l 2 l.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 2 r.[B]Pickup a passenger going to Cyclone.Pickup a passenger going to Divide and Conquer.9 is waiting at Starchild Numerology.Go to Starchild Numerology:s 2 l 2 r.Pickup a passenger going to Divide and Conquer.Go to Divide and Conquer:e 1 l 2 r 3 r 2 r 1 r.Pickup a passenger going to Trunkers.Go to Trunkers:e 1 r 3 r 1 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:e 1 r 1 r.Pickup a passenger going to Post Office.\n is waiting at Writer's Depot.Go to Writer's Depot:n 5 l 2 l.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.Go to Cyclone:s 1 r 1 l 2 r.Pickup a passenger going to Addition Alley.Pickup a passenger going to Equal's Corner.177 is waiting at Starchild Numerology.Go to Starchild Numerology:s 2 l 2 r.Pickup a passenger going to Equal's Corner.Go to Equal's Corner:w 1 l.Switch to plan C if no one is waiting.Pickup a passenger going to Sunny Skies Park.100 is waiting at Starchild Numerology.Switch to plan D.[C]10 is waiting at Starchild Numerology.[D]Go to Starchild Numerology:n 1 r.Pickup a passenger going to Addition Alley.Go to Sunny Skies Park:w 1 r.Go to Addition Alley:n 1 r 1 r 1 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 1 l.Pickup a passenger going to Cyclone.Pickup a passenger going to Equal's Corner.917 is waiting at Starchild Numerology.Go to Starchild Numerology:s 2 l 2 r.Pickup a passenger going to Equal's Corner.Go to Equal's Corner:w 1 l.Switch to plan E if no one is waiting.Switch to plan F.[E]Go to Go More:n 1 l.Go to Cyclone:w 1 r.Switch to plan B.[F]

Essayez-le en ligne!

Celui-ci ne me remportera pas de compétitions de golf de code de sitôt, mais j'ai décidé d'essayer l'esolang Taxi.

Le taxi est un esolang dans lequel toute la programmation se fait en ramassant et en déposant des passagers à divers arrêts dans la ville fictive de Townsburg. Bien sûr, votre taxi sera parfois à court d'essence, vous devez donc également visiter les stations-service de temps en temps et payer en utilisant les crédits que vous recevez comme tarif (dans ce cas, je n'ai besoin que de m'arrêter pour le gaz - chez Go More - une fois par itération de boucle!).

J'ai utilisé quelques astuces qui réduisent un peu la taille du fichier, telles que la reformulation des directions comme east 1st left, 2nd rightas e 1 l 2 r, la suppression du mot thelà où il est facultatif et l'utilisation de l'itinéraire le moins compliqué vers toutes mes destinations (pas nécessairement le chemin le plus court).

Je déteste cette solution plus courte que celle que j'ai proposée à l'origine. Cette solution est ici un moyen plus général d'accomplir la tâche, qui pourrait commencer et se terminer où vous le souhaitez. Le voici, dans son intégralité.

2245 octets (beaucoup plus général)

1 is waiting at Starchild Numerology.Go to Starchild Numerology:w 1 l 2 r 1 l 1 l 2 l.Pickup a passenger going to Cyclone.Go to Cyclone:e 1 l 2 r.[B]Pickup a passenger going to Addition Alley.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:n 2 r 2 r.Pickup a passenger going to Cyclone.Go to Cyclone:n 5 l 2 l.Pickup a passenger going to Chop Suey.Go to Zoom Zoom:n.0 is waiting at Writer's Depot.Go to Writer's Depot:w.Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 3 r 1 l 1 r.Go to Chop Suey:e 1 r 1 l 1 r.[C]Switch to plan E if no one is waiting.Pickup a passenger going to Crime Lab.2 is waiting at Writer's Depot.Go to Writer's Depot:n 1 l 3 l.Pickup a passenger going to Crime Lab.Go to Crime Lab:n 3 r 2 r.Switch to plan D if no one is waiting.Pickup a passenger going to KonKat's.Go to Narrow Path Park:n 5 l.Pickup a passenger going to KonKat's.Go to KonKat's:e 1 r.Pickup a passenger going to Narrow Path Park.Go to Narrow Path Park:n 2 l.Go to Chop Suey:e 1 r 1 l 1 r.Switch to plan C.[D]Go to Chop Suey:n 5 r 1 l.Switch to plan C.[E]Go to Narrow Path Park:n 1 l 1 r 1 l.Pickup a passenger going to Crime Lab.0 is waiting at Writer's Depot.Go to Writer's Depot:w 1 l 1 r 2 l.1 is waiting at Starchild Numerology.Pickup a passenger going to Crime Lab.Go to Crime Lab:n 3 r 2 r.Switch to plan F if no one is waiting.Pickup a passenger going to Riverview Bridge.Go to Cyclone:n 4 l 2 l.Pickup a passenger going to Post Office.Go to Riverview Bridge:n 2 r.\n is waiting at Writer's Depot.Go to Writer's Depot:w 2 l.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.Go to Starchild Numerology:s 1 r 1 l 1 l 2 l.Switch to plan G.[F]Go to Cyclone:s 1 r 1 l 2 r.Pickup a passenger going to Riverview Bridge.Go to Riverview Bridge:n 2 r.Go to Starchild Numerology:w 2 l 3 l 2 r.[G]Pickup a passenger going to Addition Alley.Go to Addition Alley:e 1 l 2 r 3 r 1 r.Pickup a passenger going to Magic Eight.101 is waiting at Starchild Numerology.Go to Starchild Numerology:n 1 l 1 l 3 l 2 r.Pickup a passenger going to Magic Eight.Go to Magic Eight:w 1 r 2 r 1 r.Switch to plan H if no one is waiting.Pickup a passenger going to Cyclone.Go to Cyclone:n 1 l 2 r.Switch to plan B.[H]

Essayez-le en ligne!

Et si la méga-triche est autorisée, celle-ci est beaucoup plus courte que les deux dernières.

456 octets (triche totale)

1\n3\n4\n5\n6\n7\n8\n9\n10\n11\n13\n14\n15\n16\n17\n18\n19\n30\n31\n33\n34\n35\n36\n37\n38\n39\n40\n41\n43\n44\n45\n46\n47\n48\n49\n50\n51\n53\n54\n55\n56\n57\n58\n59\n60\n61\n63\n64\n65\n66\n67\n68\n69\n70\n71\n73\n74\n75\n76\n77\n78\n79\n80\n81\n83\n84\n85\n86\n87\n88\n89\n90\n91\n93\n94\n95\n96\n97\n98\n99\n100 is waiting at Writer's Depot.Go to Writer's Depot:w 1 l 2 r 1 l 2 l.Pickup a passenger going to Post Office.Go to Post Office:n 1 r 2 r 1 l.

Essayez-le en ligne!

JosiahRyanW
la source
Cette citation est utile, merci. Cependant, je ne suis pas d'accord avec le "ne pas avoir à aller au Taxi Garage". La sortie avec une erreur est-elle autorisée? Je ne trouve pas un bon ensemble de règles générales à ce sujet.
JosiahRyanW
Ouais, généralement STDERR est ignoré. Méta pertinente
Jo King
Certaines de mes réponses pourraient en bénéficier.
JosiahRyanW
22

Python 2 , 39 octets

k=7
exec"k+=10;print(k>177)*10+k/9;"*81

Essayez-le en ligne!

Utilise des opérations arithmétiques uniquement pour générer des nombres sans 2.

La valeur ksuit la progression arithmétique 17, 27, 37, 47, ...qui, lorsqu'elle est divisée par 9 par le plancher, donne 1,3,4,5,6,7,8,9,10,11,13,14,...les nombres qui ne se terminent pas par 2. Pour sauter de 20 à 29, les sorties sont augmentées de 10 au-delà d'un certain seuil.

xnor
la source
14

JavaScript (ES6), 43 octets

Renvoie la séquence sous forme de chaîne séparée par des virgules.

f=(n=98)=>n?f(n-=n-27?n%10?1:2:11)+[,n+3]:1

Essayez-le en ligne!

Pourquoi le faire de cette façon?

Nous pourrions parcourir de 1 à 100 et tester chaque nombre avec /2/.test(n), ce qui est une déclaration assez concise. Mais dans ce scénario, nous aurions à gérer des entrées vides avec quelque chose comme (/2/.test(n)?'':...), ce qui ajoute quelques octets de plus.

Par exemple, cela fonctionnerait pour 45 octets :

f=(n=1)=>n>99?n:(/2/.test(n)?'':[n,,])+f(n+1)

Ou cela fonctionnerait pour 44 octets , si une virgule de début est acceptable:

f=(n=100)=>n?f(n-1)+(/2/.test(n)?'':[,n]):''

Dans l'ensemble (et jusqu'à preuve du contraire), il s'avère plus court de sauter immédiatement toutes les valeurs de n qui contiennent un 2 .

Commenté

f =                 // f is a recursive function taking:
(n = 98) =>         // n = counter, initialized to 98
  n ?               // if n is not equal to 0:
    f(              //   prepend the result of a recursive call:
      n -=          //     update n:
        n - 27 ?    //       if n is not equal to 27:
          n % 10 ?  //         if n is not a multiple of 10:
            1       //           subtract 1 from n
          :         //         else:
            2       //           subtract 2 from n
        :           //       else (n = 27):
          11        //         subtract 11 from n (--> 16)
    ) +             //   end of recursive call
    [, n + 3]       //   append a comma, followed by n + 3; notice that this is the value
                    //   of n *after* it was updated for the recursive call; at the first
                    //   iteration, we have: n = 98 -> updated to 97 -> n + 3 = 100
  :                 // else (n = 0):
    1               //   output the first term '1' and stop recursion
Arnauld
la source
1
C'est trop cool!
Emigna
1
41 octets en utilisant votre astuce si nous pouvions avoir une virgule en tête.
Oliver
12

R , 19 octets

grep(2,1:100,inv=T)

Essayez-le en ligne!

ngm
la source
grep(2,1:100,inv=T)pour 19.
J.Doe
2
Ha - c'est ce que j'ai essayé au début mais v=Faussi parce qu'évidemment, je me suis dit, je veux les valeurs et non les indices ... duh!
ngm
L'inversion de l'expression régulière elle-même est un octet plus court (dans ce cas).
ngm
Ne fonctionne pas, laisse encore 2 secondes. Vous auriez besoin de ^[^2]*$ce qui, euh, n'est pas plus court.
J.Doe
4
Quoi, sommes-nous censés vérifier nos réponses maintenant?
ngm
10

Perl 6 , 22 octets

put grep {!/2/},1..100

Essayez-le en ligne!

Il y a probablement une meilleure façon de faire le bloc de code, mais je n'ai pas pu trouver d'adverbe regex pour inverser la correspondance

Jo King
la source
retirez les crochets autour des chiffres. Sinon ça va.
Monolica
@Monolica Fixed
Jo King
1
@Monolica Il semble un peu bizarre que vous choisissiez ma réponse comme non autorisée à imprimer sous forme de liste, alors que tant d'autres réponses le font. D'un autre côté, cela ne me coûte pas d'octets, donc peu importe
Jo King
7

PowerShell , 22 16 octets

1..100-notmatch2

Essayez-le en ligne!

-6 octets grâce à mazzy

Génère la plage 1vers 100, puis extrait les objets où ils font -notmatchle nombre 2. Exécuter le -notmatchcontre un tableau comme celui-ci agit comme un filtre sur le tableau. Chaque élément est laissé sur le pipeline et la sortie est implicite.

AdmBorkBork
la source
? 1..100-notmatch2
mazzy
@mazzy Bien sûr, pourquoi n'y ai-je pas pensé? Merci!
AdmBorkBork
6

Haskell , 48 33 31 octets

Merci @JonathanFrech pour quinze octets enregistrés et @xnor pour deux autres! J'ai raté un gros golf et je ne savais pas que cela main=print$pouvait être omis.

filter(all(/='2').show)[1..100]

Essayez-le en ligne!

Facilement étendu en changeant le 100. Stringifie tous les nombres et ne conserve que ceux sans '2'.

Khuldraeseth na'Barya
la source
Voyez ceci ; ce main=print$n'est pas nécessaire. Avez-vous testé votre code? Je ne pense pas que ce elem'2'soit une syntaxe valide. Pourquoi map? Fait simplement filter(not.elem '2'.show)[1..100]le travail.
Jonathan Frech
@JonathanFrech Wow, ça a manqué. : / Aucune idée de l'emplacement de cet espace! C'est là dans le TIO ...
Khuldraeseth na'Barya
2
Haskell a notElempour not.elem, mais est encore plus court all(/='2').
xnor
6

Utilitaires Bash + GNU, 16

  • 1 octet enregistré grâce à @Dennis.
seq 100|sed /2/d

Essayez-le en ligne!

Traumatisme numérique
la source
6

Japt , 7 octets

Lõs kø2

Lõs kø2     Full Program
Lõs         Range ["1"..."100"] (numbers are casted to string)
    k       Remove
     ø2     anything that contains "2"

Essayez-le en ligne!

Luis felipe De jesus Munoz
la source
5

Java 10, 67 octets

v->{for(int i=0;++i<101;)if(i%10!=2&i/10!=2)System.out.println(i);}

Essayez-le en ligne.

Explication:

v->{                           // Method with empty unused parameter and no return-type
  for(int i=0;++i<101;)        //  Loop `i` in the range (0, 101)
    if(i%10!=2                 //   If `i` modulo-10 is not 2
       &i/10!=2)               //   And `i` integer-divided by 10 is not 2 either
      System.out.println(i);}  //    Print `i` with a trailing newline
Kevin Cruijssen
la source
5

Rétine , 19 17 octets


100*
.
$.>`¶
A`2

Essayez-le en ligne! Edit: sauvé 2 octets grâce à @ovs, bien que la dernière ligne contienne désormais une nouvelle ligne. Explication:


100*

Insérez 100 caractères.

.
$.>`¶

Remplacez chaque caractère par le nombre de caractères jusqu'à et y compris ce caractère, plus une nouvelle ligne.

A`2

Supprimez toutes les entrées contenant un 2.

Neil
la source
Fonctionne . $.>`¶pour la deuxième étape?
2018
@ovs J'avais eu quelque chose de plus compliqué avant et je suis passé à L$éviter une nouvelle ligne principale, donc je ne m'étais pas rendu compte que je pouvais revenir en arrière, merci.
Neil
4

Stax , 6 octets

Ç░τ╒╜h

Exécuter et déboguer

Déballé, non golfé et commenté, il ressemble à ceci.

AJ  10 squared
f   output each value in [1 .. n] satisfying the following filter
 E  get array of decimal digits in number
 2#     count the number of 2s
 !  logical not

Exécutez celui-ci

récursif
la source
4

Wolfram Language (Mathematica) , 42 octets

Print@⌈Range[1,100,10/9]~Drop~{18,26}⌉

Essayez-le en ligne!

La séquence arithmétique 1, 19/9, 29/9, 39/9, ... croît juste au bon rythme en prenant le plafond saute tous les nombres se terminant par 2. Ensuite, nous nous débarrassons de 20 à 29 en Dropcinglant les valeurs aux indices 18 à 26.

Misha Lavrov
la source
Je ne sais pas si le consensus est que Printc'est nécessaire, mais qui s'en soucie vraiment, de toute façon.
Misha Lavrov
[...] mais qui s'en soucie vraiment, de toute façon. - c'est l'esprit ...
Jonathan Frech
Faites \[LeftCeiling]et \[RightCeiling]comptez vraiment comme un seul octet :)
user6014
@ user6014 Je les compte comme les 3 octets qu'ils prennent en Unicode, mais c'est toujours un peu moins cher qu'une Ceilingcommande réelle .
Misha Lavrov
@MishaLavrov Sonne juste! Solution soignée.
user6014
4

C (GCC) , 62 55 octets

• 7 octets grâce à Jonathan Frech

f(n){for(n=0;++n-101;n/10-2&&n%10-2&&printf("%d,",n));}

Boucles de 1 à 100 et imprime le nombre uniquement si 2 n'est pas à la place des un ou des dizaines.

Essayez-le en ligne!

Endormi
la source
1
55 octets .
Jonathan Frech
@JonathanFrech merci c'est intelligent!
Asleepace
4

Powershell, 19 octets

1..100-split'.*2.*'

Ce script affiche une valeur nulle à la place «numéros avec 2 à l'intérieur» et résout complètement la tâche «le numéro 2 ne devrait apparaître nulle part dans la séquence».

Sortie:

1


3
4
5
6
7
8
9
10
11


13
14
15
16
17
18
19




















30
31


33
34
35
36
37
38
39
40
41


43
44
45
46
47
48
49
50
51


53
54
55
56
57
58
59
60
61


63
64
65
66
67
68
69
70
71


73
74
75
76
77
78
79
80
81


83
84
85
86
87
88
89
90
91


93
94
95
96
97
98
99
100

Powerhsell (la sortie ne contient pas de valeurs nulles), 24 octets

1..100-split'.*2.*'-ne''
mazzy
la source
4

sh + coreutils, 16 caractères

seq 100|sed /2/d

Génère une séquence de 1 à 100 (inclus) et supprime toutes les lignes contenant «2».

therealfarfetchd
la source
Ce code est identique à la réponse de Digital Trauma .
Ruslan
oh merde, je n'ai pas vu celui-là, même si j'ai vérifié. Dois-je le supprimer car le mien a été posté plus tard?
therealfarfetchd
4

Z80Golf , 49 48 octets

00000000: 1630 2e0a 5faf f57b fe02 2818 82ff f182  .0.._..{..(.....
00000010: ff92 3cf5 7dff f1bd 280a fe02 2803 f518  ..<.}...(...(...
00000020: e63c 18fa 7b3c bd20 db3e 31ff 3dff ff76  .<..{<. .>1.=..v

Essayez-le en ligne!

Assemblée:

ld d, 30h			; ascii '0' character
ld l, 0Ah			; number 10 and ascii newline
tens:
	ld e,a			; store tens digit
	xor a			; reset ones digit to 0
	push af			; store initial ones digit 0
	ones:
		ld a,e		; get stored tens digit
		cp 2
		jr z,cont	; if tens digit==2(e.g.20-29),skip loop
		add d
		rst 38h 	; print tens digit
		pop af		; get stored ones digit
		add d
		rst 38h 	; print ones digit
		sub d
		inc a		; increment ones digit
		push af		; store ones digit
		ld a, l
		rst 38h 	; print newline
		pop af		; get stored ones digit again
		cp l
		jr z,cont	; if ones digit==10, break loop
		cp 2
		jr z,inc_again	; if ones digit==2, incr again
		repeat_loop:
		push af		; store ones digit again
		jr ones		; repeat print loop
		inc_again:
			inc a
			jr repeat_loop
		
	cont:
	ld a,e			; get stored tens digit
	inc a			; increment tens digit
	cp l
	jr nz, tens		; if tens place!=10, continue loop
ld a,31h
rst 38h				; print '1'
dec a
rst 38h				; print '0'
rst 38h				; print '0'
halt

Un octet enregistré avec le repeat_loopsaut

Logern
la source
4

Python 3 , 53 51 50 49 46 octets

['2'in str(n)or print(n)for n in range(1,101)]

Essayez-le en ligne!

Pas le langage le plus fort pour cette tâche, mais je suis nouveau dans le golf.

Merci aux commentateurs pour leurs conseils!

Gigaflop
la source
Bienvenue chez PPCG! Vous pouvez le réduire à un round 50 en supprimant l'espace avant le if.
ElPedro
[print(n)for n in range(1,101)if"2"not in str(n)]travaux.
JosiahRyanW
Alternativement, basé sur l'une des réponses de Python 2:n=17;exec("print((n>177)*10+n//9);n+=10;"*81)
JosiahRyanW
@JosiahRyanW Je n'étais pas au courant de l'impression implicite, merci!
Gigaflop
1
'2'in str(n)or print(n)est plus court qu'un gardien de compréhension.
Jonathan Frech
4

Tcl , 44 octets

time {if ![regexp 2 [incr i]] {puts $i}} 100

Essayez-le en ligne!


Tcl , 47 octets

time {if [incr i]%10!=2&$i/10!=2 {puts $i}} 100

Essayez-le en ligne!

Tcl , 50 octets

time {if {2 ni [split [incr i] ""]} {puts $i}} 100

Essayez-le en ligne!

sergiol
la source
# Tcl , 49 octets time {if [string f 2 [incr i]]==-1 {puts $i}} 100 - Outgolf échoué!
sergiol
Vous pouvez remplacer votre test par un regexp: ![regexp 2 [incr i]]pour -3 octets
david
@david Comment était-il possible que je ne suis pas venu avec la solution suggérée par vous d'utiliser des expressions régulières? Merci.
sergiol
3

Bash, 31 bytes

printf %d\\n {1..100}|grep -v 2

Try it online!

Thanks to Digital Trauma for short loop.

ketone
la source
1
Welcome to PPCG! How about echo $i instead of the printf? Or even better printf %d\\n {1..100}|grep -v 2?
Digital Trauma
yeah right. i ll update my answer.
ketone
i am learning actually i don't know that much btw thanks.
ketone
Just beats my echo {1..100}|tr ' ' \\n|grep -v 2
Mark Perryman
-1 byte if you use sed /2/d instead of grep -v 2.
Ruslan
3

ORK, 1092 bytes

There is such a thing as a t
A t can w a number
A t can d a number
A t has a t which is a number

When a t is to w a number:
I have a mathematician called M
M's first operand is the number
M's second operand is 1
M is to add
The number is M's result
My t is 0
I have a number called n
n is the number
I am to d n
M's first operand is my t
M's second operand is 1
M is to compare
I have a scribe called W
If M says it's less then W is to write the number
If M says it's less then W is to write " "
M's first operand is the number
M's second operand is 100
M is to compare
If M says it's less then I am to loop

When a t is to d a number:
I have a mathematician called M
M's first operand is the number
M's second operand is 10
M is to modulo
I have a mathematician called N
N's first operand is M's result
N's second operand is 2
N is to compare
If N says it's equal then my t is 1
M is to divide
The number is M's result
M's first operand is the number
M's second operand is 0
M is to compare
If M says it's greater then I am to loop

When this program starts:
I have a t called T
T is to w 0

Try it online!

Objects R Kool. Output is a space-delimited list of numbers.

This translates (approximately) to the following pseudocode:

class t {
	int t;
	
	void w(number) {
		label T_W;
		mathematician M;
		M.first_operand = number;
		M.second_operand = 1;
		M.add();
		number = M.result;
		t = 0;
		int n = number;
		d(n);
		M.first_operand = t;
		M.second_operand = 1;
		M.compare();
		scribe W;
		if M.its_less { W.write(number); }
		if M.its_less { W.write(" "); }
		M.first_operand = number;
		M.second_operand = 100;
		M.compare();
		if M.its_less { goto T_W; }
	}
	
	void d(number) {
		label T_D;
		mathematician M;
		M.first_operand = number;
		M.second_operand = 10;
		M.modulo();
		mathematician N;
		N.first_operand = M.result;
		N.second_operand = 2;
		N.compare();
		if N.its_equal { t = 1; }
		M.divide();
		number = M.result;
		M.first_operand = number;
		M.second_operand = 0;
		M.compare();
		if M.its_greater { goto T_D; }
	}
}

void main() {
	t T;
	T.w(0);
}

As you can see, everything is done using objects, including basic math and IO functions (through the built-in mathematician and scribe classes). Only whole functions can loop, which explains the need for an object with two functions to do the work.

JosiahRyanW
la source
3

MathGolf, 7 6 bytes

♀╒Ç{2╧

Try it online!

Explanation

♀╒       Push 100 and convert to 1-based range ([1,2,...,100])
  Č{     Inverse filter by block
    2╧   Does the number contain 2?
maxb
la source
3

PHP 7.1, 40 bytes

while($i++<100)strstr($i,50)||print$i._;

prints numbers separated by underscores. Run with -nr or try it online.

Titus
la source
Nice use of PHP's wacky behavior to separate the numbers, lol
Roberto Maldonado
1
The preg_filter() based one is interesting. (I never used that function. 🤫) That one would be shorter with preg_grep(): <?=join(_,preg_grep("/2/",range(1,100),1));.
manatwork
2

Red, 44 bytes

repeat n 100[unless find form n"2"[print n]]

Try it online!

Uses unless instead of if not, because why not? :)

Galen Ivanov
la source
2

brainfuck, 176 bytes

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

Try it online!

Shorter is definitely possible. This generates the numbers 1,3,4,5,6,7,8,9 and 0,1,3,4,5,6,7,8,9. First it outputs each number in the first list, then it outputs every combination of the first and second list, then finally prints just 100.

Explanation:

---------   Push minus 9
[           Repeat 9 times
  [-<]-[>]    Add the negative of the number to the first list
  >[>]-[-<]<  Add the negative of the number to the second list
  ++          Increment the counter
]
Tape: 255 254 253 252 251 250 249 248 247 0' 0 246 247 248 249 250 251 252 253 254
-[>-<+++++++++]>--  Push 197
Tape: 255 254 253 252 251 250 249 248 247 0 197' 246 247 248 249 250 251 252 253 254
[
  >[->]<    Subtract 197 from every element in both lists to convert to digits
  [<<<]>>
  [->]>-
]
Tape: 58 57 56 55 54 53 52 51 49 0' 49 50 51 52 53 54 55 56 57
<<,<-[-<]>[>]<  Remove the 0 and the 2 from the first list
Tape: 58 57 56 55 54 53 52 51 0 0 0' 49 50 51 52 53 54 55 56 57
[  Loop over the first list
  .[->+<]        Print digit
  ++++++++++.,<  Print a newline
]
>>[>]>>->-   Remove the 2 from the second list
<<<<      
[  Loop over first list
  >>>
  [  Loop over second list
    <<[<]<.        Print first digit
    >>[>]>.        Print second digit
    [-<+>]         Move second digit over one
    ++++++++++.,>  Print a newline
  ]
  <<[<]<,<  Remove the digit from the first list and move to the next
]
>>>>.<..  Print 100 using the second list
Jo King
la source
2

SimpleTemplate, 51 bytes

This was a fun challenge! And it is a challenge where my language can do well.

{@forfrom 1to100}{@if_ is notmatches"<2>"}{@echol_}

Cycles through all values from 1 to 100, outputting the ones that don't have 2, separated by a newline.

You can try it on http://sandbox.onlinephpfunctions.com/code/2c97a2b6954c29844f1079938da771d51e2e0d99

Ungolfed:

{@for i from 1 to 100}
    {@if i is not matches "<2>"}
        {@echo i, "\n"}
    {@/}
{@/}

The {@/} is used to close the {@for ...} and {@if ...}, but is optional.
When compiling to PHP, it adds the needed closing.


If you're curious, the golfed code results in this PHP code:

// {@forfrom 1to100}
// ~ optimization enabled ~ inlining the results
foreach(array(...) as $DATA['_']){

    // {@if_ is notmatches"<2>"}
    if(!(preg_match("<2>", (isset($DATA['_'])?$DATA['_']:null)))) {

        // {@echol_}
        echo implode('', $FN['array_flat']((isset($DATA['_'])?$DATA['_']:null)));echo PHP_EOL;


// AUTO-CLOSE
};};

Where $FN['array_flat'] is defined outside of this code.

Ismael Miguel
la source