Kita semua tahu lelucon ayah klasik yang berlangsung seperti ini:
Seseorang mengatakan kalimat untuk menggambarkan diri mereka (misalnya
I'm tired
atauI'm confused
).Penggila lelucon ayah datang dan menjawab
Hi <adjective>, I'm Dad!
, karena perkenalan mengikuti format yang sama (I'm Peter
mengikuti format yang sama sepertiI'm hungry
).
Tugas Anda adalah mengambil input dalam bentuk self-descriptor, dan menampilkan bentuk dad-joke yang sesuai, tetapi alih-alih menggunakan kata "Dad", Anda akan menggunakan nama bahasa pemrograman yang Anda pemrograman di.
Uji kasus (asumsikan bahwa mereka sedang diuraikan oleh Python):
I'm amazing Hi amazing, I'm Python!
I'm tired Hi tired, I'm Python!
I'm hungry Hi hungry, I'm Python!
I'm fat Hi fat, I'm Python!
Sekarang asumsikan bahwa test case ini diuraikan oleh Golfscript:
I'm a programmer Hi a programmer, I'm Golfscript!
I'm a question-writer Hi a question-writer, I'm Golfscript!
I'm a Stack-Overflow-er Hi a Stack-Overflow-er, I'm Golfscript!
Tantangan yang pasti:
Ambil string dalam format self-descriptor (
I'm <adjective>
atauI'm a(n) <noun>
) menggunakan input standar atau melalui fungsi.Asumsikan tidak ada tanda baca akhir.
Anggaplah kata
I'm
itu digunakan dan tidakI am
.
Konversikan ke format ayah-lelucon - lihat contoh di atas untuk bagaimana yang seharusnya terlihat.
Hal-hal lain:
Ini adalah kode-golf , sehingga jumlah byte terpendek menang.
Ikuti aturan celah standar - tidak ada satupun, tolong.
Selamat bersenang-senang!
Papan peringkat
Anda dapat melihat papan peringkat untuk posting ini dengan memperluas widget / snippet di bawah ini. Agar posting Anda dimasukkan dalam peringkat, Anda perlu tajuk ( # header text
) dengan info berikut:
Nama bahasa (akhiri dengan tanda koma
,
atau tanda hubung-
), diikuti oleh ...Jumlah byte, sebagai angka terakhir yang muncul di header Anda.
Misalnya, JavaScript (ES6), 72 bytes
valid, tetapi Fortran, 143 bytes (8-bit)
tidak valid karena jumlah byte bukan angka terakhir di header (jawaban Anda akan dikenali sebagai 8 byte - jangan manfaatkan ini).
<iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=185872" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>
sumber
Jawaban:
V , 13 byte
Cobalah online!
Terinspirasi oleh jawaban tsh
Ini mengambil keuntungan dari fakta yang
I'm
ditarik dari awal string ketika menghapus teks dari awal, dan menempelkannya ke akhir dengan<C-r>"
saat dalam mode sisipkan.sumber
I'm
untuk<C-O>p
kemudian melihat jawaban Anda ...escape
membutuhkan 5 karakter ???0x1B
, tetapi lebih mudah dan lebih jelas apa artinya jika Anda menuliskannya sebagai<esc>
. Sama untuk<C-r>
, yang benar0x12
C (gcc) ,
594233 byte-17 byte terima kasih kepada @Conor O'Brien memperhatikan bahwa impor tidak perlu
-9 byte berkat @tsh menunjukkan cara penulisan fungsi UB yang lebih pendek
Cobalah online!
Memotong 3 karakter pertama dari input (menghilangkan
I'm
) dan mengelilinginya dengan teks yang diinginkan.sumber
int
ini juga opsional.char*
, mungkin ...; jadia(x){printf("Hi%s, I'm C!",x+3);}
seharusnya bekerjaint
dapat menahanchar*
tanpa memotongnya), meskipun ada perilaku yang tidak ditentukan. Pada x86-64 gcc di Linux, itu akan selalu gagal dalam eksekusi PIE (biasanya tidak ada pointer di 32 bit rendah ruang alamat virtual, dan gcc tidak akan terjadi untuk menyalin bit 32 tinggi sambil menghitungx+3
dari fungsi arg di register RDI). Tetapi dalam executable non-PIE, alamat statis berada di 31 bit rendah dari ruang alamat virtual, jadi jika pemanggil melewati string literal atau buffer statis, itu akan berfungsi.V , 13 byte
Cobalah online!
Baru untuk
V
. Baru tahu sekitar 30 menit yang lalu. Bagaimanapun, bahasa ini dipilih hanya karena namanya hanya biaya 1 byte. Saya tidak yakin bagaimana mengirim<End>
kunci dalam V. Sebagian besar lingkungan vim akan menerima<End>
sebagai pengganti<Esc>A
dalam contoh ini. Tapi, Anda tahu, V adalah 2 karakter lebih pendek dari vim. :)Berkat @Candy Gumdrop , menghemat 1 byte.
sumber
c3l
kecE
.E
sebelumnya.cW
(yang tampaknya berbeda, tetapi sebenarnya identik dengancE
) atau3s
. Pekerjaan yang baik! Saya baru saja memposting hampir jawaban yang tepat ini ketika saya melihat bahwa sudah ada 2 V jawaban, yang merupakan kejutan yang menyenangkan. Saya sudah mencoba beberapa pendekatan berbeda, tetapi saya tidak yakin apakah mungkin untuk mendapatkan <13 byte.Stax , 13 byte
Jalankan dan debug itu
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Saya memindahkan komentar terakhir naik satu baris karena tidak ada yang dapat mengikuti string literal yang tidak dikuatkan.
Jalankan yang ini
sumber
brainfuck, 164
Cobalah online!
"Brengsek!" bagian dari senar dihasilkan dengan alat ini , mungkin bisa diraih lebih lanjut dengan tangan.
sumber
Excel,
3633 byte-3 byte berkat Johan du Toit.
Input masuk ke A1.
Percobaan pertama:
sumber
="Hi "&MID(B13,4,99)&", I'm Excel"
34 byteA1
bukannyaB13
jadi sebenarnya 33 byte.Python 3 ,
3534 byteCobalah online!
-1 byte berkat Perwujudan Ketidaktahuan
Juga 34 byte, menggunakan string yang diformat yang lebih baru, berkat Gábor Fekete:
Cobalah online!
sumber
lambda s:
dan mengganti%s[3:]
dengan%input()[3:]
? (-4 byte)print()
7 byte lebih, itulah sebabnya jawaban Python biasanya menggunakan lambdas.lambda s
, saya telah mendefinisikan fungsi (anonim). Jika Anda melihat header dan footer di tautan TIO, saya beri nama fungsi ituf
, lalu memanggilnya denganf("I'm whatever")
. Kemudian fungsi mengembalikan output yang diharapkan. Dengan cuplikan Anda, Anda tidak mencetak atau kembali dari suatu fungsi - Anda hanya memiliki sedikit kode yang mengevaluasi hasil yang benar, tetapi tidak melakukan apa-apa dengannya. Anda dapat menjalankan program beberapa kali, Anda dapat memanggil fungsi beberapa kali, tetapi snippet hanyalah snippet.R
454439 byte@Giuseppe Edit
@AaronHayman Sunting
Cobalah online!
sumber
"(I'm )
dengan"(.* )
I'm a programmer
(banyak spasi) karena keserakahansub
to"I'm(.*)" and "Hi\\1, I'm R"
dan 3 byte dengan mengambil input dari stdin menggunakanscan
: Coba onlinePHP ,
3432 byteCobalah online!
Input via
STDIN
, panggil dengan -F.sumber
x86 ,
3736 byteBelum dirakit:
Program DOS mandiri yang dapat dieksekusi. Input dari baris perintah, output ke layar.
Unduh dan uji DAD.COM .
* Nama "bahasa" yang tepat di sini sedikit ambigu karena kode mesin CPU sebenarnya bukan bahasa dalam arti formal. Menggunakan "x86" sebagai nama yang dipahami dan diterima secara umum untuk platform target.
sumber
Java, 36 byte
Cobalah online.
sumber
Ruang putih , 267 byte
Huruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Karena Whitespace memasukkan satu karakter pada satu waktu, input tersebut harus berisi baris tambahan sehingga ia tahu kapan harus berhenti membaca karakter dan input selesai.
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Penjelasan dalam pseudo-code:
Karakter dari
", I'm Whitespace!"
didorong dalam urutan terbalik, dan kemudian dicetak dalam satu lingkaran. Semua nilai karakter ini juga diturunkan sebesar 102, yang ditambahkan dalam loop sebelum mencetak untuk menghemat byte. Konstanta ini untuk menurunkan setiap karakter dengan dihasilkan dengan program Java ini . Selain itu, alih-alih mendorong nilai-70
untuk kedua spasi dua kali, spasi kedua di"!ecapsetihW m'I ,"
disalin dari yang pertama dengan Salin bawaan untuk menyimpan beberapa byte.sumber
Bahasa Formula IBM / Lotus Notes,
6162 byte1 karena saya belum melihat
!
pada akhir output.Rumus bidang terkomputasi yang mengambil inputnya dari bidang yang dapat diedit
i
. Itu akan gagal untuk "Aku seorang aku" tetapi karena itu tidak masuk akal sama sekali aku menganggap itu tidak akan terjadi.Malu pada 32 byte, nama bahasa lebih dari setengah total panjang rumus!
Cuplikan layar di bawah ini menunjukkan contoh input dan output:
sumber
Formula
yang dimaksud dalam komunitas pengembang Notes / Domino :-)Perl
sebagai penggantiPerl 5
atauPerl 5 -p
.sed (
-r
),312825 byte-3 byte terima kasih kepada Shaggy -3 byte karena
-r
tidak diperlukan dalam outputTIO
sumber
-r
tetapi akan lebih baik jika Meta mempertimbangkannya.Japt , 18 byte
Ketika perpustakaan kompresi string Japt mencapai tingkat kompres 0% ...
Cobalah
Alternatif 18 byte lainnya:
sumber
Oktaf , 35 byte
Cobalah online!
42 byte:
Saya mencoba mengambil "Oktaf" entah bagaimana, tanpa menuliskannya, karena 6 karakter cukup banyak dibandingkan dengan beberapa nama bahasa lainnya di sini. Sayangnya, saya hanya bisa menemukan
ver
, yang menampilkan struct dengan bidang yang dipisahkan koma. Membutuhkan lebih dari 6 byte. :(Cobalah online!
sumber
Ruby
-p
,322726 byte-5 byte dengan memanfaatkan jawaban Jelly Nick Kennedy .
-1 byte dari pemisahan pada titik yang berbeda dalam string. Juga menyadari bytecount lama saya salah.
Penjelasan
Cobalah online!
sumber
Karat , 41 byte
Cobalah online!
sumber
Batch, 22 + 3 = 25 byte
+3 byte untuk memberi nama file ini
I'm
(dengan.bat
ekstensi yang diperlukan untuk file Batch). Dipanggil sebagaiI'm hungry
, kapan akan bergemaHi hungry, I'm Batch!
.sumber
I'm
tetapi di sini nama skrip tidak tahu apakah itu valid, atau kecuali itu adalah penerjemah dengan skrip di jalur saat iniCMD
, jadi apakah itu benar-benar menyelamatkan saya 2 byte?Perl 6 ,
30 2827 byteCobalah online!
sumber
Perl 5
-p
,3124 byteKurangi berdasarkan klarifikasi dari OP dan saran dari @NahuelFouilleul.
Cobalah online!
sumber
$^X $]
variabel khusus dapat digunakan, namun 5 lebih pendek dari$]
5
sebagai bagian dari nama bahasa? yaitu dapatkah Anda berpendapat bahwa Perl 5 "menganggap dirinya" sebagai "Perl"? Itu adalah kasus sebelum Perl 6 ada, dan jawaban codegolf hanya perlu bekerja pada setidaknya satu implementasi bahasa, jadi pilih yang lama?Perl
sudah cukup. Dan bahwa penggunaan-p
opsi tidak harus dianggap sebagai bagian dari nama bahasa.Jelly ,
1615 byteProgram lengkap yang menerima argumen string (Python diformat) yang mencetak hasilnya.
Cobalah online!
Bagaimana?
Catatan:
Ḋ⁾Hio...
berfungsi juga.sumber
Jeli ,
2017 byteCobalah online!
Tautan monadik mengambil input sebagai argumennya dan mengembalikan string Jelly.
Penjelasan
sumber
VBA (Excel), 27
28byteInput masuk ke sel A1 dari Lembar Aktif di Excel, jalankan kode di Jendela Segera
Mengambil keuntungan dari fakta bahwa
"SomeString"SomeValue
danSomeValue"SomeString"
akan secara implisit bergabung, dan bahwa menghilangkan argumen ketiga dariMID
fungsi akan mengambil semua karakter dari akhir input - mengubahnya menjadi fungsi "dump karakter awal"(-1 byte terima kasih kepada Shaggy, tetapi +1 ketika OP mengonfirmasi bahwa semua jawaban harus diakhiri dengan tanda seru)
(-1 byte terima kasih kepada Taylor Scott yang mengingatkan saya bahwa double-quote akhir adalah opsional)
sumber
Hi
dan mengganti5
dengan4
?"
dari solusi ini, dan saat Anda menggunakan notasi evaluasi (tanda kurung siku), Anda harus menandai solusi ini sebagai Excel VBA, karena notasi itu hanya tersedia di ExcelJ , 22 byte
Cobalah online!
sumber
05AB1E ,
2321 byteDisimpan 2 byte berkat Kevin Cruijssen
Cobalah online!
Penjelasan
sumber
•äƵí•hR
1 byte lebih pendek dari"05AB1E"
. :)•äƵí•hR
juga, tetapi seperti yang Anda katakan, sayangnya tidak ada yang tersisa di sini.QuadR , 22 byte
Cobalah online!
Ini menggantikan:
^...
tiga karakter awaldan
$
garis akhirdengan
Hi
dan
,I'm QuadR
masing - masing
sumber
⎕R
operator APL yang tidak dimaksudkan untuk golf .Retina ,
2221 byteCobalah online!Tautan termasuk kasus uji. Tidak bekerja di Retina 0.8.2, jadi adaptasikan jawaban QuadR @ Adám sebagai gantinya. Penjelasan: Polanya kosong, sehingga cocok di setiap posisi dalam string input. Kami hanya membutuhkan pertandingan ketiga (atau keempat akan berhasil). Substitusi kemudian diterapkan pada pertandingan itu. Di dalam substitusi itu,
$'
mengacu pada sisa string dan$`
merujuk awal string.sumber
Retina 0.8.2 ,
262523 byte-1 byte terima kasih kepada @attinat .
-2 byte dengan porting @ Adám 's QuadR answer , jadi pastikan untuk menambahkannya !!
PS: @Neil memposting jawaban Retina yang lebih pendek di versi baru , jadi saya telah mengubah jawaban ini menjadi Retina 0.8.2 secara eksplisit.
Cobalah online.
Penjelasan:
Ganti tiga karakter pertama dengan "Hai":
Dan kemudian menambahkan tanda ", aku Retina!" (dengan mengganti ujung string):
sumber
bash, 24 byte
TIO
sumber
bash
dengan$0
untuk menyimpan beberapa byte$0
akan mencetak nama skrip atau menjalankanbash -c 'echo Hi ${@:2}, $1 $0!' bash $@
tetapi harus diperhitungkan ukurannya