Beberapa esolang dua dimensi, seperti Forked , dan beberapa non-esolangs, seperti Python , terkadang dapat membutuhkan spasi sebelum baris kode. Ini tidak terlalu golf. Juga, saya malas dan menulis lang 2d yang membutuhkan banyak ruang sebelum kode. Tugas Anda adalah menulis alat yang membuat bahasa ini menjadi lebih golf.
Tentu saja, ini tidak akan sempurna; itu tidak dapat digunakan, misalnya, ketika angka adalah karakter pertama pada satu baris sumber. Namun, ini umumnya akan bermanfaat.
Tantangan
Anda akan menulis sebuah program atau fungsi yang ...
- ... mengambil satu argumen, nama file atau string, atau ...
- ... membaca dari input standar.
Program Anda akan bertindak seperti cat
, kecuali:
- Jika karakter pertama pada baris apa pun adalah angka, kode Anda akan mencetak x spasi, di mana x adalah angka itu.
- Kalau tidak, itu hanya akan dicetak.
- Seperti halnya setiap karakter lain dalam input.
Uji kasus
Memasukkan:
foo bar foo bar
1foo bar foo bar foo bar
2foo bar foo bar foo bar foo bar
Keluaran:
foo bar foo bar
foo bar foo bar foo bar
foo bar foo bar foo bar foo bar
Memasukkan:
--------v
8|
8|
80
8,
7&
Keluaran:
--------v
|
|
0
,
&
Memasukkan:
foo bar
bar foo
foo bar
Keluaran:
foo bar
bar foo
foo bar
Memasukkan:
0123456789
1234567890
2345678901
3456789012
4567890123
Keluaran:
123456789
234567890
345678901
456789012
567890123
Aturan
- Output harus persis seperti input, kecuali untuk baris di mana karakter pertama adalah angka.
- Program Anda tidak dapat menambahkan / menambahkan apa pun ke file, kecuali satu baris baru jika Anda inginkan.
- Program Anda mungkin tidak membuat asumsi tentang input. Ini mungkin berisi baris kosong, tidak ada angka, karakter Unicode, apa pun.
- Jika angka dengan lebih dari satu digit memulai garis (mis.
523abcdefg
), Hanya digit pertama (dalam contoh, 5) yang akan berubah menjadi spasi.
Pemenang
Kode terpendek di setiap bahasa menang. Selamat bersenang-senang dan semoga berhasil!
sumber
Of course, this will not be perfect; it cannot be used, for instance, when a number is the first character on a line of source.
Tidak benar, buat saja karakter pertama 0 (ahem, test case terakhir Anda)Jawaban:
Retina , 9 byte
Cobalah online! Catatan: Trailing space di baris terakhir.
sumber
Secara kubik , 69 byte
Cobalah online!
Penjelasan:
Pertama kita lakukan inisialisasi ini:
Untuk mengatur kubus ini:
Yang paling penting tentang kubus ini adalah bahwa
5
jumlah wajah menjadi 32, yang merupakan nilai yang diperlukan untuk mencetak spasi. Secara kebetulan, itu juga cukup pendek untuk semua perhitungan lainnya. Setelah itu selesai:sumber
Sekam ,
1513 byte-2 byte terima kasih kepada @Zgarb
Cobalah online!
Menggunakan teknik yang sama dengan @Jonathan Allan
Penjelasan
sumber
Γ
.JavaScript (ES8),
3837 byteSaya pikir itu tidak bisa diperbaiki lagi.Disimpan 1 byte berkat Shaggy - Gunakan fitur ES8.
sumber
padEnd
seperti:s=>s.replace(/^\d/gm,m=>"".padEnd(m))
Python 2 ,
98746765 byte-24 byte terima kasih kepada Jonathan Allan. -7 byte terima kasih kepada Tn. Xcoder.
Cobalah online!
Mengambil input dalam file yang bernama
f
.sumber
open
; kode mengharapkan file bernama 'f'. Saya pikir tidak apa-apa?' '*0
itu palsu. Menggunakan[:1]
masih menyimpan sekalipun. Tidak perlu untukread
saya percaya (dan itu akan terjadireadlines
) karena perilaku defaultopen
adalah untuk beralih melalui garis. Juga tidak perlu untuk mode karena'r'
ini adalah default. Jika saya benar itu 73 !Ruby ,
2421 + 1 =2522 byteMenggunakan
-p
bendera. -3 byte dari GB.Cobalah online!
sumber
%p
di akhir, bukan%""
. Terima kasih atas bantuan Anda!05AB1E , 10 byte
Cobalah online!
sumber
|vy¬dićú},
bekerja selama 10 byte.|
kerjanya. Seharusnyapush the rest of input as an array with strings
, tetapi berhenti di baris kosong ( TIO ). Saya membawa ini di chatroom 05AB1E jika Anda ingin tahu lebih banyak.Python 3 , 95 byte
Cobalah online!
-4 byte dengan mencuri ide regex dari ThePirateBay
sumber
Jelly, 19 bytes
A monadic link taking and returning lists of characters, or a full program printing the result.
Try it online!
How?
sumber
beheaded line
Is that the actual term? xDPerl 5, 13 + 1 (-p) = 14 bytes
Try it online!
sumber
Haskell, 63 bytes
Try it online! The first line is an anonymous function which splits a given string into lines, applies the function
g
to each line and joins the resulting lines with newlines. Ing
it is checked whether the first characterx
of a line is a digit. If this is the case, then['1'..x]
yields a string with length equal to the value of the digitx
and' '<$
converts the string into as many spaces. Finally the rest of the liner
is appended. Ifx
is not a digit we are in the second equationg s=s
and return the line unmodified.sumber
Python 2,
76 7268 bytes-4 bytes thanks to @ovs!
@DeadPossum suggested switching to Python 2, which saved 4 bytes too.
Just thought it's nice to have a competitive full program in Python 2 that does not explicitly check if the first character is a digit. This reads the input from a file,
f
.Try it online! (courtesy of @ovs)
sumber
print
will give you 68 bytesJava 8,
105999793 bytesSaved few more bytes thanks to Nevay's suggestion,
sumber
s->{int i=s.charAt(0);if(i>47&i<58)for(s=s.substring(1);i-->48;s=" "+s);System.out.print(s);}
(93 bytes).R,
138128 bytes-9 bytes thanks to CriminallyVulgar
This is pretty bad, but it's a bit better now... R is, once again, terrible at strings.
Try it online!
sumber
Japt (v2.0a0),
1110 bytesJapt beating Jelly and 05AB1E? That doesn't seem right!
Test it
Explanation
Implicit input of string
U
Use Regex replace (
r
) all occurrences of a digit at the beginning of a line (m
is the multiline flag - theg
flag is enabled by default in Japt).Pass each match through a function, where
Z
is the current element.The postfix increment operator (
++
). This convertsZ
to an integer without increasing it for the following operation.Repeat a space character
Z
times.Implicitly output the resulting string.
sumber
m@
be shortened?m
here is the multi-line flag for the regex, not the map method.r/^\d/m_î
(orr/^\d/m_ç
) would be 2 bytes shorter butZ
is a string so, unfortunately, it wouldn't work.r/^\d/m_°ç
, for a 1 byte saving, does work, though :)°ç
is an amazing trick :-) I'd have suggested just\d
for the regex, but that leaves out the flag... perhaps I should add support for flags on single-class regexes, like\dm
(oh yeah, and that leaves out the^
too...)/
optional in RegExes?Jelly, 19 bytes
Try it online!
-5 bytes total thanks to Jonathan Allan's comments and by looking at his post
Explanation
sumber
Ḣ⁶ẋ;
;0Ḣ
would work for one byte, maybe there is a single atom, I also tried¹
, no joy thereḣ1ẇØD
works for the same bytecount \o/ṚṪ
will work :)Pyth,
1615 bytesTry it online!
Explanation
Let's take an example that should be easier to process. Say our input is:
The program above will do the following:
.z
- Reads it all and splits it by newlines, so we get['foo bar foo bar', '1foo bar foo bar foo bar', '2foo bar foo bar foo bar foo bar']
.We get the first character of each:
['f', '1', '2']
.If it is convertible to an integer, we repeat a space that integer times and add the rest of the String. Else, we just place the whole String. Hence, we have
['foo bar foo bar', ' foo bar foo bar foo bar', ' foo bar foo bar foo bar foo bar']
.Finally, we join by newlines, so our result is:
sumber
Cubically, 82 bytes
Note: This will not work on TIO. To test this, use the Lua interpreter with the experimental flag set to true (to enable conditionals). There's currently a bug with conditional blocks on the TIO interpreter. When using the TIO interpreter, you should replace
?6!
with!6
and&6
with?6&
, which keeps the byte count the same.This isn't as short as the other Cubically answer, but I thought I'd give this a try anyway :D
sumber
)
jumps to the most recent(
rather than the matching one I believe. EDIT: I'm in the chat.><>, 60 bytes
Try it online!
How It Works:
sumber
V, 9 bytes
Try it online!
Explanation
sumber
Gema, 21 characters
Sample run:
sumber
PHP, 83 chars
sumber
$s
arg or populate it with the input. And it doesn't print anythingargv
acceptable?argv
is the command line args, then yes.