주간 도전 137
3122 단어 perltheweeklychallenge
그래서 어젯밤 Mohammad가 Black Caps에 패한 인디언을 위로하는 동안 호주에 거주하는 키위로서 나는 매우 행복한 소년이었습니다. 케인 윌리엄슨과 선수들에게 수고했습니다.
작업 #1 › 장기간
일
장년인 1900년에서 2100년 사이의 모든 연도를 찾는 스크립트를 작성하십시오.
내 솔루션
1752년에 Gregorian calendar으로 전환했을 때 그들은 분명히 컴퓨터를 염두에 두지 않았습니다. 데이트 수학은 정말 짜증납니다. Y2K가 심각하다고 생각했다면 (존재하지 않는) 29/2/2100이 더 나빠질 것이라고 생각합니다. 먼저 2038 date problem을 처리해야 합니다. 그러나 나는 빗나간다.
뉴질랜드와 호주에서는 '장년'과 '53주'라는 용어를 전혀 사용하지 않아서 그 의미를 찾아봐야 했습니다. this article에 따르면 "연도가 목요일에 시작하거나 수요일에 시작하는 윤년인 경우 해당 연도에는 53주가 표시됩니다. 이 주 번호는 일부 유럽 및 아시아 국가에서 일반적으로 사용되지만 그리 많지는 않습니다. 미국에서."
이것은 그 후에 다소 간단한 운동으로 보입니다. 1900년 1월 1일은 월요일이었다는 사실부터 시작합니다. 저는
$year
를 1900으로, $day_of_week
를 1로 설정했습니다(여기서 0 = 일요일, 6 = 토요일). 윤년에 요일이 4(목요일) 또는 3(수요일)이면 @long_years
배열에 추가합니다.다음 사실은 내년의 첫날이 현재 연도보다 하루(또는 윤년의 경우 이틀) 늦다는 것입니다. 예를 들어 1900년 1월 1일은 월요일이었으므로 1901년 1월 1일은 화요일이었습니다. 1900년은 윤년이 아님을 기억하십시오. 필요에 따라
$year
및 $day_of_week
를 변경하고 2100까지 루프를 계속 실행합니다.출력을 예제와 비교하면 동일한 결과를 얻을 수 있으므로 잘 되길 바랍니다.
예
$ ./ch-1.pl
1903, 1908, 1914, 1920, 1925, 1931, 1936, 1942, 1948, 1953, 1959, 1964, 1970, 1976, 1981, 1987, 1992, 1998, 2004, 2009, 2015, 2020, 2026, 2032, 2037, 2043, 2048, 2054, 2060, 2065, 2071, 2076, 2082, 2088, 2093, 2099
작업 #2 › 라이크렐 수
일
10 ≤ $n ≤ 1000의 숫자가 주어집니다.
주어진 숫자가 Lychrel number인지 확인하는 스크립트를 작성하십시오. 작업을 단순하게 유지하기 위해 다음 규칙을 적용합니다.
내 솔루션
날짜 수학이 어렵다고 생각했다면 정수론이 마음을 사로잡을 것입니다. Wikipedia 페이지에는 아래 방정식이 포함되어 있는데 어디서부터 시작해야 할지 모르겠습니다!
그래서 그것은 저에게 무차별 대입 방법입니다. Perl의 장점 중 하나는 숫자와 숫자를 포함하는 문자열 사이의 구별이 거의 존재하지 않는다는 것입니다. 내부적으로는 다르다는 것을 알고 있지만 코딩 관점에서 볼 때 둘 사이의 전환은 매끄럽습니다.
역방향 함수(스칼라 컨텍스트에서 문자열을 반전)를 사용하여 비교하여 입력이 회문인지 확인합니다. 그렇지 않은 경우 두 숫자를 더하고 일치하거나 위의 규칙에 도달할 때까지 프로세스를 반복합니다.
예시
$ ./ch-2.pl 56
0
$ ./ch-2.pl 57
0
$ ./ch-2.pl 59
0
$ ./ch-2.pl 788
1
Reference
이 문제에 관하여(주간 도전 137), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simongreennet/weekly-challenge-137-3jon텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)