Silakan Hitung AKU!

24

Tugas Anda sederhana. Poskan cuplikan dalam bahasa apa pun yang jika cuplikan diulangi n kali, akan menghasilkan n dalam desimal, oktal, dan heksadesimal, dalam urutan itu, dipisahkan dalam spasi. n adalah bilangan bulat yang lebih besar dari nol. Tidak ada nol di depan. Jawaban terpendek menang

Contoh

Jika snipetnya ABCmaka test case-nya

ABC 
1 1 1
ABCABC
2 2 2
ABCABCABCABCABCABCABCABCABC
9 11 9
ABCABCABCABCABCABCABCABCABCABCABCABC
12 14 C
ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABC
18 22 12
Akangka
sumber
4
Apakah boleh jika saya mencetak 1 01 0x1? (Termasuk awalan)
Biru
Jika Anda memiliki bahasa dengan input / output implisit, maka Anda dapat memiliki solusi 1 byte yang baru saja meningkatkan nilai ...
Esolanging Fruit

Jawaban:

11

Japt, 12 byte

[°TTs8 TsG]¸

Terima kasih kepada @ETHproductions untuk menghemat 2 byte!

Sama seperti jawaban 𝔼𝕊𝕄𝕚𝕟 saya.

Mama Fun Roll
sumber
7
: O, kamu mengalahkan Dennis!
Downgoat
Berpikir 𝔼𝕊𝕄𝕚𝕟 tidak bisa melakukannya, dan Anda sudah melakukan Teascript, dan saya tidak tahu Jolf, jadi saya menggunakan Japt.
Mama Fun Roll
Keren :) Ini 2 byte yang disimpan:[°TTs8 TsG]¸
ETHproduk
Oh, tidak melihatnya. Terima kasih!
Mama Fun Roll
14

Perl, 30 byte

printf"\r%d %o %x",++$n,$n,$n;

Kembali ke awal baris, penghitung kenaikan dan penghitung cetak menimpa keluaran yang lama.

nimi
sumber
+1 untuk mengetahui lubang dalam spesifikasi, penghapusan Output membuat tantangan ini sepele.
Akangka
1
@ChristianIrwan: sebenarnya ini tidak menghapus, tetapi menimpa (saya sudah memperbaiki deskripsi saya)
nimi
1
Keduanya menghancurkan tantangan.
Akangka
12

JavaScript, 54 53 51 47 byte

Disimpan 4 byte berkat @ user81655

var d=-~d;d+` ${d[b='toString'](8)} `+d[b](16);

Saya sebenarnya agak terkejut ini berhasil.

Penjelasan

var d=-~d;  // `var` let's `d` not throw an error if it's not defined 
            // -~ essentially increments the variable
d+                    // decimal
` ${                  // space character
   d[b='toString'](8) // octal
} `                   // space character
+d[b](16)             // Hexadecimal

Cobalah online

Downgoat
sumber
Iirc Anda dapat menghapus var
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ yang menyebabkan kesalahan:, ReferenceError: Can't find variable: dbahkan pada mode longgar D:
Downgoat
Apakah d=d?d+1:1bekerja?
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ nggak, masih melempar kesalahan referensi, aneh mempertimbangkan mode longgar diaktifkan ...
Downgoat
Ohhhh karena kami mencoba mengakses d meskipun tidak ditentukan
Conor O'Brien
7

C ++, 205 179 byte

int main(){};static int c=1;
#define v(x) A##x
#define u(x) v(x)
#define z u(__LINE__)
#include <cstdio>
class z{public:z(){++c;};~z(){if(c){printf("%d %o %x",--c,c,c);c=0;}}}z;//

(No trailing newline - saat disalin, baris pertama dari salinan dan baris terakhir dari aslinya harus bersamaan)

Pada dasarnya, ini bekerja dengan membuat urutan variabel statis yang, pada konstruksi, menambah penghitung variabel global. Kemudian, pada penghancuran, jika penghitung bukan 0, ia melakukan semua outputnya dan menetapkan penghitung ke nol.

Untuk mendefinisikan urutan variabel tanpa konflik nama, kami menggunakan makro yang dijelaskan sebagai berikut:

#define v(x) A##x    //This concatenates the string "A" with the input x.
#define u(x) v(x)    //This slows down the preprocessor so it expands __LINE__ rather than yielding A__LINE__ as v(__LINE__) would do.
#define z u(__LINE__)//Gives a name which is unique to each line.

yang agak bergantung pada kebiasaan prosesor string. Kami menggunakan zbanyak kali untuk mendefinisikan kelas / variabel yang tidak akan saling bertentangan ketika disalin ke baris terpisah. Selain itu, definisi yang harus muncul hanya sekali ditempatkan pada baris pertama, yang dikomentari dalam salinan kode. The #definedan #includepernyataan tidak peduli bahwa mereka bisa diulang, sehingga perlu ada penanganan khusus.

Kode ini juga menampilkan perilaku tidak terdefinisi dalam pernyataan:

printf("%d %o %x",--c,c,c)

karena tidak ada titik urutan, tetapi c dimodifikasi dan diakses. LLVM 6.0 memberikan peringatan, tetapi mengkompilasinya seperti yang diinginkan - yang --cmengevaluasi sebelumnya c. Satu bisa, dengan mengorbankan dua byte, tambahkan pernyataan --c;sebelum output dan perubahan --cdalam printfuntuk c, yang akan menyingkirkan peringatan.


Digantikan std::coutdengan printfpenghematan 26 byte berkat saran kakak saya.

Milo Brandt
sumber
6

CJam, 20 19 18 bytes

];U):USU8bSU"%X"e%

Terima kasih kepada @ MartinBüttner untuk bermain golf 1 byte!

Cobalah online!

Bagaimana itu bekerja

]                  e# Wrap the entire stack in an array.
 ;                 e# Discard the array.
  U                e# Push U (initially 0).
   ):U             e# Increment and save in U.
      S            e# Push a space.
       U8b         e# Convert U to base 8 (array of integers).
          S        e# Push a space.
           U"%X"e% e# Convert U to hexadecimal (string).
Dennis
sumber
4

𝔼𝕊𝕄𝕚𝕟, 14 karakter / 28 byte

[⧺Ḁ,Ḁß8,Ḁⓧ]ø⬭;

Try it here (Firefox only).

Jawaban pertama! Meskipun mungkin ada cara yang lebih baik untuk menangani ini.

Penjelasan

[⧺Ḁ,Ḁß8,Ḁⓧ]ø⬭; // implicit: Ḁ = 0
[⧺Ḁ,             // increment Ḁ by 1
    Ḁß8,         // octal representation of Ḁ
        Ḁⓧ]     // hex representation of Ḁ
            ø⬭; // join above array with spaces
                 // repeat as desired until implicit output
Mama Fun Roll
sumber
7
Bahasa apa ini?
Cole Johnson
Yang menyenangkan.
Mama Fun Roll
3

MATL , 26 byte

Menggunakan rilis saat ini (6.0.0) . Bekerja pada Oktaf.

0$N1+ttYUb8YAb16YA3$XhZc1$

Contohnya

Sekali:

>> matl 0$N1+ttYUb8YAb16YA3$XhZc1$
1 1 1

Dua kali:

>> matl 0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$
2 2 2

16 kali:

>> matl 0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$0$N1+ttYUb8YAb16YA3$XhZc1$
16 20 10

Penjelasan

Jumlah elemen dalam tumpukan digunakan untuk menunjukkan berapa kali kita menjalankan cuplikan

0$         % specify zero inputs for next function, in case this is not the first
           % occurence of the snippet.
N          % number of elements in stack
1+         % add one
tt         % duplicate twice. We now have three copies of the number
YU         % convert to string (decimal)
b8YA       % bubble up number and convert to octal string
b16YA      % bubble up number and convert to hex string
3$XhZc     % join top three elements (strings) with a space
1$         % specify one input for next function. If the program ends here, that next
           % function will be implicit display, so it will print the top of the stack.
           % Else the stack will be left with one element more than at the beginning of
           % the current snippet
Luis Mendo
sumber
2

OCaml, 198 byte

;;open Char
;;(if Sys.argv.(0).[0]='~'then Sys.argv.(0).[0]<-'\000'else Sys.argv.(0).[0]<-chr(1+int_of_char Sys.argv.(0).[0]));let n=1+int_of_char Sys.argv.(0).[0]in Printf.printf"\r%d %o %x"n n n

Termasuk baris baru dan mensyaratkan bahwa nama file dimulai dengan tilde (saya menggunakan ~.ml; Anda dapat menjalankannya dengan ocaml \~.ml) karena itu adalah karakter ASCII yang dapat dicetak dengan standar tertinggi. Menyalahgunakan fakta bahwa semua karakter dalam string dapat berubah dan Sys.argv.(0).[0]merupakan karakter pertama dalam nama file.

Seharusnya hanya berfungsi untuk n = 1 hingga 126, karena kode ASCII ~adalah 126 dan saya menambahkan satu ke output. Itu bisa dibuat dua byte lebih pendek jika kita hanya ingin n = 1 hingga 125. Setelah itu diulang 126 kali, itu akan berputar kembali ke n = 1.

Ini adalah golf pertama saya sehingga komentar atau perbaikan apa pun akan sangat dihargai.

Versi tidak disatukan:

;; open Char
;; if Sys.argv.(0).[0] = '~' 
   then Sys.argv.(0).[0] <- '\000'
   else Sys.argv.(0).[0] <- chr (1 + int_of_char Sys.argv.(0).[0])
;; let n = 1 + int_of_char Sys.argv.(0).[0] in
   Printf.printf "\r%d %o %x" n n n
Harry
sumber
+1, banyak lubang di pertanyaan saya membuat saya memilih untuk membatalkan pertanyaan saya. (Aku tidak bisa melakukan itu.)
Akangka
Saya curiga tentang diulang Sys.argv.(0).[0]. Saya tidak tahu banyak tentang OCaml.
Akangka
2

TeaScript , 21 20 byte

[┼d,dT8),dT16)]j(p);

Saya harus menutupnya secara otomatis ;

Cobalah online

Penjelasan

menjadi ++

    // Implicit: d = 0
[   // Start array
 ++d,  // Increment d, decimal value
dT8),  // d to base 8
dT16)  // d to base 16
]j(p); // Join by spaces
    // Implicit: Output *last* expression
Downgoat
sumber
Downvote? Apakah ada yang salah dengan jawaban ini? Apakah itu ada hubungannya dengan ASCII Character Jumble seperti yang juga diturunkan dalam beberapa menit ini jika tidak kurang
Downgoat
1

Perl, 40 byte

$_=<<'';printf"%d %o %x",(1+y/z//)x3;
:

Ada baris terakhir di belakang titik dua.

Memperlakukan segalanya setelah baris pertama sebagai dokumen di sini dan menghitung zdi dalamnya. Untuk setiap salinan kode selanjutnya zditambahkan. Kami harus menambahkan1 ke hitungan, karena tidak ada untuk cuplikan pertama (yang dieksekusi).

Jika output tambahan ke stderr diizinkan, kami dapat menghilangkan 2 tanda kutip tunggal ''dan bisa turun ke 38 byte. Tanpa ''perl memancarkan peringatan tentang fitur usang.

nimi
sumber
1

Mathematica, 76 byte

Catatan yang nseharusnya tidak memiliki definisi sebelumnya.

0;If[ValueQ@n,++n,n=1];StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "]

Di sini, perilaku ;digunakan. Cuplikan di atas adalah satu CompoundExpression, namun, ketika beberapa cuplikan disatukan, masih ada satu CompoundExpressionseperti yang ditunjukkan di bawah ini. (Beberapa pengaturan ulang yang tidak perlu dilakukan.)

0;
If[ValueQ@n,++n,n=1]; StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "] 0;
If[ValueQ@n,++n,n=1]; StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "] 0;
If[ValueQ@n,++n,n=1]; StringJoin@Riffle[IntegerString[n,#]&/@{10,8,16}," "]

(* 3 3 3 *)

Jadi seseorang tidak dapat membuat potongan seperti itu berfungsi jika menulis eksplisit CompoundExpression. Juga, hampir semua yang Anda suka dapat diletakkan sebelum yang pertama ;seperti E, Piatau MandelbrotSetPlot[],.

njpipeorgan
sumber
1

bash, 49 byte

File count.bash:

((++n));trap 'printf "%d %o %x\n" $n $n $n' exit;

... tidak ada baris baru.

Menjalankan:

$ bash count.bash
1 1 1
$ cat count.bash count.bash count.bash | bash
3 3 3
$ for i in $(seq 10) ; do cat count.bash ; done | bash
10 12 a

sumber
1

Python 2, 54 byte

n=len(open(__file__).read())/54;print n,oct(n),hex(n)#

Tidak ada baris baru. Output dalam bentuk 1 01 0x1.

Jika tidak ok, 56 byte

n=len(open(__file__).read())/56;print"%d %o %x"%(n,n,n)#

Ketika disisipkan di depan satu sama lain, panjang file bertambah 1 baris untuk setiap kali disisipkan. Kasing dasar dimulai dengan 2 garis sehingga Anda harus mengurangi 1 dari panjang garis. Komputasi ditekan oleh komentar.

Biru
sumber
"%d %o %x"%(n,n,n), itu keren sekali. Saya tidak tahu Anda bisa melakukan itu. Jika ternyata awalan meninggalkan tidak ok saya harus meminjam itu.
rp.beltran
1

Python 2.x 140 byte

Ini tidak dimaksudkan untuk menjadi solusi yang terlalu kompetitif, tetapi metode yang saya temukan lucu, karena satu hal, upaya pada kode golf multithreaded .

import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));

Menyimpan penghitung, menghasilkan utas untuk setiap penghitungan dan jika penghitung tidak berubah ketika penghitung penghitung mati setelah menyelesaikan masalah matematika yang mahal (alih-alih penghitung waktu untuk menyimpan byte), string yang diformat dicetak.

Beberapa contoh konfigurasi dan outputnya:

import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));

Outputs 1 01 0x1 

dan lima belas salinan salinan:

import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));import thread;n=eval("n+1")if"n"in globals()else 1;
def t(c):99**99;print("%s "*3)%(n,oct(n),hex(n))*(c==n)
thread.start_new_thread(t,(n,));import thread;n=eval("n+1")if"n"in globals()else 1;

...


Outputs 15 017 0xf 
rp.beltran
sumber
thread.start_new_threadBisakah python memikirkan nama metode yang lebih buruk untuk kode golf?
rp.beltran
Saya akan tertarik untuk melihat apakah ini bekerja di python 3.x, saya tidak melihat sesuatu yang saya sadari tidak akan, tetapi saya belum pernah melakukan threading dengan python 3.
rp.beltran
0

Ruby, 35 byte

1;$.+=1;$><<"#$. %1$o %1$x"%$.*-~-0

Setiap penambahan cuplikan $.(yang dimulai dengan 0 jika tidak ada file yang telah dibaca), tetapi hanya keluaran terakhir apa saja. *-~-0mengevaluasi menjadi *1, artinya mencetak string sekali, tetapi dengan penggabungannya menjadi *-~-01, ekspresi oktal mengevaluasi ke 0. Karena $><<tidak menyertakan baris tambahan, mencetak string kosong berarti tidak mencetak apa pun.

histokrat
sumber