Perl 및 Elm의 Perl Weekly Challenge 109

2983 단어
이번 주에 Twitch.tv/lancew 에서 솔루션을 라이브코딩하기 위해 새로운 OBS 설정을 시도했습니다. 설정은 Martin Wimpress가 설정을 공유한 덕분이며( Creating the Slim.AI OBS Studio set ) 이 방송은 라이브 스트림에 Mohammad Anwar을 가져올 수 있었기 때문에 더욱 특별합니다. 굉장했어.

이번 주에 저는 Perl에서 처음으로 Perl Weekly Challenge의 "Chowla Numbers"작업을 해결했습니다. 그런 다음 느릅 나무에서.

둘 다 내가 할 수 있는 한 TDD-ish로 했고, Perl 버전에서 Data::Dumper를 STDOUT으로 하는 일부 속임수를 사용했습니다. Elm의 경우 언어에 익숙하지 않기 때문에 테스트를 조금 더 사용했고 솔직히 말해서 화면에 덤프하는 쉬운 방법을 몰랐습니다. ;-)

Elm 버전은 다음과 같이 끝났습니다.

module Chowla exposing (chowla, n, nums)

import List

nums : Int -> List Int
nums max =
    List.range 1 max
        |> List.map n

n : Int -> Int
n num =
    let
        denominators =
            List.range 2 (num - 1)

        numbers =
            List.map (chowla num) denominators
    in
    List.foldl (+) 0 numbers

chowla : Int -> Int -> Int
chowla num denom =
    case remainderBy denom num of
        0 ->
            denom

        _ ->
            0



펄은 다음과 같습니다.

package Chowla;

use Moo;

sub list {
    my ($self,$max) = @_;
    my @chowla_numbers;
    for my $n (1..$max) {
        push @chowla_numbers, $self->n($n);
    }
    return \@chowla_numbers;
}

sub n {
    my ($self,$num) = @_;

    my $total = 0;
    for my $n (2..$num-1) {
        if ($num % $n == 0) {
            $total += $n;
        }
    }
    return $total;
}

1;



둘 다 특별히 길지 않습니다. 유형 서명이 없는 Elm은 15줄입니다. Perl 21 라인(다르게 형식을 지정해도 거의 동일함).
for 루프가 없는 Elm 코드는 mapfold (특히 foldl )에 의존합니다. 지도와 함께 Perl을 시도할 수/해야 합니다. Perl에는 foldl에 해당하는 것이 없습니다. foldl는 기본적으로 지도와 같은 흥미로운 명령에 있지만 함수를 통해 자체적으로 축소됩니다. 제 경우에는 + 모든 숫자를 합산합니다.

Perl에서 코드를 테스트하는 것은 그 어느 때보다 쉬웠으며 Perl의 Test2:V0은 훌륭한 도구입니다. 느릅나무 쪽에서는 테스트에 점점 익숙해지고 있습니다. 여기에 내장된 퍼징을 사용하지 않았습니다. 더 탐색해야 합니다.

다음 주에는 https:://fantasy-judo.com에 대해 작업하고 싶은 Go 코드가 더 있고 내 https://www.vwjl.net/을 조금 더 현대화하는 작업을 하고 싶습니다. 전투 시뮬레이션 코드는 주의를 기울여야 하는 부분입니다. 이를 감안할 때 이번 주에 주간 챌린지를 라이브 스트리밍하지 않을 수 있지만 일반적인 해킹을 스트리밍할 수 있습니다.

태그: perl elm perlweeklychallenge

좋은 웹페이지 즐겨찾기