Nomor tampilan kurang dari 2

22

Tampilkan angka dari satu hingga seratus (dalam urutan yang meningkat), tetapi angka 2 seharusnya tidak muncul di mana pun dalam urutan. Jadi, misalnya, angka dua ( 2) atau dua puluh tiga ( 23) tidak boleh dalam urutan.

Berikut ini adalah contoh output, dengan baris baru memisahkan angka:

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
sumber
7
Saya menganggap kriteria yang menang adalah kode-golf bukan?
Luis felipe De jesus Munoz
4
Situs kami tidak bekerja dengan cara yang sama dengan situs lain dari jaringan Stack Exchange. Mengenai jawaban yang diterima, harap pertimbangkan komentar ini dari Jonathan Allan . Dan tolong tambahkan kriteria kemenangan.
Arnauld
1
Bolehkah saya menyarankan menggunakan Sandbox di masa depan untuk mendapatkan umpan balik tentang tantangan Anda sebelum memposting?
Jo King
1
@ Monolica Jika jawaban terpendek menang, Anda akan memerlukan tag [code-golf]. Berikut adalah daftar untuk semua tag kriteria kemenangan yang tersedia untuk referensi di masa mendatang.
Kevin Cruijssen
4
@ user202729 Pembatasan sewenang-wenang tidak disukai, tidak dilarang.
Jonathan Frech

Jawaban:

12

05AB1E , 6 byte

тLʒ2å_

Cobalah online!

Penjelasan

тL       # push [1 ... 100]
  ʒ      # filter, keep only elements that
   2å_   # does not contain 2
Emigna
sumber
26

Taksi , 2399 2391 2370 1783 1773 1706 byte

-8 byte untuk menyadari bahwa, daripada meninggalkan penumpang tertentu di Sunny Side Park selamanya, lebih baik membuangnya dari Riverview Bridge. Ah, betapa indahnya kota ini.

-21 byte untuk mengeluarkan komentar yang dengan bodoh kutinggalkan.

-587 bytes hanya dengan mengubah seluruh cara saya melakukan ini (tampaknya cara yang lebih pendek adalah dengan hitung; integer-dividing [17, 27, 37, 47, ...] dengan 9 menghasilkan urutan, tetapi Anda harus melewati 20 sendiri.)

-17 byte untuk realisasi bahwa setiap string yang terbungkus tanda kutip tanpa spasi sama sekali tidak membutuhkan tanda kutip (terima kasih Jo King!).

-67 byte untuk realisasi bahwa linebreak adalah opsional.

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]

Cobalah online!

Yang ini tidak memenangkan saya kompetisi golf kode apa pun dalam waktu dekat, tetapi saya memutuskan untuk mencoba Taksi esolang.

Taksi adalah esolang di mana semua pemrograman dilakukan dengan mengambil dan mengantar penumpang di berbagai halte di kota fiksi Townsburg. Tentu saja, taksi Anda kadang-kadang akan kehabisan bensin, jadi Anda juga perlu mengunjungi pompa bensin sesering mungkin, dan membayar menggunakan kredit yang Anda terima sebagai ongkos (dalam hal ini, saya hanya perlu berhenti untuk gas - di Go More - satu kali per loop iterasi!).

Saya menggunakan beberapa trik yang mengurangi sedikit filesize, seperti pengarahan ulang arah seperti east 1st left, 2nd rightseperti e 1 l 2 r, menghapus kata di themana itu opsional, dan menggunakan rute paling rumit menuju semua tujuan saya (tidak harus jalur terpendek).

Saya benci solusi yang lebih singkat ini lebih dari solusi yang saya buat. Solusi ini di sini adalah cara yang lebih umum untuk menyelesaikan tugas, yang bisa dimulai dan diakhiri di mana pun Anda inginkan. Ini dia, secara keseluruhan.

2245 byte (lebih umum)

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]

Cobalah online!

Dan jika kecurangan mega diizinkan, yang ini jauh lebih pendek dari salah satu dari dua yang terakhir.

456 byte (benar-benar curang)

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.

Cobalah online!

JosiahRyanW
sumber
Kutipan itu sangat membantu, terima kasih. Namun, saya tidak setuju dengan hal "tidak harus pergi ke Garasi Taksi". Apakah diizinkan keluar dengan kesalahan? Saya tidak dapat menemukan seperangkat aturan umum yang baik tentang ini.
JosiahRyanW
Ya, umumnya STDERR diabaikan. Meta yang relevan
Jo King
Beberapa jawaban saya bisa mendapat manfaat dari itu.
JosiahRyanW
22

Python 2 , 39 byte

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

Cobalah online!

Menggunakan operasi aritmatika hanya untuk menghasilkan angka tanpa angka 2.

Nilai kmengikuti perkembangan aritmatika 17, 27, 37, 47, ..., yang ketika lantai-dibagi oleh 9 memberikan 1,3,4,5,6,7,8,9,10,11,13,14,...yang menghitung angka-angka tidak berakhir pada 2. Untuk melewati 20 hingga 29, output meningkat 10 melewati ambang tertentu.

Tidak
sumber
14

JavaScript (ES6), 43 byte

Mengembalikan urutan sebagai string yang dipisahkan koma.

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

Cobalah online!

Kenapa melakukannya dengan cara ini?

Kita dapat beralih dari 1 hingga 100 dan menguji setiap angka dengan /2/.test(n), yang merupakan pernyataan yang agak ringkas. Tetapi dalam skenario ini, kita harus menangani entri kosong dengan sesuatu seperti (/2/.test(n)?'':...), yang menambahkan beberapa byte lagi.

Misalnya, ini akan bekerja selama 45 byte :

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

Atau ini akan bekerja selama 44 byte , jika koma utama dapat diterima:

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

Semua dalam semua (dan sampai terbukti sebaliknya), ternyata lebih pendek untuk langsung melompati semua nilai n yang mengandung 2 .

Berkomentar

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
sumber
1
Ini sangat keren!
Emigna
1
41 byte menggunakan trik Anda jika kami dapat memiliki koma terkemuka.
Oliver
12

R , 19 byte

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

Cobalah online!

ngm
sumber
grep(2,1:100,inv=T)untuk 19.
J.
2
Ha - ini adalah apa yang saya coba pada awalnya tetapi dengan v=Fjuga karena jelas, saya berpikir sendiri, saya ingin nilai dan bukan indeks ... ya!
ngm
Membalik regex itu sendiri adalah byte yang lebih pendek (dalam hal ini).
ngm
Tidak berfungsi, masih memungkinkan 2s lewat. Anda akan membutuhkan ^[^2]*$yang, um, tidak lebih pendek.
J.Oh
4
Apa, kita seharusnya memeriksa jawaban kita sekarang?
ngm
10

Python 2 , 44 byte

print[n for n in range(1,101)if'2'not in`n`]

Cobalah online!

TFeld
sumber
10

Perl 6 , 22 byte

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

Cobalah online!

Mungkin ada cara yang lebih baik untuk melakukan blok kode, tetapi saya tidak dapat menemukan kata keterangan regex untuk membalikkan pertandingan

Jo King
sumber
lepaskan tanda kurung di sekitar angka. Kalau tidak, tidak apa-apa.
Monolica
@Monolica Diperbaiki
Jo King
1
@ Monolica Tampaknya sedikit aneh bahwa Anda memilih jawaban saya sebagai tidak diizinkan untuk mencetak sebagai daftar, di mana begitu banyak jawaban lain melakukannya. Di sisi lain, itu tidak dikenakan biaya byte, jadi apa pun
Jo King
7

PowerShell , 22 16 byte

1..100-notmatch2

Cobalah online!

-6 byte berkat mazzy

Buat rentang 1ke 100, lalu tarik benda-benda itu di mana mereka melakukan -notmatchangka 2. Menjalankan -notmatchmelawan array seperti ini bertindak seperti filter pada array. Setiap item dibiarkan di dalam pipa, dan output tersirat.

AdmBorkBork
sumber
? 1..100-notmatch2
mazzy
@ Mazzy Tentu saja, mengapa saya tidak memikirkan itu? Terima kasih!
AdmBorkBork
6

Haskell , 48 33 31 byte

Terima kasih @JonathanFrech selama lima belas byte disimpan, dan @xnor untuk dua lainnya! Saya melewatkan golf besar dan tidak sadar main=print$bisa dihilangkan.

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

Cobalah online!

Mudah diperpanjang dengan mengubah 100. Menentukan semua angka dan hanya menyimpannya tanpa'2' .

Khuldraeseth na'Barya
sumber
Lihat ini ; yang main=print$tidak perlu. Sudahkah Anda menguji kode Anda? Saya tidak berpikir itu elem'2'sintaks yang valid. Mengapa map? Cukup filter(not.elem '2'.show)[1..100]lakukan pekerjaan.
Jonathan Frech
@ JonathanFrech Wow, merindukan itu. : / Tidak ada petunjuk kemana perginya ruang itu! Itu ada di TIO ...
Khuldraeseth na'Barya
2
Haskell memiliki notElemuntuk not.elem, tetapi bahkan lebih pendek adalah all(/='2').
xnor
6

Utilitas Bash + GNU, 16

  • 1 byte disimpan berkat @Dennis.
seq 100|sed /2/d

Cobalah online!

Trauma Digital
sumber
6

Japt , 7 byte

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"

Cobalah online!

Luis felipe De jesus Munoz
sumber
5

Java 10, 67 byte

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

Cobalah online.

Penjelasan:

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
sumber
5

Retina , 19 17 byte


100*
.
$.>`¶
A`2

Cobalah online! Sunting: Disimpan 2 byte berkat @ovs, meskipun baris terakhir sekarang menyertakan baris baru. Penjelasan:


100*

Masukkan 100 karakter.

.
$.>`¶

Ganti setiap karakter dengan jumlah karakter hingga dan termasuk karakter itu, ditambah baris baru.

A`2

Hapus semua entri yang mengandung a 2.

Neil
sumber
Apakah . $.>`¶berhasil untuk tahap kedua?
ov
@ovs saya punya sesuatu yang lebih rumit sebelumnya dan beralih ke L$untuk menghindari baris baru, jadi saya tidak menyadari bahwa saya bisa beralih kembali, terima kasih.
Neil
4

Stax , 6 byte

Ç░τ╒╜h

Jalankan dan debug itu

Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.

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

Jalankan yang ini

rekursif
sumber
4

Bahasa Wolfram (Mathematica) , 42 byte

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

Cobalah online!

Urutan aritmatika 1, 19/9, 29/9, 39/9, ... tumbuh pada tingkat yang tepat sehingga mengambil plafon melompati semua angka yang berakhiran 2. Kemudian kita menyingkirkan 20 hingga 29 dengan cara Dropping nilai-nilai pada indeks 18 hingga 26.

Misha Lavrov
sumber
Saya tidak tahu apakah konsensus itu Printdiperlukan, tetapi siapa yang peduli?
Misha Lavrov
[...] tetapi siapa yang benar-benar peduli. - itulah semangatnya ...
Jonathan Frech
Lakukan \[LeftCeiling]dan \[RightCeiling]benar - benar dihitung sebagai satu byte :)
user6014
@ user6014 Saya menghitung mereka sebagai 3 byte yang mereka ambil di Unicode, tapi masih sedikit lebih murah daripada Ceilingperintah yang sebenarnya .
Misha Lavrov
@MishaLavrov Kedengarannya adil! Solusi rapi.
user6014
4

C (GCC) , 62 55 Bytes

• 7 Bytes berkat Jonathan Frech

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

Loop dari 1 hingga 100 dan mencetak nomor hanya jika 2 tidak ada di satu atau puluhan tempat.

Cobalah online!

Tertidur
sumber
1
55 byte .
Jonathan Frech
@JonathanFrech, terima kasih, itu pintar!
Asleepace
4

Powershell, 19 byte

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

Skrip ini menunjukkan nilai nol sebagai gantinya 'angka dengan 2 di dalam' dan sepenuhnya menyelesaikan tugas 'nomor 2 tidak boleh muncul di mana pun dalam urutan'.

Keluaran:

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 (output tidak mengandung nilai null), 24 byte

1..100-split'.*2.*'-ne''
mazzy
sumber
4

sh + coreutils, 16 karakter

seq 100|sed /2/d

Buat urutan dari 1 hingga 100 (inklusif) dan hapus semua baris yang memiliki '2' di dalamnya.

di sanaarfarfd
sumber
Kode ini identik dengan jawaban oleh Digital Trauma .
Ruslan
oh sial, tidak melihat yang itu, meskipun aku sudah memeriksanya. Haruskah saya menghapus ini karena milik saya diposting nanti?
therealfarfetchd
4

Z80Golf , 49 48 byte

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

Cobalah online!

Majelis:

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

Disimpan satu byte dengan repeat_looplompatan

Logern
sumber
4

Python 3 , 53 51 50 49 46 byte

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

Cobalah online!

Bukan bahasa terkuat untuk tugas ini, tapi saya baru bermain golf.

Terima kasih kepada para komentator atas tips mereka!

Gigaflop
sumber
Selamat datang di PPCG! Anda bisa turun ke putaran 50 dengan menghapus spasi sebelum if.
ElPedro
[print(n)for n in range(1,101)if"2"not in str(n)]bekerja.
JosiahRyanW
Atau, berdasarkan pada salah satu jawaban Python 2:n=17;exec("print((n>177)*10+n//9);n+=10;"*81)
JosiahRyanW
@JosiahRyanW Saya tidak mengetahui cetakan tersirat, terima kasih!
Gigaflop
1
'2'in str(n)or print(n)lebih pendek dari penjaga pemahaman.
Jonathan Frech
4

Tcl , 44 byte

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

Cobalah online!


Tcl , 47 byte

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

Cobalah online!

Tcl , 50 byte

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

Cobalah online!

sergiol
sumber
# Tcl , 49 bytes time {if [string f 2 [incr i]]==-1 {puts $i}} 100 - Gagal outgolf!
sergiol
Anda dapat mengganti tes Anda dengan regexp: ![regexp 2 [incr i]]untuk -3 byte
david
@david Bagaimana mungkin saya tidak datang dengan solusi yang disarankan oleh Anda untuk menggunakan ekspresi reguler? Terima kasih.
sergiol
3

Bash , 31 byte

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

Cobalah online!

Berkat Digital Trauma untuk loop pendek.

keton
sumber
1
Selamat datang di PPCG! Bagaimana kalau echo $ibukan printf? Atau bahkan lebih baik printf %d\\n {1..100}|grep -v 2?
Trauma Digital
ya benar. saya akan memperbarui jawaban saya.
keton
Saya belajar sebenarnya saya tidak tahu sebanyak itu terima kasih.
keton
Just beats myecho {1..100}|tr ' ' \\n|grep -v 2
Mark Perryman
-1 byte jika Anda menggunakan sed /2/dbukan grep -v 2.
Ruslan
3

ORK , 1092 byte

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

Cobalah online!

O bjects R K ool. Output adalah daftar angka yang dibatasi ruang.

Ini menerjemahkan (kurang-lebih) ke pseudocode berikut:

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);
}

Seperti yang dapat Anda lihat, semuanya dilakukan menggunakan objek, termasuk matematika dasar dan fungsi IO (melalui built-in matematika dan kelas juru tulis). Hanya seluruh fungsi yang dapat diulang, yang menjelaskan perlunya suatu objek dengan dua fungsi untuk melakukan pekerjaan.

JosiahRyanW
sumber
3

MathGolf , 7 6 byte

♀╒Ç{2╧

Cobalah online!

Penjelasan

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

PHP 7.1, 40 byte

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

mencetak angka yang dipisahkan oleh garis bawah. Jalankan dengan -nratau coba online .

Titus
sumber
Penggunaan perilaku aneh PHP yang bagus untuk memisahkan angka, lol
Roberto Maldonado
1
Yang preg_filter()berbasis menarik. (Saya tidak pernah menggunakan fungsi yang 🤫.) Itu salah satu akan lebih pendek dengan preg_grep(): <?=join(_,preg_grep("/2/",range(1,100),1));.
manatwork
2

Merah , 44 byte

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

Cobalah online!

Penggunaan unlessbukan if not, karena mengapa tidak? :)

Galen Ivanov
sumber
2

brainfuck , 176 byte

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

Cobalah online!

Lebih pendek pasti mungkin. Ini menghasilkan angka 1,3,4,5,6,7,8,9dan 0,1,3,4,5,6,7,8,9. Pertama output setiap nomor dalam daftar pertama, lalu output setiap kombinasi dari daftar pertama dan kedua, kemudian akhirnya mencetak saja100 .

Penjelasan:

---------   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
sumber
2

SimpleTemplate , 51 byte

Ini adalah tantangan yang menyenangkan! Dan itu adalah tantangan di mana bahasa saya dapat melakukannya dengan baik.

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

Siklus melalui semua nilai dari 1 hingga 100, menghasilkan yang tidak memiliki 2, dipisahkan oleh baris baru.

Anda dapat mencobanya di http://sandbox.onlinephpfunctions.com/code/2c97a2b6954c29844f1079938da771d51e2e0d99

Tidak Disatukan:

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

Yang {@/}digunakan untuk menutup {@for ...}dan {@if ...}, tetapi adalah opsional.
Ketika mengkompilasi ke PHP, itu menambahkan penutupan yang dibutuhkan.


Jika Anda penasaran, kode golf menghasilkan kode PHP ini:

// {@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
};};

Di mana $FN['array_flat']didefinisikan di luar kode ini.

Ismael Miguel
sumber