Di beberapa negara ada rekomendasi atau undang-undang tentang cara membuat koridor darurat di jalan-jalan yang memiliki banyak jalur per arah. (Berikut ini kami hanya mempertimbangkan jalur yang menuju ke arah perjalanan kami.) Berikut adalah aturan yang berlaku di Jerman:
- Jika hanya ada satu jalur, semua orang harus berkendara ke kanan sehingga kendaraan penyelamat bisa lewat di sebelah kiri.
- Jika ada dua lajur atau lebih, mobil-mobil di lajur paling kiri harus melaju ke kiri, dan semua orang harus pindah ke kanan.
Tantangan
Mengingat jumlah N>0
lajur reguler, output tata letak lajur ketika koridor darurat dibentuk menggunakan serangkaian N+1
karakter ASCII. Anda dapat menggunakan dua karakter dari kode ASCII 33
hingga 126
, satu untuk menunjukkan koridor darurat, dan satu untuk menunjukkan mobil. Trailing atau spasi terdepan, line break dll diperbolehkan.
Contohnya
Di sini kita gunakan E
untuk koridor darurat, dan C
untuk mobil.
N Output
1 EC
2 CEC
3 CECC
4 CECCC
5 CECCCC
6 CECCCCC
etc
C
danE
, tetapi ada begitu banyak pendekatan yang bagus untuk tantangan ini! Menggunakan operasi matematika untukC=1
/E=2
atauC=2
/E=3
seperti jawaban atas tidak; menggunakanC=0
/E=1
dengan10^(n-1)
; menggunakanC=0
/E=.
dengan format desimal0.0
; menggunakanC=1
/E=-
dengan memanfaatkan-1
; dll. Begitu banyak kemungkinan unik untuk tantangan yang tampak begitu-to-the-point pada awalnya. Sayang sekali saya hanya bisa memberi +1 satu kali. ;)Jawaban:
Python 2,
2926 byteContoh:
sumber
10**n*97/30-1/n*9
menyimpan byte lain, memberif(5) == 323333
dll.Python 3,
3533 byteSunting: menjatuhkan
f=
untuk menyimpan 2 byte, berkat pengingat @dylnan .Cobalah online!
Untuk memvisualisasikannya:
Keluaran:
Coba π online!
Python 3, 40 byte
Solusi mudah:
Cobalah online!
sumber
lambda N:
C (gcc) , 32 byte
Cobalah online!
Penggunaan
0
dan.
karakter:sumber
Japt,
54 bytePenggunaan
q
untuk mobil dan+
untuk koridor.Cobalah
Penghargaan untuk Oliver yang bermain golf 4 byte pada saat yang sama dengan saya.
Penjelasan
Solusi singkat tapi penjelasan rumit!
Hal langsung pertama:
Γ§
Metode, ketika diterapkan ke integer, mengulangi argumen stringnya beberapa kali. Thei
Metode mengambil 2 argumen (s
&n
) dan sisipans
di indexn
dari string itu diterapkan.Memperluas 2 cara pintas unicode yang digunakan memberi kita
Γ§q i+1
, yang, ketika diubah menjadi JSU.Γ§("q").i("+",1)
, di manaU
inputnya. Jadi kita mengulangiq
U
kali dan kemudian memasukkan+
pada indeks 1Trik terakhirnya adalah, berkat pembungkus indeks Japt, kapan
U=1
,i
akan memasukkan+
indeks at0
, berapa pun nilai yang Anda berikann
.sumber
Γ§0 iQ1
6 byte, tetapi akan lebih baik jika Anda menggunakannya.ç¬iΓ
untuk 4 byte;) Saya tidak pernah menyalahgunakan Japt sebanyak ini.Γ
bukannyaΓ
:)R, 50 byte
-11 terima kasih kepada Giuseppe!
Output 1 untuk koridor darurat dan 2 untuk jalur normal
Usaha saya, 61 byte
Tidak ada yang mewah untuk dilihat di sini, tapi mari kita dapatkan R di papan skor =)
Pemakaian:
sumber
Haskell ,
383432 byteCobalah online!
sumber
Python 2,
302928 byteCetak
3
bukanC
dan.
bukannyaE
.Penjelasan:
Cobalah online.
Python 2,
3332312928 byteMencetak
1
bukannyaC
dan-
bukannyaE
.-2 byte terima kasih kepada @ovs .
-1 byte terima kasih kepada @xnor .
Penjelasan:
Cobalah online.
sumber
10/3
gagal pada 17n=16
jika bilangan bulat Anda built-in adalah 64-bit sudah cukup, atau dalam hal inin=16
ketika nilai desimal dapat' t menahan lebih dari 15 digit desimal secara default sudah cukup. (Hal yang sama berlaku untuk banyak jawaban lain menggunakan bahasa dengan ukuran angka acak, seperti Java, C # .NET, dll.)Pyth,
1098 bytePenggunaan
0
untuk menunjukkan koridor darurat dan"
.Coba di sini
Penjelasan
sumber
brainfuck , 42 byte
Cobalah online!
Mengambil input sebagai kode char dan output sebagai
V
jalur normal dan jalurW
bersih. (Untuk menguji dengan mudah, saya sarankan mengganti,
dengan sejumlah+
s)Bagaimana itu bekerja:
sumber
Oktaf (MATLAB *),
31 30 28 2722 byteCobalah online!
Program ini bekerja sebagai berikut:
Trik yang digunakan di sini adalah XNORing array benih
0:n
dengan cek jika input lebih besar dari 1. Hasilnya adalah bahwa untukn>1
benih akan dikonversi ke array logis[0 1 (0 ...)]
sedangkan untukn==1
benih menjadi terbalik[1 0]
, mencapai inversi yang diperlukan.Sisanya hanya mengubah benih menjadi string dengan mobil terlampir yang cukup.
(*) TIO link termasuk dalam komentar footer solusi alternatif untuk jumlah byte yang sama yang bekerja di MATLAB serta Oktaf, tetapi menghasilkan urutan '0' dan '1' daripada 'E' dan ' C '. Untuk kelengkapan, alternatifnya adalah:
Disimpan 1 byte dengan menggunakan
n==1~=0:1
daripada0:1~=(n<2)
.~=
telah didahulukan<
, maka tanda kurung asli, tetapi tampaknya itu~=
dan==
ditangani dalam urutan tampilan sehingga dengan membandingkan dengan 1 kita dapat menghemat satu byte.Disimpan 2 byte dengan mengubah tempat negasi
2:n
dilakukan. Ini menghemat sepasang tanda kurung. Kita juga harus mengubah~=
to==
ke menjelaskan fakta bahwa itu akan dinegasikan nanti.Disimpan 1 byte menggunakan
<
lagi. Ternyata yang<
memiliki prioritas sama seperti==
setelah semua. Menempatkan<
perhitungan sebelum==
urutan eksekusi yang benar.Disimpan 5 byte dengan tidak membuat dua array terpisah. Alih-alih mengandalkan fakta bahwa perbandingan XNOR akan mengubah rentang tunggal menjadi logika.
sumber
Jelly ,
119 byteCobalah online!
Program lengkap.
Gunakan
0
bukanC
.sumber
C (gcc), 39 byte
Cobalah online!
Meminjam dan mengadaptasi trik printf dari jawaban ErikF .
sumber
Python 3, 32 byte
Cobalah online!
Menggunakan ekspresi f-string untuk memformat baik
'E'
atau'CE'
empuk di sebelah kanan dengan'C'
sehingga memiliki lebarn+1
.sumber
Brain-Flak ,
10066 byteCobalah online!
Digunakan
"
sebagai jalur darurat dan!
jalur normal.sumber
C #, 34 byte
Cobalah online!
sumber
05AB1E , 7 byte
Cobalah online!
0 adalah C dan 1 adalah E.
Penjelasan
sumber
$<ΓTΓ¬siR
adalah bagaimana saya berpikir.1I
bisa di- golf$
.APL (Dyalog Unicode) ,
21 1716 byteCobalah online!
Terima kasih kepada Erik karena telah menghemat 4 byte dan AdΓ‘m untuk satu byte lebih lanjut.
Bagaimana?
sumber
(β΅>1)
tidak harus dalam tanda kurung. Dan Anda dapat menyimpan 4 byte dengan fungsi diam-diam:(β’Γ1<β’)β½'E',β΄β'C'
.(-β β1)β½'E',β΄β'C'
atau=β1β½Β―1β½'E',β΄β'C'
.'CE'[1(β =ββ³+)β]
Haskell ,
353332 byte2 byte disimpan berkat Angs, 1 byte disimpan berkat Lynn
Cobalah online!
Haskell ,
323029 byteIni nol diindeks sehingga tidak sesuai dengan tantangan
Cobalah online!
Haskell , 30 byte
Ini tidak berfungsi karena output harus berupa string
Cobalah online!
Di sini kita menggunakan angka sebagai ganti string,
2
untuk koridor darurat,1
untuk mobil. Kita dapat menambahkan1
sampai akhir dengan mengalikannya dengan 10 dan menambahkan1
. Ini lebih murah karena kita tidak perlu membayar semua byte untuk penggabungan dan string literal.Akan lebih murah untuk digunakan
0
daripada1
tetapi kita perlu memimpin nol, yang akhirnya dipangkas.sumber
((blah)!!)
dapat menjadi(!!)$blah
menyimpan byte dalam dua jawaban pertama Anda.Python 3 ,
3029 byteCobalah online!
OK, sudah ada banyak jawaban Python, tapi saya pikir ini adalah byter sub-30 pertama di antara mereka yang masih menggunakan karakter "E" dan "C" daripada angka.
sumber
JavaScript (Node.js) , 28 byte
Cobalah online!
sumber
APL (Dyalog Unicode) , 16 byte
Cobalah online!
sumber
Stax , 7 byte
Jalankan dan debug itu
Ini menggunakan karakter "0" dan "1". Ini berfungsi karena ketika Anda memutar array ukuran 1, itu tidak berubah.
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber
JavaScript (Node.js) , 19 byte
Cobalah online!
sumber
Perl 5
-p
,272019 byteCobalah online!
Menyimpan byte dengan menggunakan
1
untuk mobil danE
untuk koridor darurat.sumber
Jelly , 6 byte
Menampilkan jalur mobil sebagai 0 , jalur darurat sebagai 1 .
Cobalah online!
Bagaimana itu bekerja
sumber
Spasi ,
141104103 byteHuruf
S
(spasi),T
(tab), danN
(baris baru) ditambahkan hanya sebagai penyorotan.[..._some_action]
ditambahkan sebagai penjelasan saja.Mencetak
1
bukannyaC
dan-
bukannyaE
.-1 byte terima kasih kepada @ JoKing dengan menyarankan penggunaan
1
dan-1
bukan0
dan1
.Penjelasan dalam pseudo-code:
Contoh berjalan:
Memasukkan:
1
Cobalah online (dengan spasi, tab, dan baris baru saja).
Berhenti dengan kesalahan: Keluar tidak ditentukan.
Memasukkan:
4
Cobalah online (dengan spasi, tab, dan baris baru saja).
Berhenti dengan kesalahan: Keluar tidak ditentukan.
sumber
-
dengan menyalahgunakan pencetakan-1
?push_0
;print_as_integer
;push_1
;print_as_integer
untukpush_-1
;print_as_integer
, tetapi sebagai gantinya keduanyapush_0
;print_as_integer
diganti denganpush_45
;print_as_character
, di manapush_0
=SSSN
, danpush_45
=SSSTSTTSTN
. Dan tambahanpush_45
harus ditambahkan juga, karena untuk inputn=1
saya sekarang mencetak duplikat yang0
sudah saya miliki di stack, jadi saya tidak perlu mendorong0
lagi karena0
sudah di stack.-
menggantikan1
dan1
mengganti0
. Maka Anda akan menghindari keharusan menekan 45, dan sejauh yang saya tahu ini akan menghemat mencetak nomor di paruh pertama dari kondisi, tetapi sedikit meningkatkan biaya mendorong 1 bukannya 0. Periksa Gol saya > <> jawab untuk contoh dari output yang saya maksudprint_-1
bukan cetak0
dan1
, tetapi tambahanprint_-1
diperlukan di luar loop. EDIT: Telah mampu menguranginya menjadi 103 byte dengan mengubahsubtract_1
;if_0_jump_to_ONE
;push_-1
;print_integer
untuksubtract_2
;if_negative_jump_to_ONE
;print_integer
, karena -1 sudah ada di tumpukan itu. Jadi terima kasih untuk -1 byte. :)AutoHotkey 32 byte
Mengganti huruf "C" dengan "EC" kecuali jumlah C> 1, lalu mengirim "CEC" dan keluar dari aplikasi.
C => EC
CC => CEC kemudian keluar dari program. Cs lebih lanjut akan dimasukkan setelah program keluar.
sumber
APL + WIN,
2016 byte4 byte disimpan berkat AdΓ‘m
Anjuran untuk bilangan bulat n:
1 untuk koridor darurat o untuk mobil.
sumber
(-2β β΄n)β½nβ1β/β10
J , 11 byte
Cobalah online!
Berdasarkan komentar ngn .
π dan π:
1&<,~/@A.'π',~'π'$~,&4
sumber
MathGolf ,
76 byteCobalah online.
Output
1
untukE
dan0
untukC
.Penjelasan:
sumber