Lịch sử trợ giúp bài tập về nhà


12

Đọc lịch sử của tôi và ghi chú, tôi không thể không mệt mỏi với việc viết ra tất cả những ngày dài này, Lọ 1784 là sáu thang máy toàn bộ bút chì! z!

Như bạn có thể thấy, tôi cài ứng dụng giống như hầu hết các áp phích thách thức trên trang web này. Vì vậy, tôi yêu cầu bạn vui lòng giúp tôi rút ngắn một số ngày. Tất nhiên, giải pháp của bạn phải càng ngắn càng tốt vì tay tôi đã mệt mỏi với việc viết ra các trường hợp kiểm tra.

Làm thế nào để tôi rút ngắn một ngày?

Cũng buồn cười bạn nên hỏi. Nó khá đơn giản:

  1. Lấy hai số nguyên làm đầu vào theo bất kỳ thứ tự nào bạn muốn ( (smallest, biggest)hoặc (biggest, smallest)).
  2. Lấy số lớn hơn trong hai số và chỉ lấy phần không nằm trong số nhỏ hơn.
    Ví dụ, đưa ra 2010, 2017, rút ​​ngắn2017 xuống -7201_ở cả hai tại cùng một vị trí chữ số.
  3. In hoặc trả về số nhỏ hơn, theo sau là dấu gạch ngang và sau đó là số lớn hơn được rút ngắn.

Ví dụ:

Bonus brownies for you if you figure out these dates' significance :)
1505, 1516 -> 1505-16
1989, 1991 -> 1989-91
1914, 1918 -> 1914-8
1833, 1871 -> 1833-71
1000, 2000 -> 1000-2000
1776, 2017 -> 1776-2017
2016, 2016 -> 2016-

These dates lack significance :(
1234567890, 1234567891 -> 1234567890-1
600, 1600 -> 600-1600
1235, 1424 -> 1235-424
600, 6000 -> 600-6000

4
1914-18hay 1914-8?
Anders Kaseorg

3
600, 6000 -> 600-6000?
Qwertiy

1
@Jonathan ALLan, đúng vậy. Đầu vào chỉ là số nguyên không âm
Daniel

1
@Qwertiy, thực sự.
Daniel

2
1914-8là WWI. Bây giờ đưa tôi bánh brownies của tôi!
Erik the Outgolfer 28/07/17

Câu trả lời:



4

Thạch ,  17  16 byte

DUµn/TṪṁ@Ṫ,j”-FṚ

Một chương trình đầy đủ lấy một danh sách năm from, to và in kết quả.

Hãy thử trực tuyến! hoặc xem thử nghiệm .

Làm sao?

DUµn/TṪṁ@Ṫ,j”-FṚ - Main link: list of years [from, to]    e.g [1833,1871]
D                - convert to decimals                        [[1,8,3,3],[1,8,7,1]]
 U               - upend (to cater for differing lengths)     [[3,3,8,1],[1,7,8,1]]
  µ              - monadic chain separation, call that V
    /            - reduce V with:
   n             -   not equal?                               [1,1,0,0]
     T           - truthy indices                             [1, 2]
      Ṫ          - tail                                       2
         Ṫ       - tail V (pop from & modify V)               [1,7,8,1]
       ṁ@        - mould (swap @rguments) V like that length  [1,7]
          ,      - pair that with (the modified) V            [[1,7],[[3,3,8,1]]
            ”-   - literal '-' character
           j     - join                                       [1,7,'-',[3,3,8,1]]
              F  - flatten                                    [1,7,'-',3,3,8,1]
               Ṛ - reverse                                    [1,8,3,3,'-',7,1]
                 - implicit print                             1833-71

Lúc đầu, tôi nghĩ rằng mình đã vượt qua điều này ... rồi chết tiệt [600, 6000]. Và có vẻ như điều này đã được đánh giá thấp.
Erik the Outgolfer 28/07/17

3

Javascript ES6, 59 57 ký tự

(x,y)=>(x+'-'+y).replace(x*10>y?/^((.*).*-)\2/:/()/,"$1")

Kiểm tra:

f=(x,y)=>(x+'-'+y).replace(x*10>y?/^((.*).*-)\2/:/()/,"$1")

console.log(`1505, 1516 -> 1505-16
1989, 1991 -> 1989-91
1914, 1918 -> 1914-8
1833, 1871 -> 1833-71
1000, 2000 -> 1000-2000
1776, 2017 -> 1776-2017
2016, 2016 -> 2016-
1234567890, 1234567891 -> 1234567890-1
600, 1600 -> 600-1600
1235, 1424 -> 1235-424`.split`
`.map(t => t.match(/(\d+), (\d+) -> (.*)/)).every(([m,x,y,key]) => f(x,y)===key || console.log(x,y,key,f(x,y))))
console.log(f(600,6000))


Chỉ cần thử (x+'-'+y)?
tsh

f (180, 1600) ->?
tsh

1
Sử dụng currying ( x=>y=>) để lưu một byte.
TheLethalCoder

1

APL Dyalog, 29 byte

{⍺,'-',x/⍨⌈\~((-⍴x)↑⍕⍺)=x←⍕⍵}

Hãy thử trực tuyến!

Làm sao?

⍺,'-' - năm đầu tiên + , -

    =x←⍕⍵ - so sánh năm thứ hai được định dạng

    ((-⍴x)↑⍕⍺) - đến năm đầu tiên được đệm bằng khoảng trắng từ trái

    ⌈\~ - phủ nhận kết quả và đánh dấu tất cả 1 giây sau lần đầu tiên

x/⍨ - mất năm thứ hai ở tất cả các vị trí được đánh dấu


1

Võng mạc , 34 byte

(.*)((.)*),\1((?<-3>.)*)\b
$1$2-$4

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Nhóm cân bằng và ranh giới từ đảm bảo rằng cả hai số có cùng độ dài trước khi tiền tố được khớp. Nếu không, thì ranh giới từ khớp với vào đầu năm thứ hai, vì vậy tất cả những gì xảy ra là dấu phẩy thay đổi thành dấu gạch ngang.


1

Python 2 , 102 byte

lambda s,n:`s`+'-'+[[`n`[i:]for i in range(len(`s`)+1)if `n`[:i]==`s`[:i]][-1],`n`][len(`n`)>len(`s`)]

Hãy thử trực tuyến!

Tôi cảm thấy như phải có một cách tốt hơn để làm điều này vì nó có vẻ thực sự dài dòng. Lạm dụng cực độ việc đánh giá `` các biến để điều này hoạt động vì chúng ta không thể lấy chuỗi làm đầu vào.


a = 100, b = 199 trả về "100-199" thay vì "100-99".
Chas Brown

@ChasBrown Dang, bạn nói đúng. Tôi đã khôi phục mã của mình để lặp lại trước đó, trong đó xử lý trường hợp này.
Arnold Palmer

0

Python 2, 127 byte

Tôi vẫn chưa quen với điều này, vì vậy tôi không biết liệu có ổn không khi đặt một câu trả lời khác trong cùng một ngôn ngữ. Vì tôi không thể nhận xét về các bài đăng của người khác nhưng tôi nắm lấy cơ hội của mình ở đây.

  • Được phép thay đổi đầu vào từ Integer thành String? Nguyên nhân sẽ giúp tôi tiết kiệm khoảng 10 byte.
  • Câu trả lời của Arnlod Parmers có một lỗi vào năm 1989, 1991. (trong thời gian tôi đăng bài này). Cảm ơn bạn tho cho `` đánh giá lừa tho (nó đã tiết kiệm cho tôi một byte)!
def f(s,b):
 s=`s`+'-'
 if len(`b`)>=len(s):return s+`b`
 for i in range(len(`b`)):
    if s[i]!=`b`[i]:return s+`b`[i:]
 return s

Hãy thử trực tuyến!

Những gì tôi làm là, tôi so sánh từng chữ số từ cả hai lần và nếu số lớn hơn thay đổi, tôi sẽ in số nhỏ hơn cộng với phần còn lại của số lớn hơn.

Nếu ai đó có thể giúp tôi chơi hết dòng thứ ba, tôi sẽ tiết kiệm được hơn 30 byte. Tôi chỉ thực hiện nó để xử lý trường hợp 600.6000 trong đó các chữ số bằng nhau nhưng không có cùng độ dài.


Vâng, bạn có thể trả lời cùng một câu hỏi bằng nhiều ngôn ngữ và bạn được phép lấy đầu vào dưới dạng Chuỗi.
geokavel

0

Haskell , 143 byte

g x y=h(show x)(show y)
h x y=x++"-"++if length x<length y then y else foldl(\a(c,d)->if a==[]then if c==d then[]else[d]else a++[d])[](zip x y)

Hãy thử trực tuyến!

smallest biggest đầu vào (số nguyên).

if length x<length y then ycó nghĩa là nếu xcó ít chữ số hơn ythì phần chung là void. Khác, chúng tôi lưu trữ các chữ số ytừ chữ số khác nhau đầu tiên.



0

Lisp thông thường, 120 byte

(lambda(s b &aux(d(#1=format()"~a"b)))(#1#()"~a-~a"s(if(<=(* s 10)b)b(subseq d(or(mismatch d(#1#()"~a"s))(length d))))))

Hãy thử trực tuyến!

Nhỏ nhất, lớn nhất.

Ung dung:

(defun f(s b &aux (d (format () "~a" b)))   ; s and b parameters, d string from s
  (format () "~a-~a" s                     ; print first number, then -, then abbreviation
      (if (<= (* s 10) b)                  ; if b is too large do not abbreviate
          b
          (subseq d (or (mismatch d (format () "~a" s)) ; else find first mismatch
                        (length d))))))    ; then extract the last part from mismatch
                                           ; or nothing if they are equal

0

C ++, 285 271 byte

-14 byte nhờ Zacharý

#include<iostream>
#include<string>
#define S s.size()
#define R r.size()
using namespace std;void h(int a,int b){auto r=to_string(a),s=to_string(b);if(R>S)s=string(R-S,' ')+s;if(S>R)r=string(S-R,' ')+r;int i=0;for(;i<R;++i)if(r[i]!=s[i])break;cout<<a<<'-'<<s.substr(i);}

Mã kiểm tra:

std::vector<std::pair<int, int>> test = {
    {1505,1516},
    {1989,1991}, //End of the cold war
    {1914,1918}, //First world war start and end
    {1833,1871},
    {1000,2000}, //2000 = Y2K bug, 1000 is... well... Y1K bug ? :)
    {1776,2017}, //US constitution signed the 4th july, French elections & year of the C++ 17 standard
    {2016,2016}, //US elections
    {1234567890,1234567891},
    {600,1600},
    {1235,1424},
    {600,6000}
};

for (auto&a : test) {
    h(a.first, a.second);
    std::cout << '\n';
}

Bạn có thể lưu một vài byte bằng cách using namespace std;loại bỏ Tmacro.
Zacharý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.