Ketiga kalinya pesona

49

Tugas Anda, jika Anda ingin menerimanya, adalah menulis sebuah program yang menghasilkan bilangan bulat positif (lebih tinggi dari 0). Jika kode sumber digandakan output harus tetap sama. Bagian yang sulit adalah bahwa jika kode sumber diketik tiga kali (rangkap tiga?) Output akan dikalikan 3.

Aturan

  • Anda harus membangun program lengkap . Artinya, output Anda harus dicetak ke STDOUT.

  • Sumber awal harus minimal 1 byte.

  • Kedua bilangan bulat harus berada di basis 10 (mengeluarkannya di basis lain atau dengan notasi ilmiah dilarang).

  • Program Anda tidak boleh mengambil input (atau memiliki input kosong yang tidak digunakan).

  • Mengeluarkan bilangan bulat dengan spasi tambahan / spasi dibolehkan.

  • Zero Leading hanya diperbolehkan jika jumlah digitnya konsisten, mis .: 001 - 001 - 003 atau 004 - 004 - 012

  • Anda tidak boleh mengasumsikan baris baru antara salinan sumber Anda.

  • Ini adalah , jadi kode terpendek (asli) di setiap bahasa menang!

  • Berlaku celah default .

Contoh

Katakanlah kode sumber Anda Abcdan output yang sesuai adalah 4. Jika saya menulis AbcAbcdan menjalankannya, hasilnya harus tetap 4. Namun jika saya menulis AbcAbcAbcdan menjalankannya, hasilnya harus 12.


Tanpa malu-malu dicuri Berasal dari tantangan Tuan Xcoder

alur kerja
sumber
Apakah kode kami diizinkan untuk membaca kode sumbernya sendiri?
AdmBorkBork
@ AdmBorkBork Saya berasumsi begitu, karena ini tidak ditandai sebagai quine .
Erik the Outgolfer
@ AdmBorkBork Ya.
workoverflow
9
Saya tidak berpikir pembatasan 1 byte diperlukan karena tidak mungkin untuk membedakan antara tidak ada dan tidak ada yang diulang 3 kali.
12Me21
1
@ r12 "Abc" adalah contoh untuk program bahasa pemrograman apa pun, katakan jika kode Anda adalah ( int i=1;print i;) maka kode duplikat dari ( int i=1;print i;int i=1;print i;) harus menampilkan nomor yang sama dengan kode asli, dan ketika kode tersebut rangkap tiga ke ( int i=1;print i;int i=1;print i;int i=1;print i;) harus menunjukkan jumlahnya dikalikan 3
workoverflow

Jawaban:

21

Wumpus , 6 byte

{~)
@O

Cobalah online!
Coba dua kali lipat!
Coba tiga kali lipat!

Cetakan 1dan 3.

Penjelasan

Saya menemukan satu ton solusi 6-byte dengan pencarian brute force, tetapi tidak ada untuk 5 byte. Itu tidak selalu berarti tidak ada pada 5 byte tetapi mereka mungkin akan menggunakan karakter aneh atau sesuatu.

Saya akhirnya memilih solusi ini karena tidak mencetak nol terkemuka (kebanyakan dari mereka lakukan) dan memiliki beberapa aliran kontrol yang menarik. Mari kita mulai dengan satu program:

masukkan deskripsi gambar di sini

Jadi kode yang dieksekusi adalah:

{~)O@

{   Turn the IP left by 60°.
~   Swap two implicit zeros on the stack, does nothing.
)   Increment the top zero to 1.
O   Print it.
@   Terminate the program.

Cukup mudah. Sekarang program yang digandakan. Karena baris pertama ditambahkan ke baris kedua, kisi memanjang hingga lebar 5 (dan tinggi 3) yang mengubah aliran kontrol secara signifikan:

masukkan deskripsi gambar di sini

IP memutari loop itu tepat sekali, jadi kode yang dieksekusi adalah:

{~){~)){~O@

{~) As before, we end up with a 1 on top of the stack.
{   Turn left by 60° again.
~   Swap the 1 with the 0 underneath.
))  Increment the zero to 2.
{   Turn left by 60° again.
~   Swap the 2 with the 1 underneath.
O   Print the 1.
@   Terminate the program.

Akhirnya, program tiga kali lipat sangat mirip dengan yang dua kali lipat, tetapi kami mendapatkan beberapa perintah lebih penting ke baris ketiga:

masukkan deskripsi gambar di sini

Jadi kode yang dieksekusi adalah:

{~){~)){~~)O@

{~){~)){~
    As before. We end up with a 1 on top of the stack and a 2 underneath.
~   Swap the 1 with the 2 underneath.
)   Increment the 2 to a 3.
O   Print the 3.
@   Terminate the program.
Martin Ender
sumber
1
saya pikir saya jatuh cinta dengan bahasa ini.
conquistador
11

Sekam , 5 byte

KΣK+1

Cobalah online!

Diulang dua kali!

Diulang tiga kali!

Penjelasan

Cukup sulit untuk membuat program berulang di Husk. Karena sistem tipe melarang fungsi yang dapat diterapkan pada dirinya sendiri, saya harus membiarkan bagian pertama mengevaluasi fungsi, dan sisanya mengevaluasi nilai, dan tipe built-in yang ada dirancang untuk mencegah hal ini. jenis ambiguitas. Token program adalah

  • K, yang membangun fungsi konstan. K a bsetara dengan a.
  • Σ, yang mengambil bilangan bulat n dan mengembalikan bilangan segitiga ke- n .
  • +, yang menambahkan dua angka.
  • 1, yang merupakan literal 1.

Program asli ditafsirkan seperti ini:

   K Σ (K+) 1
== Σ 1
== 1

Ini (K+)adalah fungsi tidak masuk akal yang dimakan oleh yang pertama K.

Program yang diulang dua kali ditafsirkan seperti ini:

   K Σ (K+1KΣK+) 1
== Σ 1
== 1

Fungsi dalam tanda kurung lagi dimakan oleh yang pertama K.

Program berulang tiga ditafsirkan seperti ini:

   K (Σ (K (+1) (KΣK+) 1)) (KΣK+1)
== Σ (K (+1) (KΣK+) 1)
== Σ ((+1) 1)
== Σ (+1 1)
== Σ 2
== 3
Zgarb
sumber
Ini membutuhkan waktu sangat lama untuk menjalankan ...
Weijun Zhou
@ WeijunZhou Jika Anda memiliki banyak kemunculan Kdalam suatu program, ketikkan inferensi menjadi sangat lambat, karena masing-masing dari mereka berpotensi "memakan" sejumlah token dan penerjemah akan mencoba semua kombinasi ...
Zgarb
Begitu ya, terima kasih atas penjelasannya.
Weijun Zhou
2
@Zgarb +1 untuk kek +1
workoverflow
10

Jelly , 7 5 byte

»‘µ*Ḃ

Cobalah online!

Coba dua kali lipat!

Coba tiga kali lipat!

Bagaimana itu bekerja

»‘µ*Ḃ            Main link. No arguments. Implicit argument: x = 0

 ‘               Increment; yield x + 1 = 1.
»                Take the maximum of x and 1. Yields 1.
  µ              Begin a new, monadic chain. Argument: y = 1
    Ḃ            Bit; yield 1 if y is odd, 0 if it is even. Yields 1.
   *             Power; yield y**1 = 1.
»‘µ*Ḃ»‘µ*Ḃ       Main link.

»‘µ*Ḃ            As before.
      ‘          Increment; yield y + 1 = 2.
     »           Take the maximum of 1 and 2. Yields 2.
       µ         Begin a new, monadic chain. Argument: z = 2
         Ḃ       Bit; yield 1 if z is odd, 0 if it is even. Yields 0.
        *        Power; yield z**0 = 1.
»‘µ*Ḃ»‘µ*Ḃ»‘µ*Ḃ  Main link.

»‘µ*Ḃ»‘µ*Ḃ       As before.
           ‘     Increment; yield z + 1 = 3.
          »      Take the maximum of 1 and 3. Yields 3.
            µ    Begin a new, monadic chain. Argument: w = 3
              Ḃ  Bit; yield 1 if w is odd, 0 if it is even. Yields 1.
             *   Power; yield w**1 = 3.
Dennis
sumber
10

Haskell , 24 byte

main=print.div 3$4
 -1--

Cetakan 1: Coba online!

main=print.div 3$4
 -1--main=print.div 3$4
 -1--

Juga mencetak 1: Coba online!

main=print.div 3$4
 -1--main=print.div 3$4
 -1--main=print.div 3$4
 -1--

Cetakan 3: Coba online!

Laikoni
sumber
10

Cubix , 5 byte

)<@OP

Cobalah online: sekali , dua kali , tiga kali .


Penjelasan

Cubix adalah bahasa berbasis tumpukan yang instruksinya melilit bagian luar kubus. Penting untuk dicatat adalah bahwa tumpukan awalnya diisi dengan nol tanpa batas, yang memungkinkan kita untuk "menarik nilai-nilai dari udara tipis" dengan operator daripada mendorongnya secara eksplisit.

Saya harus mengakui bahwa ini ditemukan oleh seorang brute-forcer; Saya tidak akan pernah menemukannya sendiri. Bahkan, @MartinEnder adalah orang yang meminta saya untuk mencoba kekerasan, karena ia telah mencari solusi ini tanpa keberuntungan. Ini adalah satu-satunya solusi yang ditemukan oleh brute-forcer, dan saya percaya itu adalah satu-satunya solusi terpendek di Cubix.

Program tunggal

Lihat saja!

Program asli cocok pada unit cube. Inilah jaring yang tidak dilipat:

  )
< @ O P
  .

IP (penunjuk instruksi) dimulai pada wajah paling kiri ( <menuju) ke timur. The <segera menunjuk itu barat, dan membungkus ke P. Padalah exponentiation, dan karena tidak ada apa-apa di stack, interpreter mengeluarkan dua 0 s dan menghitung 0 0 , yaitu 1 menurut JavaScript. Olalu cetak nilai ini, dan @akhiri program.

Program ganda

Lihat saja!

)<@OP)<@OP

Program 10-byte terlalu panjang untuk dimasukkan ke dalam unit cube, dan karenanya diperluas ke ukuran-2 cube:

    ) <
    @ O
P ) < @ O P . .
. . . . . . . .
    . .
    . .

Seperti sebelumnya, IP dimulai di kiri atas wajah paling kiri. Kali ini, instruksi pertama adalah P, yang mendorong angka 1 seperti sebelumnya. Berikutnya adalah ), yang menambah item teratas, mengubahnya menjadi 2 . Kemudian <putar IP sekitar, dan hits )lagi, mengubah 2 menjadi 3 .

Di sinilah mulai menarik. Pmenaikkan item kedua dari atas ke kekuatan item pertama, yang memberi 0 3 = 0 . Kemudian IP membungkus ke wajah paling kanan dan melewati dua no-ops .sebelum memukul yang lain P. Di sini kita melihat kekhasan lain dari Cubix: operator biner (seperti P) tidak menghapus operan mereka dari stack. Jadi karena tumpukan sekarang [3, 0], kami menghitung 3 0 = 1 , yang Omenghasilkan, dan @mengakhiri program.

Program tiga kali lipat

Lihat saja!

)<@OP)<@OP)<@OP

Seperti halnya program ganda, triple bisa muat pada kubus ukuran-2:

    ) <
    @ O
P ) < @ O P ) <
@ O P . . . . .
    . .
    . .

Program ini dimulai dengan cara yang sama seperti sebelumnya: Ppush 1 , )increment, <menunjuk IP barat, )increment lagi, dan Psekarang push 0 . IP kemudian dililitkan ke sisi <paling kanan, yang tidak melakukan apa-apa karena IP sudah menunjuk ke barat.

Inilah satu perbedaan dari program ganda: )kenaikan 0 di atas tumpukan menjadi 1 . Saat Pmelakukan keajaibannya lagi, kali ini menghitung 3 1 = 3 . Okeluaran dan @berakhir, dan kami membuktikan secara meyakinkan bahwa ketiga kalinya memang pesona.

Produksi ETH
sumber
1
Saya sangat menikmati penjelasan Anda. +1
workoverflow
7

Brain-Flak , 10 byte

<>([]{}())

Cobalah online!

Coba dua kali lipat!

Coba tiga kali lipat!

Penjelasan:

#Toggle stacks
<>

#Push
(
    #Stack-height (initially 0) + 
    []

    #The TOS (initially 0) + 
    {}

    #1
    ()
)

Ketika kita menjalankan ini sekali, itu akan dimasukkan (0 + 0 + 1) == 1ke tumpukan alternatif. Berlari kedua kalinya, menempatkan hal yang sama ke tumpukan utama. Namun, jalankan yang ketiga kalinya, akan mengevaluasi ke (1 + 1 + 1) == 3, dan mendorongnya ke tumpukan alternatif dan mencetak secara implisit.

DJMcMayhem
sumber
7

SQL, 25 24 23 byte

( -1 Byte Dihapus karakter yang salah ketik yang selalu komentar dan melakukan apa-apa )
( -1 Byte Berubah SELECTuntuk PRINTseperti yang direkomendasikan oleh Razvan Socol )

PRINT 2/*
*2+1--*/-1
--

Cara kerjanya:
Di SQL, Anda dapat mengomentari tag komentar, seperti:

/*
'Comment'--*/

vs.

--/*
'Not Comment'--*/

Kode pada 1 baris dengan komentar dikecualikan:
Iterasi pertama: SELECT 2-1Keluaran: 1
Iterasi kedua: SELECT 2-1*2+1Output: 1
Iterasi ketiga: SELECT 2-1*2+1*2+1Output:3

Kronosidal
sumber
1
PRINTbukannya SELECTakan menghemat byte tambahan.
Razvan Socol
6

SOGL V0.12 , 7 5 4 byte

ē»«I

Coba di sini!

Coba dua kali lipat!

Coba tiga kali lipat!

Penjelasan:

ē»«I
ē     push counter, then increment it.
      First time running this will push 0, then 1, then 2.
             TOS on each: 0  1  2
 »    floor divide by 2   0  0  1
  «   multiply by 2       0  0  2
   I  and increment       1  1  3
dzaima
sumber
Saya mencoba untuk melakukan sesuatu di sepanjang baris ē1|, tetapi ternyata tidak ada perintah untuk bitwise ATAU ...
ETHproduksi
@ ETHproductions Ya, saya ingin mencoba sesuatu seperti itu juga, dan yang terbaik yang saya dapatkan adalah ē:2\+: /
dzaima
5

05AB1E , 6 5 byte

.gDÈ+

Cobalah online! atau Coba dua kali lipat! atau Coba tiga kali lipat!

Penjelasan

.g     # push length of stack
  D    # duplicate
   È   # check if even
    +  # add

Tunggal: 0 + (0 % 2 == 0) -> 1
ganda: 1 + (1 % 2 == 0) -> 1
tiga kali lipat:2 + (2 % 2 == 0) -> 3

Emigna
sumber
Haruskah itu ada % 2dalam penjelasan rangkap tiga?
LarsW
@ LarsW: Ya memang :)
Emigna
@ Emigna Saya pikir "periksa apakah ada" sebenarnya 2%_benar?
Magic Octopus Urn
2 + (2 % 2 == 0) -> 2tetapi 2 + !(2 % 2 == 0) -> 3(untuk penjelasan Anda).
Magic Octopus Urn
@MagicOctopusUrn 2%_sama dengan Èya. Tidak yakin apa yang Anda maksud dengan penjelasannya. 2+(2%2==0) = 2+(0==0) = 2+1 = 3. Mungkin akan lebih jelas jika saya telah mengeksploitasi perhitungannya.
Emigna
5

> <> , 9 byte

\5 n;
\\1

Cobalah online!

Coba dua kali lipat!

Coba tiga kali lipat!

Saya menemukan keberuntungan semacam ini, menggunakan filosofi bahwa "jika Anda membuat jalur ikan cukup berbelit-belit, akhirnya sesuatu akan berhasil". Versi asli dan dua kali lipat mencetak 5, dan versi tiga kali lipat mencetak 1 kemudian 5 untuk membuat 15 = 3 × 5. Berikut adalah versi yang dikalikan, untuk teliti Anda:

\5 n;
\\1\5 n;
\\1
\5 n;
\\1\5 n;
\\1\5 n;
\\1
Bukan pohon
sumber
5

Python 2 ,  46 45  39 byte

Terinspirasi oleh jawaban Halvard . Saya senang bahwa tantangan saya menginspirasi yang baru, yang menurut saya lebih menarik. Disimpan 6 byte berkat Kevin Cruijssen .

print open(__file__,"a").tell()/79*3|1#

Cobalah online!

Coba dua kali lipat!

Coba tiga kali lipat!

Cara kerjanya (ketinggalan jaman)

k=open(__file__,"a").tell() # Read the source code in "append" mode and get its length.
                            # Assign it to a variable k.
;print k>>(k==90)#          # Print k, with the bits shifted to the right by 1 if k
                            # is equal to 90, or without being shifted at all overwise.
                            # By shifting the bits of a number to the right by 1 (>>1),
                            # we basically halve it.

Ketika digandakan, panjangnya menjadi 90 , tetapi kode baru diabaikan berkat #, jadi k==90dievaluasi True. Boolean adalah subkelas dari bilangan bulat dalam Python, jadi k>>Truesama dengan k>>1, yang pada dasarnya k / 2 = 45 . Ketika tiga kali lipat, kode baru sekali lagi diabaikan, maka panjang baru adalah 135 , yang tidak bisa digeser karena k==90mengevaluasi False, jadi k>>(k==90) ⟶ k>>(135==90) ⟶ k>>False ⟶ k>>0 ⟶ k, dan k dicetak apa adanya.


Python 2 , 36 byte

Ini adalah saran dari Aidan F. Pierce pada 38 byte, dan saya bermain golf dengan 2 byte. Saya tidak memposting ini sebagai solusi utama saya karena saya tidak memunculkannya sendiri.

0and""
True+=1
print True>3and 3or 1

Cobalah online! Coba dua kali lipat! Coba tiga kali lipat!

Tuan Xcoder
sumber
Terima kasih atas ide menggunakan komentar - menyelamatkan saya 6 byte.
AdmBorkBork
print open(__file__,"a").tell()/79*3|1#mungkin?
Kevin Cruijssen
@KevinCruijssen Hebat, terima kasih!
Tn. Xcoder
Satu byte lebih sedikit, tidak ada pembacaan kode sumber: tio.run / ##K6gsycjPM / r/... Mencetak dengan spasi terdepan untuk dua dan tiga pengulangan, tetapi itu tampaknya diizinkan.
Aidan F. Pierce
@ AidanF.Pierce Terima kasih banyak! Saya bermain golf sedikit lebih banyak dan mempostingnya sebagai solusi alternatif.
Tn. Xcoder
5

R , 37 31 28 byte

Terima kasih kepada Giuseppe karena bermain golf dengan 3 byte terakhir.

length(readLines())%/%2*2+1

(dengan baris baru tertinggal).

Coba sekali!

Cobalah dua kali!

Cobalah tiga kali!

Ini menggunakan readLines()trik dari jawaban Giuseppe untuk tantangan 8-bola , tempat stdinpengalihan ke file sumber. Kode ini pada dasarnya hanya menghitung berapa banyak baris yang ada di bawah baris pertama dan output 1jika ada 1 atau 3 baris (yaitu kode tunggal atau dua kali lipat), atau 3jika ada 5 baris (yaitu kode tiga kali lipat).

rturnbull
sumber
oh, rapi, +1! Tidak yakin bagaimana melakukan ini di R. Saya pikir Anda perlu baris baru setelah sini agar berfungsi dengan baik, TETAPI Anda harus dapat mengubahnya menjadi 28 byte dengan mengerjakan kembali beberapa perhitungan.
Giuseppe
@ Giuseppe Terima kasih telah menunjukkan masalah baris baru! Saya tidak dapat mengaktifkan versimu ketika kodenya berlipat tiga - apakah saya melewatkan sesuatu?
rturnbull
oh aneh saya musta memiliki baris baru, tetapi jika Anda melakukannya %/%2harus bekerja
Giuseppe
5

Hilang , 38 byte

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Cobalah online!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Cobalah online!

\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v\\<<<<</<<<<>
2>((1+@>?!^%^
.........v

Cobalah online!

Penjelasan

Lost adalah bahasa yang sangat menarik untuk tantangan ini. Teknik Hilang yang biasa adalah membangun "jebakan". Jebakan adalah bagian dari program yang dirancang untuk menangkap semua ips di satu tempat sehingga tumpukan mereka dapat dibersihkan dan mereka dapat dikontrol untuk pergi ke arah tertentu. Ini membuat program penulisan di Lost jauh lebih mudah dikelola. Namun karena program ini digandakan kita perlu menghindari duplikasi perangkap juga. Ini mengharuskan kami untuk merancang jebakan baru yang berfungsi dengan baik tetapi ketika digandakan hanya satu jebakan yang berfungsi. Ide dasar saya di sini adalah sebagai berikut

v<<<<>
>%?!^^

Sementara tumpukan tidak kosong, ?akan menghapus item dan menyebabkannya melompat kembali ke awal jika item itu tidak nol. Kuncinya di sini adalah ketika ini menumpuk ^^baris s

v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^v<<<<>
>%?!^^

Artinya, tidak peduli bagaimana Anda masuk, Anda akan selalu keluar di tempat yang sama.

Dari sini kita dapat mencoba menerapkan ide yang sama dari jawaban Klein saya .

\\<<<<<v<<<<>
2>((1+@>?!^%^

Tulang punggung program kami adalah sisi had kiri yang mendorong sejumlah 2s. Setiap kali kita menambahkan salinan program yang lain 2akan ditambahkan ke tulang punggung program yang berarti 2 tambahan didorong ke tumpukan. Setelah keluar dari bawah, itu akan terpental \\>dan mengeksekusi kode

((1+@

Ini menghapus 2 item tumpukan pertama, menambahkan satu ke apa pun yang tersisa, dan keluar. Setelah tulang punggung kami memiliki 3 2s kami akan menambahkan 1 dan mendapatkan 3, jika kami memiliki kurang dari 3 item, kami hanya akan membuang seluruh tumpukan dan mengembalikan 1.

Sekarang satu-satunya masalah yang tersisa adalah bahwa !dalam program kami dapat menyebabkan loop tak terbatas. Jika ip mulai !naik ke atas, ia akan melompat dan mendarat tepat di tempat sebelumnya. Ini berarti kita harus menambahkan baris lain di bawahnya untuk mencegah loop.

\\<<<<</<<<<>
2>((1+@>?!^%^
.........^

Ini memiliki sedikit masalah menempatkan beberapa garis miring di antara kami ^di jebakan. Namun, agak ajaib, semuanya berhasil. Ips kami memantul dengan benar sehingga tidak ada bedanya.

Wisaya Gandum
sumber
@ bercanda sayangnya saya terjebak di ponsel untuk saat ini. Bisakah Anda mempostingnya sebagai jawaban dengan penjelasan?
Wheat Wizard
Diposting
Jo King
4

C (gcc) , 95 91 85 byte

#ifndef a
#define a-1
main(){puts(3
#include __FILE__
?"1":"3");}
#define a
#endif
a

Cobalah online!

l4m2
sumber
Lalu saya sarankan Anda mengedit tautan TIO yang benar.
Erik the Outgolfer
Saya kadang-kadang tidak dapat terhubung ke TIO, saya tidak tahu mengapa
l4m2
4

Japt , 8 6 5 byte

-1 byte terima kasih kepada @ETHproductions

°U-v

Penjelasan:

°U-v
 U     # variable U=0                # U=0
°U     # ++U                         # U=1
  -    # minus:
   v   #   1 if U is divisible by 2  
       #     else
       #   0                         # U=1

Ini mengevaluasi ke 1-0 = 1

Menggandakan mengevaluasi menjadi 2-1 = 1

Tiga kali lipat mengevaluasi ke 3-0 = 3

Oliver
sumber
1
Menyusun ulang sedikit, saya pikir Anda dapat melakukan °U-v(ditambah baris baru) untuk menghemat yang kedua U.
ETHproduksi
@ ETHproduk Terima kasih! vsempurna untuk tantangan ini :-)
Oliver
4

> <> , 10 9 8 byte

562gn|

Cobalah online!

Coba dua kali lipat!

Coba tiga kali lipat!

Saya yakin ada solusi 8 byte di suatu tempat di luar sana.

Yang tidak dapat dicetak pada akhirnya memiliki nilai ASCII 1, dan hanya diambil oleh gperintah et pada iterasi ketiga. Untuk dua yang pertama dicetak 05, lalu dicetak 15.

Jo King
sumber
Solusi 8 byte terbukti sulit dipahami, tetapi berikut adalah beberapa yang lebih 9 byte jika mereka menginspirasi Anda: TIO , TIO
Not a tree
1
@Natatree Mendapat 8 byte dengan yang tidak patut ditulis
Jo King
4

C (gcc) , 107 byte

Kiriman pertama saya di C (gcc). Terlalu lama ...

i;
#ifdef c
#define c
#ifdef b
i=2;
#else
#define b
#endif
#else
#define c main(){putchar(i+49);}
#endif
c

TIO link: tunggal , ganda , rangkap tiga .

Weijun Zhou
sumber
3

JavaScript, 81 77 74 70 byte

Disimpan 4 byte berkat Shaggy

var t,i=(i||[3,1,1]),a=i.pop()
clearTimeout(t)
t=setTimeout(alert,9,a)

Solusi JS cukup timpang. Membutuhkan nilai dari [3,1,1]array dari kanan ( pop()). Mendaftarkan batas waktu untuk menampilkan nilai saat ini di masa mendatang. Jika batas waktu sudah terdaftar, batalkan. Bergantung pada sifat kotor var, yang mengangkat deklarasi variabel.

Dua kali:

Tiga kali:

Cristian Lupascu
sumber
Ini membutuhkan semi-kolon atau baris baru agar dapat berfungsi, tetapi Anda dapat menyimpan 4 byte dengan melewati aargumen ke-3 dari setTimeout:setTimeout(alert,9,a)
Shaggy
@Shaggy Terima kasih! Ini berfungsi dengan baik bahkan tanpa semi-kolon tambahan.
Cristian Lupascu
3

C (gcc) , 53 52 byte

Perhatikan spasi setelahnya #endif.

n;main(){putchar(n+49);}
#if __LINE__>7
n=2;
#endif 

Cobalah online!

gastropner
sumber
2

Arang , 12 byte

⎚≔⁺ι¹ιI⁻ι⁼ι²

Cobalah online! Tautan adalah untuk kode verbose.

Coba dua kali lipat!

Coba tiga kali lipat!

Penjelasan

⎚             Clear
 ≔⁺ι¹ι        Assign plus(i, 1) to i
       I      Cast (and implicitly print)
         ⁻ ⁼ι² Subtract equals(i, 2) from
          ι    i
Khusus ASCII
sumber
MapAssignRight(Plus, 1, i)menghemat satu byte, yang membawa Anda ke panjang yang sama dengan port jawaban saya ke @Mr. Tantangan XCoder:PI∨›³L⊞Oυω³
Neil
PI⊕⊗÷L⊞Oυω³adalah versi lain dari jawaban saya, tetapi masih 11 byte ...
Neil
Ditemukan 10-byter!
Neil
: / Saya benar-benar harus memperbaikiMapAssign(Incremented, i)
ASCII-only
2

JavaScript, 43 40 Bytes

var t=t?--t:~!setTimeout`t=alert(1|~t)`;

2x:

3x:

l4m2
sumber
ps solusi ini tidak merusak lingkungan
l4m2
2

PowerShell , 54 48 45 44 byte

if(99-gt(gc $PSCOMMANDPATH|wc -c)){1;exit}3#

Cobalah online!

Coba dua kali lipat!

Coba tiga kali lipat!

Mendapat jalan doa sendiri dengan $PSCOMMANDPATHdan melakukan gET cmenurunkan kandungan pada file. Ifjumlah karakter file itu kurang dari 99(diperiksa melalui wc -cdari coreutils), lalu kami output 1dan exit(yaitu, hentikan eksekusi). Itu menyumbang kode asli dan kode ganda. Kalau tidak, kita output 3dan keluar. Kode aktual yang ada di bagian dua kali lipat atau tiga kali lipat tidak ada artinya, karena kita akan exitsebelum kita sampai ke sana, atau ada di belakang komentar #.

Disimpan 6 byte berkat Tn. Xcoder
Disimpan 3 4 byte berkat Pavel

AdmBorkBork
sumber
@ Pavel Aha, ya. Saya perlu bertukar sekitar -lt99ke 99-gtuntuk mendapatkan casting untuk bekerja dengan benar, tapi itu memang satu byte lebih pendek. Terima kasih!
AdmBorkBork
2

C # (178 Bytes)

Console.WriteLine(1+2*4%int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]=(int.Parse(System.Configuration.ConfigurationManager.AppSettings["z"]??"0"))+1+""));

solusi C # gila, tapi saya senang itu mungkin dalam satu baris di C # sama sekali. :)

Bagi saya bagian tersulit adalah memiliki C # yang valid yang akan menginisialisasi atau menambah variabel yang sama, jadi saya akhirnya menyalahgunakan Manajer Konfigurasi karena saya memerlukan NameValueCollection dan ConfigurationManager statis global adalah satu-satunya yang dapat saya pikirkan sehingga saya dapat memperbarui dalam memori. EnvironmentVariables adalah pilihan lain yang saya perhatikan tetapi tidak memiliki pengindeks jadi saya tidak yakin bagaimana melakukannya dalam satu baris yang dapat disalin disalin untuk menghasilkan output yang diperlukan sesuai spesifikasi.

lee
sumber
2

Pesona Rise , 35 byte

^w3'\
    f
    1
/1@
/
 '54\w
/yyy

Cobalah online!

Bekerja dengan yang satu ini memungkinkan saya untuk menemukan kesalahan dalam parser saya berurusan dengan karakter pengubah keterlambatan baru, meskipun hasil akhir akhirnya tidak terpengaruh olehnya, karena saya akhirnya tidak membutuhkannya.

Fungsi karena fakta bahwa baris terakhir tidak memiliki baris tambahan (atau dalam hal ini, spasi tambahan), memungkinkan duplikat IP untuk muncul di tempat yang berbeda. Yang kiri atas akhirnya membuat lingkaran besar di sekitar grid sedangkan IP kedua melakukan operasi Refleksi untuk mengganti \pada baris ke-6 dengan a . IP ini kemudian akan berulang selamanya dan tidak melakukan apa-apa.

IP ketiga juga membuat penggantian yang sama pada saat yang sama, tetapi karena terletak pada baris ke - 13 , salinan reflektornya mengirimkannya ke atas dan mengeksekusi 1f'3wurutan yang ada di sudut kanan atas, yang menggantikan 1dengan 3pada tanggal 14. line, sebelum IP asli mengeksekusinya, menyebabkan program tiga kali lipat untuk output 3bukan 1(nilai juga bisa menjadi 2dan 6, 3dan 9, 4dan 12, atau 5dan 15karena ketersediaan a-fkonstanta numerik; 1dan 3dipilih secara sewenang-wenang). Kemudian dibiarkan dalam loop tanpa akhir melakukan lebih banyak perintah refleksi yang tidak melakukan apa pun.

Coba rangkap tiga!

Draco18s
sumber
29 byte , meskipun saya pikir saya bisa mendapatkannya lebih rendah jika saya benar-benar memahaminya: P
Jo King
@ JOOKING Tidak terlalu terkejut bahwa banyak ruang putih itu bisa keluar. Melakukan ini di tempat kerja dan karena mengalami masalah dengan penerjemah saya senang hanya untuk mendapatkan sesuatu yang berhasil (asli saya adalah 52 byte dan setelah mendapatkan penerjemah diperbaiki, saya bisa menghapus sebagian yang baik).
Draco18s
1

Perl 5, 28 25 byte

-3 byte terima kasih kepada @neil!

print"\e[D$a"if(++$a!=2);

Memindahkan kursor ke belakang (tidak melakukan apa-apa pada awal baris) dan mencetak nilai $a, pertama dan ketiga kalinya (yaitu, kali ketiga a dicetak, kursor bergerak, dan 3 dicetak pada posisi 1).

Marijn
sumber
1
print"\e[D$a"if(++$a!=2);mungkin?
Neil
1

QBasic, 19 byte

CLS
x=2^x
?x-1OR 1

Sumber harus menyertakan baris baru yang tertinggal.

Penjelasan

Kami ingin output 1, 1, 3. Perhatikan bahwa angka-angka ini satu kurang dari kekuatan 2. Jadi:

CLS      ' CLear Screen of any output from previous copies of the code

x        ' Numeric variables are preset to 0...
 =2^x    ' so as this statement is repeated, the value of x goes 1, 2, 4

 x-1     ' Therefore x-1 goes 0, 1, 3...
    OR 1 ' and we bitwise OR it with 1 to change the 0 to 1...
?        ' and print.
DLosc
sumber